Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
В общем, написал критерий для дублирования кода отдельной программой. Не помню уже почему не получилось написать его как полноценный критерий для оклинта. МОЖЕТ БЫТЬ потом попробую снова. Но сейчас меня положение дел +- устраивает.
Этот "критерий" лежит в папке dupfind
make
собирает его в текущей директорииmake clean
удаляет его из этой директорииsudo make install
устанавливает его в /usr/local/binsudo make uninstall
удаляет его оттудаКак он работает?
Рассматривает поочередно строки. Если строка с номером N не похожа на все остальные, тогда создает группу с номером N. Если строка похожа на какую-то другую с номером M < N, тогда добавляет эту строку в группу M.
Последовательность строк, номера групп которых идут последовательно, считается дубликатом.
Как его использовать?
Без дополнительных флагов результат может выглядеть следующим образом:
С помощью флага
--show
можно включить вывод продублированных частей кода:Остальные опции:
--maxskip X
: устанавливает максимальный размер "дыры" в последовательности. Может быть полезно, когда в последовательность, полученную путем ctrl+c ctrl+v, добавляется одна уникальная строчка, и это ломает алгоритм. Можно поставить maxskip равным 1 и тогда это строку можно будет "перепрыгнуть" и не потерять конец последовательности.--similarity X
: устанавливает порог "сходства" строк в процентах. Строки считаются идентичными и будут принадлежать одной группе, если процент их сходства больше или равен этому параметру.--reportlen X
: устанавливает минимальную длину последовательности, о которой следует сообщать. То есть если установить reportlen равным X, то последовательности-дубликаты длины меньшей X не будут считаться ошибкой.Проверял этот критерий на репозитории pr-2023-3384, выглядит как +- рабочее решение. Если и появляются какие-то ложные срабатывания, то можно поиграться со флагами.