Skip to content

Commit 75e219d

Browse files
authored
- отказ от использования bsl-parser-core (#51)
- новый antlr - мелкий рефакторинг
1 parent a18783d commit 75e219d

File tree

10 files changed

+49
-51
lines changed

10 files changed

+49
-51
lines changed

build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ gitVersioning.apply {
4949
}
5050

5151
dependencies {
52-
implementation("io.github.1c-syntax", "bsl-parser-core", "0.3.1")
53-
implementation("io.github.1c-syntax", "antlr4", "0.1.2")
52+
implementation("io.github.1c-syntax", "antlr4", "0.2.0-rc.1")
5453
implementation("commons-io", "commons-io", "2.15.1")
5554
implementation("org.junit.jupiter", "junit-jupiter-api", "5.10.1")
5655
implementation("org.assertj", "assertj-core", "3.25.0")

src/main/java/com/github/_1c_syntax/bsl/parser/testing/LexerAsserts.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public LexerAsserts(TestLexer<?> lexer, String inputString, int mode, int channe
4949
* При проверке анализируются все токены всех каналов, включая служебный конца строки
5050
*
5151
* @param expectedTokens контрольный массив токенов
52-
* @return
52+
* @return Ассерт (для текучести)
5353
*/
5454
public LexerAsserts containsExactly(Integer... expectedTokens) {
5555
var tokenTypes = tokens.stream()
@@ -63,7 +63,7 @@ public LexerAsserts containsExactly(Integer... expectedTokens) {
6363
* При проверке анализируются токены указанного в assertThat канала, исключая служебный конца строки
6464
*
6565
* @param expectedTokens контрольный массив токенов
66-
* @return
66+
* @return Ассерт (для текучести)
6767
*/
6868
public LexerAsserts containsAll(Integer... expectedTokens) {
6969
var tokenTypes = tokens.stream()
@@ -79,7 +79,7 @@ public LexerAsserts containsAll(Integer... expectedTokens) {
7979
*
8080
* @param index Порядковый индекс токена в строке
8181
* @param text текст токена
82-
* @return
82+
* @return Ассерт (для текучести)
8383
*/
8484
public LexerAsserts tokenHasText(int index, String text) {
8585
var token = tokens.get(index);
@@ -93,7 +93,7 @@ public LexerAsserts tokenHasText(int index, String text) {
9393
*
9494
* @param index Порядковый индекс токена в строке
9595
* @param lineNo номер строки расположения токена
96-
* @return
96+
* @return Ассерт (для текучести)
9797
*/
9898
public LexerAsserts tokenOnLine(int index, int lineNo) {
9999
var token = tokens.get(index);
@@ -107,7 +107,7 @@ public LexerAsserts tokenOnLine(int index, int lineNo) {
107107
* идентификаторов токенов (с учетом установленных mode и channel)
108108
*
109109
* @param actual строка для сравнения
110-
* @return
110+
* @return Ассерт (для текучести)
111111
*/
112112
public LexerAsserts isEqualTo(String actual) {
113113
var actualTokens = lexer.getTokens(mode, actual);

src/main/java/com/github/_1c_syntax/bsl/parser/testing/ParserAsserts.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.testing;
2323

24-
import com.github._1c_syntax.bsl.parser.BSLParserRuleContext;
2524
import lombok.SneakyThrows;
2625
import org.antlr.v4.runtime.Parser;
2726
import org.antlr.v4.runtime.ParserRuleContext;
@@ -41,7 +40,7 @@ public class ParserAsserts {
4140
private final Parser parser;
4241
private final TestParser<?, ?> testParser;
4342

44-
private final BSLParserRuleContext currentAST;
43+
private final ParserRuleContext currentAST;
4544

4645
@SneakyThrows
4746
public ParserAsserts(TestParser<?, ?> testParser, Parser parser) {
@@ -50,7 +49,7 @@ public ParserAsserts(TestParser<?, ?> testParser, Parser parser) {
5049
var fields = testParser.getParserClazz().getDeclaredMethods();
5150
var result = Arrays.stream(fields).filter(field -> testParser.ruleName(0).equals(field.getName())).findFirst();
5251
if (result.isPresent()) {
53-
this.currentAST = (BSLParserRuleContext) result.get().invoke(parser);
52+
this.currentAST = (ParserRuleContext) result.get().invoke(parser);
5453
this.parser.reset();
5554
} else {
5655
this.currentAST = null;
@@ -59,9 +58,10 @@ public ParserAsserts(TestParser<?, ?> testParser, Parser parser) {
5958

6059
/**
6160
* Выполняет проверку совпадения прочитанного узла на предмет ошибок парсинга
62-
* @param tree
63-
* @return
64-
* @throws RecognitionException
61+
*
62+
* @param tree Узел дерева
63+
* @return Ассерт (для текучести)
64+
* @throws RecognitionException Ошибка парсинга
6565
*/
6666
public ParserAsserts matches(ParseTree tree) throws RecognitionException {
6767
if (parser.getNumberOfSyntaxErrors() != 0) {
@@ -78,7 +78,7 @@ public ParserAsserts matches(ParseTree tree) throws RecognitionException {
7878
throw ctx.exception;
7979
}
8080

81-
if (((ParserRuleContext) tree).parent == null) {
81+
if (ctx.parent == null) {
8282
boolean parseSuccess = testParser.getLexerClazz().cast(parser.getInputStream().getTokenSource())._hitEOF;
8383
if (!parseSuccess) {
8484
throw new RecognitionException(
@@ -99,8 +99,9 @@ public ParserAsserts matches(ParseTree tree) throws RecognitionException {
9999

100100
/**
101101
* Убеждается, что прочитанного узла нет либо есть ошибка его чтения
102-
* @param tree
103-
* @return
102+
*
103+
* @param tree Узел дерева
104+
* @return Ассерт (для текучести)
104105
*/
105106
public ParserAsserts noMatches(ParseTree tree) {
106107
assertThat(tree).satisfiesAnyOf(
@@ -112,9 +113,10 @@ public ParserAsserts noMatches(ParseTree tree) {
112113

113114
/**
114115
* Выполняет анализ наличия в дереве узлов с нужным идентификатором в нужном количестве
115-
* @param ruleId
116-
* @param count
117-
* @return
116+
*
117+
* @param ruleId идентификатор рула
118+
* @param count количество узлов
119+
* @return Ассерт (для текучести)
118120
*/
119121
public ParserAsserts containsRule(int ruleId, int count) {
120122
assertThat(currentAST).isNotNull();

src/main/java/com/github/_1c_syntax/bsl/parser/testing/ResourceUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public class ResourceUtils {
3636
/**
3737
* Читает файл фикстуры из тестовых ресурсов проекта
3838
*
39-
* @param resourceName
40-
* @return
39+
* @param resourceName имя файла фикстуры
40+
* @return Прочитанное содержимое
4141
*/
4242
public String byName(@NonNull String resourceName) {
4343
if (resourceName.isBlank()) {

src/main/java/com/github/_1c_syntax/bsl/parser/testing/TestLexer.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.testing;
2323

24-
import com.github._1c_syntax.bsl.parser.CaseChangingCharStream;
25-
import com.github._1c_syntax.bsl.parser.UnicodeBOMInputStream;
2624
import lombok.Getter;
2725
import lombok.SneakyThrows;
2826
import org.antlr.v4.runtime.CharStream;
@@ -31,6 +29,7 @@
3129
import org.antlr.v4.runtime.ConsoleErrorListener;
3230
import org.antlr.v4.runtime.Lexer;
3331
import org.antlr.v4.runtime.Token;
32+
import org.antlr.v4.runtime.UnicodeBOMInputStream;
3433
import org.apache.commons.io.IOUtils;
3534

3635
import java.io.IOException;
@@ -72,9 +71,9 @@ public TestLexer(Class<T> clazz) {
7271
/**
7372
* Возвращает список токенов в переданной строке
7473
*
75-
* @param mode
76-
* @param inputString
77-
* @return
74+
* @param mode Режим
75+
* @param inputString Входная строка
76+
* @return Токены в строке
7877
*/
7978
public List<Token> getTokens(int mode, String inputString) {
8079
return getTokensStream(mode, inputString).getTokens();
@@ -83,9 +82,9 @@ public List<Token> getTokens(int mode, String inputString) {
8382
/**
8483
* Возвращает токены переданной строки
8584
*
86-
* @param mode
87-
* @param inputString
88-
* @return
85+
* @param mode Режим
86+
* @param inputString Входная строка
87+
* @return Токены в строке
8988
*/
9089
public CommonTokenStream getTokensStream(int mode, String inputString) {
9190
CharStream input;
@@ -96,8 +95,7 @@ public CommonTokenStream getTokensStream(int mode, String inputString) {
9695
var inputStreamReader = new InputStreamReader(ubis, StandardCharsets.UTF_8)
9796
) {
9897
ubis.skipBOM();
99-
var inputTemp = CharStreams.fromReader(inputStreamReader);
100-
input = new CaseChangingCharStream(inputTemp);
98+
input = CharStreams.fromReader(inputStreamReader);
10199
} catch (IOException e) {
102100
throw new RuntimeException(e);
103101
}
@@ -116,7 +114,7 @@ public CommonTokenStream getTokensStream(int mode, String inputString) {
116114
* Формирует строку с именами токенов на основании переданного массива их идентификаторов
117115
*
118116
* @param tokenTypes массив идентификаторов (типов) токенов
119-
* @return
117+
* @return Имя токена
120118
*/
121119
public String tokenName(Integer[] tokenTypes) {
122120
return Arrays.stream(tokenTypes).map(this::tokenName).collect(Collectors.joining(", "));
@@ -125,8 +123,8 @@ public String tokenName(Integer[] tokenTypes) {
125123
/**
126124
* Возвращает имя токена по его идентификатору (типу)
127125
*
128-
* @param type
129-
* @return
126+
* @param type Идентификатор токена
127+
* @return Имя токена
130128
*/
131129
public String tokenName(Integer type) {
132130
if (!ruleNames.isEmpty() && type < ruleNames.size()) {
@@ -149,7 +147,7 @@ public LexerAsserts assertThat(String inputString) {
149147
/**
150148
* Настраивает и запоминает тестируемый контекст. Использует дефолтное channel
151149
*
152-
* @param mode
150+
* @param mode Режим
153151
* @param inputString анализируемая строка
154152
* @return служебный класс для замыкания
155153
*/
@@ -160,7 +158,7 @@ public LexerAsserts assertThat(int mode, String inputString) {
160158
/**
161159
* Настраивает и запоминает тестируемый контекст
162160
*
163-
* @param mode
161+
* @param mode Режим
164162
* @param inputString анализируемая строка
165163
* @param channel анализируемая строка
166164
* @return служебный класс для замыкания
@@ -173,7 +171,7 @@ public LexerAsserts assertThat(int mode, String inputString, int channel) {
173171
* Настраивает и запоминает тестируемый контекст. Использует дефолтное mode
174172
*
175173
* @param inputString анализируемая строка
176-
* @param channel
174+
* @param channel Канал
177175
* @return служебный класс для замыкания
178176
*/
179177
public LexerAsserts assertThat(String inputString, int channel) {
@@ -182,8 +180,8 @@ public LexerAsserts assertThat(String inputString, int channel) {
182180

183181
private T createLexer(Class<T> lexerClass) {
184182
try {
185-
return lexerClass.getDeclaredConstructor(CharStream.class, boolean.class)
186-
.newInstance(CharStreams.fromString(""), true);
183+
return lexerClass.getDeclaredConstructor(CharStream.class)
184+
.newInstance(CharStreams.fromString(""));
187185
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
188186
throw new RuntimeException(e);
189187
}

src/main/java/com/github/_1c_syntax/bsl/parser/testing/TestParser.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ public TestParser(Class<P> parserClazz, Class<L> lexerClazz) {
6969
/**
7070
* Возвращает имя rule по его идентификатору (типу)
7171
*
72-
* @param type
73-
* @return
72+
* @param type Тип рула
73+
* @return Имя рула
7474
*/
7575
public String ruleName(Integer type) {
7676
if (!ruleNames.isEmpty() && type < ruleNames.size()) {
@@ -94,7 +94,7 @@ public ParserAsserts assertThat(String inputString) {
9494
/**
9595
* Настраивает и запоминает тестируемый контекст. Использует дефолтное channel
9696
*
97-
* @param mode
97+
* @param mode Режим
9898
* @param inputString анализируемая строка
9999
* @return служебный класс для замыкания
100100
*/

src/test/java/com/github/_1c_syntax/bsl/parser/testing/ResourceUtilsTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.testing;
2323

24-
import org.antlr.v4.runtime.RecognitionException;
2524
import org.junit.jupiter.api.Test;
2625

2726
import static org.assertj.core.api.Assertions.assertThat;

src/test/java/com/github/_1c_syntax/bsl/parser/testing/demo/DemoEmptyLexer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
public class DemoEmptyLexer extends Lexer {
2828

29-
public DemoEmptyLexer(CharStream input, boolean dontUse) {
29+
public DemoEmptyLexer(CharStream input) {
3030
super(input);
3131
}
3232

src/test/java/com/github/_1c_syntax/bsl/parser/testing/demo/DemoLexer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
public class DemoLexer extends Lexer {
2828

29-
public DemoLexer(CharStream input, boolean dontUse) {
29+
public DemoLexer(CharStream input) {
3030
super(input);
3131
}
3232

src/test/java/com/github/_1c_syntax/bsl/parser/testing/demo/DemoParser.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
*/
2222
package com.github._1c_syntax.bsl.parser.testing.demo;
2323

24-
import com.github._1c_syntax.bsl.parser.BSLParserRuleContext;
2524
import org.antlr.v4.runtime.Parser;
25+
import org.antlr.v4.runtime.ParserRuleContext;
2626
import org.antlr.v4.runtime.RecognitionException;
2727
import org.antlr.v4.runtime.RuleVersion;
2828
import org.antlr.v4.runtime.TokenStream;
@@ -61,26 +61,26 @@ public void reset() {
6161
}
6262

6363
@RuleVersion(0)
64-
public final BSLParserRuleContext rule1() throws RecognitionException {
64+
public final ParserRuleContext rule1() throws RecognitionException {
6565
return new DemoRuleContext(0, new DemoRuleContext(1), new DemoRuleContext(1), new DemoRuleContext(2));
6666
}
6767

6868
@RuleVersion(0)
69-
public final BSLParserRuleContext rule2() throws RecognitionException {
69+
public final ParserRuleContext rule2() throws RecognitionException {
7070
return new DemoRuleContext(1);
7171
}
7272

73-
private static final class DemoRuleContext extends BSLParserRuleContext {
73+
private static final class DemoRuleContext extends ParserRuleContext {
7474

7575
private final List<ParseTree> children;
7676

7777
DemoRuleContext(int state) {
78-
super(new BSLParserRuleContext(), state);
78+
super(new ParserRuleContext(), state);
7979
children = Collections.emptyList();
8080
}
8181

8282
DemoRuleContext(int state, DemoRuleContext... children) {
83-
super(new BSLParserRuleContext(), state);
83+
super(new ParserRuleContext(), state);
8484
this.children = List.of(children);
8585
}
8686

0 commit comments

Comments
 (0)