Skip to content

Commit 56fb2b0

Browse files
committed
Фильтр разделен на include и ~~exclude~~
1 parent 1815e0b commit 56fb2b0

File tree

4 files changed

+110
-16
lines changed

4 files changed

+110
-16
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/configuration/diagnostics/DiagnosticsOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class DiagnosticsOptions {
4545
private SkipSupport skipSupport = SkipSupport.NEVER;
4646
private Mode mode = Mode.ON;
4747
private boolean ordinaryAppSupport = true;
48-
private String[] subsystemsFilter = new String[]{};
48+
private SubsystemFilter subsystemsFilter = new SubsystemFilter();
4949

5050
@JsonDeserialize(using = ParametersDeserializer.class)
5151
private Map<String, Either<Boolean, Map<String, Object>>> parameters = new HashMap<>();
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* This file is a part of BSL Language Server.
3+
*
4+
* Copyright (c) 2018-2022
5+
* Alexey Sosnoviy <labotamy@gmail.com>, Nikita Fedkin <nixel2007@gmail.com> and contributors
6+
*
7+
* SPDX-License-Identifier: LGPL-3.0-or-later
8+
*
9+
* BSL Language Server is free software; you can redistribute it and/or
10+
* modify it under the terms of the GNU Lesser General Public
11+
* License as published by the Free Software Foundation; either
12+
* version 3.0 of the License, or (at your option) any later version.
13+
*
14+
* BSL Language Server is distributed in the hope that it will be useful,
15+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17+
* Lesser General Public License for more details.
18+
*
19+
* You should have received a copy of the GNU Lesser General Public
20+
* License along with BSL Language Server.
21+
*/
22+
package com.github._1c_syntax.bsl.languageserver.configuration.diagnostics;
23+
24+
import lombok.Data;
25+
import lombok.NoArgsConstructor;
26+
27+
import java.util.ArrayList;
28+
29+
/**
30+
* Фильтр диагностик по подсистемам
31+
*/
32+
@Data
33+
@NoArgsConstructor
34+
public class SubsystemFilter {
35+
private ArrayList<String> include = new ArrayList<>();
36+
// todo Exclude subsystems
37+
// private ArrayList<String> exclude = new ArrayList<>();
38+
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/infrastructure/DiagnosticsConfiguration.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,12 @@
3838
import com.github._1c_syntax.mdclasses.supportconf.SupportConfiguration;
3939
import com.github._1c_syntax.mdclasses.supportconf.SupportVariant;
4040
import lombok.RequiredArgsConstructor;
41-
import org.apache.commons.lang3.ArrayUtils;
4241
import org.eclipse.lsp4j.jsonrpc.messages.Either;
4342
import org.springframework.beans.factory.annotation.Lookup;
4443
import org.springframework.context.annotation.Bean;
4544
import org.springframework.context.annotation.Configuration;
4645
import org.springframework.context.annotation.Scope;
4746

48-
import java.util.Arrays;
4947
import java.util.Collection;
5048
import java.util.Collections;
5149
import java.util.Comparator;
@@ -104,13 +102,14 @@ private static boolean filterSubsystems(DocumentContext documentContext, Diagnos
104102
var mdoObject = documentContext.getMdObject();
105103
var subSystemsName = diagnosticsOptions.getSubsystemsFilter();
106104

107-
if (mdoObject.isEmpty() || ArrayUtils.isEmpty(subSystemsName)) {
105+
if (mdoObject.isEmpty()
106+
|| (subSystemsName.getInclude().isEmpty())) {
108107
return true;
109108
}
110109

111110
return MdoRefBuilder.subsystemFlatList(mdoObject.get().getIncludedSubsystems()).stream()
112111
.map(AbstractMDO::getName)
113-
.anyMatch(mdoSystemName -> Arrays.stream(subSystemsName).anyMatch(mdoSystemName::equalsIgnoreCase));
112+
.anyMatch(mdoSystemName -> subSystemsName.getInclude().stream().anyMatch(mdoSystemName::equalsIgnoreCase));
114113
}
115114

116115
private static boolean checkSupport(DocumentContext documentContext, DiagnosticsOptions diagnosticsOptions) {

src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DiagnosticsTest.java

Lines changed: 68 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration;
2525
import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.Mode;
2626
import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.SkipSupport;
27+
import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.SubsystemFilter;
2728
import com.github._1c_syntax.bsl.languageserver.context.DocumentContext;
2829
import com.github._1c_syntax.bsl.languageserver.context.FileType;
2930
import com.github._1c_syntax.bsl.languageserver.context.ServerContext;
@@ -42,8 +43,10 @@
4243
import org.springframework.beans.factory.annotation.Autowired;
4344
import org.springframework.boot.test.context.SpringBootTest;
4445

46+
import java.util.ArrayList;
4547
import java.util.Collections;
4648
import java.util.HashMap;
49+
import java.util.List;
4750
import java.util.Map;
4851
import java.util.Optional;
4952

@@ -289,34 +292,88 @@ void testDiagnosticModeExcept() {
289292
}
290293

291294
@Test
292-
void testDiagnosticSubsystemsCheck() {
295+
void testDiagnosticSubsystemsIncludeCheck() {
293296

294-
var PATH_TO_METADATA = "src/test/resources/metadata";
297+
var PATH_TO_METADATA = "src/test/resources/metadata/subSystemFilter";
295298
context.clear();
296299
context.setConfigurationRoot(Absolute.path(PATH_TO_METADATA));
297300
context.populateContext();
298301

299-
var form = spy((AbstractMDOForm) context.getConfiguration().getChildren().stream()
300-
.filter(mdo -> mdo.getName().equalsIgnoreCase("ФормаЭлемента"))
301-
.findFirst()
302-
.get());
302+
documentContext = spy(TestUtils.getDocumentContext("А = 0"));
303303

304-
var documentContext = spy(TestUtils.getDocumentContext("Сообщить()", context));
305-
when(documentContext.getModuleType()).thenReturn(ModuleType.FormModule);
306-
when(documentContext.getMdObject()).thenReturn(Optional.of(form));
304+
var form = context.getConfiguration().getChildren().stream()
305+
.filter(mdo -> mdo.getName().equalsIgnoreCase("ФормаЭлемента"))
306+
.findFirst();
307307

308+
doReturn(form).when(documentContext).getMdObject();
308309
// Без фильтра
309310
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
310311
.isNotEmpty();
311312

312-
configuration.getDiagnosticsOptions().setSubsystemsFilter(new String[]{"ПодсистемаКотройНет"});
313+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
314+
.setInclude(new ArrayList<>(List.of("ПодсистемаКотройНет")));
315+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
316+
.isEmpty();
317+
318+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
319+
.setInclude(new ArrayList<>(List.of("Подсистема1")));
320+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
321+
.isNotEmpty();
322+
323+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
324+
.setInclude(new ArrayList<>(List.of("Подсистема1_1")));
325+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
326+
.isNotEmpty();
327+
328+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
329+
.setInclude(new ArrayList<>(List.of("Подсистема1_1_1")));
330+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
331+
.isNotEmpty();
332+
333+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
334+
.setInclude(new ArrayList<>(List.of("Подсистема1_1_3")));
313335
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
314336
.isEmpty();
315337

316-
configuration.getDiagnosticsOptions().setSubsystemsFilter(new String[]{"Подсистема1"});
338+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
339+
.setInclude(new ArrayList<>(List.of("Подсистема2")));
317340
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
318341
.isNotEmpty();
319342

343+
configuration.getDiagnosticsOptions().getSubsystemsFilter()
344+
.setInclude(new ArrayList<>(List.of("Подсистема3")));
345+
assertThat(diagnosticsConfiguration.diagnostics(documentContext))
346+
.isEmpty();
347+
320348
}
349+
//
350+
// @Test
351+
// void testDiagnosticSubsystemsExcludeCheck() {
352+
//
353+
// var PATH_TO_METADATA = "src/test/resources/metadata/subSystemFilter";
354+
// context.clear();
355+
// context.setConfigurationRoot(Absolute.path(PATH_TO_METADATA));
356+
// context.populateContext();
357+
//
358+
// documentContext = spy(TestUtils.getDocumentContext("А = 0"));
359+
//
360+
// var mdObject = context.getConfiguration().getChildren().stream()
361+
// .filter(mdo -> mdo.getName().equalsIgnoreCase("ОбщийМодуль1"))
362+
// .findFirst();
363+
//
364+
// doReturn(mdObject).when(documentContext).getMdObject();
365+
// // Без фильтра
366+
// assertThat(diagnosticsConfiguration.diagnostics(documentContext))
367+
// .isNotEmpty();
368+
//
369+
// configuration.getDiagnosticsOptions().getSubsystemsFilter()
370+
// .setExclude(new ArrayList<>(List.of("ПодсистемаКотройНет")));
371+
// assertThat(diagnosticsConfiguration.diagnostics(documentContext))
372+
// .isNotNull();
373+
// configuration.getDiagnosticsOptions().getSubsystemsFilter()
374+
// .setExclude(new ArrayList<>(List.of("Подсистема2")));
375+
// assertThat(diagnosticsConfiguration.diagnostics(documentContext))
376+
// .isNull();
377+
// }
321378

322379
}

0 commit comments

Comments
 (0)