ReSharper 2019.1ヘルプ

Clang-Tidyインテグレーション

Clang-Tidy(英語)は、一般的なClangコンパイラに基づいた強力なオープンソースコード解析ツールです。典型的なプログラミングエラーのための広範な一連のコードチェックとそれに伴う修正が付属しています。

ReSharperはClang-Tidyとシームレスに統合します。つまり、ファイルを編集すると、ReSharperは別のプロセスとしてClang-Tidyをバックグラウンドで実行し、インスペクションの結果は他のReSharperのインスペクションと共に表示されます。保存されていないファイルは、現在のドキュメントのテキストを一時ファイルに保存し、Clang-Tidyにオンディスクバージョンではなく使用するように指示することで、透過的に処理されます。

Clang-Tidy インスペクション

Clang-TidyチェックとReSharper's インスペクションを区別するために、インスペクションメッセージに添付された正方形角括弧のチェックの名前を見ることができます:

Clang-Tidy checks in ReSharper

Clang-Tidyチェックからの診断に加えて、ReSharper はClang Static Analyzerからの診断とClangコンパイラ自体によって提供される警告も発行します。それらのすべてはあなたのニーズを満たすために調整することができる対応する設定可能な重大度レベルを持ちます。

一部のClang-Tidyは、重複したReSharperの組み込みインスペクションがデフォルトでオフになっていることを確認します。さらに、有効にするとClang-Tidyの速度が著しく低下するため、スタティックアナライザのすべてのチェックが無効になります。

組み込みのインスペクションと同様に、インスペクションコンテキストメニューを使用して 迅速にClang-Tidyチェックの重大度を変更するにすることも、コメントを介してそれを非表示にすることもできます。特定のチェックに関するオンラインドキュメントページを開く追加のアクションもあります。

ReSharper: Clang-Tidy inspection menu

Clang-Tidyの修正

ReSharperを使用すると、Clang-Tidyによって提供されている修正を、独自の組み込みクイックフィックスと同様に適用できます。他の一括修正と同様に、Clang-Tidy修正は個別に適用することも、特定の範囲 (ファイル、フォルダー、プロジェクト、またはソリューション) に適用することもできます。

デフォルトでは、ReSharperはコードスタイルを維持するためにClang-Tidy修正によって変更されたコードを再フォーマットします。この動作は、ReSharperオプションのコード編集 | C++ | Clang-TidyページのClang-Tidy修正を適用した後に変更されたコードを再フォーマットする設定で無効にできます。この設定を無効にすると、Clang-Tidy修正の実行が速くなります。

コードクリーンアップによるClang-Tidy修正の適用

Clang-Tidy修正は、コードの整理でも適用できます。組み込みのコードクリーンアッププロファイルにはClang-Tidyステージが含まれていないため、新しいカスタムプロファイルを作成してClang-Tidyチェックを選択する必要があります。これは、このプロファイルでコードクリーンアップを実行したときに実行されます。

ReSharper: Applying Clang-Tidy fixes with code cleanup

ReSharperオプションのコード・インスペクション | インスペクション重大度ページで、対応するインスペクションがオフになっていても、選択された修正は適用されます。一度に多くのチェックを有効にする場合は注意してください - コードのクリーンアップは特定のファイルに対してClang-Tidyを一度だけ実行するため、複数の修正が同じコードブロックに触れた場合、変更は互いに競合する可能性があります。

Clang-Tidyの設定

ReSharperは独自のClang-Tidy設定を書いていないため、ユーザーが用意したものを選ぶことができます。Clang-Tidyは、ソースファイルの最も近い親ディレクトリーにある .clang-tidy ファイルから各ソースファイルの設定を読み込もうとします。ここでのソースファイル(ReSharper インスペクションの残りの部分と同様)は、解析が実行されている場合は .cpp ファイルそのもの、または解析がヘッダファイルに対して実行された場合はヘッダを含むランダムな .cpp ファイルです。または、ReSharperオプションのコード編集 | C++ | Clang-TidyページでClang-Tidy設定設定を使用して、-config コマンドラインオプションを使用してClang-Tidyにカスタム設定の文字列を渡すことができます。

-checks コマンドラインオプションは、有効なチェックのリストをClang-Tidyに渡すために使用されます。Clang-Tidyから読み込まれたチェックオプションの値に追加されます。 -checks 引数を作成するために、ReSharperは、ReSharperオプションのコード編集 | C++ | Clang-Tidyページで有効/無効Clang-Tidyチェックのリスト設定の値を取得し、コード・インスペクション | インスペクション重大度オプションページで無効になっているチェックの名前を付加します。

デフォルトでは、ReSharperはClang-tidy 8の組み込みバイナリを使用します。ReSharperに他のClang-tidyバイナリ(バージョン7以上)を使用させることができます。これを行うには、ReSharperオプションのコード編集 | C++ | Clang-Tidyページの外付けclang-tidyを使用にパスを指定します。

必要に応じて、Ctrl+Shift+Alt+9 を押すか、ステータスインジケータのコンテキストメニューのClang-Tidy分析を有効にするトグルを使用して、現在の文書でClang-Tidy分析を無効にすることもできます。

Clang-Tidy統合の限界

  • UTF-16またはUTF-32エンコーディングを使用するファイルはClangによって読み取られないため、現時点ではClang-Tidyではサポートされていません。

  • 時々Clang-Tidyがあなたのコードでクラッシュするかもしれず、Windowsはあなたに“プロセスは動作を停止しました”というメッセージを表示するでしょう。この場合、ReSharperオプションのコード編集 | C++ | Clang-Tidyページで現在のソリューションのClang-Tidy統合を無効にします。

  • カスタムClang-tidyバイナリ(ReSharperオプションのコード編集 | C++ | Clang-Tidyページの外付けclang-tidyを使用)を使用している場合は、バージョン7以降のみを使用できます。

最終更新日: 2019年6月7日

関連事項

関連ページ:

コード・インスペクション

ReSharperはすべてのサポートされている言語で2500コードインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルで設計時にコードの問題を検出して強調表示するため、および/または特定の範囲内ですべてのコードの問題を見つけるために使用されます。エディターで強調表示さ...

C++のコードインスペクション

C++において、ReSharper 2019.1は、コードインスペクション二種類の提供:248インスペクションそのような破壊等構文、未解決のシンボル、コンパイラエラー、(設定またはこれらインスペクションのいずれかを無効にすることができない)、及び1192プロプライエタリコードインスペクションとしてエ...

コードインスペクションの設定

コード注釈を使用して、ReSharperがコードをインスペクションする方法をカスタマイズすることもできます。デザインタイムコードインスペクションの切り替え:デフォルトでは、ReSharperはサポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、...

コードの問題のクイックフィックス

ReSharperを使用すると、設計時に検出されたほとんどのコード問題を即座に修復できます。強調表示されたコードの問題で を押して、問題を解決したり最適以下のコードを改善したりするための適切な方法を選択するのと同じくらい簡単です。このトピックの内容:クイックフィックスの適用、Visual Stud...

スコープの修正

ほとんどのクイック・フィックスは現在の問題をキャレットで修正することができますが、その一部(例:未使用のディレクティブを削除する、フィールドを読み取り専用にする、冗長なキャストの除去など)は、現在のファイル、現在のプロジェクト、またはソリューション全体「Fix in scope」と同様に、より広い範...

コードの書式設定ルールの管理と適用

ReSharper | 編集 | コードの再フォーマットコードスタイルの重要な側面は、コードをどのように整形するか、すなわち、空白と空白を使用してコードブロックを整理し分割する方法、インデント用のタブを使用するかどうか、使用方法、長い行を折り返すかどうかなどです。多数のReSharperコードフォー...