JetBrains Rider 2024.1 ヘルプ

C++ でのコード分析

JetBrains Rider のコード解析の主な機能は、C++ でもサポートされています。これらの機能の詳細については、コード解析の該当するトピックを参照してください。このセクションのサブジェクトでは、フィーチャマトリックスを見つけて、C++ で正確にサポートされているものを確認することもできます。

このトピックでは、C++ でコード解析機能を使用する例をいくつか見てみましょう。

デフォルトでは、コードインスペクションクイックフィックスコンテキストアクションはすべてのソリューションファイルで使用できます。必要に応じて、JetBrains Rider 設定 Ctrl+Alt+S言語 & フレームワーク | C++ | インスペクションページにあるソリューション外部のファイルでインスペクション、クイックフィックス、コンテキストアクションを有効にするチェックボックスを使用して、ソリューションから参照される外部ファイルでこれらの機能を有効にすることができます。

コードインスペクション

JetBrains Rider の静的コード分析は、C++ ファイル内のほとんどのコンパイラーエラーと一部のコンパイラー警告を検出します。

さらに、実行時に見つかる他のコードの問題も検出します。例: コンストラクターで仮想メソッドを使用すると、この StackOverflow の質問(英語)で説明したように予期しない動作が発生します。JetBrains Rider は、コンパイルする前にこの問題を指摘しています。

JetBrains Rider warning. virtual method in constructor

分析は、コードインスペクション現在の文書または指定された範囲に適用することによって実行されます

Code inspection results in an UE project

インスペクション JetBrains Rider が提供するコードの種類を調べるには、JetBrains Rider C++ コードの完全なリストインスペクションを調べましょう。

コードインスペクションの詳細については、「コードインスペクション設定を構成する」を参照してください。

特定のインスペクションをすばやくオフにするか、すべてのインスペクションを非表示にするには、インスペクションコンテキストメニューを使用します。

Disable inspections in C++

JetBrains Rider 固有の属性を使用して一部のインスペクションを抑制することもできます。詳細については、属性を使用してインスペクションを調整するセクションを参照してください。

クイックフィックス

クイックフィックスを使用すると、コードインスペクションで見つかったコードの問題のほとんどを自動的に解決することができます。コードの問題に対して 1 つ以上のクイックフィックスが利用可能な場合は、キャレットがハイライトされたコード上にあるときに対応するアクションインジケータが表示されます。目的の修正を確認して適用するには、Alt+Enter を押します。

JetBrains Rider は、C++ に 290 を超えるクイックフィックスを提供します。ここではいくつかの例を示します。

不足している #include ディレクティブを追加する

標準ライブラリまたはソリューションの他の場所で定義されているシンボルを使用する場合、JetBrains Rider は、欠落している #include ディレクティブを自動的に追加できます。

JetBrains Rider: helps adding missing C++ includes automatically

JetBrains Rider 設定 Ctrl+Alt+S言語 & フレームワーク | C++ | インスペクションページにあるインポートアクションのポップアップを表示するチェックボックスを使用して、ポップアップを無効にすることができます。

チェックボックスが選択されていない場合、Alt+Enter を押すと、対応するアクションがアクションリストで使用可能になります。

前方宣言を追加する

JetBrains Rider は、未解決のシンボルの前方宣言も生成できます。

JetBrains Rider: Add forward declaration quick-fix

[[maybe_unused]] を追加

[[maybe_unused]] 属性を追加して、未使用の名前またはエンティティに関するコンパイラーからの警告を回避できます。キャレットが未使用のエンティティ上にある場合、次のクイックフィックスが利用可能になります:

Add [[maybe_unused]]

また、別のコンテキストアクションは、UNREFERENCED_PARAMETER および Q_UNUSED の使用を [[maybe_unused]] 属性に置き換えるのに役立ちます。

add [[maybe_unused]]

キャプチャーリストに追加

ローカル変数がラムダ本体の内部で使用されているが、このラムダによってキャプチャーされていない場合、JetBrains Rider はキャプチャーリストを更新するためのクイックフィックスを提案します。値または参照によって変数または this をキャプチャーするか、使用されているすべての自動変数を暗黙的にキャプチャーできます。

JetBrains Rider C++: quick-fix to update the capture list

戻り値の型を変更する

関数の戻り値の型が実際に返す値と一致しない場合、JetBrains Rider を使用すると、戻り値の型をすばやく修正できます。

JetBrains Rider helps fixing types of variables and fields

変数型の変更

変数またはフィールドの指定された型が割り当てられた値と一致しない場合、JetBrains Rider は宣言で正しい型を使用するためのクイックフィックスを提供します。

JetBrains Rider helps fixing types of variables and fields

宣言を作成する

C++ ファイルのメンバー関数のヘッダーファイルに宣言がない場合、JetBrains Rider は実装のシグネチャーに従って欠落している宣言を作成できます。

Generating declaration for C++ class member

使用箇所から作成

宣言されていないシンボルを使用する場合、JetBrains Rider は、使用箇所に基づいてシンボルを作成するための 1 つ以上のクイックフィックスを提案します。

Generating C++ field from usage

メンバーを初期化する

JetBrains Rider が初期化されていない型メンバーを検出した場合は、1 回の修正ですべてのメンバーを初期化することをお勧めします。この修正プログラムのサブメニューを使用して、特定のメンバーの初期化を生成することもできます。

JetBrains Rider C++: quick-fix to initialize members

変数の初期化

JetBrains Rider は、初期化されていない変数を検出し、デフォルト値で初期化できます。

JetBrains Rider helps initialize variables in C++

未使用の #include ディレクティブを削除する

未使用の #include はすべてハイライト表示され、クイックフィックスで簡単に削除できます:

Removing unused #include directives

未使用のラムダキャプチャーを削除する

ローカル変数がラムダによってキャプチャーされてもラムダ本体内で使用されない場合、JetBrains Rider は通知し、未使用のキャプチャーを削除するように提案します。

Remove unused lambda capture

ドット(.)を矢印(- >)に置き換えます。逆も同様です

ドット . 演算子が誤ってポインターに適用された場合、JetBrains Rider はそれを矢印 -> 演算子に置き換えるのに役立ちます。

JetBrains Rider helps replacing the dot operator with arrow

逆のクイックフィックスも利用できます:

JetBrains Rider helps replacing the arrow operator with the dot

ラムダで明示的なテンプレートパラメーターを使用する

JetBrains Rider は、ラムダが新しい C++20 テンプレート構文を使用するように書き換えられる時期を検出します。

Use explicit template parameters in lambda

パラメーターの型が右辺値参照の場合、その型を直接 std::forward に渡すことができます。この場合、使い慣れた完全な転送構文を使用できます。

perfect forwarding syntax

static_cast を使用

JetBrains Rider は、static_cast を好むべきケースを検出し、コードの更新を支援します。

  • C++ キャストの代わりに使用される関数型のキャスト:

    Functional-style cast used instead of a C++ cast
  • void* にキャストするときに、static_cast の代わりに reinterpret_cast が使用されます。

    reinterpret_cast used instead of a static_cast when casting to void*

属性を使用してインスペクションを調整する

JetBrains Rider 固有の属性をソースコードのシンボルに追加して、JetBrains Rider がソリューションをより高い精度とインサイトで分析できるようにすることができます。JetBrains Rider では、カスタム属性 [[jetbrains::format]][[jetbrains::guard]][jetbrains::pass_by_value]][[jetbrains::has_side_effects]] を使用できます。

[[jetbrains::format]] 属性を使用すると、カスタム printf -like 関数の形式インスペクションを有効にすることができ、[[gnu::format]] と同様に機能します。

[[jetbrains::format]]

[[jetbrains::pass_by_value]] 属性を使用すると、「定数参照による値の受け渡し」インスペクションを抑制できます。コメントでインスペクションを無効にする代わりに抑制属性を使用するのはなぜですか ? 特定のクラスまたは構造体に対する警告を表示したくない場合は、いつでも Alt+Enter メニューからインスペクション: … | コメントで一度無効にするを選択して、現在の行またはファイルにインスペクションを抑制するコメントを追加できます。次に、すべてのクラスの使用に対しても抑制コメントを追加する必要があります。このような場合、クラス宣言で抑制属性を 1 回指定する方がはるかに簡単です。

[[jetbrains::pass_by_value]]

[[jetbrains::guard]] 属性を使用すると、「ローカル変数は使用されない」インスペクションを抑制できます。クラスにこの属性をマークすると、そのクラスがコンストラクターで重要な作業を実行することを JetBrains Rider に知らせます。

template<class Mutex> class [[jetbrains::guard]] my_lock_guard { explicit my_lock_guard(Mutex &); };

[[jetbrains::has_side_effects]] 属性を使用すると、operator= に副作用があるとしてマークを付け、「割り当てられた値は使用されない」インスペクションを抑制できます。

struct A { A& operator = (int); [[jetbrains::has_side_effects]] A& operator = (float); }; void foo(A a) { a = 3; // warning "Assigned value is never used" a = 3.f; // no warnings here a = A(); // warning "Assigned value is never used" }

JetBrains Rider 属性を外部ライブラリからライブラリクラスに適用する必要がある場合は、代わりに前方クラス宣言でその属性を使用できます: class [[jetbrains::pass_by_value]] my_class;

コンパイラーが不明な属性に関する警告を表示した場合は、__JETBRAINS_IDE__ マクロまたは __RESHARPER__ マクロを使用して宣言を保護できます。

#ifdef __JETBRAINS_IDE__ class [[jetbrains::pass_by_value]] my_class; #endif

JetBrains Rider に特定のコードを無視させる

ソリューションのコードの一部をコード分析、ナビゲーション、その他の機能から除外するために、JetBrains Rider では特定のファイル、フォルダー、ファイルマスクをさまざまな方法で無視するを使用できます。

関連ページ:

コード解析

JetBrains Rider は、エディター内の単一のステートメントから、ソリューション全体のアーキテクチャまで、さまざまなレベルのコードを分析できます。コードの問題を見つける:JetBrains Rider は、C#、VB.NET、XAML、XML、ASP.NET、ASP.NET MVC、Razor、JavaScript、TypeScript、HTML、CSS、ResX で 2500 を超えるコードインスペクションを適用することにより、静的コード分析(コードインスペクションとも呼ばれます)...

C++ のコーディングアシスタンス

JetBrains Rider のコーディング支援機能のほとんどは、C++ でもサポートされています。これらの機能の詳細については、コーディング支援セクションの対応するトピックを参照してください。このトピックでは、C++ のコーディング支援機能の使用例をいくつか見つけることができます。デフォルトでは、コードインスペクション、クイックフィックス、コンテキストアクションはすべてのソリューションファイルで使用できます。必要に応じて、JetBrains Rider 設定のページにあるソリューション外部...

コードインスペクション

JetBrains Rider は、サポートされているすべての言語で 2500 を超えるコードインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルの設計時にコードの問題を検出してハイライトするために適用されます。また、特定の範囲内のすべてのコードの問題を検出するために適用されます。インスペクション JetBrains Rider が提供するコードの種類を調べるには、異なる言語の JetBrains Rider コードインスペクションの全リストをご覧ください。コードイ...

設計時にコードの問題を分析する

JetBrains Rider は、エディターでコードファイルを開くとすぐに、コードファイルが閉じられるまで分析を開始します。検出されたすべてのコードの問題は、重大度に応じてエディターでハイライトされます。問題のマップは、エディターウィンドウの右側のエラーストライプにも表示されます。ここでは、ファイルのステータスを即座に確認し、マークをクリックして特定のコードの問題に移動できます。デザインタイムインスペクションの機能:デザイン時のインスペクション機能は、Rider エディターの基本機能への主要...

特定の範囲でコードの問題を見つける

設計時コードインスペクションは、エディターでコーディングしたり、特定のファイルを見直したりするときに役立ちます。しかし、JetBrains Rider では、ソリューション全体または狭い範囲でスタティックコード分析を実行し、結果をフレンドリーな視点で調べることもできます。開始コードインスペクション:ソリューション、プロジェクト、カスタムスコープのコードをインスペクションするソリューションワイドのインスペクションの結果(たとえば、未使用のパブリックメンバー)をレポートに含めるかどうかを決定する

コードインスペクション設定を構成する

設計時コードインスペクションを構成する:デフォルトでは、JetBrains Rider はサポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかにかかわらず、コードインスペクションを特定の範囲でいつでも実行できます。「鉛筆」ウィジェットを使用して、エディターから直接インスペクション設定をすばやく調整するか、設定でより詳細な構成を行うことができます。を押すか、メニューから(W...