From 7606e6329c234cfe644bc5b54974f627d37795bf Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 3 Aug 2026 13:30:33 +0200 Subject: [PATCH 1/2] =?UTF-8?q?feat(description):=20=D0=B2=D0=B8=D0=B4?= =?UTF-8?q?=D0=B8=D0=BC=D1=8B=D0=B5=20=D0=B2=D0=B8=D0=B4=D1=8B=20=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D1=8E?= =?UTF-8?q?=D1=82=20=D0=BA=D0=B0=D0=BA=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B8=D1=82=D0=B5=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Разделителем имени и секции типов считался дефис-минус и короткое тире. Прочие видимые тире — цифровое, длинное, горизонтальная черта, знак минуса — разделителем не были, хотя редакторы и автозамена подставляют их так же. Теперь разбор описания от выбора символа не зависит. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc --- src/main/antlr/BSLDescriptionLexer.g4 | 4 +- .../reader/DescriptionSplitterDashTest.java | 83 +++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/github/_1c_syntax/bsl/parser/description/reader/DescriptionSplitterDashTest.java diff --git a/src/main/antlr/BSLDescriptionLexer.g4 b/src/main/antlr/BSLDescriptionLexer.g4 index b5c90e9b..10d5b41a 100644 --- a/src/main/antlr/BSLDescriptionLexer.g4 +++ b/src/main/antlr/BSLDescriptionLexer.g4 @@ -40,7 +40,9 @@ EDT_SKIP_KEYWORD: '@skip-check'; EOL : '\r'? '\n'; SPACE : [ \t]+; STAR : '*'+; -DASH : [-–]; +// Дефис-минус и видимые виды тире, которые редакторы и автозамена подставляют вместо него: +// цифровое, короткое, длинное, горизонтальная черта, знак минуса. +DASH : [-‒–—―−]; COLON : ':'; COMMA : ','; // OTHER diff --git a/src/test/java/com/github/_1c_syntax/bsl/parser/description/reader/DescriptionSplitterDashTest.java b/src/test/java/com/github/_1c_syntax/bsl/parser/description/reader/DescriptionSplitterDashTest.java new file mode 100644 index 00000000..7f1c71cf --- /dev/null +++ b/src/test/java/com/github/_1c_syntax/bsl/parser/description/reader/DescriptionSplitterDashTest.java @@ -0,0 +1,83 @@ +/* + * This file is a part of BSL Parser. + * + * Copyright (c) 2018-2026 + * Alexey Sosnoviy , Nikita Fedkin , Sergey Batanov + * + * SPDX-License-Identifier: LGPL-3.0-or-later + * + * BSL Parser 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 Parser 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 Parser. + */ +package com.github._1c_syntax.bsl.parser.description.reader; + +import com.github._1c_syntax.bsl.parser.BSLParser; +import com.github._1c_syntax.bsl.parser.BSLTokenizer; +import com.github._1c_syntax.bsl.parser.description.MethodDescription; +import com.github._1c_syntax.bsl.parser.description.TypeDescription; +import org.antlr.v4.runtime.Token; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.List; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Разделителем имени и секции типов служит дефис-минус, а вместе с ним — видимые виды + * тире, которые редакторы и автозамена подставляют вместо него. Разбор описания от + * выбора символа не зависит. + */ +class DescriptionSplitterDashTest { + + private static List getTokens(String example) { + var tokenizer = new BSLTokenizer(example); + return tokenizer.getTokens().stream() + .filter(token -> token.getType() == BSLParser.LINE_COMMENT) + .collect(Collectors.toList()); + } + + @ParameterizedTest(name = "разделитель {0}") + @ValueSource(strings = {"-", "‒", "–", "—", "―", "−"}) + void dashSplitsParameterFromItsTypes(String dash) { + // given + var src = "// Параметры:\n// Объект " + dash + " СправочникОбъект.Справочник1\n"; + + // when + var description = MethodDescription.create(getTokens(src)); + + // then + var params = description.getParameters(); + assertThat(params).hasSize(1); + assertThat(params.getFirst().name()).isEqualToIgnoringCase("Объект"); + assertThat(params.getFirst().types()) + .extracting(TypeDescription::name) + .containsExactly("СправочникОбъект.Справочник1"); + } + + @ParameterizedTest(name = "разделитель {0}") + @ValueSource(strings = {"-", "‒", "–", "—", "―", "−"}) + void dashSplitsReturnedValueFromItsDescription(String dash) { + // given + var src = "// Возвращаемое значение:\n// Строка " + dash + " текст сообщения\n"; + + // when + var description = MethodDescription.create(getTokens(src)); + + // then + assertThat(description.getReturnedValue()) + .extracting(TypeDescription::name) + .containsExactly("Строка"); + } +} From 256a3aab6e22f4e5d1b9fbebc0cc3c5e8feb4a5f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 3 Aug 2026 13:35:07 +0200 Subject: [PATCH 2/2] =?UTF-8?q?style(description):=20=D0=B7=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B5=20Sonar=20=D0=B2=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B5=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc --- .../parser/description/reader/DescriptionSplitterDashTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/com/github/_1c_syntax/bsl/parser/description/reader/DescriptionSplitterDashTest.java b/src/test/java/com/github/_1c_syntax/bsl/parser/description/reader/DescriptionSplitterDashTest.java index 7f1c71cf..f0a99c8d 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/parser/description/reader/DescriptionSplitterDashTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/parser/description/reader/DescriptionSplitterDashTest.java @@ -30,7 +30,6 @@ import org.junit.jupiter.params.provider.ValueSource; import java.util.List; -import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; @@ -45,7 +44,7 @@ private static List getTokens(String example) { var tokenizer = new BSLTokenizer(example); return tokenizer.getTokens().stream() .filter(token -> token.getType() == BSLParser.LINE_COMMENT) - .collect(Collectors.toList()); + .toList(); } @ParameterizedTest(name = "разделитель {0}")