From 64725df117db162bacf3936c0ccbb187f4a7a895 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 8 Oct 2021 14:41:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20FP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit добавил проверку на то, что источник данных является табличной частью --- .../diagnostics/RefOveruseDiagnostic.java | 10 ++++++++++ .../resources/diagnostics/RefOveruseDiagnostic.bsl | 13 ++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java index f278de821f1..cb87952b4d9 100644 --- a/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java +++ b/src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/RefOveruseDiagnostic.java @@ -124,12 +124,22 @@ private void checkColumnNode(SDBLParser.ColumnContext ctx, Set tableName String penultimateIdentifierName = penultimateChild.getText(); if (REF_PATTERN.matcher(penultimateIdentifierName).matches() + && !penultimateIdentifierParentIsTabularSection(ctx) || (REF_PATTERN.matcher(lastIdentifierName).matches() && !tableNames.contains(penultimateIdentifierName))) { diagnosticStorage.addDiagnostic(ctx); } } + private boolean penultimateIdentifierParentIsTabularSection(SDBLParser.ColumnContext ctx) { + var penultimateChildTable = ctx.getChild(0); + var penultimateChildTableName = penultimateChildTable.getText(); + + return this.dataSourceCollection.stream() + .filter(dataSource -> dataSource.getChild(0).getChildCount() > 2) + .anyMatch(dataSource -> dataSource.getChild(1).getChild(1).getText().matches(penultimateChildTableName)); + } + private static String getTableNameOrAlias(ParseTree dataSource) { return Optional.of(dataSource) .flatMap(dataSrc -> extractTextFromChild(dataSrc, SDBLParser.RULE_alias)) diff --git a/src/test/resources/diagnostics/RefOveruseDiagnostic.bsl b/src/test/resources/diagnostics/RefOveruseDiagnostic.bsl index f19c74d0656..bee4001c524 100644 --- a/src/test/resources/diagnostics/RefOveruseDiagnostic.bsl +++ b/src/test/resources/diagnostics/RefOveruseDiagnostic.bsl @@ -179,10 +179,21 @@ | Контрагенты.Ссылка.ИНН = &ИНН"; // ошибка КонецПроцедуры -Процедура Тест17() +Процедура Тест16() ТекстЗапроса = "ВЫБРАТЬ | Артикул КАК Артикул // не задано имя таблицы |ИЗ | Справочник.Номенклатура КАК Номенклатура"; КонецПроцедуры + +Процедура Тест17() + ТекстЗапроса = + "ВЫБРАТЬ + | ДопРеквизиты.Свойство КАК Свойство + |ИЗ + | Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизиты + |ГДЕ + | НЕ ДопРеквизиты.Ссылка.ПометкаУдаления"; +КонецПроцедуры +