bsl-language-server
bsl-language-server copied to clipboard
[NEW] В модуле конфигурации и в модуле расширения есть методы с одинаковым наименованием
Описание проблемы, ошибки, которую надо диагностировать
В результате рефакторинга или обновлений может возникнуть ситуация, когда в расширяемом модуле конфигурации и соответствующем модуле расширения находятся методы с одинаковым наименованием.
В режиме Предприятия соответствующая форма\модуль не откроются и будет выдано исключение.
При доработке расширении Конфигуратор отслеживает подобную проблему и выдает ошибку синтакс-контроля
Процедура или функция с указанным именем уже определена
Но вот при доработке уже основной конфигурации и добавлении метода в модуль конфигурации ошибок не выдается
- ни синтакс-контроль модуля конфигурации,
- ни синтакс-контроль модуля расширения
- ни проверка применимости расширения
- перезапуск Конфигуратора не помогает.
Конфигуратор выдаст ошибку, только если
- изменить модуль расширения, хотя добавить\удалить один пробел.
- сделать проверку конфигурации (полный синтакс-контроль) для этого расширения
В итоге вполне возможны ситуации, когда расширение не меняется, а обновляется только типовая конфигурация, и возникает баг в режиме Предприятия.
Мы сегодня нарвались на подобное поведение
Способы обхода\решения довольно простые
- делать полный синтакс-контроль расширений
- добавить\удалить пробел в расширении
- для ВСЕХ методов в расширениях, в т.ч. и приватных, добавлять уникальный префикс, чтобы в будущем не было проблем
- способ довольно надежный, хотя и сильно усложняет код.
Варианты диагностик для обсуждения
Вариантов диагностики несколько
- проверять наличие методов с одинаковым наименованием
- проверять, что методы в модулях расширений используют префиксы
Можно реализовать любую из этих диагностик или обе )
Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы
.
Параметры диагностики
Тип Статья на русском
- [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 минуты
Дополнительная информация
@nixel2007 @theshadowco какой вариант диагностики выберем ?
На текущий момент вариант 1 не реализуем, так как в бсл лс нет поддержки мультирута и невозможно будет получить метаданные и по модулям конфигурации и по модулям расширения. вариант 2 в целом реализуем, но кажется вербозным... сделать можно, но возможно стоит выключить по умолчанию.
Против варианта 2: В расширении методы переопределнные должны использовать префиксы, а собственные то зачем?
Против варианта 2: В расширении методы переопределнные должны использовать префиксы, а собственные то зачем?
твое предложение непонятно. расшифруй.
проверять, что методы в модулях расширений используют префиксы
Вот про это - в собственных объектах, методах расширения, не заимствованных - нафига префиксы?
проверять, что методы в модулях расширений используют префиксы
Вот про это - в собственных объектах, методах расширения, не заимствованных - нафига префиксы?
в собственных объектах незачем. а вот в заимствованных объектах нужно, иначе будет баг, описанный в шапке ишуза
заимствование можно определять по наличию аннотаций в модуле - Вместо, Перед, После, ИзменениеКонтроль - если они есть хотя бы у одного метода в модуле, значит, нужны префиксы.
Так можно
Напомню, что аннотация - необязательный показатель расширяемости модуля. Вместо аннотаций можно использовать постфиксы в имени метода. Надежная информация лежит только в xml/mdo, и надо анализировать их.
Связанный ишуз https://github.com/1c-syntax/bsl-language-server/issues/1573
В комментарии https://github.com/1c-syntax/bsl-language-server/issues/1814#issuecomment-937713793 я указал, как хранится информация о варианте расширения (Вместо и т.п.) для обработчика события формы
"В модуле конфигурации и в модуле расширения есть методы с одинаковым наименованием" - а если в модуле конфигурации нет, но есть в 2-х одновременно установленных расширениях? Возможно ли и такую проверку добавить