Feature/1294 canonical keywords in query#1878
Feature/1294 canonical keywords in query#1878IT-Medved wants to merge 6 commits into1c-syntax:developfrom
Conversation
|
Хочу еще тест написать для остальных слов ключевых. Но при этом по 1 тесту запустить могу через |
| ctx.getTokens().parallelStream().filter((Token t) -> | ||
| canonicalKeywords.get(t.getType()) != null && !canonicalKeywords.get(t.getType()).contains(t.getText())) | ||
| .forEach(token -> | ||
| diagnosticStorage.addDiagnostic( |
There was a problem hiding this comment.
чтобы не делать getText(range) на строке 182 (https://github.com/1c-syntax/bsl-language-server/pull/1878/files#diff-aa81d1707520d13712c6b3b10e761b98bc91f363435eb914c5d3acfbdc6b1012R182) можно в полученную диагностику добавить данные (через setData на результат вызова addDiagnostic), куда сразу положить правильное написание ключевого слова. тогда в квик-фиксе останется только достать его из диагностики через getData и положить внутрь TextEdit
src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/SDBLKeywords.java
Show resolved
Hide resolved
src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/SDBLKeywords.java
Outdated
Show resolved
Hide resolved
| public class SDBLKeywords { | ||
|
|
||
|
|
||
| public static final String AUTOORDER_RU = "АВТОУПОРЯДОЧИВАНИЕ"; |
There was a problem hiding this comment.
было бы здорово (наверное) добавить тест на этот класс, чтобы проверять все ключевые слова из SDBLLexer на наличие в этом классе (хотя бы в одном из вариантов языков).
@theshadowco что думаешь?
There was a problem hiding this comment.
Хорошая тема, я с подобным столкнулся и в сонарплагине
src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/SDBLKeywords.java
Outdated
Show resolved
Hide resolved
| severity = DiagnosticSeverity.INFO, | ||
| minutesToFix = 1, | ||
| tags = { | ||
| DiagnosticTag.STANDARD |
There was a problem hiding this comment.
Не все теги из ишузы указал
судя по названию класса, где-то в кэше затесалась очень старая версия бсл лс. попробуйте сделать ./gradlew clean |
|
@nixel2007 @theshadowco , Спасибо за обратную связь! Послушав на стриме про sdbl парсер и погоняв на реальных конфигурациях диагностику пришел к выводу, что задача не решается просто перебирая кейворды, нужен еще анализ окружения где эти слова встречаются. |
|
Ммм... Про какой контекст речь? Мне кажется, что для этой диагностики достаточно данных с лексера. Если он распознал слово как ключевое, то его можно проверять, разве нет? |
|
Нет, просто так проверять нельзя, т.к. например в конструкции "Поле ССЫЛКА Справочник.МойСправочник" ссылка - кейворд, а "Выбрать Поле Ссылка" (КАК опущен) - это уже алиас, но так как слова КАК нет, то mode не отработает и токен будет определен не как идентификатор, а как ССЫЛКА |
|
Ну и тем более в конструкция вида "СГРУППИРОВАТЬ ПО Ссылка" |
|
Хм... А если обходить дерево разбора, подписавшись на терминальные ноды? Там тип уже будет правильный? |



Описание
Реализация диагностики для проверки ключевых слов в запросах и квикфикс
Связанные задачи
Closes #1294
Чеклист
Общие
gradlew precommit)Для диагностик
Дополнительно