-
Notifications
You must be signed in to change notification settings - Fork 106
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
Feature/1294 canonical keywords in query #1878
base: develop
Are you sure you want to change the base?
Feature/1294 canonical keywords in query #1878
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
чтобы не делать 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
было бы здорово (наверное) добавить тест на этот класс, чтобы проверять все ключевые слова из SDBLLexer на наличие в этом классе (хотя бы в одном из вариантов языков).
@theshadowco что думаешь?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Хорошая тема, я с подобным столкнулся и в сонарплагине
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не все теги из ишузы указал
судя по названию класса, где-то в кэше затесалась очень старая версия бсл лс. попробуйте сделать ./gradlew clean |
@nixel2007 @theshadowco , Спасибо за обратную связь! Послушав на стриме про sdbl парсер и погоняв на реальных конфигурациях диагностику пришел к выводу, что задача не решается просто перебирая кейворды, нужен еще анализ окружения где эти слова встречаются. |
Ммм... Про какой контекст речь? Мне кажется, что для этой диагностики достаточно данных с лексера. Если он распознал слово как ключевое, то его можно проверять, разве нет? |
Нет, просто так проверять нельзя, т.к. например в конструкции "Поле ССЫЛКА Справочник.МойСправочник" ссылка - кейворд, а "Выбрать Поле Ссылка" (КАК опущен) - это уже алиас, но так как слова КАК нет, то mode не отработает и токен будет определен не как идентификатор, а как ССЫЛКА |
Ну и тем более в конструкция вида "СГРУППИРОВАТЬ ПО Ссылка" |
Хм... А если обходить дерево разбора, подписавшись на терминальные ноды? Там тип уже будет правильный? |
Описание
Реализация диагностики для проверки ключевых слов в запросах и квикфикс
Связанные задачи
Closes #1294
Чеклист
Общие
gradlew precommit
)Для диагностик
Дополнительно