bsl-language-server
bsl-language-server copied to clipboard
[MOD] MissingCommonModuleMethod - поддержка модулей менеджеров, но без контекста платформенные метода метаданных будут ошибками
Диагностика
MissingCommonModuleMethod
Описание предлагаемых изменений
В продолжение
- https://github.com/1c-syntax/bsl-language-server/issues/995
- и ПР по нему https://github.com/1c-syntax/bsl-language-server/pull/2827
Вопрос - как отличить методы платформы и методы менеджера без контекста?
Справочники.Справочник1.НесуществующийМетод(); // ошибка
Справочники.Справочник1.Тест(); // ошибка
Справочники.Справочник1.ТестЭкспортная(); // не ошибка
// не должно быть ошибкой, но без контекста правило не может узнать, что это метод платформы
А = Справочники.Справочник1.НайтиПоКоду(1); // ошибка
вижу 2 варианта решение без контекста
-
не искать ошибки вызовов несуществующих методов в модулях менеджеров не хочется
-
искать ошибки, но популярные методы от платформы пропустить
- или добавить настройку исключений в правило
Нужно доработать
- к фильтру
.filter(symbolOccurrence -> symbolOccurrence.getSymbol().getModuleType() == ModuleType.CommonModule) - добавить условие
|| symbolOccurrence.getSymbol().getModuleType() == ModuleType.ManagerModule - а также исправить показ сообщений по замечанию
- добавить тест
Процедура Тест5_МодулиМенеджеров()
Справочники.Справочник1.НесуществующийМетод(); // ошибка
Справочники.Справочник1.Тест(); // ошибка
Справочники.Справочник1.ТестЭкспортная(); // не ошибка
// не должно быть ошибкой, но без контекста правило не может узнать, что это метод платформы
А = Справочники.Справочник1.НайтиПоКоду(1); // ошибка
Документы.НесуществующийДокумент.НесуществующийМетод(1); // TODO решить, считать ли подобное ошибкой
КонецПроцедуры
- ну и само имя правило поменять, убрать из имени "общие модули"