LINUX.ORG.RU

DuploQ - графический фронтенд для Duplo (детектор дублированного кода)

 , , , ,


4

3

DuploQ представляет собой графический интерфейс к консольной утилите Duplo (https://github.com/dlidstrom/Duplo), предназначенной для поиска дублированного кода в исходных файлах (т.н. «копипаста»).

Утилита Duplo поддерживает несколько языков программирования: C, C++, Java, JavaScript, C#, но также может быть использована для поиска копий в любых текстовых файлах. Для указанных языков Duplo старается игнорировать макросы, комментарии, пустые строки и пробелы, выдавая пользователю максимально «чистые» результаты.

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

DuploQ является мультиплатформенным приложением, написанным с помощью фреймвока Qt версии 5. В настоящее время как минимум поддерживаются следующие платформы (при условии установленной Qt версии не ниже 5.10):

  • Microsoft Windows 10
  • Ubuntu Linux
  • Fedora Linux

Также высока вероятность работы DuploQ на иных платформах, которые официально поддерживаются Qt Company.

На странице релиза DuploQ (https://github.com/duploq/duploq/releases) можно скачать как исходные коды, так и бинарные пакеты для указанных выше систем (64 bit only).

DuploQ + Duplo лицензированы под GPL-лицензией.

>>> Подробности

поиска дублированного кода в исходных файлах

Не нужно. Это и IDE умеет. Нужен статический анализ скомпилированного кода, а то переменную переименовали и уже не копипаста. Хотя это самый распространненый источник багов.

cocucka ★★★★★ ()
Ответ на: комментарий от cocucka

Это и IDE умеет. Нужен статический анализ скомпилированного кода, а то переменную переименовали и уже не копипаста

IDEA так тоже умеет.

static_lab ★★★★★ ()
Ответ на: комментарий от static_lab

Так она и делает статический анализ по сути. А не просто текст сравнивает, как эта поделка.

cocucka ★★★★★ ()

У этой тулзы есть какие-то плюсы по сравнению с SonarQube?

Edit:

но также может быть использована для поиска копий в любых текстовых файлах.

Хотя, это может быть интересно 🤔

X-Pilot ★★★★★ ()
Последнее исправление: X-Pilot (всего исправлений: 1)
Ответ на: комментарий от cocucka

Не нужно. Это и IDE умеет.

IDE может и умеет, а какой-нибудь Sublime Text - нет.

X-Pilot ★★★★★ ()

Гениальное название! Консольная утилита даже полезнее - можно вставить в CI/CD и третировать любителей копипасты ещё до того как продукты их жизнедеятельности окажутся в мастере :)

zabbal ★★★★ ()
Ответ на: комментарий от cocucka

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

baist ★★ ()
Ответ на: комментарий от baist

Ну там используется какой-то алгоритм. Я особо не вникал, но он умеет игнорить комменты и прочие незначимые части исходного кода. Видимо, под поддержкой языков имеется ввиду умение распознать комментарии. То есть какой-то лексический разбор производится, но его всё равно не достаточно. Нужно как минимум строить AST и уже там искать дуплицированный код.

cocucka ★★★★★ ()

ИМХО нужно. А то в консольки корячиться и дупликаты искать дело не барское…

anonymous ()

А Intellij IDEA и так может обнаруживать дублированный код. Даже свободная версия.

anonymous ()

Duplo

Ха, у нас так называется внутриконторный самописный сервис для шаринга файлов и копипасты. Типичная фраза «скинь в дупло». Кстати, к дуплу есть и веб-морда коммандлайн тулзень.

Logopeft ()

Чё, прямо вот нужна вендо10-ка? На семёрке поиск дубликатов невозможен??

matumba ★★★★★ ()
Ответ на: комментарий от cocucka

Нужно как минимум строить AST и уже там искать дуплицированный код

Это слишком сложно (хотя и правильно). Скорее всего, делают АСТ для высокоуровневых конструкций (namespace->class->method) а остальное - по-старинке, текст сравнивают. :)

matumba ★★★★★ ()

К слову о дубликатах вообще: а кому это может быть полезно?? Команде индусов, которые клепают проекты, не приходя в сознание?

На моей практике, как только возникает нечто, что может быть полезно во многих проектах, сразу же отправляется в общую либу. Иногда бывает, что вспоминаешь, что подобный код уже писал, находишь в старых сорсах и выносишь в библиотеку. Ничего сложного.
Короче, «высосанная из пальца польза».

matumba ★★★★★ ()
Ответ на: комментарий от matumba

К слову о дубликатах вообще: а кому это может быть полезно?

Очень часто бывает, что копипастят участок кода, слегка подправляют и используют, но при этом забывая поменять переменную или условие в if. Код практически идентичный, глазом заметить ошибку трудно. Только статический анализатор может поймать. Сабж, конечно, бесполезен.

cocucka ★★★★★ ()
Ответ на: комментарий от anonymous

Так у JetBrains и CLion есть, я правда не знаю, есть ли там эта фича.

KivApple ★★★★★ ()
Ответ на: комментарий от matumba

бывает, что вспоминаешь

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

KivApple ★★★★★ ()

Только что поставил «дупло» на 7ку. Вопрос: какого хрена в «поддерживаемых» стоит 10ка?! Вы откуда этот бред взяли?

Так или иначе, сама утилита - полное говно. Список файлов с дубликатами она отображает, но... только и всего! Ну и накой эта перделка нужна? Выёживаться, что ты «умеешь Qt»?

matumba ★★★★★ ()
Ответ на: комментарий от matumba

Если они скопипастили из одного туториала, то нет. Плюс это не отменяет того, что по прошествию какого-то времени, можно и самому не вспомнить некоторые детали кода, который сам же писал.

KivApple ★★★★★ ()
Последнее исправление: KivApple (всего исправлений: 2)
Ответ на: комментарий от matumba

А по файлам кликать пробовал? Окошки справа видел? Там их целых три, но для тебя, наверное, это слишком много и сложно.

anonymous ()
Ответ на: комментарий от cocucka

Часто бывает так, что копипастят и поправляют 10%, а остальные 90% остаются дуплом. :) Вот такой тулзой вполне просто ловится, сам пробовал.

Но у тебя по ходу когнитивный диссонанс одной мысли в другую. Ты написал 2 предложения подряд, которые противоречат друг другу. Подумай, нужны ли твои комментарии человечеству.

anonymous ()
Ответ на: комментарий от theNamelessOne

Язык погоды не сделает, практически любой AST должен сработать. Это же задача поиска подобных поддеревьев.

xaizek ★★★★★ ()

Спасибо за новость. Для меня это очень полезное ПО.

anonymous ()
Ответ на: комментарий от xaizek

Это же задача поиска подобных поддеревьев

В общем случае — нет, нужен ещё семантический анализ (как минимум типы выражений проверять).

theNamelessOne ★★★★★ ()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Ответ на: комментарий от cocucka

Это и IDE умеет.

IDE умеет. Но пердолики используют вместо IDE вим и емакс, чем страшно гордятся. А с анализом кода сношаются через дупло.

pinus_nigra ()
Ответ на: комментарий от theNamelessOne

Типы можно не проверять, они могут отличаться в дублированных участках. По-простому проверять изоморфизм узлов идентификаторов будет достаточно практически всегда. С семантическим анализом оно точнее, но он будет замедлять и бесполезен большую часть времени. Он ещё из-за строгости отбракует какие-то варианты, которые пользователь может посчитать дубликатами.

xaizek ★★★★★ ()
Ответ на: комментарий от matumba

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

Теоретики как ты, они все такие. Им всё просто, пока на форумах писать, и тулзы не нужны, а как до дела доходит, то бегут спрашивать «а что такое компилятор? а почему кнопка не того цвета?»

anonymous ()

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

sena ()
Ответ на: комментарий от WatchCat

Эклипс и нетбинс, через плагины, но всё же умеют. Причём они используют PMD, что удобно, ибо билды тоже им верифицируются. Можно ещё до коммита увидеть, что у тебя код не пройдет анализ.

cocucka ★★★★★ ()
Ответ на: комментарий от WatchCat

Это умеет любой LSP с линтером. IDE’шки их и юзают под капотом.

Ничто не мешает прикрутить к vim тот же ale.

t3n3t ()

Фраза из детских сочинений «Дубровский имел отношения с Машей через дупло» заиграла новыми красками. Только представьте, он - программист-халтурщик-копипастер, она - внимательный QA-инженер…

northerner ★★★ ()
Ответ на: комментарий от cocucka

Плюсовикам по башке дают сегфолты за говняный код. И про принцип DRY тоже слыхали.

baist ★★ ()
Ответ на: комментарий от cocucka

PMD годная штука, но в ней нельзя проекты, насколько знаю.

ii-system ()
Ответ на: комментарий от matumba

«Поддерживаемые» значит, что на дриснятке тестят и обеспечивают совместимость с ней. А на спермёрку забили балду. То есть если запускается — радуйтесь, если вдруг сломается — они Вам ничего не должны :P

Иначе таким же макаром можно требовать писать в системных требованиях программ, которые работают под Wine, платформы, на которых работает Wine.

mertvoprog ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.