Skip to content

Commit e1a225f

Browse files
committed
Битый аргументы параметров конструктора
1 parent 09fb279 commit e1a225f

File tree

2 files changed

+27
-73
lines changed

2 files changed

+27
-73
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public ParseTree visitExpression(BSLParser.ExpressionContext ctx) {
143143
public ParseTree visitMember(BSLParser.MemberContext ctx) {
144144

145145
// В случае ошибки парсинга member может быть пустой.
146-
if (ctx.getChildCount() == 0 || ctx.children.stream().anyMatch(ErrorNode.class::isInstance)) {
146+
if (Trees.nodeContainsErrors(ctx) || ctx.getChildCount() == 0 || ctx.children.stream().anyMatch(ErrorNode.class::isInstance)) {
147147
operands.push(new ErrorExpressionNode(ctx));
148148
return ctx;
149149
}

src/test/java/com/github/_1c_syntax/bsl/languageserver/utils/expressiontree/ExpressionTreeBuildingVisitorTest.java

Lines changed: 26 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class ExpressionTreeBuildingVisitorTest {
4141
@ParameterizedTest(name = "{0}")
4242
@MethodSource("errorHandlingTestCases")
4343
@DisplayName("Test error handling in expressions")
44-
void testErrorHandling(String testName, String code) {
44+
void testErrorHandling(String testName, String code, Class<? extends BslExpression> expectedExpressionClass) {
4545
var documentContext = TestUtils.getDocumentContext(code);
4646

4747
var ast = documentContext.getAst();
@@ -63,22 +63,12 @@ void testErrorHandling(String testName, String code) {
6363
visitor.visitExpression(expression);
6464

6565
// Result should be an error node
66-
assertThat(visitor.getExpressionTree()).isInstanceOf(ErrorExpressionNode.class);
66+
assertThat(visitor.getExpressionTree()).isInstanceOf(expectedExpressionClass);
6767
});
6868
}
6969

7070
static Stream<Arguments> errorHandlingTestCases() {
7171
return Stream.of(
72-
Arguments.of(
73-
"Empty parentheses",
74-
"""
75-
Процедура ТестПроцедура()
76-
Если () Тогда
77-
Возврат;
78-
КонецЕсли;
79-
КонецПроцедуры
80-
"""
81-
),
8272
Arguments.of(
8373
"Empty if statement",
8474
"""
@@ -88,68 +78,32 @@ static Stream<Arguments> errorHandlingTestCases() {
8878
КонецЦикла;
8979
КонецЕсли;
9080
КонецПроцедуры
91-
"""
92-
),
93-
Arguments.of(
94-
"Unary operator with error",
95-
"""
96-
Процедура Имя()
97-
Если () + A Тогда
98-
99-
КонецЕсли;
100-
КонецПроцедуры
101-
"""
81+
""",
82+
ErrorExpressionNode.class
10283
),
103-
Arguments.of(
104-
"Multiply operator",
105-
"""
106-
Процедура Имя()
107-
Если * Тогда
108-
109-
КонецЕсли;
110-
КонецПроцедуры
111-
"""
112-
),
113-
Arguments.of(
114-
"Two modulos with identifier",
115-
"""
116-
Процедура Имя()
117-
Если %%a Тогда
118-
119-
КонецЕсли;
120-
КонецПроцедуры
121-
"""
122-
),
123-
Arguments.of(
124-
"New expression",
125-
"""
126-
Процедура Имя()
127-
Если Новый Тогда
128-
129-
КонецЕсли;
130-
КонецПроцедуры
131-
"""
132-
),
133-
Arguments.of(
134-
"New expression with parenthes",
135-
"""
136-
Процедура Имя()
137-
Если Новый ( Тогда
84+
createIfStatementTestCase("Empty parentheses", "()"),
85+
createIfStatementTestCase("Unary operator with error", "() + A"),
86+
createIfStatementTestCase("Multiply operator", "*"),
87+
createIfStatementTestCase("Two modulos with identifier", "%%a"),
88+
createIfStatementTestCase("New expression", "Новый"),
89+
createIfStatementTestCase("New expression with parenthes", "Новый ("),
90+
createIfStatementTestCase("New expression with two parantheses", "Новый ()"),
91+
createIfStatementTestCase("New expression with NOT", "Новый Структура(\"\", Не)", ConstructorCallNode.class)
92+
);
93+
}
13894

139-
КонецЕсли;
140-
КонецПроцедуры
141-
"""
142-
),
143-
Arguments.of(
144-
"New expression with two parantheses",
145-
"""
146-
Процедура Имя()
147-
Если Новый () Тогда
95+
private static Arguments createIfStatementTestCase(String name, String condition) {
96+
return createIfStatementTestCase(name, condition, ErrorExpressionNode.class);
97+
}
14898

149-
КонецЕсли;
150-
КонецПроцедуры
151-
"""
152-
)
153-
);
99+
private static Arguments createIfStatementTestCase(String name, String condition, Class<? extends BslExpression> expectedExpressionClass) {
100+
String code = """
101+
Процедура Имя()
102+
Если %s Тогда
103+
104+
КонецЕсли;
105+
КонецПроцедуры
106+
""".formatted(condition);
107+
return Arguments.of(name, code, expectedExpressionClass);
154108
}
155109
}

0 commit comments

Comments
 (0)