Skip to content

[FN] UnusedLocalVariable после вставки в структуру #2787

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
asosnoviy opened this issue May 26, 2022 · 8 comments
Open
Labels
type/FN false negative

Comments

@asosnoviy
Copy link
Member

Диагностика

UnusedLocalVariable

Версия

Описание ложного НЕ срабатывания диагностики

Создана структура, в нее добавлены ключи, но структура никуда не передана

Пример кода

	ПараметрыПроцедуры = Новый Структура;
	ПараметрыПроцедуры.Вставить("Проблема", Проблема);
	ПараметрыПроцедуры.Вставить("ПараметрыПроверки", ПараметрыПроверки);

Скриншоты

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

@asosnoviy asosnoviy added the type/FN false negative label May 26, 2022
@nixel2007
Copy link
Member

Тут прям сложно... Надо понимать, что это именно структура, что при вставке значений нет побочных эффектов от вызовов методов...

@asosnoviy
Copy link
Member Author

Да здравствует выведение типов!
#269

@artbear
Copy link
Contributor

artbear commented May 27, 2022

Сводная задача по "потерянным" переменным #1088

@asosnoviy
Copy link
Member Author

Мысль где то в недрах референс индекса помечать "самоиспользование".

@artbear
Copy link
Contributor

artbear commented Jun 13, 2022

Да, проверка самоиспользования внутри реф-индекса будет очень полезной.

без нее мне уже в 2х или 3х правилах пришлось костылить и самому писать код проверки самозаписи

  • Значение = Значение

@artbear
Copy link
Contributor

artbear commented Jun 13, 2022

@qtLex что скажешь?

Да, проверка самоиспользования внутри реф-индекса будет очень полезной.

без нее мне уже в 2х или 3х правилах пришлось костылить и самому писать код проверки самозаписи

  • Значение = Значение

@qtLex
Copy link
Contributor

qtLex commented Jun 13, 2022

@qtLex что скажешь?

Да, проверка самоиспользования внутри реф-индекса будет очень полезной.
без нее мне уже в 2х или 3х правилах пришлось костылить и самому писать код проверки самозаписи

  • Значение = Значение

Чтоб хранить признак "самоиспользование", нужно понять что такое "самоиспользование". Только присвоение самой себе или любое использование значения переменной при инициализации нового значения?

Мне добавление признака кажется очень сомнительным.

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

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

Примеры где необходим контекст для определения

Значение = Значение;

Тут вроде все понятно. Присваиваем переменную саму себе. Лишнее действие. Но на это уже есть диагностика.

Значение = Действие();
Значение = Действие();

Тут тоже вроде понятно. Дважды одно значение

Значение = Значение + 1;

Тут уже сложнее. Будет ли это ошибкой или нет сильно зависит от контекста. Это может быть глобальная переменная. Может что-то считать в цикле.

Значение = Действие(Значение);
Значение = Действие2(Значение);

Такое написание нам диктует стандарт запрещающий вложенные методы.

@artbear
Copy link
Contributor

artbear commented Jun 14, 2022

Я на днях реализовал 2 правила

в обоих случаях мне понадобилось различать

  • самоприсвание Значение = Значение;
  • самоприсваивание с переиспользованием - Значение = ЛюбоеВыражениеВКоторомЕстьЗначение;
  • использование идет уже после присваивания Значение = 10; ЛюбоеВыражениеВКоторомЕстьЗначение...;

минусы

  • пока приходится дублировать код
  • главный минус в том, что нужно повторно бегать по дереву и определять каждый из этих признаков

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

  • например, в правиле для ЖР, СтрШаблон и т.п.

т.е. было бы хорошо, чтобы была возможность определения указанных признаков связи определения и использовния

  • и кажется, что эти признаки не зависят от вида переменной

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type/FN false negative
Projects
None yet
Development

No branches or pull requests

4 participants