Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: snasoft от Февраль 25, 2014, 23:53



Название: Плагин поиска дублирующегося кода для QtCreator
Отправлено: snasoft от Февраль 25, 2014, 23:53

Доброго времени суток!

Долгое время я косвенно являлся участником форума в режиме read-only. Чаще всего на те или иные страницы форума я попадал по поисковым запросам, которые составлял для решения возникающих в ходе программирования проблем. Поэтому прежде всего хотелось бы выразить признательность всем участникам форума, качество материалов которого я бы поставил на равне с системой справки Qt и форумом qt-project.org.
Сегодня я хочу поделиться своим вкладом в сообщество Qt-разработчиков. Это мой первый Open-source проект, который надеюсь будет полезен программистам, использующим IDE QtCreator. Итак, в ходе месяца работы (по вечерам помимо основной работы) был создан плагин для QtCreator, позволяющий выполнять поиск дублирующегося кода (являющегося злом в программировании), который я представляю на суд общественности.

Возможно не все задумываются над тем, насколько много в коде повторов. Возможно кто-то даже считает комбинацию Ctrl+C, Ctrl-V реализацией принципа повторного использования кода. Более глубокое понимание вопросов, связанных с повторяемым кодом дает статья Дублирование кода (http://ru.wikipedia.org/wiki/%D0%94%D1%83%D0%B1%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%B4%D0%B0) на Википедии. В данной статье все хорошо описано, но нет (на мой взгляд) главного - как с этими повторами бороться. А ответ прост: в многих IDE такие средства уже имеются, либо реализованы в виде плагинов. В многих...кроме QtCreator. Именно данный пробел и восполняет разработанный плагин: он ищет дубликаты (по настраиваемым опциям) и выводит в древовидном списке ссылки на все фрагменты дублирующегося кода (рисунок 1).

(http://habrastorage.org/getpro/habr/post_images/592/0c6/31d/5920c631d41cfd45d0f5b418c9dc5c19.png)

Рисунок 1 - Область вывода сообщений, в которой отображается информация о всех найденных фрагментов дублирующегося кода

При двойном клике мышью по записи (QTreeWidgetItem) в редакторе QtCreator открывается соответствующий файл, курсор позиционируется в начале фрагмента повтора и повторяющийся фрагмент подсвечивается (рисунок 2). Данный функционал оказался настолько простым в реализации, насколько он оказался сложен в поиске нужного решения. Дело в том, что текущая документация по разработке плагинов достаточно скудна, поэтому каждый найденный кейс, на мой взгяд, представляет большую ценность для тех, кто пробует свои силы в разработке плагинов.

(http://habrastorage.org/getpro/habr/post_images/ac0/34e/194/ac034e19428913a81bbfa7062ac8007a.jpg)

Рисунок 2 - Выделение фрагмента дублирующегося кода

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

Ссылки:

1. Подбробное описание плагина (в том числе описание действий, необходимых для самостоятельной сборки как QtCreator, так и плагина из исходников) представлено в одноименной статье "Плагин поиска дублирующегося кода для QtCreator" (http://habrahabr.ru/post/213785/) на habrahabr.ru.
2. Исходный код в архиве и git-репозитории расположен на странице проекта в Sourceforge.net (https://sourceforge.net/projects/simianplugin/). Просьба сообщать о багах "bug reports" и нужном функционале "feature requests" в системе тикетов или в соответствующем разделе форума (можно как на русском, так на английском). Также я обязательно отвечу на все запросы, которые будут опубликованы в данной теме.
3. Помимо русскоязычного форума был создан  анонс плагина на qt-project.org  (http://qt-project.org/forums/viewthread/38793/). Кто является участником в том числе и форума qt-project.org - будем знакомы.

P.S. Тема создания плагинов для QtCreator лично меня очень заинтересовала. И в первую очередь тем, что оказалось реально в силах не самого продвинутого программиста создать что-то, что будет полезно многим единомышленникам. Поэтому хотелось бы в первую очередь услышать мнения участников форума о том, какие бы функции (например из тех что имеются в других IDE, но нет в QtCreator) были бы полезны в процессе работы над проектами в среде QtCreator.

С уважением, Андрей.


Название: Re: Плагин поиска дублирующегося кода для QtCreator
Отправлено: b-s-a от Февраль 27, 2014, 11:01
Рекомендую внести этот плагин в основное дерево исходников Qt Creator. Только не забудь добавить в начало каждого файла стандартную шапку. Сейчас идет подготовка версии 3.1. Возможно, ты еще успеешь.


Название: Re: Плагин поиска дублирующегося кода для QtCreator
Отправлено: snasoft от Февраль 27, 2014, 20:02
Рекомендую внести этот плагин в основное дерево исходников Qt Creator.

Сам плагин использует стороннюю утилиту simian.
Лицензионные условия использования данной утилиты позволяют бесплатное ее использование только в ознакомительных или некоммерческих целях.

Цитата: Simon Harris (разработчик программы)
I am an active supporter of the free software and open source communities. As such, I provide a free license of Simian for non-commercial and open source use.

Simian is also available for a period of 15 days for evaluation purposes.

However, if you intend to use Simian commercially or within government, ie. you are not using Simian to check free software, I ask you to buy a license. I believe a Simian license represents excellent value for money, when compared to other products on the market today.

Таким образом для поиска повторов в самом QtCreator ее можно использовать (как и для других OpenSource проектов), но вот можно ли ее включать в состав самого QtCreator с такими ограничениями? Другими словами не будет ли нарушена лиц. чистота самого QtCreator?

В любом случае плагин пока только в стадии "бета", лично у меня еще остались белые места в понимании опций работы утилиты simian (хоть и небольшие), вчера только исправил 2 ошибки в исходниках плагина (и конечно обновил исходники на Sourceforge.net).
Да и плагин этот не настолько массовый (те, кто задумывается о качестве кода сами ищут такой инструментарий и находят его, некоторых просто устраивает копипаста).


Название: Re: Плагин поиска дублирующегося кода для QtCreator
Отправлено: b-s-a от Февраль 27, 2014, 22:55
А зачем таскать с собой саму программу? Посмотри, как устроены плагины Analizer, Perforce, Subversion и пр.