Conversation
zmm
reviewed
Mar 20, 2024
| }).base(), s.end()); | ||
| } | ||
|
|
||
| int str_distance(std::string &a, std::string &b) |
Contributor
There was a problem hiding this comment.
Учтено ли в алгоритме то что в строках может быть разное число whitespace символов?
zmm
reviewed
Mar 20, 2024
| for i in $(find $1 -iname "*.c") | ||
| do | ||
| ./dupfind --similarity 90 --show $i | ||
| done |
Contributor
There was a problem hiding this comment.
Как планируется этот прототип подключать к oclint?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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, выглядит как +- рабочее решение. Если и появляются какие-то ложные срабатывания, то можно поиграться со флагами.