Skip to content

Fix false positive metadata diagnostics on support-locked objects#3808

Draft
Copilot wants to merge 3 commits intodevelopfrom
copilot/fix-false-positive-diagnostic
Draft

Fix false positive metadata diagnostics on support-locked objects#3808
Copilot wants to merge 3 commits intodevelopfrom
copilot/fix-false-positive-diagnostic

Conversation

Copy link
Contributor

Copilot AI commented Feb 5, 2026

ForbiddenMetadataName (and all other AbstractMetadataDiagnostic subclasses) fires on metadata objects "on support locked" even when skipSupport=withSupportLocked is configured. The root cause: DiagnosticsConfiguration.checkSupport() only checks the document-level support variant (the SessionModule), but checkMetadataWithoutModules() iterates all MDOs from ServerContext without checking each object's individual SupportVariant.

Changes

  • DiagnosticInfo — expose skipSupportMode() so diagnostics can read the configured SkipSupport via the existing info field
  • AbstractMetadataDiagnostic — add needToAnalyzeMdo(MD) filter in checkMetadataWithoutModules() that checks each MDO's SupportVariant against the skip mode:
    return switch (skipMode) {
      case NEVER -> true;
      case WITH_SUPPORT -> false;
      case WITH_SUPPORT_LOCKED -> variant != SupportVariant.NOT_EDITABLE;
    };
    All 5 subclasses (ForbiddenMetadataName, MetadataObjectNameLength, SameMetadataObjectAndChildNames, DenyIncompleteValues, ScheduledJobHandler) benefit automatically — no subclass changes needed.
  • ForbiddenMetadataNameDiagnosticTest — added testSkipSupportLockedMdoInSessionModule verifying zero diagnostics when all MDOs are NOT_EDITABLE with WITH_SUPPORT_LOCKED config
Original prompt

This section details on the original issue you should resolve

<issue_title>[FP] Ложное срабатывание диагностики "Объекту метаданных присвоено запрещенное имя" на объектах "с замком".</issue_title>
<issue_description>## Диагностика
Объекту метаданных присвоено запрещенное имя bsl-language-server:ForbiddenMetadataName

Версия

Версия плагина, который использует BSL LS - 1C (BSL) Community Plugin 1.16.1 для SonarQube Community build

Описание ложного срабатывания диагностики

В SonarQube был создан проект для проверки кода конфигурации УХ с доработками. Большая часть объектов метаданных конфигурации находится на поддержке с запретом изменений ("на замке"). В SonarQube в проекте были установлены настройки для нового кода "Глобальные" (от последней версии проекта), после чего в проект были отправлены исходники конфигурации для "нулевой" проверки (первой проверки для точки отсчета нового кода). В настройках плагина 1C (BSL) Community Plugin была выставлена настройка "Пропускать расчет диагностики модулей "на поддержке" в значение "with support locked" (аналогичная настройка сделана в файле параметров проекта sonar-project.properties "sonar.bsl.languageserver.skipSupport=with support locked")

По результатам первой проверки кода было получено определенное количество срабатываний метрики bsl-language-server:ForbiddenMetadataName для объектов метаданных, находящихся на поддержке ("с замком").

Пример кода

Результат проверки метрики bsl-language-server:ForbiddenMetadataName "вешается" на конкретный объект метаданных даже при отсутствующем модуле с кодом. Для примера прилагаю файл с частью проверки конфигурации только указанной метрикой (файл проверки целиком занимает больше 60 мегабайт и не прикрепляется)

Часть результатов диагностики.txt

.bsl-language-server.json

Скриншоты

Image Image

Дополнительная информация

Были проведены ручные проверки с использованием указанной метрики, часть результата прикрепил к данному сообщению. По результатам обсуждения в телеграм-канале было принято заключение, что плагин 1C (BSL) Community Plugin вторичен по отношению к BSL LS, создал issue именно здесь.
</issue_description>

<agent_instructions>Посмотри abstract metadata diagnostic в режиме проверки объекта метаданных без модуля и класс, отвечающий за список bsldiagnostic по document context. Предложи, как бы можно было фильтровать диагностики метаданных, срабатывающие на объектах на поддержке (можно посмотреть режим поддержки по mdoRef). Распиши плюсы и минусы решения и выдай на выбор. </agent_instructions>

Comments on the Issue (you are @copilot in this section)


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 2 commits February 5, 2026 20:40
…jects

Add skipSupportMode() to DiagnosticInfo to expose the configured
SkipSupport setting. Add needToAnalyzeMdo() filter in
AbstractMetadataDiagnostic.checkMetadataWithoutModules() to skip
metadata objects whose SupportVariant should be excluded per the
skipSupport configuration.

Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix false positive in metadata naming diagnosis Fix false positive metadata diagnostics on support-locked objects Feb 5, 2026
Copilot AI requested a review from nixel2007 February 5, 2026 20:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants