Skip to content

Commit faf2f16

Browse files
authored
Merge pull request #2755 from 1c-syntax/fix/SkipBrokenQuery
Пропуск диагностик по битым запросам
2 parents 3509fdf + 76cc327 commit faf2f16

File tree

5 files changed

+49
-2
lines changed

5 files changed

+49
-2
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
import com.github._1c_syntax.bsl.languageserver.context.DocumentContext;
2525
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo;
26+
import com.github._1c_syntax.bsl.languageserver.utils.Trees;
27+
import com.github._1c_syntax.bsl.parser.SDBLParser;
2628
import com.github._1c_syntax.bsl.parser.SDBLParserBaseVisitor;
2729
import lombok.Getter;
2830
import lombok.Setter;
@@ -49,4 +51,13 @@ public List<Diagnostic> getDiagnostics(DocumentContext documentContext) {
4951

5052
return diagnosticStorage.getDiagnostics();
5153
}
54+
55+
@Override
56+
public ParseTree visitQueryPackage(SDBLParser.QueryPackageContext ctx) {
57+
if (Trees.treeContainsErrors(ctx)) {
58+
return ctx;
59+
}
60+
return super.visitQueryPackage(ctx);
61+
}
62+
5263
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,6 @@ private static boolean haveIsNullFunction(BSLParserRuleContext ctx) {
214214
.filter(SDBLParser.BuiltInFunctionsContext.class::isInstance)
215215
.map(SDBLParser.BuiltInFunctionsContext.class::cast)
216216
.map(SDBLParser.BuiltInFunctionsContext::ISNULL)
217-
.filter(Objects::nonNull)
218217
.isPresent();
219218
}
220219

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@
4343
)
4444
public class QueryParseErrorDiagnostic extends AbstractSDBLVisitorDiagnostic {
4545

46+
@Override
47+
public ParseTree visitQueryPackage(SDBLParser.QueryPackageContext ctx) {
48+
return visitChildren(ctx);
49+
}
50+
4651
@Override
4752
// анализируем каждый запрос пакета
4853
public ParseTree visitQueries(SDBLParser.QueriesContext ctx) {

src/test/resources/diagnostics/AssignAliasFieldsInQueryDiagnostic.bsl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,17 @@
5555
| Таблица.МестоХранения КАК МестоХранения
5656
| ИЗ
5757
| РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, ДвиженияИГраницыПериода, ";
58+
59+
// Битый запрос с npe на полях
60+
ТекстЗапроса = "
61+
|ВЫБРАТЬ
62+
| ВТ_ТЧ.НомерСтроки
63+
|ИЗ
64+
| &ВТ_Цены КАК ВТ_Цены
65+
|;
66+
|
67+
|////////////////////////////////////////////////////////////////////////////////
68+
|ВЫБРАТЬ
69+
| " + ПоляТЧДокумента + "
70+
|ИЗ
71+
| &ВТ_ТЧ КАК Товары";

src/test/resources/diagnostics/FieldsFromJoinsWithoutIsNullDiagnostic.bsl

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,22 @@
205205
|ПО Склады15.Кладовщик = Сотрудники15.Ссылка
206206
|ГДЕ Сотрудники15.Реквизит ЕСТЬ NULL // не ошибка
207207
|";
208-
КонецПроцедуры
208+
КонецПроцедуры
209+
210+
// Разрыв в соединении роняет с npe
211+
Запрос = "ВЫБРАТЬ
212+
| ДополнительныеСведения.КодИФНСФЛ КАК КодИФНСФЛ
213+
|ИЗ
214+
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень0
215+
|
216+
| ОБЪЕДИНИТЬ ВСЕ
217+
|
218+
| ВЫБРАТЬ
219+
| ДополнительныеСведения.КодИФНСФЛ
220+
|ИЗ
221+
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень0
222+
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУровень1
223+
| ПО АдресныеОбъектыУровень0.РодительскийИдентификатор = АдресныеОбъектыУровень1.Идентификатор
224+
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений."+АдресныеОбъекты+" КАК АдресныеОбъектыУровень2
225+
| ПО (АдресныеОбъектыУровень1.РодительскийИдентификатор = АдресныеОбъектыУровень2.Идентификатор)
226+
|";

0 commit comments

Comments
 (0)