From ae9d7b8284d406f49c03e406dfc65d11aa96e77e Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 24 Jul 2023 21:22:53 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0?= =?UTF-8?q?=20+=20precommit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/ExternalAppStarting.md | 67 +++++++++++++++++++ docs/en/diagnostics/ExternalAppStarting.md | 16 +++++ .../ExternalAppStartingDiagnostic.java | 55 +++++++++++++++ .../configuration/parameters-schema.json | 10 +++ ...xternalAppStartingDiagnostic_en.properties | 2 + ...xternalAppStartingDiagnostic_ru.properties | 2 + .../ExternalAppStartingDiagnosticTest.java | 60 +++++++++++++++++ .../ExternalAppStartingDiagnostic.bsl | 37 ++++++++++ 8 files changed, 249 insertions(+) create mode 100644 docs/diagnostics/ExternalAppStarting.md create mode 100644 docs/en/diagnostics/ExternalAppStarting.md create mode 100644 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties create mode 100644 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties create mode 100644 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java create mode 100644 src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl diff --git a/docs/diagnostics/ExternalAppStarting.md b/docs/diagnostics/ExternalAppStarting.md new file mode 100644 index 00000000000..abc1eb5e2bb --- /dev/null +++ b/docs/diagnostics/ExternalAppStarting.md @@ -0,0 +1,67 @@ +# Запуск внешних приложений (ExternalAppStarting) + + +## Описание диагностики + +Для контроля безопасности кода необходимо контролировать запуск внешних приложений из кода 1С. + +Данное правило распространяется на все способы запуска внешних программ, в том числе: +- КомандаСистемы +- ЗапуститьПриложение +- НачатьЗапускПриложения +- ЗапуститьПриложениеАсинх +- ПерейтиПоНавигационнойСсылке или ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку +- ФайловаяСистемаКлиент.ЗапуститьПрограмму (в клиентском коде) и ФайловаяСистема.ЗапуститьПрограмму (в серверном коде) +- ФайловаяСистемаКлиент.ОткрытьПроводник +- ФайловаяСистемаКлиент.ОткрытьФайл + +## Примеры + +```bsl +Процедура Метод() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + ОписаниеОповещения = Неопределено; + ПараметрыКоманды = Новый Структура; + + КомандаСистемы(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, Истина); // есть замечание + + НачатьЗапускПриложения(ОписаниеОповещения, СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание + + ПерейтиПоНавигационнойСсылке(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды, ОписаниеОповещения); // есть замечание + + ФайловаяСистемаКлиент.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыКоманды); // есть замечание + ФайловаяСистемаКлиент.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + + ФайловаяСистемаКлиент.ОткрытьПроводник("C:\Users"); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды, ОписаниеОповещения); // есть замечание + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура Подключить() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + + Ждать ЗапуститьПриложениеАсинх(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание +КонецПроцедуры +``` + +## Источники + + +- [стандарт Безопасность запуска приложений](https://its.1c.ru/db/v8std/content/774/hdoc) +- [стандарт Ограничение на выполнение «внешнего» кода](https://its.1c.ru/db/v8std/content/669/hdoc ) diff --git a/docs/en/diagnostics/ExternalAppStarting.md b/docs/en/diagnostics/ExternalAppStarting.md new file mode 100644 index 00000000000..061fa651c09 --- /dev/null +++ b/docs/en/diagnostics/ExternalAppStarting.md @@ -0,0 +1,16 @@ +# External applications starting (ExternalAppStarting) + + +## Description + + +## Examples + + +## Sources + + diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java new file mode 100644 index 00000000000..2fe6c59b8c0 --- /dev/null +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -0,0 +1,55 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; +import com.github._1c_syntax.utils.CaseInsensitivePattern; + +import java.util.regex.Pattern; + +@DiagnosticMetadata( + type = DiagnosticType.VULNERABILITY, + severity = DiagnosticSeverity.MAJOR, + minutesToFix = 5, + tags = { + DiagnosticTag.SUSPICIOUS + }, + scope = DiagnosticScope.BSL + +) +public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { + private static final Pattern messagePattern = CaseInsensitivePattern.compile( + "КомандаСистемы|System|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + + "|ЗапуститьПриложениеАсинх|RunAppAsync|ПерейтиПоНавигационнойСсылке|GotoURL" + + "|ОткрытьНавигационнуюСсылку|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл" + ); + // TODO Использование COM объектов "Wscript.Shell" и "Shell.Application" + документация в описании правила + + public ExternalAppStartingDiagnostic() { + super(messagePattern); + } + +} diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 9310767b6eb..4d8c44b256f 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -642,6 +642,16 @@ "title": "Ban export global module variables", "$id": "#/definitions/ExportVariables" }, + "ExternalAppStarting": { + "description": "External applications starting", + "default": true, + "type": [ + "boolean", + "object" + ], + "title": "External applications starting", + "$id": "#/definitions/ExternalAppStarting" + }, "ExtraCommas": { "description": "Commas without a parameter at the end of a method call", "default": true, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties new file mode 100644 index 00000000000..ecf7e37307d --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Check the launch of an external application +diagnosticName=External applications starting diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties new file mode 100644 index 00000000000..f6afe882ae3 --- /dev/null +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties @@ -0,0 +1,2 @@ +diagnosticMessage=Проверьте запуск внешнего приложения +diagnosticName=Запуск внешних приложений diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java new file mode 100644 index 00000000000..ab32859c625 --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -0,0 +1,60 @@ +/* + * This file is a part of BSL Language Server. + * + * Copyright (c) 2018-2023 + * Alexey Sosnoviy , Nikita Fedkin and contributors + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Language Server is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * BSL Language Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BSL Language Server. + */ +package com.github._1c_syntax.bsl.languageserver.diagnostics; + +import org.eclipse.lsp4j.Diagnostic; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; + +class ExternalAppStartingDiagnosticTest extends AbstractDiagnosticTest { + ExternalAppStartingDiagnosticTest() { + super(ExternalAppStartingDiagnostic.class); + } + + @Test + void test() { + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(8, 4, 18) + .hasRange(9, 4, 23) + .hasRange(10, 4, 23) + .hasRange(12, 4, 26) + .hasRange(14, 4, 32) + .hasRange(15, 26, 52) + .hasRange(16, 26, 52) + .hasRange(18, 26, 44) + .hasRange(19, 26, 44) + .hasRange(20, 20, 38) + .hasRange(21, 20, 38) + .hasRange(23, 26, 42) + .hasRange(24, 26, 37) + .hasRange(25, 26, 37) + .hasRange(35, 10, 34) + .hasSize(15) + ; + } +} diff --git a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl new file mode 100644 index 00000000000..f39baf1ad25 --- /dev/null +++ b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl @@ -0,0 +1,37 @@ + +Процедура Метод() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + ОписаниеОповещения = Неопределено; + ПараметрыКоманды = Новый Структура; + + КомандаСистемы(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог); // есть замечание + ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, Истина); // есть замечание + + НачатьЗапускПриложения(ОписаниеОповещения, СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание + + ПерейтиПоНавигационнойСсылке(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаКоманды, ОписаниеОповещения); // есть замечание + + ФайловаяСистемаКлиент.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыКоманды); // есть замечание + ФайловаяСистемаКлиент.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды); // есть замечание + ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыКоманды); // есть замечание + + ФайловаяСистемаКлиент.ОткрытьПроводник("C:\Users"); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды); // есть замечание + ФайловаяСистемаКлиент.ОткрытьФайл(СтрокаКоманды, ОписаниеОповещения); // есть замечание + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура Подключить() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + + Ждать ЗапуститьПриложениеАсинх(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание +КонецПроцедуры From c4d9edc54797c3239a52f411b83908abb49fc881 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Mon, 24 Jul 2023 22:05:59 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D1=80=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=D0=B0=20=D0=BF=D0=BE=20=D0=BD=D0=B0=D0=B2=D0=B8-?= =?UTF-8?q?=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExternalAppStartingDiagnostic.java | 31 +++++++++++++++--- ...xternalAppStartingDiagnostic_en.properties | 1 + ...xternalAppStartingDiagnostic_ru.properties | 1 + .../ExternalAppStartingDiagnosticTest.java | 32 +++++++++++++++++-- .../ExternalAppStartingDiagnostic.bsl | 9 ++++++ 5 files changed, 67 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 2fe6c59b8c0..614fcdfe1c8 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -22,12 +22,14 @@ package com.github._1c_syntax.bsl.languageserver.diagnostics; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata; +import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameter; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticScope; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticTag; import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType; import com.github._1c_syntax.utils.CaseInsensitivePattern; +import java.util.Map; import java.util.regex.Pattern; @DiagnosticMetadata( @@ -41,15 +43,34 @@ ) public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { - private static final Pattern messagePattern = CaseInsensitivePattern.compile( + private static final String MAIN_PATTERN_STRING = "КомандаСистемы|System|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + - "|ЗапуститьПриложениеАсинх|RunAppAsync|ПерейтиПоНавигационнойСсылке|GotoURL" + - "|ОткрытьНавигационнуюСсылку|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл" - ); + "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; + private static final String PATTERN_STRING_FOR_NAVI = + "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; // TODO Использование COM объектов "Wscript.Shell" и "Shell.Application" + документация в описании правила + private static final Pattern MAIN_PATTERN = CaseInsensitivePattern.compile(MAIN_PATTERN_STRING); + private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( + MAIN_PATTERN_STRING + PATTERN_STRING_FOR_NAVI); + private static final boolean CHECK_GOTO_URL = true; + + @DiagnosticParameter( + type = Boolean.class, + defaultValue = "" + CHECK_GOTO_URL + ) + private boolean checkGotoUrl = CHECK_GOTO_URL; public ExternalAppStartingDiagnostic() { - super(messagePattern); + super(FULL_PATTERN); } + @Override + public void configure(Map configuration) { + super.configure(configuration); + if (checkGotoUrl){ + setMethodPattern(FULL_PATTERN); + } else { + setMethodPattern(MAIN_PATTERN); + } + } } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties index ecf7e37307d..a9c158b9fc3 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties @@ -1,2 +1,3 @@ diagnosticMessage=Check the launch of an external application diagnosticName=External applications starting +checkGotoUrl=Check navigation links diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties index f6afe882ae3..e04690feb72 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties @@ -1,2 +1,3 @@ diagnosticMessage=Проверьте запуск внешнего приложения diagnosticName=Запуск внешних приложений +checkGotoUrl=Проверять переход по навигационным ссылкам \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index ab32859c625..7181d8eb7cb 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.Test; import java.util.List; +import java.util.Map; import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat; @@ -54,7 +55,34 @@ void test() { .hasRange(24, 26, 37) .hasRange(25, 26, 37) .hasRange(35, 10, 34) - .hasSize(15) - ; + .hasSize(15); + } + + @Test + void testConfigure() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("checkGotoUrl", false); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(8, 4, 18) + .hasRange(9, 4, 23) + .hasRange(10, 4, 23) + .hasRange(12, 4, 26) +// .hasRange(14, 4, 32) +// .hasRange(15, 26, 52) +// .hasRange(16, 26, 52) + .hasRange(18, 26, 44) + .hasRange(19, 26, 44) + .hasRange(20, 20, 38) + .hasRange(21, 20, 38) + .hasRange(23, 26, 42) + .hasRange(24, 26, 37) + .hasRange(25, 26, 37) + .hasRange(35, 10, 34) + .hasSize(12); } } diff --git a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl index f39baf1ad25..667aa14b775 100644 --- a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl +++ b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl @@ -35,3 +35,12 @@ Ждать ЗапуститьПриложениеАсинх(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание КонецПроцедуры + +&НаСервере +Процедура ПараметрНаИмяВнешнегоПриложения() + СтрокаКоманды = ""; + ТекущийКаталог = ""; + ДождатьсяЗавершения = Истина; + + МойОбщийМодуль.ЗапуститьВнешнееПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание +КонецПроцедуры From 779940ecfd58cc2583d581335d96c68467e5c4fb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 10:29:50 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D1=80=20=D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExternalAppStartingDiagnostic.java | 14 ++++--- ...xternalAppStartingDiagnostic_en.properties | 1 + ...xternalAppStartingDiagnostic_ru.properties | 3 +- .../ExternalAppStartingDiagnosticTest.java | 40 +++++++++++++++++-- 4 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 614fcdfe1c8..31e50d2714d 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -48,8 +48,6 @@ public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; private static final String PATTERN_STRING_FOR_NAVI = "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; - // TODO Использование COM объектов "Wscript.Shell" и "Shell.Application" + документация в описании правила - private static final Pattern MAIN_PATTERN = CaseInsensitivePattern.compile(MAIN_PATTERN_STRING); private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( MAIN_PATTERN_STRING + PATTERN_STRING_FOR_NAVI); private static final boolean CHECK_GOTO_URL = true; @@ -60,6 +58,12 @@ public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic ) private boolean checkGotoUrl = CHECK_GOTO_URL; + @DiagnosticParameter( + type = String.class, + defaultValue = MAIN_PATTERN_STRING + ) + private String userPatternString = MAIN_PATTERN_STRING; + public ExternalAppStartingDiagnostic() { super(FULL_PATTERN); } @@ -67,10 +71,10 @@ public ExternalAppStartingDiagnostic() { @Override public void configure(Map configuration) { super.configure(configuration); + var pattern = userPatternString; if (checkGotoUrl){ - setMethodPattern(FULL_PATTERN); - } else { - setMethodPattern(MAIN_PATTERN); + pattern += PATTERN_STRING_FOR_NAVI; } + setMethodPattern(CaseInsensitivePattern.compile(pattern)); } } diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties index a9c158b9fc3..52a59ce7431 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties @@ -1,3 +1,4 @@ diagnosticMessage=Check the launch of an external application diagnosticName=External applications starting checkGotoUrl=Check navigation links +userPatternString=User regex pattern \ No newline at end of file diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties index e04690feb72..f7465d6e8c8 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties @@ -1,3 +1,4 @@ diagnosticMessage=Проверьте запуск внешнего приложения diagnosticName=Запуск внешних приложений -checkGotoUrl=Проверять переход по навигационным ссылкам \ No newline at end of file +checkGotoUrl=Проверять переход по навигационным ссылкам +userPatternString=Пользовательский шаблон (регулярное выражение) \ No newline at end of file diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index 7181d8eb7cb..c65f68ef824 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -59,7 +59,7 @@ void test() { } @Test - void testConfigure() { + void testConfigure_checkGotoUrl() { Map configuration = diagnosticInstance.info.getDefaultConfiguration(); configuration.put("checkGotoUrl", false); @@ -72,9 +72,7 @@ void testConfigure() { .hasRange(9, 4, 23) .hasRange(10, 4, 23) .hasRange(12, 4, 26) -// .hasRange(14, 4, 32) -// .hasRange(15, 26, 52) -// .hasRange(16, 26, 52) + .hasRange(18, 26, 44) .hasRange(19, 26, 44) .hasRange(20, 20, 38) @@ -85,4 +83,38 @@ void testConfigure() { .hasRange(35, 10, 34) .hasSize(12); } + + @Test + void testConfigure_userPatternString() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("userPatternString", "КомандаСистемы"); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(8, 4, 18) + + .hasRange(14, 4, 32) + .hasRange(15, 26, 52) + .hasRange(16, 26, 52) + + .hasSize(4); + } + + @Test + void testConfigure_userPatternString_checkGotoUrl() { + + Map configuration = diagnosticInstance.info.getDefaultConfiguration(); + configuration.put("checkGotoUrl", false); + configuration.put("userPatternString", "КомандаСистемы"); + diagnosticInstance.configure(configuration); + + List diagnostics = getDiagnostics(); + + assertThat(diagnostics, true) + .hasRange(8, 4, 18) + .hasSize(1); + } } From b8407368cfaba870f8eec620137a0bf47c8c0077 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 10:40:44 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BD=D0=B0=20=D0=97=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D1=82=D1=8C=D0=A1=D0=B8=D1=81=D1=82=D0=B5=D0=BC?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/ExternalAppStarting.md | 11 +++++++++++ .../diagnostics/ExternalAppStartingDiagnostic.java | 2 +- .../ExternalAppStartingDiagnosticTest.java | 14 ++++++++++++-- .../diagnostics/ExternalAppStartingDiagnostic.bsl | 12 ++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/docs/diagnostics/ExternalAppStarting.md b/docs/diagnostics/ExternalAppStarting.md index abc1eb5e2bb..0a632729189 100644 --- a/docs/diagnostics/ExternalAppStarting.md +++ b/docs/diagnostics/ExternalAppStarting.md @@ -7,6 +7,7 @@ Данное правило распространяется на все способы запуска внешних программ, в том числе: - КомандаСистемы +- ЗапуститьСистему - ЗапуститьПриложение - НачатьЗапускПриложения - ЗапуститьПриложениеАсинх @@ -54,6 +55,16 @@ Ждать ЗапуститьПриложениеАсинх(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, КодВозврата) + ДождатьсяЗавершения = Истина; + + ЗапуститьСистему(); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения, КодВозврата); // есть замечание +КонецПроцедуры ``` ## Источники diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 31e50d2714d..b867837d84a 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -44,7 +44,7 @@ ) public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { private static final String MAIN_PATTERN_STRING = - "КомандаСистемы|System|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + + "КомандаСистемы|System|ЗапуститьСистему|RunSystem|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; private static final String PATTERN_STRING_FOR_NAVI = "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index c65f68ef824..b618b9bf771 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -55,7 +55,12 @@ void test() { .hasRange(24, 26, 37) .hasRange(25, 26, 37) .hasRange(35, 10, 34) - .hasSize(15); + + .hasRange(53, 4, 20) + .hasRange(54, 4, 20) + .hasRange(55, 4, 20) + .hasRange(56, 4, 20) + .hasSize(19); } @Test @@ -81,7 +86,12 @@ void testConfigure_checkGotoUrl() { .hasRange(24, 26, 37) .hasRange(25, 26, 37) .hasRange(35, 10, 34) - .hasSize(12); + + .hasRange(53, 4, 20) + .hasRange(54, 4, 20) + .hasRange(55, 4, 20) + .hasRange(56, 4, 20) + .hasSize(16); } @Test diff --git a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl index 667aa14b775..80924867e83 100644 --- a/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl +++ b/src/test/resources/diagnostics/ExternalAppStartingDiagnostic.bsl @@ -44,3 +44,15 @@ МойОбщийМодуль.ЗапуститьВнешнееПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения); // есть замечание КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаЗапуститьСистему() + ДополнительныеПараметрыКоманднойСтроки = ""; + ДождатьсяЗавершения = Истина; + КодВозврата = Неопределено; + + ЗапуститьСистему(); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения); // есть замечание + ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения, КодВозврата); // есть замечание +КонецПроцедуры From c3b9c7ae35c125264f9959cab1b0db67969438eb Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 10:52:15 +0300 Subject: [PATCH 5/8] precommit + Sonar --- .../diagnostics/ExternalAppStartingDiagnostic.java | 5 +++-- .../configuration/parameters-schema.json | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index b867837d84a..40a33a1bbac 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -44,8 +44,9 @@ ) public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { private static final String MAIN_PATTERN_STRING = - "КомандаСистемы|System|ЗапуститьСистему|RunSystem|ЗапуститьПриложение|RunApp|НачатьЗапускПриложения|BeginRunningApplication" + - "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; + "КомандаСистемы|System|ЗапуститьСистему|RunSystem|ЗапуститьПриложение|RunApp" + + "|НачатьЗапускПриложения|BeginRunningApplication" + + "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; private static final String PATTERN_STRING_FOR_NAVI = "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index 4d8c44b256f..d622a7fbd58 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -650,6 +650,20 @@ "object" ], "title": "External applications starting", + "properties": { + "checkGotoUrl": { + "description": "Check navigation links", + "default": true, + "type": "boolean", + "title": "Check navigation links" + }, + "userPatternString": { + "description": "User regex pattern", + "default": "\u041a\u043e\u043c\u0430\u043d\u0434\u0430\u0421\u0438\u0441\u0442\u0435\u043c\u044b|System|\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0421\u0438\u0441\u0442\u0435\u043c\u0443|RunSystem|\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435|RunApp|\u041d\u0430\u0447\u0430\u0442\u044c\u0417\u0430\u043f\u0443\u0441\u043a\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f|BeginRunningApplication|\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0410\u0441\u0438\u043d\u0445|RunAppAsync|\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443|\u041e\u0442\u043a\u0440\u044b\u0442\u044c\u041f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a|\u041e\u0442\u043a\u0440\u044b\u0442\u044c\u0424\u0430\u0439\u043b", + "type": "string", + "title": "User regex pattern" + } + }, "$id": "#/definitions/ExternalAppStarting" }, "ExtraCommas": { From c78d08d38ba831c45cb5e82b8b40263e26aff028 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Tue, 25 Jul 2023 19:32:33 +0300 Subject: [PATCH 6/8] =?UTF-8?q?=D1=83=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/diagnostics/ExternalAppStarting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/diagnostics/ExternalAppStarting.md b/docs/diagnostics/ExternalAppStarting.md index 0a632729189..711d1403a18 100644 --- a/docs/diagnostics/ExternalAppStarting.md +++ b/docs/diagnostics/ExternalAppStarting.md @@ -3,7 +3,7 @@ ## Описание диагностики -Для контроля безопасности кода необходимо контролировать запуск внешних приложений из кода 1С. +Для повышения качества и безопасности решения на 1С необходимо контролировать запуск внешних приложений из кода 1С. Данное правило распространяется на все способы запуска внешних программ, в том числе: - КомандаСистемы From 5f180581510fa7a8afafa0ca94422e45beee6be7 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Wed, 13 Sep 2023 15:34:11 +0000 Subject: [PATCH 7/8] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExternalAppStartingDiagnostic.java | 2 +- ...xternalAppStartingDiagnostic_en.properties | 2 +- ...xternalAppStartingDiagnostic_ru.properties | 2 +- .../ExternalAppStartingDiagnosticTest.java | 48 +++++++++---------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 40a33a1bbac..07798ae5738 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -51,7 +51,7 @@ public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( MAIN_PATTERN_STRING + PATTERN_STRING_FOR_NAVI); - private static final boolean CHECK_GOTO_URL = true; + private static final boolean CHECK_GOTO_URL = false; @DiagnosticParameter( type = Boolean.class, diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties index 52a59ce7431..117f5638521 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_en.properties @@ -1,4 +1,4 @@ diagnosticMessage=Check the launch of an external application diagnosticName=External applications starting checkGotoUrl=Check navigation links -userPatternString=User regex pattern \ No newline at end of file +userPatternString=User regex pattern diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties index f7465d6e8c8..45d566bc4d6 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic_ru.properties @@ -1,4 +1,4 @@ diagnosticMessage=Проверьте запуск внешнего приложения diagnosticName=Запуск внешних приложений checkGotoUrl=Проверять переход по навигационным ссылкам -userPatternString=Пользовательский шаблон (регулярное выражение) \ No newline at end of file +userPatternString=Пользовательский шаблон (регулярное выражение) diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index b618b9bf771..3a22071fae2 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -44,9 +44,7 @@ void test() { .hasRange(9, 4, 23) .hasRange(10, 4, 23) .hasRange(12, 4, 26) - .hasRange(14, 4, 32) - .hasRange(15, 26, 52) - .hasRange(16, 26, 52) + .hasRange(18, 26, 44) .hasRange(19, 26, 44) .hasRange(20, 20, 38) @@ -60,38 +58,40 @@ void test() { .hasRange(54, 4, 20) .hasRange(55, 4, 20) .hasRange(56, 4, 20) - .hasSize(19); + .hasSize(16); } @Test void testConfigure_checkGotoUrl() { Map configuration = diagnosticInstance.info.getDefaultConfiguration(); - configuration.put("checkGotoUrl", false); + configuration.put("checkGotoUrl", true); diagnosticInstance.configure(configuration); List diagnostics = getDiagnostics(); assertThat(diagnostics, true) - .hasRange(8, 4, 18) - .hasRange(9, 4, 23) - .hasRange(10, 4, 23) - .hasRange(12, 4, 26) - - .hasRange(18, 26, 44) - .hasRange(19, 26, 44) - .hasRange(20, 20, 38) - .hasRange(21, 20, 38) - .hasRange(23, 26, 42) - .hasRange(24, 26, 37) - .hasRange(25, 26, 37) - .hasRange(35, 10, 34) - - .hasRange(53, 4, 20) - .hasRange(54, 4, 20) - .hasRange(55, 4, 20) - .hasRange(56, 4, 20) - .hasSize(16); + .hasRange(8, 4, 18) + .hasRange(9, 4, 23) + .hasRange(10, 4, 23) + .hasRange(12, 4, 26) + .hasRange(14, 4, 32) + .hasRange(15, 26, 52) + .hasRange(16, 26, 52) + .hasRange(18, 26, 44) + .hasRange(19, 26, 44) + .hasRange(20, 20, 38) + .hasRange(21, 20, 38) + .hasRange(23, 26, 42) + .hasRange(24, 26, 37) + .hasRange(25, 26, 37) + .hasRange(35, 10, 34) + + .hasRange(53, 4, 20) + .hasRange(54, 4, 20) + .hasRange(55, 4, 20) + .hasRange(56, 4, 20) + .hasSize(19); } @Test From f378e30a4fd99619af0fecc526fa0362ea1e06c6 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sat, 18 Nov 2023 21:49:50 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit переделаны тесты выполнен precommit --- .../ExternalAppStartingDiagnostic.java | 11 +++++----- .../configuration/parameters-schema.json | 2 +- .../ExternalAppStartingDiagnosticTest.java | 22 ++++++++++--------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java index 07798ae5738..d0255aae186 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnostic.java @@ -43,14 +43,13 @@ ) public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic { - private static final String MAIN_PATTERN_STRING = + private static final String DEFAULT_PATTERN_STRING = "КомандаСистемы|System|ЗапуститьСистему|RunSystem|ЗапуститьПриложение|RunApp" + "|НачатьЗапускПриложения|BeginRunningApplication" + "|ЗапуститьПриложениеАсинх|RunAppAsync|ЗапуститьПрограмму|ОткрытьПроводник|ОткрытьФайл"; private static final String PATTERN_STRING_FOR_NAVI = "|ПерейтиПоНавигационнойСсылке|GotoURL|ОткрытьНавигационнуюСсылку"; - private static final Pattern FULL_PATTERN = CaseInsensitivePattern.compile( - MAIN_PATTERN_STRING + PATTERN_STRING_FOR_NAVI); + private static final Pattern DEFAULT_PATTERN = CaseInsensitivePattern.compile(DEFAULT_PATTERN_STRING); private static final boolean CHECK_GOTO_URL = false; @DiagnosticParameter( @@ -61,12 +60,12 @@ public class ExternalAppStartingDiagnostic extends AbstractFindMethodDiagnostic @DiagnosticParameter( type = String.class, - defaultValue = MAIN_PATTERN_STRING + defaultValue = DEFAULT_PATTERN_STRING ) - private String userPatternString = MAIN_PATTERN_STRING; + private String userPatternString = DEFAULT_PATTERN_STRING; public ExternalAppStartingDiagnostic() { - super(FULL_PATTERN); + super(DEFAULT_PATTERN); } @Override diff --git a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json index d622a7fbd58..1d9b5aae21f 100644 --- a/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json +++ b/src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json @@ -653,7 +653,7 @@ "properties": { "checkGotoUrl": { "description": "Check navigation links", - "default": true, + "default": false, "type": "boolean", "title": "Check navigation links" }, diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java index 3a22071fae2..0c281f9fc7d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ExternalAppStartingDiagnosticTest.java @@ -75,10 +75,12 @@ void testConfigure_checkGotoUrl() { .hasRange(9, 4, 23) .hasRange(10, 4, 23) .hasRange(12, 4, 26) - .hasRange(14, 4, 32) + + .hasRange(14, 4, 32) .hasRange(15, 26, 52) .hasRange(16, 26, 52) - .hasRange(18, 26, 44) + + .hasRange(18, 26, 44) .hasRange(19, 26, 44) .hasRange(20, 20, 38) .hasRange(21, 20, 38) @@ -105,19 +107,14 @@ void testConfigure_userPatternString() { assertThat(diagnostics, true) .hasRange(8, 4, 18) - - .hasRange(14, 4, 32) - .hasRange(15, 26, 52) - .hasRange(16, 26, 52) - - .hasSize(4); + .hasSize(1); } @Test void testConfigure_userPatternString_checkGotoUrl() { Map configuration = diagnosticInstance.info.getDefaultConfiguration(); - configuration.put("checkGotoUrl", false); + configuration.put("checkGotoUrl", true); configuration.put("userPatternString", "КомандаСистемы"); diagnosticInstance.configure(configuration); @@ -125,6 +122,11 @@ void testConfigure_userPatternString_checkGotoUrl() { assertThat(diagnostics, true) .hasRange(8, 4, 18) - .hasSize(1); + + .hasRange(14, 4, 32) + .hasRange(15, 26, 52) + .hasRange(16, 26, 52) + + .hasSize(4); } }