Russian Qt Forum
Ноябрь 24, 2024, 08:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Плагин поиска дублирующегося кода для QtCreator  (Прочитано 3414 раз)
snasoft
Гость
« : Февраль 25, 2014, 23:53 »


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

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

Возможно не все задумываются над тем, насколько много в коде повторов. Возможно кто-то даже считает комбинацию Ctrl+C, Ctrl-V реализацией принципа повторного использования кода. Более глубокое понимание вопросов, связанных с повторяемым кодом дает статья Дублирование кода на Википедии. В данной статье все хорошо описано, но нет (на мой взгляд) главного - как с этими повторами бороться. А ответ прост: в многих IDE такие средства уже имеются, либо реализованы в виде плагинов. В многих...кроме QtCreator. Именно данный пробел и восполняет разработанный плагин: он ищет дубликаты (по настраиваемым опциям) и выводит в древовидном списке ссылки на все фрагменты дублирующегося кода (рисунок 1).


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

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


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

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

Ссылки:

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

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

С уважением, Андрей.
Записан
b-s-a
Гость
« Ответ #1 : Февраль 27, 2014, 11:01 »

Рекомендую внести этот плагин в основное дерево исходников Qt Creator. Только не забудь добавить в начало каждого файла стандартную шапку. Сейчас идет подготовка версии 3.1. Возможно, ты еще успеешь.
Записан
snasoft
Гость
« Ответ #2 : Февраль 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).
Да и плагин этот не настолько массовый (те, кто задумывается о качестве кода сами ищут такой инструментарий и находят его, некоторых просто устраивает копипаста).
Записан
b-s-a
Гость
« Ответ #3 : Февраль 27, 2014, 22:55 »

А зачем таскать с собой саму программу? Посмотри, как устроены плагины Analizer, Perforce, Subversion и пр.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 21.