ReSharper 2019.3ヘルプ

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オプション(Alt+R,,O)のコード編集 | C++ | Clang-TidyページのClang-Tidy修正を適用した後に変更されたコードを再フォーマットする設定を介して無効にできます。この設定を無効にすると、Clang-Tidy修正の実行が高速化されます。

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

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

ReSharper: Applying Clang-Tidy fixes with code cleanup

ReSharperオプション(Alt+R,,O)のコード・インスペクション | インスペクション重大度ページで対応するインスペクションがオフになっている場合でも、選択された修正が適用されます。一度に多くのチェックを有効にする場合は注意してください。コードクリーンアップは、指定されたファイルに対してClang-Tidyを1回だけ実行します。

Clang-Tidyの設定

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

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

デフォルトでは、ReSharperはClang-tidy 8の組み込みバイナリを使用します。ReSharperに他のClang-tidyバイナリ(バージョン7以降)を使用させることができます。そのためには、ReSharperオプション(Alt+R,,O)のコード編集 | 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オプション(Alt+R,,O)のコード編集 | C++ | Clang-Tidyページで現在のソリューションのClang-Tidy統合を無効にします。

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

最終更新日: 2019年12月12日

関連ページ:

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

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

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

C++では、ReSharper 2019.3は、コードインスペクションの2種類用意されています。(設定することはできませんまたはこれらインスペクションのいずれかを無効にする)and1250独自のコードインスペクションを 266インスペクションな壊れた構文、未解決のシンボル、コンパイルエラー、などとい...

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

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

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

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

スコープの修正

ほとんどのクイックフィックスは、キャレットで現在の課題を修正できますが、中には (たとえば、未使用のディレクティブを削除する、フィールドを読み取り専用にする、冗長なキャストの除去など)、現在のファイル、現在のプロジェクト、またはソリューション全体など、より大きな範囲で課題を自動的に見つけて修正できる...

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

コードスタイルの重要な点は、コードの書式設定方法、つまり、空白と空白行を使用してコードブロックを配置および分離する方法、インデントにタブを使用するかどうか、および使用する方法。多数のReSharperコードフォーマットルールには、デフォルトのVisual Studioフォーマットオプションと多数のベ...