Open asosnoviy opened 2 years ago
Тут прям сложно... Надо понимать, что это именно структура, что при вставке значений нет побочных эффектов от вызовов методов...
Да здравствует выведение типов! https://github.com/1c-syntax/bsl-language-server/issues/269
Сводная задача по "потерянным" переменным https://github.com/1c-syntax/bsl-language-server/issues/1088
Мысль где то в недрах референс индекса помечать "самоиспользование".
Да, проверка самоиспользования внутри реф-индекса будет очень полезной.
без нее мне уже в 2х или 3х правилах пришлось костылить и самому писать код проверки самозаписи
@qtLex что скажешь?
Да, проверка самоиспользования внутри реф-индекса будет очень полезной.
без нее мне уже в 2х или 3х правилах пришлось костылить и самому писать код проверки самозаписи
- Значение = Значение
@qtLex что скажешь?
Да, проверка самоиспользования внутри реф-индекса будет очень полезной. без нее мне уже в 2х или 3х правилах пришлось костылить и самому писать код проверки самозаписи
- Значение = Значение
Чтоб хранить признак "самоиспользование", нужно понять что такое "самоиспользование". Только присвоение самой себе или любое использование значения переменной при инициализации нового значения?
Мне добавление признака кажется очень сомнительным.
Лучше реализовать утилити метод определяющий, что является ли конкретное присваивание самоиспользованием. А находить такие определения уже через референс индекс.
Примеры где необходим контекст для определения
Значение = Значение;
Тут вроде все понятно. Присваиваем переменную саму себе. Лишнее действие. Но на это уже есть диагностика.
Значение = Действие();
Значение = Действие();
Тут тоже вроде понятно. Дважды одно значение
Значение = Значение + 1;
Тут уже сложнее. Будет ли это ошибкой или нет сильно зависит от контекста. Это может быть глобальная переменная. Может что-то считать в цикле.
Значение = Действие(Значение);
Значение = Действие2(Значение);
Такое написание нам диктует стандарт запрещающий вложенные методы.
Я на днях реализовал 2 правила
в обоих случаях мне понадобилось различать
Значение = Значение;
Значение = ЛюбоеВыражениеВКоторомЕстьЗначение;
Значение = 10; ЛюбоеВыражениеВКоторомЕстьЗначение...;
минусы
по опыту написания различных хитрых правил я знаю, что подобные проверки часто приходится повторять
т.е. было бы хорошо, чтобы была возможность определения указанных признаков связи определения и использовния
Диагностика
UnusedLocalVariable
Версия
Описание ложного НЕ срабатывания диагностики
Создана структура, в нее добавлены ключи, но структура никуда не передана
Пример кода
Скриншоты
Дополнительная информация