Обсудить правило: небольшой копипаст/дублирование в пределах одного метода

sonar-bsl-plugin

#1

Проверка дублирования сейчас работает для довольно больших блоков кода
Но часто разработчики допускают небольшие копипасты в пределах одного метода
Выполняют повторные вычисления. например, без необходимости.
Например,

&НаКлиенте
Процедура ОбработатьСтрокуДерева(Строка)
	ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
	Если Условие Тогда
		Какой-то код и в нет переустановки ИдентификаторСтроки
	КонецЕсли;

	ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
	ЕщеКод(ИдентификаторСтроки);
КонецПроцедуры

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

что скажете?


#2

Спорно. Может быть такая конструкция.

Процедура МояПроцедура()
СтрокаДерева = ПолучитьСтрокуДерева("КакойТоПараметр1"):
ИдентификаторСтроки = СтрокаДерева .ПолучитьИдентификатор();

Если ИдентификаторНеСоответствуетНужному() Тогда
  СтрокаДерева = ПолучитьСтрокуДерева("ДругойПараметр"):
КонецЕсли
ИдентификаторСтроки = СтрокаДерева .ПолучитьИдентификатор();

КонецПроцедуры

Может быть ложное срабатывание. Возможно пример не совсем удачный. Суть его в том, что в первом параметре может быть разные значения.


#3

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


#4

по дублированию кмк интереснее прикрутить нечеткий поиск, когда пишут абсолютно идентичные конструкции, но переменные названы по-разному и как обычный копипаст не детектятся


#5

ИМХО, тогда будет еще больше ложных срабатываний.