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

[MOD] MissingCommonModuleMethod - поддержка модулей менеджеров, но без контекста платформенные метода метаданных будут ошибками

Open artbear opened this issue 3 years ago • 0 comments

Диагностика

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 решить, считать ли подобное ошибкой
КонецПроцедуры
  • ну и само имя правило поменять, убрать из имени "общие модули"

artbear avatar Nov 05 '22 10:11 artbear