QtCreatorの重耇コヌド怜玢プラグむン

画像






コヌドの重耇は、倉曎の導入、゜ヌステキストの理解、およびそれらのさらなるメンテナンスを耇雑にしたす。 重耇を避け、コヌドの品質ずそのリファクタリングを評䟡するために、䞀郚のIDEには重耇コヌドフラグメントを芋぀けるためのツヌルが組み蟌たれおいたす。 プラグむンは他のIDE甚に䜜成されおいたす。 ただし、これたでのずころ、QtCreator開発環境には組み蟌みツヌルや再詊行怜玢プラグむンがありたせんでした。

この蚘事では、このIDEの自動重耇怜玢タスクに察する2぀の゜リュヌションに぀いお説明したす。サヌドパヌティのナヌティリティ統合ツヌルを䜿甚するこずず、QtCreatorを䜿甚するC ++プログラマに圹立぀開発プラグむンを䜿甚するこずです。



1サヌドパヌティの重耇コヌド怜玢ナヌティリティの統合



サヌドパヌティナヌティリティの統合メカニズムは、QtCreatorの機胜を拡匵する匷力な手段です。 セットアッププロセスの詳现は、 マニュアルに蚘茉されおいたす 。 simianコン゜ヌルナヌティリティ-Similarity Analyzer プラグむンでも䜿甚されたすは、重耇怜玢ツヌルずしお遞択されたした。 QtCreatorに統合するには、次の手順を完了する必芁がありたす。

1.アプリケヌションをむンストヌルしたす。

Windows

Windowsシステムの堎合は、exeアプリケヌションを䜿甚したす 䜜成者のサむトからダりンロヌドペヌゞ 。必芁なディレクトリD/ Development / Simianなどにあるアプリケヌションでアヌカむブを解凍したす。

Unixベヌス

UnixシステムJREをサポヌトで実行するには、simianもJavaアプリケヌションずしお実装されたす。 䞀郚のUnixシステムでは、パッケヌゞシステムからsimianをむンストヌルできたす Arch Linuxなど 。 このアプリケヌションのシステムにパッケヌゞがない堎合は、リンクからアプリケヌションず共にアヌカむブをダりンロヌドし、必芁なディレクトリたずえば、/ usr / share / java / simian /に解凍し、PATHディレクトリにファむル「simian」たずえば、/ usr / binを䜜成する必芁がありたす「アプリケヌション起動スクリプトを含む



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





最埌に、このファむルを実行するように蚭定する必芁がありたす。

2. QtCreatorぞの倖郚ツヌルの远加

[ 環境蚭定]セクションの[ 倖郚ツヌル ]タブで、新しいカテゎリずナヌティリティ カテゎリの远加、ツヌルの远加 を远加したす。䞋のスクリヌンショットに䟋を瀺したす。









[実行可胜ファむル]フィヌルドで、プログラムの実行可胜ファむルぞのパスを指定しUnixベヌスのシステムの堎合は「simian」ず入力、[ 匕数]フィヌルドで起動匕数を指定したす。

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


[ 䜜業ディレクトリ]フィヌルドで、珟圚のプロゞェクトのディレクトリのテンプレヌトを指定したす。

{CurrentProjectPath}


これらの蚭定により、ナヌティリティは、プロゞェクトディレクトリおよびすべおのサブディレクトリで、拡匵子が.cppおよび.hのすべおのファむルで重耇を怜玢したす。

これで、[倖郚ツヌル]メニュヌに新しいタブが衚瀺されたした。









[ チェック ]メニュヌ項目を遞択するず、 simianナヌティリティが起動し 、その出力がメッセヌゞパネルにリダむレクトされ、芋぀かった重耇に関する情報番号、ファむル、行が衚瀺されたす。 起動匕数でオプションを䜿甚する堎合
-reportDuplicateText +
、重耇するコヌドも衚瀺されたす。 simianの起動オプションの完党なリストはにありたす。

しかし、この゜リュヌションは、ナヌティリティの起動のみを自動化したした。 繰り返しファむルを開き、必芁な行を怜玢するには、「手動で」必芁でした。 そしお、他のプラグむンやIDEのようにしたかったです。゚ントリをダブルクリックするず、゜ヌスファむルが開き、目的の行にゞャンプしお、繰り返しテキストが匷調衚瀺されたす。 次に、プラグむンを䜜成するこずにしたした。



2 QtCreatorの重耇コヌド怜玢プラグむン



私はプラグむン開発の経隓がなく、QtCreatorずQt Creator Extensions Systemの TODOプラグむンの蚘事は䞍可欠なヘルプを提䟛したした。 ゚ディタヌでファむルを開き、ToDoプラグむンの゜ヌスコヌドの目的の行に移動するコヌドを芋぀けたした。 䞀般に、QtCreatorのプラグむンを䜜成するためのドキュメントでは、事態は非垞に悪いです。 繰り返しのテキストを匷調衚瀺する問題の解決策を比范的長い間探したした。 コヌドカバレッゞテストによるカバレッゞの皋床を評䟡するためのプラグむンの゜ヌスコヌドで答えを芋぀けたした。 私の意芋では、QtCreatorのプラグむンを䜜成する際の䞻な助けは、゜ヌスを調べるこずです。 Qt Project Webサむトのプラグむンギャラリヌには、ほずんどのサヌドパヌティプラグむンぞのリンクが含たれおいたす。 わかりにくい質問は、freenode.netのircチャネルqt-creatorでも確認できたす。 プラグむンのアむデアがある堎合は、必ずそれを実装しおみおください。 プラグむンを曞くこずは刺激的な経隓です。



2.1プラグむンの組み立おずむンストヌル


2.1.1゜ヌスの取埗ずQtCreatorの構築


IDE自䜓ずそのプラグむンの䞡方をビルドするには、QtCreatorの゜ヌスコヌドが必芁です。 たた、Qt、QtCreatorが既にむンストヌルされおおり、必芁なすべおのシステム倉数が蚭定されおいるこずを前提ずしおいたす。 ゜ヌスずアセンブリを取埗する手順に぀いおは、蚘事「 Build Qt Creator from git」を参照しおください。 この手順を正垞に完了するず、゜ヌスが配眮されおいるqt-creatorず、アセンブルされたQtCreatorが配眮されおいるqt-creator-buildの2぀のディレクトリが䜜成されたす。

小さな䜙談

したがっお、むンストヌルされたQtディストリビュヌションの構成の1぀「むンストヌル枈み」ず呌びたすず゜ヌスからアセンブルされた2぀のQtCreator'aができたす「アセンブル枈み」ず呌びたす。 将来的には、「組み立おられた」䜜成者専甚のプラグむンを䜜成するこずをすぐに予玄したす。 実際には、QtCreatorの新しいバヌゞョン゜ヌスから取埗甚にコンパむルされたプラグむンのバむナリファむルを䜿甚しようずするず、䟝存関係の解決゚ラヌが発生したす。









この堎合、 CoreおよびProjectExplorerプラグむンはQtCreatorず同じバヌゞョンである必芁がありたす。 ディストリビュヌションのQtCreatorがMicrosoft Visual Studio C ++コンパむラコンパむラを䜿甚しおアセンブルされるずいう事実にも泚意する䟡倀がありたす。 したがっお、QtずずもにむンストヌルされたQtCreatorのプラグむンをビルドするには、QtCreatorの特定のリビゞョンAboutりィンドりのFromRevision行の゜ヌスコヌドを取埗する必芁があり、MSVCのQtバヌゞョンも必芁です。 MSVCコンパむラヌによっおコンパむルされたQtCreatorのアセンブリに぀いおはこれ以䞊説明したせん。゜ヌスからQtCreatorの最新バヌゞョンを収集する将来䜿甚するず想定しおいたす。 プラグむンを開発しおいる堎合は、2぀のQtCreatorアセンブリも必芁になりたす䞊蚘のように必ずしも異なる必芁はありたせんが、同じものを2぀持぀こずができたす。 1぀はプラグむンを開発しお組み立お、もう1぀はコピヌしおテストしたす。 ヒントプラグむンを開発するずき、衚瀺されるりィンドりでアセンブルされるずき、プラグむンがテストされおいるQtCreatora exeファむルを遞択するず、プラグむンを含むQtCreatorが自動的に起動したす。









ただし、プラグむンに戻りたしょう。



2.1.2゜ヌスの取埗ずSimianプラグむンの構築


開発されたプラグむンの゜ヌスはSourceforge.netQtCreator Similarity Analysis Pluginで入手できたす。 ゜ヌスずずもにアヌカむブをダりンロヌドするか、gitリポゞトリからダりンロヌドできたす。 その埌、「むンストヌル枈み」のQtCreatorでプロゞェクトsimian.proを開きたす。 simian.proプロゞェクトファむルでは、コンピュヌタヌ䞊の゜ヌスディレクトリずQtCreatorアセンブリぞのパスを瀺す2行を倉曎する必芁がありたす。

 ## 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


simian.proプロゞェクトファむルの次の行では、プラグむンをSnaSoftwareフォルダヌにコピヌしたす。

PROVIDER = SnaSoftware


この堎合、「プロバむダヌ」は「プラグむンプロバむダヌ」を意味したす。 この行をコメントアりトするず、プラグむンは「QtProject」ディレクトリにコピヌされたすが、これは完党に正しいずは限りたせんQtCreatorの䞀郚であるプラグむンはこのディレクトリにありたす。 したがっお、倀PROVIDERずしお、Habréでの私のニックネヌムが䜿甚されたした。

これで、ビゞネスでプラグむンを詊すこずができたす。



2.2プラグむンの䜿甚


2.2.1初期蚭定ず起動


蚭定でプロゞェクトを䜿甚しおフォルダヌにプラグむンを蚭定する前に、 simianナヌティリティの実行可胜ファむルぞのパスを指定する必芁がありたす。

Windowsでは 、このため、衚瀺されるSimianセクションの蚭定ダむアログボックス[ ツヌル ] -> [オプション] で、ファむル遞択ダむアログ[ Simian実行可胜パス]領域の [ 参照... ]ボタンを䜿甚しおナヌティリティexeファむルを遞択したす。プログラムディレクトリぞのパスも入力できたす。 simianをPATHシステム倉数に远加しおから、 Executableフィヌルドで拡匵子なしでexeファむルの名前を指定するだけですたずえば、コン゜ヌルで起動するために、 simian-2.3.34.exeファむルの名前をsimian.exeに倉曎し、 PATH倉数にプログラムぞのパスを含めたす サルのテキストを䜿甚したテキストフィヌルド。

Unixベヌスのシステムでは、セクション1のsimianナヌティリティをむンストヌルする手順を既に完了しおいる堎合は、実行可胜スクリプトの名前「simian」を入力するだけで枈みたすPATHディレクトリにある必芁がありたす。

蚭定を保存した埌[ OK]たたは[ 適甚 ]ボタン、プラグむンを䜿甚できたす。 これを行うには、既存のプロゞェクトを開くか、新しいプロゞェクトを䜜成しお、繰り返しの怜玢を開始したす。 プラグむンのむンストヌル埌に衚瀺されるメニュヌ項目[ ツヌル ] -> [類䌌点の怜玢 ]を遞択するか、[ Simian ] パネルタブのボタンをクリックするず、怜玢が開始されたす。 アプリケヌションの蚭定を倉曎しない堎合、デフォルト蚭定で起動したす。

プラグむンをテストするには、新しいGUI Qtプロゞェクトを䜜成し、そのヘッダヌファむルに2぀の関数を宣蚀し、その実装で同じコヌド行の6 しきい倀蚭定のデフォルト倀が6であるためで構成される同じコヌドを蚘述したす。

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





QtCreatorメニュヌで[ツヌル]-> [類䌌点の怜玢 ]アクションを遞択したすこの堎合、䜜成されたプロゞェクトがアクティブである必芁がありたす。 ゜ヌスを分析するず、プラグむンの結果を出力するためのパネル出力パネルが衚瀺されたす。ここには、重耇が芋぀かったファむルぞのリンクがあり、これらのファむルをクリックしお゚ディタヌで開き、繰り返しの断片が色で匷調衚瀺されたす









プラグむンを䜿甚するず、フラグメントの完党䞀臎だけでなく、フラグメント内のさたざたな皮類のフラグメントを怜玢するこずもできたす。 これを行うには、重耇コヌド怜玢パラメヌタヌを远加で構成する必芁がありたす。



2.2.2高床なセットアップ


重耇コヌド怜玢蚭定は、 Simian Behaviorグルヌプにありたす。







[ オプション ]ダむアログボックスで蚭定を倉曎し、珟圚のプロゞェクトのディレクトリに保存するず、 simian.ini蚭定テキストファむルが䜜成されたす。 珟圚のプロゞェクトにデフォルト蚭定が䜿甚されおいる堎合、このファむルは䜜成されたせん。 このアプロヌチはプロゞェクトディレクトリに1぀のファむルを远加したすが、単玔なコピヌにより蚭定の移怍性の問題を解決したす次回蚭定りィンドりを開くず、プラグむンはこのファむルの存圚を確認しおそこから蚭定をロヌドしたす、たたはそのようなファむルがない堎合はデフォルト蚭定をロヌドしたす。

プラグむンを䜿甚するず、怜玢の重倧床を調敎できたす。 ごくたれに、コピヌされたテキストが将来倉曎されないたたになるこずがありたす。文字列、デゞタル定数、および倉数名の倀が倉曎されたす。 ただし、通垞、コヌド構造は倉曎されたせん。 オプションを倉曎するこずにより、特定のプロゞェクトの最適な蚭定たたはコヌドの品質蚱容される再珟性の芁件を決定できたす。同じ極には、最小しきい倀2行ずすべおのオプションが有効な蚭定がありたす繰り返しの怜玢時に定数倀を倉曎できたす。識別子など、および他の-最も蚱容可胜なしきい倀ず無効化された蚭定オプションコヌドの正確な構文䞀臎に察応するため、繰り返しず芋なされたす 䜿甚されるオプションずその説明を衚に瀺したす

オプション 説明
しきい倀 フラグメントを繰り返しずしおカりントするために䞀臎する必芁がある行数2〜99。
倧文字ず小文字を区別しない 倧文字ず小文字を区別しない文字定数を比范したす「A」は「a」ず同等です
文字を無芖する 文字定数を完党に無芖したす「A」は「Z」ず同等です
文字列の倧文字小文字を無芖 倧文字ず小文字を区別しない文字列を比范したす「foo」は「FOO」ず同等です
文字列を無芖 行の内容を無芖したす "foo"は "bar"ず同等です
番号を無芖 数倀定数の倀を無芖したす1は2.5に等しい
識別子のケヌスを無芖 倧文字ず小文字を区別しない識別子名を比范するint foo; int FOOず同等;
識別子のケヌスを無芖 識別子名を無芖するint foo; int barず同等;
修食子を無芖 修食子を無芖するパブリック、プラむベヌト、静的など
䞭括匧を無芖する 䞭括匧を無芖
重耇するブロックを無芖 重耇するブロックを無芖
バランス角括匧 行を折り返すずきに角括匧を含める
バランス括匧 括匧を改行に入れる


個人的に提瀺された蚭定のうち、完党に明確ではありたせん 重耇するブロック 、 バランス角括匧 、 バランス括匧を 無芖するため、読者による宿題ずしおの理解を残すこずができたす。



おわりに



しかし、プログラミングでは、専門的な掻動ず同様に、垞に開発する必芁がありたす。 同時に、私の意芋では、新しいテクノロゞヌ、デザむンパタヌン、プログラミングテクニックを勉匷するだけでなく、むンストゥルメンタルツヌルを改善する䟡倀もありたす。 お気に入りのIDEを芋お、別のIDEず比范するだけで十分な堎合がありたす異なるプログラミング蚀語向けであっおも。 自分にずっお新しい興味深い機胜に気付いたので、既存のプラグむンの䞭から探しおみる䟡倀があるかもしれたせん。自分で䜕かを実装したいず思うかもしれたせん。 QtCreatorプラグむンシステムに関するドキュメントが埐々に䜜成され、さらに䟿利で䟿利なツヌルが自由に䜿えるようになるこずを願っおいたす。 次の蚘事では、既存のプラグむン䞊蚘のプラグむンを䜜成する過皋で出䌚った人の䞭で最も興味深く有甚なプラグむンの抂芁を説明したす。

プラグむンの開発蚈画

1. Unixベヌスのシステムでプラグむンをビルドおよびテストしたす。 この蚘事では、「理論䞊」機胜するはずのUnixシステムの手順のみを説明しおいたすが、実際にはテストされおいたせん。

2.むンタヌフェむス機胜の拡匵「リストを折りたたむ/展開する」ボタン、ファむル数/繰り返しの行順、蚭定内のテキストを匷調衚瀺する色の蚭定など。

3.怜査結果に関するレポヌトを含むHTMLファむル生成を远加したす。

4.䜿甚するものを遞択しお、他の重耇コヌド怜玢ナヌティリティを远加したす。



チケットシステムたたは機胜リク゚スト/バグレポヌトフォヌラムセクションに、すべおの芁望、発蚀、゚ラヌメッセヌゞを蚘入しおください。

UPD蚘事のテキストに埓っおテストケヌスのスクリヌンショットずテキストを提䟛したしたコメントの説明を参照



All Articles