Skip to content

Поддержка стандартных реквизитов, типов значений, мультиязычности имен#3523

Merged
theshadowco merged 6 commits into
developfrom
feature/stdAttributesAndValueTypes
Oct 7, 2025
Merged

Поддержка стандартных реквизитов, типов значений, мультиязычности имен#3523
theshadowco merged 6 commits into
developfrom
feature/stdAttributesAndValueTypes

Conversation

@theshadowco

Copy link
Copy Markdown
Member

Описание

  1. Обновлены зависимости mdclasses и common library
  • добавлена поддержка типов значений
  • добавлены стандартные реквизиты
  • большая часть перечислений поддерживает два языка в имени + поиск значени по любому варианту имени
  • упрощено получение представления ссылки mdoref с учетом используемого языка
  1. упрощено получение представлений в зависимости от языка для констант (имена языковых конструкций, стандартных областей и т.д)

Связанные задачи

Closes

Чеклист

Общие

  • Ветка PR обновлена из develop
  • Отладочные, закомментированные и прочие, не имеющие смысла участки кода удалены
  • Изменения покрыты тестами
  • Обязательные действия перед коммитом выполнены (запускал команду gradlew precommit)

Для диагностик

  • Описание диагностики заполнено для обоих языков (присутствуют файлы для обоих языков, для русского заполнено все подробно, перевод на английский можно опустить)

Дополнительно

2. упрощение получения представлений в зависимости от языка
@coderabbitai

coderabbitai Bot commented Oct 6, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Обновлены зависимости и добавлен Maven snapshots-репозиторий. Проведён масштабный рефакторинг: строковые константы ключевых слов заменены на MultiName; выбор языка и получение MDO‑ссылок унифицированы через ScriptVariant; FormatProvider и региональные паттерны адаптированы; тесты обновлены под новые ожидания.

Changes

Cohort / File(s) Summary
Сборка и зависимости
build.gradle.kts
Добавлен Maven snapshots (https://central.sonatype.com/repository/maven-snapshots); обновлены версии io.github.1c-syntax:mdclasses и bsl-common-library до SNAPSHOT.
Ключевые слова → MultiName
src/main/java/.../utils/Keywords.java
Заменены публичные строковые константы ключевых слов на MultiName‑поля (RU/EN объединены). Публичный API ключевых слов изменён; добавлен импорт MultiName.
Форматирование (FormatProvider)
src/main/java/.../providers/FormatProvider.java
keywordCanonText переведено с Map<Locale, Map<Integer, String>> на Map<Integer, MultiName>; добавлен конструктор FormatProvider(LanguageServerConfiguration); обновлены методы подготовки и использования канонических имён.
Регионные паттерны и стандартные регионы
src/main/java/.../utils/Regions.java, src/main/java/.../codeactions/GenerateStandardRegionsSupplier.java
Построение паттернов регионов и сбор стандартных имён переведены на Keywords.<X>.get(language)/MultiName; убрано ветвление по RU/EN, шаблоны унифицированы.
Диагностики — переход на геттеры/ScriptVariant
src/main/java/.../diagnostics/*.java (CanonicalSpellingKeywordsDiagnostic, CachedPublicDiagnostic, AbstractExecuteExternalCodeDiagnostic, CommonModuleMissingAPIDiagnostic, DuplicateRegionDiagnostic, ForbiddenMetadataNameDiagnostic, MetadataObjectNameLengthDiagnostic, SameMetadataObjectAndChildNamesDiagnostic, WrongDataPathForFormElementsDiagnostic)
Диагностики адаптированы к MultiName/геттер‑доступу (раньше RU/EN константы → теперь Keywords.X.get...()/MultiName); выбор MDO‑ссылок унифицирован через ScriptVariant; обновлены импорты и часть конструкторов/подписи.
MDO / сборка ссылок
src/main/java/.../utils/MdoRefBuilder.java
Упрощён возврат локализованных MDO‑референсов: напрямую используется mdo.getMdoReference().getMdoRef(...) с текущим ScriptVariant; helper теперь использует mdoType.nameEn().
Контекст документа
src/main/java/.../context/DocumentContext.java
getScriptVariantLocale упрощён: если ScriptVariant != UNKNOWN возвращается shortName(), иначе бросается исключение; убрано жёсткое сопоставление EN/RU.
Мелкие правки и тесты
src/test/java/.../context/ServerContextTest.java, src/test/java/.../diagnostics/ForbiddenMetadataNameDiagnosticTest.java, src/test/java/.../diagnostics/SameMetadataObjectAndChildNamesDiagnosticTest.java
Обновлён импорт ScriptVariant (новый пакет); скорректированы ожидаемые количества диагностик (Forbidden: 7→17, SameMetadataObject: 6→16).

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: применить правки
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

Прыг-скок, я в код внёс морковку,
MultiName блестит, как свежая нотка.
Скрипт‑вариант ведёт спокойно, ловко,
Регионы и ключи — теперь ровно, ловко.
Хоп-хоп — сборка обновлена, ура! 🐇✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title Check ✅ Passed Заголовок чётко и лаконично отражает основные улучшения в PR: поддержку стандартных реквизитов, типов значений и мультиязычности имён без избыточных деталей.
Description Check ✅ Passed Описание подробно отражает внесённые изменения в зависимости, добавление поддержки типов значений, стандартных реквизитов и мультиязычных представлений, что соответствует содержимому PR.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/stdAttributesAndValueTypes

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ff97bef and c6baa7a.

📒 Files selected for processing (2)
  • 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)
⏰ 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)
  • GitHub Check: build
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: Analyse
  • GitHub Check: build (17, ubuntu-latest)
  • GitHub Check: build (23, macOS-latest)
  • GitHub Check: build (17, macOS-latest)
  • GitHub Check: build (23, windows-latest)
  • GitHub Check: build (23, ubuntu-latest)
  • GitHub Check: build (21, windows-latest)
  • GitHub Check: build (21, macOS-latest)
  • GitHub Check: build (21, ubuntu-latest)
  • GitHub Check: build (17, windows-latest)
  • GitHub Check: build
  • GitHub Check: Analyze the repo with CodeSee
🔇 Additional comments (3)
src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MetadataObjectNameLengthDiagnostic.java (1)

81-83: Хорошее упрощение получения mdoRef

Единое обращение к ScriptVariant из конфигурации убирает ветвление по языкам и сохраняет поведение диагностики. Всё выглядит корректно.

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SameMetadataObjectAndChildNamesDiagnostic.java (2)

99-103: Хорошая декомпозиция проверки атрибутов

Выделение проверки в отдельный метод делает код понятнее и переиспользуемым, логика совпадения имён сохраняется.


106-108: Последовательное использование ScriptVariant

Получение представления через ScriptVariant из конфигурации теперь согласовано с остальными диагностиками. Выглядит надёжно.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@theshadowco

Copy link
Copy Markdown
Member Author

@coderabbitai
Проведи ревью реквеста

@coderabbitai

coderabbitai Bot commented Oct 7, 2025

Copy link
Copy Markdown
Contributor

@theshadowco: Я проведу ревью изменений в этом пулл-реквесте.

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-library SNAPSHOT влияет на воспроизводимость сборок. Желательно ограничить репозиторий 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

📥 Commits

Reviewing files that changed from the base of the PR and between 84dfa85 and 3a109a5.

📒 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()).

@sonarqubecloud

sonarqubecloud Bot commented Oct 7, 2025

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant