Skip to content

Commit df59ac8

Browse files
authored
Merge pull request #2747 from 1c-syntax/feature/subsystemFilter
2 parents d98ac1f + 7a7a88d commit df59ac8

File tree

152 files changed

+1883
-58
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

152 files changed

+1883
-58
lines changed

docs/features/ConfigurationFile.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ BSL Language Server предоставляет возможность измен
2020
|&nbsp;&nbsp;&nbsp;`skipSupport`|`Строка`|Этим параметром настраивается режим пропуска файлов *(т.е. файлы не анализируются на предмет наличия замечаний)* **конфигурации 1С**, находящихся "на поддержке" конфигурации поставщика. Возможные значения:<br/>* `withSupport` - пропускаются все модули, находящиеся "на поддержке" *(все виды "замков")*<br/>* `withSupportLocked` - пропускаются только модули, находящиеся "на поддержке" с запретом изменений *("желтый закрытый замок")*<br/>* `never` - режим поддержки не анализируется и модули не пропускаются *(установлен по умолчанию)*|
2121
|&nbsp;&nbsp;&nbsp;`mode`|`Строка`|Настройка для управления режимом учета настроек диагностик. Возможные варианты:<br/>* `OFF` - Все диагностики считаются выключенными, вне зависимости от их настроек <br/>* `ON` - Все диагностики включенные по умолчанию считаются включенными, остальные - в зависимости от личных настроек <br/>* `EXCEPT` - Все диагностистики, кроме указанных, считаются включенными <br/>* `ONLY` - Только указанные диагностики считаются включенными <br/>* `ALL` - Все диагностики считаются включенными|
2222
|⤷&nbsp;&nbsp;&nbsp;`parameters`|`JSON-Объект`|Параметр представляет собой коллекцию настроек диагностик. Элементами коллекции являются json-объекты следующей структуры:<br/>* *ключ объекта* - строка, являющаяся ключом диагностики<br/>* *значение объекта* - может принимать либо булево значение, и тогда интерпретируется как отключение диагностики (`false`) или ее включение с параметрами по умолчанию (`true`), либо значение типа `json-объект`, представляющего собой набор настроек диагностики.<br/><br/>Ключ, включена ли по умолчанию, а также описание возможных параметров и примеры для конфигурационного файла представлены на странице с описанием каждой диагностики.|
23+
|&nbsp;&nbsp;&nbsp;`subsystemsFilter`|`JSON-Объект`|Фильтр по подсистемам конфигурации|
24+
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`include`|`Массив` `Строка`|Список имен подсистем по объектам которых выполняется анализ, включая подчиненные подсистемы|
25+
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`exclude`|`Массив` `Строка`|Список имен подсистем исключенных из анализа, включая подчиненные подсистемы|
2326
|`documentLink`|`JSON-Объект`|Содержит настройки ссылок на документацию|
2427
|&nbsp;&nbsp;&nbsp;`showDiagnosticDescription`|`Булево`|Показывать дополнительные ссылки на документацию по диагностикам. По умолчанию параметр выключен (*установлен в `false`*)|
2528
|`useDevSite`|`Булево`|При включении настройки формирующиеся ссылки на документацию будут вести на develop-версию сайта. По умолчанию параметр выключен (*установлен в `false`*)|
@@ -41,6 +44,7 @@ https://1c-syntax.github.io/bsl-language-server/configuration/schema.json
4144
* Изменяет настройку диагностики [LineLength - Ограничение на длину строки](../diagnostics/LineLength.md), устанавливая предел длины строки в 140 символов;
4245
* Отключает диагностику [MethodSize - Ограничение на размер метода](../diagnostics/MethodSize.md).
4346
* Включает расчет диагностик в непрерывном режиме (`computeTrigger = onType`)
47+
* Диагностики рассчитываются только по объектам подсистемы "СтандартныеПодсистемы" за исключением "ВариантыОтчетов" и "ВерсионированиеОбъектов"
4448

4549
```json
4650
{
@@ -53,6 +57,10 @@ https://1c-syntax.github.io/bsl-language-server/configuration/schema.json
5357
"maxLineLength": 140
5458
},
5559
"MethodSize": false
60+
},
61+
"subsystemsFilter": {
62+
"include": ["СтандартныеПодсистемы"],
63+
"exclude": ["ВариантыОтчетов", "ВерсионированиеОбъектов"]
5664
}
5765
}
5866
}

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

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

4950
@JsonDeserialize(using = ParametersDeserializer.class)
5051
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.Set;
28+
import java.util.TreeSet;
29+
30+
/**
31+
* Фильтр диагностик по подсистемам
32+
*/
33+
@Data
34+
@NoArgsConstructor
35+
public class SubsystemFilter {
36+
private Set<String> include = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
37+
private Set<String> exclude = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
38+
}

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

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo;
3333
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope;
3434
import com.github._1c_syntax.mdclasses.common.CompatibilityMode;
35+
import com.github._1c_syntax.mdclasses.mdo.AbstractMDO;
36+
import com.github._1c_syntax.mdclasses.mdo.MDSubsystem;
3537
import com.github._1c_syntax.mdclasses.mdo.support.ModuleType;
3638
import com.github._1c_syntax.mdclasses.supportconf.SupportConfiguration;
3739
import com.github._1c_syntax.mdclasses.supportconf.SupportVariant;
@@ -48,6 +50,7 @@
4850
import java.util.List;
4951
import java.util.Map;
5052
import java.util.stream.Collectors;
53+
import java.util.stream.Stream;
5154

5255
@Configuration
5356
@RequiredArgsConstructor
@@ -92,6 +95,35 @@ private static boolean needToComputeDiagnostics(
9295
DocumentContext documentContext,
9396
DiagnosticsOptions diagnosticsOptions
9497
) {
98+
return checkSupport(documentContext, diagnosticsOptions)
99+
&& filterSubsystems(documentContext, diagnosticsOptions);
100+
}
101+
102+
private static boolean filterSubsystems(DocumentContext documentContext, DiagnosticsOptions diagnosticsOptions) {
103+
var mdoObject = documentContext.getMdObject();
104+
var subsystemsFilter = diagnosticsOptions.getSubsystemsFilter();
105+
106+
if (mdoObject.isEmpty()
107+
|| (subsystemsFilter.getInclude().isEmpty() && subsystemsFilter.getExclude().isEmpty())) {
108+
return true;
109+
}
110+
111+
var subsystemsNames = subsystemFlatList(mdoObject.get().getIncludedSubsystems()).stream()
112+
.map(AbstractMDO::getName)
113+
.collect(Collectors.toList());
114+
115+
var include = subsystemsFilter.getInclude().isEmpty()
116+
|| subsystemsNames.stream()
117+
.anyMatch(mdoSystemName -> subsystemsFilter.getInclude().contains(mdoSystemName));
118+
119+
var exclude = !subsystemsFilter.getExclude().isEmpty()
120+
&& subsystemsNames.stream()
121+
.anyMatch(mdoSystemName -> subsystemsFilter.getExclude().contains(mdoSystemName));
122+
123+
return include && !exclude;
124+
}
125+
126+
private static boolean checkSupport(DocumentContext documentContext, DiagnosticsOptions diagnosticsOptions) {
95127
var configuredMode = diagnosticsOptions.getMode();
96128

97129
if (configuredMode == Mode.OFF) {
@@ -199,4 +231,11 @@ private static boolean passedCompatibilityMode(
199231
return CompatibilityMode.compareTo(compatibilityMode.getCompatibilityMode(), contextCompatibilityMode) >= 0;
200232
}
201233

234+
// перенести в mdClasses
235+
private static List<MDSubsystem> subsystemFlatList(Collection<MDSubsystem> subsystems) {
236+
return subsystems.stream()
237+
.flatMap(subsys -> Stream.concat(Stream.of(subsys), subsystemFlatList(subsys.getIncludedSubsystems()).stream()))
238+
.collect(Collectors.toList());
239+
}
240+
202241
}

src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.github._1c_syntax.bsl.parser.BSLParser;
2626
import com.github._1c_syntax.mdclasses.mdo.AbstractMDObjectBase;
2727
import com.github._1c_syntax.mdclasses.mdo.MDCommonModule;
28+
import com.github._1c_syntax.mdclasses.mdo.MDSubsystem;
2829
import com.github._1c_syntax.mdclasses.mdo.support.MDOReference;
2930
import com.github._1c_syntax.mdclasses.mdo.support.MDOType;
3031
import com.github._1c_syntax.mdclasses.mdo.support.ModuleType;
@@ -35,10 +36,13 @@
3536
import org.antlr.v4.runtime.tree.TerminalNode;
3637

3738
import javax.annotation.Nullable;
39+
import java.util.Collection;
3840
import java.util.Collections;
3941
import java.util.List;
4042
import java.util.Optional;
4143
import java.util.concurrent.atomic.AtomicReference;
44+
import java.util.stream.Collectors;
45+
import java.util.stream.Stream;
4246

4347
@UtilityClass
4448
public class MdoRefBuilder {

src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,27 @@
649649
"description": "Ignore ordinary application warnings."
650650
}
651651
]
652+
},
653+
"subsystemsFilter": {
654+
"$id": "#/properties/subsystemsFilter",
655+
"type": "object",
656+
"title": "Subsystems filter configuration.",
657+
"properties": {
658+
"include": {
659+
"$id": "#/properties/include",
660+
"type": "array",
661+
"items": {
662+
"type": "string"
663+
}
664+
},
665+
"exclude": {
666+
"$id": "#/properties/exclude",
667+
"type": "array",
668+
"items": {
669+
"type": "string"
670+
}
671+
}
672+
}
652673
}
653674
}
654675
},

src/test/java/com/github/_1c_syntax/bsl/languageserver/configuration/LanguageServerConfigurationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class LanguageServerConfigurationTest {
5050

5151
private static final String PATH_TO_CONFIGURATION_FILE = "./src/test/resources/.bsl-language-server.json";
5252
private static final String PATH_TO_EMPTY_CONFIGURATION_FILE = "./src/test/resources/.empty-bsl-language-server.json";
53-
private static final String PATH_TO_METADATA = "src/test/resources/metadata";
53+
private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer";
5454
private static final String PATH_TO_PARTIAL_CONFIGURATION_FILE
5555
= "./src/test/resources/.partial-bsl-language-server.json";
5656

src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
@CleanupContextBeforeClassAndAfterEachTestMethod
4545
class ServerContextTest {
4646

47-
private static final String PATH_TO_METADATA = "src/test/resources/metadata";
47+
private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer";
4848
private static final String PATH_TO_MODULE_FILE = "CommonModules/ПервыйОбщийМодуль/Ext/Module.bsl";
4949
private static final String PATH_TO_CATALOG_FILE = "Catalogs/Справочник1/Ext/ManagerModule.bsl";
5050
private static final String PATH_TO_CATALOG_MODULE_FILE = "Catalogs/Справочник1/Ext/ObjectModule.bsl";

src/test/java/com/github/_1c_syntax/bsl/languageserver/context/computer/MethodSymbolComputerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
@SpringBootTest
4747
class MethodSymbolComputerTest {
4848

49-
private static final String PATH_TO_METADATA = "src/test/resources/metadata";
49+
private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer";
5050
private static final String PATH_TO_MODULE_FILE = "CommonModules/ПервыйОбщийМодуль/Ext/Module.bsl";
5151
private static final String PATH_TO_CATALOG_FILE = "Catalogs/Справочник1/Ext/ManagerModule.bsl";
5252
private static final String PATH_TO_CATALOG_MODULE_FILE = "Catalogs/Справочник1/Ext/ObjectModule.bsl";

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ class CachedPublicDiagnosticTest extends AbstractDiagnosticTest<CachedPublicDiag
5151
private MDCommonModule module;
5252
private DocumentContext documentContext;
5353

54-
private static final String PATH_TO_METADATA = "src/test/resources/metadata";
55-
private static final String PATH_TO_MODULE_FILE = "src/test/resources/metadata/CommonModules/ПервыйОбщийМодуль/Ext/Module.bsl";
54+
private static final String PATH_TO_METADATA = "src/test/resources/metadata/designer";
55+
private static final String PATH_TO_MODULE_FILE = "src/test/resources/metadata/designer/CommonModules/ПервыйОбщийМодуль/Ext/Module.bsl";
5656
private static final String PATH_TO_MODULE_CONTENT = "src/test/resources/diagnostics/CachedPublicDiagnostic.bsl";
5757
private static final String PATH_TO_MODULE_EMPTY_CONTENT = "src/test/resources/diagnostics/CachedPublicDiagnosticEmpty.bsl";
5858

0 commit comments

Comments
 (0)