Skip to content

Commit c003986

Browse files
committed
доп.кейсы для проверки и исключение лишних условий
1 parent 3dfb945 commit c003986

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RewriteMethodParameterDiagnostic.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ private static Stream<Pair<MethodSymbol, ParameterDefinition>> getParametersByVa
8686

8787
private static Stream<VariableSymbol> getVariableByParameter(MethodSymbol method, ParameterDefinition parameterDefinition) {
8888
return method.getChildren().stream()
89+
// в будущем могут появиться и другие символы, подчиненные методам
8990
.filter(sourceDefinedSymbol -> sourceDefinedSymbol.getSymbolKind() == SymbolKind.Variable)
9091
.filter(variable -> parameterDefinition.getRange().getStart().equals(variable.getSelectionRange().getStart()))
9192
.filter(VariableSymbol.class::isInstance)
@@ -132,13 +133,13 @@ private Optional<Reference> isOverwrited(List<Reference> references) {
132133
return Optional.of(firstDefIntoAssign);
133134
}
134135
var refContextInsideDefAssign = getRefContextInsideDefAssign(firstDefIntoAssign, references.get(1));
135-
if (refContextInsideDefAssign.isEmpty()){
136+
if (refContextInsideDefAssign.isEmpty()) {
136137
return Optional.of(firstDefIntoAssign);
137138
}
138139
var isSelfAssign = Boolean.TRUE.equals(refContextInsideDefAssign
139140
.map(RewriteMethodParameterDiagnostic::isVarNameOnlyIntoExpression)
140141
.orElseThrow());
141-
if (isSelfAssign && references.size() > COUNT_OF_PAIR_FOR_SELF_ASSIGN){
142+
if (isSelfAssign && references.size() > COUNT_OF_PAIR_FOR_SELF_ASSIGN) {
142143
return isOverwrited(references.subList(COUNT_OF_PAIR_FOR_SELF_ASSIGN, references.size()));
143144
}
144145
}
@@ -155,11 +156,9 @@ private Optional<RuleNode> getRefContextInsideDefAssign(Reference defRef, Refere
155156
.map(RuleNode::getParent)
156157
.filter(BSLParser.AssignmentContext.class::isInstance)
157158
.map(BSLParser.AssignmentContext.class::cast);
158-
if (assignment.isEmpty()) {
159-
return Optional.empty();
160-
}
161159

162-
return Trees.findNodeContainsPosition(assignment.get(), nextRef.getSelectionRange().getStart())
160+
return assignment.flatMap(assignContext ->
161+
Trees.findNodeContainsPosition(assignContext, nextRef.getSelectionRange().getStart()))
163162
.map(TerminalNode::getParent);
164163
}
165164

@@ -169,7 +168,6 @@ private static boolean isVarNameOnlyIntoExpression(RuleNode refContext) {
169168
.map(BSLParser.ComplexIdentifierContext.class::cast)
170169
.filter(node -> node.getChildCount() == 1)
171170
.map(RuleNode::getParent)
172-
.filter(memberContext -> memberContext.getChildCount() == 1)
173171
.filter(BSLParser.MemberContext.class::isInstance)
174172
.map(RuleNode::getParent)
175173
.filter(expression -> expression.getChildCount() == 1)

src/test/resources/diagnostics/RewriteMethodParameterDiagnostic.bsl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,17 @@
5555
Парам131 = 1 + Парам131; // не ошибка
5656
Возврат Парам131;
5757
КонецПроцедуры
58+
59+
Процедура Тест14(Знач Парам141)
60+
Парам141.Значение = 10; // не ошибка
61+
КонецПроцедуры
62+
63+
Процедура Тест15(Знач Парам151)
64+
Парам151.Значение1 = Парам151.Значение2; // не ошибка
65+
Парам151 = 10; // не ошибка
66+
КонецПроцедуры
67+
68+
Процедура Тест16(Знач Парам161)
69+
Парам161.Значение = Парам161; // не ошибка
70+
Парам161 = 10; // не ошибка
71+
КонецПроцедуры

0 commit comments

Comments
 (0)