bsl-language-server icon indicating copy to clipboard operation
bsl-language-server copied to clipboard

[NEW] В модуле конфигурации и в модуле расширения есть методы с одинаковым наименованием

Open artbear opened this issue 4 years ago • 11 comments

Описание проблемы, ошибки, которую надо диагностировать

В результате рефакторинга или обновлений может возникнуть ситуация, когда в расширяемом модуле конфигурации и соответствующем модуле расширения находятся методы с одинаковым наименованием.

В режиме Предприятия соответствующая форма\модуль не откроются и будет выдано исключение.

При доработке расширении Конфигуратор отслеживает подобную проблему и выдает ошибку синтакс-контроля

  • Процедура или функция с указанным именем уже определена

Но вот при доработке уже основной конфигурации и добавлении метода в модуль конфигурации ошибок не выдается

  • ни синтакс-контроль модуля конфигурации,
  • ни синтакс-контроль модуля расширения
  • ни проверка применимости расширения
  • перезапуск Конфигуратора не помогает.

Конфигуратор выдаст ошибку, только если

  • изменить модуль расширения, хотя добавить\удалить один пробел.
  • сделать проверку конфигурации (полный синтакс-контроль) для этого расширения

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

Мы сегодня нарвались на подобное поведение

Способы обхода\решения довольно простые

  • делать полный синтакс-контроль расширений
  • добавить\удалить пробел в расширении
  • для ВСЕХ методов в расширениях, в т.ч. и приватных, добавлять уникальный префикс, чтобы в будущем не было проблем
    • способ довольно надежный, хотя и сильно усложняет код.

Варианты диагностик для обсуждения

Вариантов диагностики несколько

  • проверять наличие методов с одинаковым наименованием
  • проверять, что методы в модулях расширений используют префиксы

Можно реализовать любую из этих диагностик или обе )

Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы

.

Параметры диагностики

Тип Статья на русском

  • [x] :ant: Ошибка
  • [ ] :cop: Уязвимость
  • [ ] :guardsman: Потенциальная уязвимость
  • [ ] :poop: Качество кода
  • [ ] :trollface: Другое

Важность Статья на русском

  • [x] :broken_heart: Блокирующая / Blocker
  • [ ] :heart: Критическая / Critical
  • [ ] :yellow_heart: Важная / Major
  • [ ] :blue_heart: Незначительная / Minor
  • [ ] :green_heart: Информационная / Info
  • [ ] :revolving_hearts: Другое

Тэги Статья на русском

  • [x] STANDARD - "Нарушение стандартов 1С"
  • [ ] LOCKINOS - "Не будет работать в другой ОС"
  • [ ] SQL - "Проблема с запросом"
  • [ ] PERFORMANCE - "Проблема производительности"
  • [ ] BRAINOVERLOAD - "Непонятный код"
  • [x] BADPRACTICE - "Плохая практика программирования"
  • [ ] CLUMSY - "Излишние действия"
  • [ ] DESIGN - "Ошибка в проектировании"
  • [ ] SUSPICIOUS - "Подозрительный код"
  • [x] UNPREDICTABLE - "Непредсказуемо работающий код"
  • [ ] DEPRECATED - "Устаревшая функциональность"
  • [ ] ERROR - "Ошибочная конструкция"
  • [ ] LOCALIZE - "Проблемы локализации"

Время на исправление (минут)

2 минуты

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

artbear avatar Feb 25 '21 15:02 artbear

@nixel2007 @theshadowco какой вариант диагностики выберем ?

artbear avatar Feb 25 '21 15:02 artbear

На текущий момент вариант 1 не реализуем, так как в бсл лс нет поддержки мультирута и невозможно будет получить метаданные и по модулям конфигурации и по модулям расширения. вариант 2 в целом реализуем, но кажется вербозным... сделать можно, но возможно стоит выключить по умолчанию.

nixel2007 avatar Mar 02 '21 15:03 nixel2007

Против варианта 2: В расширении методы переопределнные должны использовать префиксы, а собственные то зачем?

theshadowco avatar Mar 03 '21 08:03 theshadowco

Против варианта 2: В расширении методы переопределнные должны использовать префиксы, а собственные то зачем?

твое предложение непонятно. расшифруй.

artbear avatar Mar 03 '21 08:03 artbear

проверять, что методы в модулях расширений используют префиксы

Вот про это - в собственных объектах, методах расширения, не заимствованных - нафига префиксы?

theshadowco avatar Mar 03 '21 08:03 theshadowco

проверять, что методы в модулях расширений используют префиксы

Вот про это - в собственных объектах, методах расширения, не заимствованных - нафига префиксы?

в собственных объектах незачем. а вот в заимствованных объектах нужно, иначе будет баг, описанный в шапке ишуза

заимствование можно определять по наличию аннотаций в модуле - Вместо, Перед, После, ИзменениеКонтроль - если они есть хотя бы у одного метода в модуле, значит, нужны префиксы.

artbear avatar Mar 03 '21 08:03 artbear

Так можно

theshadowco avatar Mar 03 '21 10:03 theshadowco

Напомню, что аннотация - необязательный показатель расширяемости модуля. Вместо аннотаций можно использовать постфиксы в имени метода. Надежная информация лежит только в xml/mdo, и надо анализировать их.

nixel2007 avatar Mar 03 '21 11:03 nixel2007

Связанный ишуз https://github.com/1c-syntax/bsl-language-server/issues/1573

artbear avatar Oct 07 '21 11:10 artbear

В комментарии https://github.com/1c-syntax/bsl-language-server/issues/1814#issuecomment-937713793 я указал, как хранится информация о варианте расширения (Вместо и т.п.) для обработчика события формы

artbear avatar Oct 07 '21 11:10 artbear

"В модуле конфигурации и в модуле расширения есть методы с одинаковым наименованием" - а если в модуле конфигурации нет, но есть в 2-х одновременно установленных расширениях? Возможно ли и такую проверку добавить

666Bounty999 avatar Jun 26 '24 09:06 666Bounty999