Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Плагин поиска дублирующегося кода для QtCreator

Anna | 24.06.2014 | нет комментариев

image

Дублирующийся код осложняет внесение изменений, осознавание начальных текстов и их последующее сопровождение. Для того, Дабы избежать дублирования, а также для оценки качества кода и его рефакторинга, в составе некоторых IDE есть встроенные средства для поиска повторяющихся фрагментов кода. Для других IDE написаны плагины. Впрочем для среды разработки QtCreator до подлинного момента ни встроенных средств, ни плагинов поиска повторов не было.
В статье описывается два решения задачи механического поиска дубликатов в данной IDE: с поддержкой средства интеграции сторонних утилит и с поддержкой разработанного плагина, тот, что верю будет пригоден программистам C , использующим QtCreator.

1 Интеграция сторонней утилиты поиска повторяющегося кода

Механизм интеграции сторонних утилит — сильное средство растяжения функционала QtCreator. Процесс настройки детально описан в начальстве. В качестве инструмента поиска дубликатов была выбрана консольная утилита simian — Similarity Analyzer, которая также будет применяться и в плагине. Для ее интеграции в QtCreator нужно исполнить следующие шаги:
1. Установка приложения.
Windows:
Для Windows-систем будем применять exe-приложение (страница загрузки с сайта автора. Распакуем архив с приложением в надобную вам директорию (скажем D:/Development/Simian).
Unix-based:
Для запуска в Unix-системах (поддерживающих JRE) simian также реализован в виде Java-приложения. Для некоторых Unix-систем simian дозволено установить из системы пакетов (скажем для Arch Linux). Если в системе пакетов этого приложения нет, то нужно скачать архив с приложением по ссылке, распаковать в нужную директорию (скажем /usr/share/java/simian/), после этого в PATH-директории (скажем /usr/bin) сделать файл «simian», содержащий скрипт запуска приложения:

#!/bin/bash
java -jar /usr/share/java/simian/simian.jar $@

В заключение данному файлу нужно задать права на выполнение.
2. Добавление внешней утилиты (external tool) в QtCreator
На вкладке External Tools раздела настроек Environment добавляем новую категорию и утилиту (Add Category, Add Tool), пример показан на скриншоте ниже.

В поле Executable указываем путь к исполняемому файлу программы (либо в случае с Unix-based системами вписываем «simian»), в поле Arguments указываем доводы запуска:

-failOnDuplication- -includes=**/*.cpp -includes=**/*.h -includes=*.cpp -includes=*.h

В поле Working Directory указываем образец директории нынешнего плана:

%{CurrentProject:Path}

С данными настройками утилита будет искать повторы во всех файлах с растяжением .cpp и .h в директории плана и всех поддиректориях.
Сейчас в меню External Tools возникла новая вкладка.

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

-reportDuplicateText

, то также будет выводиться дублируемый код. С полным списком опций запуска simian дозволено ознакомиться по адресу.
Но данное решение автоматизировало лишь запуск утилиты. Открывать файлы с повторами и искать надобные строки доводилось «в ручную». А хотелось, Дабы было как в других плагинах и IDE: двойственный щелчок по записи открывает файл исходника, выполняется переход на необходимую строку и текст повтора подсвечивается. Тогда было принято решение написать плагин.

2 Плагин поиска дублирующегося кода для QtCreator

Навыка разработки плагинов у меня не было и необходимую поддержка оказали статьи TODO Plugin для QtCreator и Система растяжений Qt Creator. Код для открытия файла в редакторе и перехода на необходимую строчку я обнаружил именно в исходниках плагина ToDo. Вообще с документацией по написанию плагинов для QtCreator дела обстоят довольно нехорошо. Пришлось касательно длинно искать решение задачи подсветки текста повтора. Результат обнаружил в начальных текстах плагина для оценки степени покрытия тестами Code Coverage. На мой взор, в деле написания плагина для QtCreator основное подспорье – это постижение исходников. В галерее плагинов на сайте Qt Project собраны ссылки на множество плагинов сторонних разработчиков. Непонятные вопросы также дозволено задать в irc канале #qt-creator на freenode.net. Если у вас появится идея плагина — непременно испробуйте его реализовать. Написание плагинов — это интересное занятие.

2.1 Сборка и установка плагина
2.1.1 Приобретение исходников и сборка QtCreator

Исходники QtCreator нам потребуются для сборки как самой IDE, так и плагинов для нее. Также предполагается, что у вас теснее установлен Qt, QtCreator и все нужные системные переменные настроены. Процедура приобретения исходников и сборки детально описана в статье Building Qt Creator from git. Позже удачного выполнения этого этапа у нас будут 2 директории: qt-creator, в которой расположены исходники и qt-creator-build, где находится собранный QtCreator.
Малое отхождение:
Таким образом у нас сейчас будет два QtCreator’a — один из состава установленного дистрибутива Qt (будем называть его «установленный») и один — собранный из исходников (назовем его «собранный»). Сразу оговорюсь, что в последующем плагин мы будем собирать именно для «собранного» creator’а. Дело в том, что если попытаться применять бинарные файлы плагина, скомпиллированного для больше новой версии QtCreator (полученной из исходников), то возникнет оплошность разрешения зависимостей.

В данном случае плагины Core и ProjectExplorer обязаны иметь ту же версию, что и QtCreator. Также сдедует обратить внимание на то, что QtCreator из дистрибутива собран с применением компиллятора Microsoft Visual Studio C compiller. Таким образом, Дабы собрать плагин для QtCreator, установленный совместно с Qt нужно получить исходники QtCreator определенной ревизии (строка FromRevision в окне About), также нужно присутствие версии Qt для MSVC. Я не буду в последующем описывать сборку под QtCreator, собранный компилятором MSVC и полагаю, что вы соберете (и в последующем будете применять в работе) самую свежую версию QtCreator из исходников. Если вы займетесь разработкой плагина, то вам тоже потребуется две сборки QtCreator (не непременно различные как выше, дозволено и две идентичных). В одной разрабатывается и собирается плагин а в иную он копируется и тестируется. Хинт: при разработке плагина, когда он соберется в появившемся окне выберите exe файл QtCreatora, в котором тестируется плагин, тогда QtCreator с плагином будет запускаться механически.

Однако, давайте возвратимся к плагину.

2.1.2 Приобретение исходников и сборка плагина Simian

Исходники разработанного плагина помещены на Sourceforge.net: QtCreator Similarity Analysis Plugin. Дозволено скачать архив с исходниками либо загрузить их с git-репозитория. Позже этого открываем план (simian.pro) в «установленном» QtCreator. В файле плана simian.pro потребуется изменить две строчки, указывающих путь к директории с исходниками и сборкой QtCreator на вашем компьютере:

## set the QTC_SOURCE environment variable to override the setting here
QTCREATOR_SOURCES = $$(QTC_SOURCE)
isEmpty(QTCREATOR_SOURCES):QTCREATOR_SOURCES=D:/Sources/QtCreator/qt-creator

## set the QTC_BUILD environment variable to override the setting here
IDE_BUILD_TREE = $$(QTC_BUILD)
isEmpty(IDE_BUILD_TREE):IDE_BUILD_TREE=D:/Sources/QtCreator/qt-creator-build

Альтернативный метод: установить системные переменные QTC_SOURCE и QTC_BUILD.

Собираем релизную версию плагина (Ctrl R), которая позже удачного этапа сборки копируется в

D:\Sources\QtCreator\qt-creator-build\lib\qtcreator\plugins\SnaSoftware

За копирование плагина именно в папку SnaSoftware отвечает дальнейшая строка в файле плана simian.pro

PROVIDER = SnaSoftware

В данном случае «Provider» имеет значение «подрядчик плагина». Если эту строчку закомментировать, то плагины будут копироваться в директорию «QtProject», что на мой взор не вовсе верно (в данной директории располагаются плагины, являющиеся частью QtCreator). Следственно в качестве значения PROVIDERиспользован мой никнейм на Прогре.
Сейчас дозволено пробовать плагин в деле.

2.2 Применение плагина
2.2.1 Изначальная настройка и запуск

Перед тем как натравить плагин на папки с вашими планами в настройках нужно указать путь к исполняемому файлу утилиты simian.
В Windows для этого нужно в диалоговом окне настроек (Tools->Options) в появившемся разделе Simianпредпочесть exe-файл утилиты с поддержкой диалога выбора файлов (кнопка Browse… в области Simian Executable Path. Вы также можете внести путь к директории с программой simian в системную переменную PATH, тогда в поле Executable дозволено легко указать имя exe-файла без растяжения (скажем для комфорта запуска в консоли я переименовал файл simian-2.3.34.exe в simian.exe, включил путь к программе в переменную PATH и в текстовом поле использую текст simian).
Для Unix-based систем, если вы теснее исполнили шаги по установке утилиты simian из раздела 1, вам также потребуется легко вписать название исполняемого скрипта «simian» (напомню, что он должен находиться в PATH-директории).
Позже сохранения настроек (кнопка Ok либо Apply) плагин дозволено применять. Для этого нужно открыть присутствующий либо сделать новейший план и запустить поиск повторов. Запуск поиска выполняется либо выбором появившегося позже установки плагина пункта меню Tools->Find similarities либо нажатием кнопки на вкладке панели Simian. Если не вносить изменений в настройках приложения, то оно запускается с настройками по-умолчанию.
Для проверки работы плагина сотворим новейший GUI Qt-план, в заголовочном файле которого объявим 2 функции и в их реализации запишем идентичный код, состоящий, из 6-ти (так как по-умолчанию значение настройки Threshold равно 6) идентичных строчек кода, скажем:

    int one;
    int two;
    int three;
    int four;
    int five;
    int six;
    int seven;

Сейчас предпочтем в меню QtCreator действие Tools->Find similarities (при этом сделанный план должен быть энергичным). Позже обзора исходников появится панель итога итогов работы плагина (Output Panel), в котором будут ссылки на файлы, в которых найдены повторы, кликнув по которым данные файлы будут открываться в редакторе, а фрагменты повторов выделаться цветом:

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

2.2.2 Расширенная настройка

Настройки поиска дублирующегося кода находятся в группе Simian Behaviour:

При изменении настроек в диалоговом окне Options и дальнейшем их сохранении в директории нынешнего плана создается текстовый файл настроек simian.ini. Если для нынешнего плана применяются настройки по-умолчанию, то данный файл не создается. Такой подход хоть и добавляет один ненужный файл в директорию плана, но решают задачу переносимости настроек простым копированием (при дальнейшем открытии окна настроие генерации html файла с отчетом по итогам инспекции.
4. Добавление других утилит поиска дублирующегося кода с вероятностью выбора используемых.

Все пожелания, примечания и сообщения об ошибках умоляю писать либо в системе тикетов, либо в разделе форума Feature Request/Bug Report.

 

Источник: programmingmaster.ru

 

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB