Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Неверное описание переменной в цикле "Для каждого" #3276

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,30 @@ private Optional<VariableDescription> createDescription(BSLParser.LValueContext
);
}

private Optional<VariableDescription> createDescription(BSLParser.ForEachStatementContext ctx) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А обычный "для" и "пока" не надо обработать?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Для" не анализировался как место создания переменно или уходило в другую ветку. Нужно будет проверить и добавить по необходимости.
"Пока" для создания символов не интересно, так как не создает переменную. Там условие выполнения цикла.

var trailingComments = Trees.getTrailingComment(documentContext.getTokens(), ctx.IDENTIFIER().getSymbol());

if (trailingComments.isEmpty()) {
return Optional.empty();
}

return Optional.of(
new VariableDescription(Collections.emptyList(), trailingComments)
);
}

private Optional<VariableDescription> createDescription(BSLParser.ForStatementContext ctx) {
var trailingComments = Trees.getTrailingComment(documentContext.getTokens(), ctx.IDENTIFIER().getSymbol());

if (trailingComments.isEmpty()) {
return Optional.empty();
}

return Optional.of(
new VariableDescription(Collections.emptyList(), trailingComments)
);
}

private Optional<VariableDescription> createDescription(BSLParserRuleContext ctx) {
List<Token> tokens = documentContext.getTokens();
List<Token> comments = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ void setup() {
@Test
void testVariableSymbolDescription() {

assertThat(variableSymbols).hasSize(19);
assertThat(variableSymbols).hasSize(23);

assertThat(variableSymbols)
.filteredOn(variableSymbol -> variableSymbol.getDescription().isEmpty())
.hasSize(9)
.hasSize(11)
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(12, 6, 34)))
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(14, 6, 27)))
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(16, 6, 17)))
Expand All @@ -65,11 +65,12 @@ void testVariableSymbolDescription() {
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(32, 31, 59)))
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(33, 10, 19)))
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(55, 0, 35)))
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(56, 0, 47)));
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(56, 0, 47)))
;

assertThat(variableSymbols)
.filteredOn(variableSymbol -> variableSymbol.getDescription().isPresent())
.hasSize(10)
.hasSize(12)
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(2, 6, 32)))
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(6, 6, 33)))
.anyMatch(variableSymbol -> variableSymbol.getRange().equals(Ranges.create(8, 6, 33)))
Expand All @@ -92,7 +93,7 @@ void testVariableDescriptionRange() {
.collect(Collectors.toList());

assertThat(variableDescriptions)
.hasSize(10)
.hasSize(12)
.filteredOn(variableDescription -> !variableDescription.getDescription().equals(""))
.hasSize(5)
.anyMatch(variableDescription -> variableDescription.getRange().equals(Ranges.create(1, 0, 18)))
Expand All @@ -105,13 +106,15 @@ void testVariableDescriptionRange() {
assertThat(variableDescriptions)
.extracting(VariableDescription::getTrailingDescription)
.filteredOn(Optional::isPresent)
.hasSize(7)
.hasSize(9)
.extracting(Optional::get)
.anyMatch(trailingDescription -> trailingDescription.getRange().equals(Ranges.create(8, 35, 55)))
.anyMatch(variableDescription -> variableDescription.getRange().equals(Ranges.create(19, 20, 42)))
.anyMatch(variableDescription -> variableDescription.getRange().equals(Ranges.create(24, 20, 42)))
.anyMatch(variableDescription -> variableDescription.getRange().equals(Ranges.create(35, 21, 43)))
.anyMatch(variableDescription -> variableDescription.getRange().equals(Ranges.create(39, 21, 43)))
.anyMatch(variableDescription -> variableDescription.getRange().equals(Ranges.create(63, 45, 77)))
.anyMatch(variableDescription -> variableDescription.getRange().equals(Ranges.create(71, 38, 70)))
;

}
Expand All @@ -121,7 +124,7 @@ void testVariableNameRange() {

assertThat(variableSymbols)
.filteredOn(variableSymbol -> variableSymbol.getDescription().isEmpty())
.hasSize(9)
.hasSize(11)
.anyMatch(variableName -> variableName.getVariableNameRange().equals(Ranges.create(12, 6, 34)))
.anyMatch(variableName -> variableName.getVariableNameRange().equals(Ranges.create(14, 6, 27)))
.anyMatch(variableName -> variableName.getVariableNameRange().equals(Ranges.create(16, 6, 17)))
Expand All @@ -131,6 +134,8 @@ void testVariableNameRange() {
.anyMatch(variableName -> variableName.getVariableNameRange().equals(Ranges.create(33, 10, 19)))
.anyMatch(variableName -> variableName.getVariableNameRange().equals(Ranges.create(55, 0, 35)))
.anyMatch(variableName -> variableName.getVariableNameRange().equals(Ranges.create(56, 0, 47)))
.anyMatch(variableName -> variableName.getVariableNameRange().equals(Ranges.create(59, 12, 30)))
.anyMatch(variableName -> variableName.getVariableNameRange().equals(Ranges.create(67, 4, 22)))
;
}

Expand Down
18 changes: 17 additions & 1 deletion src/test/resources/context/symbol/variableSymbolTest.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,20 @@

ПеременнаяСоздаваемаяВКодеВнеМетода = Неопределенно;
ПеременнаяСоздаваемаяВКодеВнеМетодаВторойПример = МойМетод();
А.ЭтоНеПеременная = Неопределенно;
А.ЭтоНеПеременная = Неопределенно;

Для Каждого МетодБезКоментария Из Методы Цикл
МойМетод(Метод);
КонецЦикла;

Для Каждого МетодСКоментарием Из Методы Цикл // Висячий комментарий для цикла
МойМетод(Метод);
КонецЦикла;

Для СчДляБезКоментария = 1 По 100 Цикл
МойМетод(Метод);
КонецЦикла;

Для СчДляСКоментарием = 1 По 100 Цикл // Висячий комментарий для цикла
МойМетод(Метод);
КонецЦикла;
Loading