Поддержка стандартных реквизитов, типов значений, мультиязычности имен#3523
Conversation
2. упрощение получения представлений в зависимости от языка
WalkthroughОбновлены зависимости и добавлен Maven snapshots-репозиторий. Проведён масштабный рефакторинг: строковые константы ключевых слов заменены на MultiName; выбор языка и получение MDO‑ссылок унифицированы через ScriptVariant; FormatProvider и региональные паттерны адаптированы; тесты обновлены под новые ожидания. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor IDE as Редактор
participant LS as LanguageServer
participant FP as FormatProvider
participant KW as Keywords (MultiName)
IDE->>LS: запрос форматирования / проверка
LS->>FP: format(document, language)
FP->>KW: keywordCanonText.get(tokenType)
note right of KW #D3E4CD: Возвращает MultiName (RU/EN)
KW-->>FP: MultiName
FP->>FP: выбрать вариант по language (MultiName.get(lang))
FP-->>LS: отформатированный/нормализованный текст
LS-->>IDE: применить правки
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (2)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (20)
🔇 Additional comments (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai |
|
@theshadowco: Я проведу ревью изменений в этом пулл-реквесте. ✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (5)
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java (1)
86-88: Унифицируйте получение ScriptVariant (без valueByName).В остальных местах кода используется configuration.getScriptVariant(). Лучше не вычислять вариант по коду языка вручную.
Предлагаемый патч:
- var mdoRef = attribute.getMdoReference().getMdoRef( - ScriptVariant.valueByName(serverConfiguration.getLanguage().getLanguageCode())); + var mdoRef = attribute.getMdoReference() + .getMdoRef(documentContext.getServerContext().getConfiguration().getScriptVariant());src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java (1)
113-115: Используйте configuration.getScriptVariant() для консистентности.Избегайте ручного valueByName по коду языка; берите ScriptVariant из конфигурации.
Патч:
- var mdoRef = attribute.getMdoReference().getMdoRef( - ScriptVariant.valueByName(serverConfiguration.getLanguage().getLanguageCode())); + var mdoRef = attribute.getMdoReference() + .getMdoRef(documentContext.getServerContext().getConfiguration().getScriptVariant());build.gradle.kts (2)
92-94: SNAPSHOT‑зависимости: убедитесь в необходимости и стабильности.Переезд на
mdclassesиbsl-common-librarySNAPSHOT влияет на воспроизводимость сборок. Желательно ограничить репозиторий snapshotsOnly() и/или привязать использование SNAPSHOT к ветке develop/флагу Gradle.Можете подтвердить, что изменения покрыты тестами, и нет регрессий в форматах mdoRef/ключевых слов?
Добавьте условное подключение snapshot‑репозитория по флагу:
if (version.toString().contains("SNAPSHOT")) { repositories { maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") { mavenContent { snapshotsOnly() } } } }
33-34: Примите текущий URL Central Portal Snapshots и, при необходимости, ограничьте репозиторий снапшотамиURL https://central.sonatype.com/repository/maven-snapshots/ — официальный Sonatype endpoint для snapshot-зависимостей. Для фильтрации можно добавить:
repositories { maven { name = "Central Portal Snapshots" url = uri("https://central.sonatype.com/repository/maven-snapshots/") mavenContent { snapshotsOnly() } } }src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java (1)
262-265: Экранируйте ключевые слова в шаблоне регулярного выражения.Сейчас значения подставляются без экранирования. Если в ключевом слове появится спецсимвол regex, матчинг сломается.
Патч:
- return CaseInsensitivePattern.compile( - String.format(template, keyword.getRu(), keyword.getEn()) - ); + return CaseInsensitivePattern.compile( + String.format( + template, + java.util.regex.Pattern.quote(keyword.getRu()), + java.util.regex.Pattern.quote(keyword.getEn()) + ) + );
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (19)
build.gradle.kts(2 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java(3 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java(2 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java(1 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java(1 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CanonicalSpellingKeywordsDiagnostic.java(1 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java(1 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java(1 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java(2 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java(2 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java(2 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java(1 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/FormatProvider.java(7 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Keywords.java(1 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java(2 hunks)src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/Regions.java(5 hunks)src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java(1 hunks)src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java(1 hunks)src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: build
- GitHub Check: build
🔇 Additional comments (16)
src/main/java/com/github/_1c_syntax/bsl/languageserver/codeactions/GenerateStandardRegionsSupplier.java (2)
31-31: LGTM!Обновление импорта соответствует архитектурным изменениям по переносу
ScriptVariantв пакетtypes.
119-129: Проверьте реализацию ScriptVariant.valueByName
Логика определенияScriptVariantверна, но не удалось найти исходник методаvalueByNameдля проверки обработки невалидныхlanguageCode. Убедитесь, что при неизвестном коде метод не бросает необработанное исключение и возвращает безопасное значение.src/test/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextTest.java (1)
27-27: Изменение импорта соответствует рефакторингу пакетов.Перемещение ScriptVariant в пакет
com.github._1c_syntax.bsl.typesсогласуется с общей структурой рефакторинга в рамках данного PR.src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CachedPublicDiagnostic.java (1)
55-55: Переход на getter-based доступ к ключевым словам.Изменение соответствует общему рефакторингу использования ключевых слов с переходом на MultiName-based представление. Логика инициализации паттерна PUBLIC остается идентичной.
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnostic.java (2)
34-34: Импорт ScriptVariant из нового расположения.Изменение соответствует перемещению ScriptVariant в пакет
com.github._1c_syntax.bsl.types.
147-149: Улучшенный подход к получению MDO-ссылок через ScriptVariant.Замена языкового ветвления (RU/EN) на единый вызов
getMdoRef(ScriptVariant.valueByName(...))делает код более чистым и поддерживаемым. Использованиеvarдля локальной переменной соответствует современным практикам Java.src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/AbstractExecuteExternalCodeDiagnostic.java (1)
35-35: Переход на getter-based доступ к ключевым словам.Изменение согласуется с общим переходом на MultiName-based представление ключевых слов. Логика формирования паттерна EVAL_METHOD_NAME остается неизменной.
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/CommonModuleMissingAPIDiagnostic.java (1)
57-60: Последовательный переход на getter-based доступ.Все обращения к региональным ключевым словам (PUBLIC_REGION, INTERNAL_REGION) обновлены для использования методов
getRu()иgetEn(), что соответствует новому API Keywords и MultiName-based представлению.src/main/java/com/github/_1c_syntax/bsl/languageserver/context/DocumentContext.java (2)
44-44: Импорт ScriptVariant из нового расположения.Изменение соответствует перемещению ScriptVariant в пакет
com.github._1c_syntax.bsl.types.
220-222: Упрощенная и более гибкая обработка ScriptVariant.Замена явной проверки ENGLISH/RUSSIAN на общую проверку
!= ScriptVariant.UNKNOWNс использованиемshortName()делает код более расширяемым и готовым к поддержке дополнительных вариантов скриптов в будущем.src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/ForbiddenMetadataNameDiagnosticTest.java (1)
82-82: Проверьте корректность увеличения количества диагностик: в ForbiddenMetadataNameDiagnosticTest hasSize изменился с 7 до 17 — убедитесь, что все новые срабатывания обоснованы реальными запрещёнными именами, а не ложными тревогами из-за перехода на ScriptVariant-based разрешение MDO-ссылок.src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java (1)
148-148: Проверьте корректность увеличения числа диагностик
В тесте SameMetadataObjectAndChildNamesDiagnosticTest ожидание изменено с 6 на 16. Убедитесь, что после введения ScriptVariant-основанного разрешения действительно требуется такое число предупреждений и что нет ложных срабатываний.src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DuplicateRegionDiagnostic.java (1)
56-76: LGTM.Отказ от статических констант в пользу Keywords.*.getRu()/getEn() выглядит корректно, кейс‑инсенситивная карта решает вариативность регистра.
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/WrongDataPathForFormElementsDiagnostic.java (1)
110-111: Отлично.Переход на getScriptVariant() устраняет разветвление по языку и унифицирует логику.
src/main/java/com/github/_1c_syntax/bsl/languageserver/utils/MdoRefBuilder.java (2)
98-101: LGTM.Использование configuration.getScriptVariant() для локализованного mdoRef — верный шаг.
131-132: Проверьте влияние смены формата на английский канон (nameEn).Возврат
mdoType.nameEn() + "." + identifierменяет семантику (ранее могли использовать локализованное имя). Убедитесь, что все потребители/сравнения ожидают EN‑канон.Если нужна локализация, вариант:
mdoType.nameByVariant(documentContext.getServerContext().getConfiguration().getScriptVariant()).
|



Описание
Связанные задачи
Closes
Чеклист
Общие
gradlew precommit)Для диагностик
Дополнительно