ReSharper 2024.3 ヘルプ

ファイルとタイプのレイアウトパターンでメンバーを再配置する

ReSharper は、さまざまなパターンに従って C# ファイルのタイプおよびタイプメンバーを並べ替えることができます。パターンは、ファイル内のアイテムを並べ替えたり、指定された領域でラップしたりするときに評価される多くの条件と制約を記述することができます。

レイアウトパターンの紹介

さまざまなコンテキストに適用されるように複数のレイアウトパターンを設定できます(たとえば、クラスとインターフェースにさまざまなパターンを設定できます)。パターンには 2 種類あります。

  • ファイルパターン。すべての C# ファイルに適用されます。名前空間、型、デリゲートを調整できます。領域にまとめるか、グループにまとめるか、領域を削除します。型の内容は、型パターンを使用してさらに配置できます。一度に適用できるファイルパターンは 1 つだけです。

  • タイプパターン。存在する場合、パターンの制約に一致する型にのみ適用されます。ファイルメンバーを配置したり、リージョンにまとめたり、グループにまとめたり、リージョンを削除したり、並べ替えなどを行うことができます。

パターン内で、マッチャーエントリとスニペットを目的の順序で指定できます。また、一致するアイテムがラップまたはグループ化される領域 / グループも指定できます。

現在のパターンセットを適用するアルゴリズムは、次のように動作します。

  1. ファイルパターンが存在する場合、ReSharper はファイル内の領域を削除する必要があるかどうかを確認し、パターン内のマッチャーエントリまたはスニペットのそれぞれがファイル内のコード項目と一致するかどうかを確認します。

  2. 一致するエントリがある場合、ファイル内の対応する正規表現アイテムの位置に従って、ファイル内の位置が変更されます。

  3. 同じコード項目が複数のマッチャーエントリと一致する場合、より高い優先度またはより強い制約を持つマッチャーが適用されます。つまり、パブリックタイプに一致するパターン A およびパブリックスタティックタイプにマッチするパターン B が存在する場合、すべてのパブリックスタティックタイプはパターン B によって照合されます。これを変更するには、パターン A の優先順位を上げることができます。

  4. 同じ制約のセットを有するマッチャーエントリが存在する場合、マッチするアイテムは、そのようなマッチャーエントリの最初の位置に従って移動されます。

  5. リージョンまたはグループが指定されている場合、一致したアイテムはそれに応じてリージョンでグループ化またはラップされます。

    グループまたはリージョンでは、優先度を指定できます。例: グループ / リージョンがその外部の他のマッチャーよりも優先度が高い場合、ReSharper は最初にグループ / リージョン内のマッチャーを処理し、次に残りのマッチャーを処理します。リージョンのグループ化の唯一の違いは、リージョンが一致したアイテムを #region/#endregion にラップすることです。

  6. 一致していないものはすべて、一致したアイテムの後に移動されます。一致しないアイテムを別の場所に配置する必要がある場合は、制約なしでマッチャーを作成し、パターン内の目的の位置を設定できます。

  7. その後、もしあればタイプパターンが適用されます。ReSharper は、各型パターンがファイル内の任意の型と一致するかどうかを確認します。型に一致するパターンが複数ある場合は、手順 3 と 4 と同様に競合が解決されます。

  8. タイプの一致が確立されると、ReSharper はタイプ内の領域を削除する必要があるかどうかを確認します。次に、パターン内の各マッチャーエントリがファイル内のいずれかのメンバーと一致するかどうかをチェックします。

  9. 一致するメンバーがある場合、型の中の対応する正規表現の項目の位置に従って、型の位置が変更されます。

  10. 領域、グループ、比類のないメンバーは、手順 5 および 6 と同様に処理されます。

ファイルとレイアウトの環境設定

提供時の状態で、ReSharper はいくつかのターゲット型パターン(たとえば、NUnit テストのフィクスチャ用)、残りの C# 型のデフォルトパターンを提供します。

デフォルトのメンバーレイアウトルールは、多数のベストプラクティスに基づいており、ほとんどの場合に推奨できます。ただし、個人の好みや会社の基準が ReSharper の既定値と異なる場合は、既定のパターンに基づいてコードの並べ替えパターンを構成したり、特定のケース用に新しいパターンを作成したりできます。

レイアウトパターンへのすべての変更は、ReSharper オプション Alt+R, Oコード編集 | C# | ファイルレイアウトページで行われます。編集が完了したら、オプションダイアログで保存をクリックして変更を適用し、ReSharper に保存場所を選択させるか、保存先セレクターからこのレイヤーを選択して特定の設定レイヤーに変更を保存します。詳細については、「ReSharper 設定の管理と共有」を参照してください。

ファイルとタイプのレイアウトルールを視覚的に構成する

ReSharper では、専用のビジュアルエディターを使用してレイアウトルールのすべてのパラメーターを設定できます。エディターページの項目は、次のいずれかのビューで表示できます。

  • パターン。これは、現在のパターンセットで使用可能なすべてのパターンを表示するルートビューです。このビューを開くには、ページの左上隅にあるパターンをクリックします。このビューから、パターンをダブルクリックして任意のパターンに移動できます。セットに新しいパターンを追加するには、ファイルをドラッグアンドドロップするか、右側のツールボックスからパターンアイテムを入力します。ドラッグアンドドロップを使用してパターンを並べ替えることもできます。タイプパターンの順序は、複数のパターンが同じタイプに同じ優先度と制約で一致する場合に適用されるパターンを定義します。

  • 構成。このビューは、パターン、領域、グループ内のマッチャーエントリ、領域、グループの順序とグループ化を視覚化します。次の図では、タイプパターンの構成ビューを見ることができます。

    Composition view of a type pattern
  • 制約。このビューは、パターンまたはマッチャーエントリの制約を視覚化します。たとえば、修飾子または属性が一致する必要があるかどうかなど、どの種類のコードアイテムと一致するかなどです。パターンとマッチャーは、すべての制約に一致するアイテムにのみ適用されます。すべての制約は、これらの制約間の関係を識別する論理コンテナーによってグループ化されます。次の図では、マッチャーエントリの制約ビューを確認できます。

    Constraints view of a matcher entry

既存のレイアウトパターンを編集する

  1. メインメニューから ReSharper | オプションを選択するか、Alt+R O を押してから、左側のコード編集 | C# | ファイルレイアウトを選択します。

  2. 現在のセットのすべてのパターンを表示するには、ページの左上隅にあるパターンをクリックします。この要素のプロパティでは、静的フィールド並べ替えポリシーセレクタを使用して、イニシャライザーで静的フィールドの順序を変更するかどうか、およびその順序を変更する方法を定義できます。オプションは次のとおりです。

    • Strict — プログラムの動作に影響を与える可能性がある場合、静的フィールドは並べ替えられません。例: 同じクラスの静的メンバーへの参照を持つ初期化子を持つ静的フィールドがある場合、そのクラスのすべての静的フィールドは並べ替えられません。

    • リラックス - 初期化子に他の静的フィールドを明示的に使用している静的フィールド、およびそれらが参照している静的フィールドを並べ替えることは禁止されています。

    • 無制限 - 並べ替えは常に許可されています(お勧めしません)。

    選択した動作がすべてのパターンに適用されます。

    イニシャライザーを使用して並べ替えられていない静的フィールドの場合、ReSharper は相対的な順序を保持しながら、他の宣言と一緒に並べ替えます。

  3. 必要に応じて、デフォルトのパターンセットのいずれかをロードするには、ページの右上隅にあるロードをクリックし、パターンセットを選択します。

  4. 目的のパターンをダブルクリックし、コンストレインビューにある場合はコンポジションビューに切り替えます(ビューを切り替えるには、パターンヘッダーの右側にあるアイコンをクリックします)。ファイルパターンは常にコンポジションビューに表示されます。つまり、ファイルパターンに制約を指定することはできません。

  5. コンポジションビューでは、次の方法でパターンを変更できます。

    • 項目の順序を変更するには、パターンの内側にドラッグします。

    • 特定のアイテムを削除するには、そのアイテムを選択し、Delete を押します。リージョンまたはグループを削除する場合は、その中のすべてのアイテムも削除されます。削除する前にリージョン / グループからアイテムをドラッグすることができます。

    • 新しいアイテムを追加するには、Toolbox エリアからパターンの目的の場所にアイテムをドラッグします。領域またはグループをドラッグしてグループ化項目として使用するか、エントリをドラッグしてターゲットコード内の何かと一致させます。

      また、依存関係プロパティマッチャーを使用して WPF 依存関係プロパティのすべての部分を照合および配置し、バッキングフィールドを持つプロパティマッチャーを使用して、対応するプロパティの宣言の直前または直後にプロパティのバッキングフィールドを配置することもできます。

    • パターンまたはその内部の項目のプロパティを設定するには、その項目を選択し、右下の部分のプロパティを変更します。

      表示名

      このプロパティは、パターンとマッチャーエントリに使用でき、便宜上使用されるだけであり、一致するものを説明する必要があります。

      名前

      リージョンのこのプロパティは、リージョンの作成時にリージョンに名前を付ける方法を指定します。

      領域がグループ化オプションに従って生成された場合、名前に ${0} パラメーターを使用して、領域のシーケンス番号を挿入できます。

      名前付きパラメーターを使用して、リージョン名にグループ化オプションを挿入することもできます。例: ${Access} パラメーターを使用できます。これは、対応するリージョンの名前で privatepublic などに置き換えられます。明らかに、このパラメーターは、領域のグループ化プロパティに同じ値を使用する場合に意味があります。このパラメーターの有効な値は、スペースを含まないグループ化プロパティの値と同じです。つまり、実装インターフェースの名前をリージョン名に挿入するには、${ImplementsInterface} パラメーターを使用します。

      アイテム名の部分一致によってリージョン名を生成することもできます。

      リージョンを削除

      ファイルとタイプのパターンのこのプロパティは、一致したコード内の既存の領域をどう処理するかを指定します。生成されたものを除き値を使用して、この機能をデフォルトのパターンで適用することによって以前に作成された領域のみを削除できます。

      優先度

      このプロパティは、マッチャーエントリの相対的な優先度を設定します。つまり、コードの一部が複数のマッチャーエントリと一致する場合、最も優先度の高いエントリの位置に従って移動されます。

      並べ替え

      エントリのこのプロパティは、一致するコード項目が複数ある場合の並べ替え設定を指定します。なし以外の並べ替え設定を選択するとすぐに、並べ替え順序をさらに絞り込むことができるに句が表示されます。

      グループ化

      リージョンまたはグループのこのプロパティは、指定されたグループに従ってリージョン / グループを生成するかどうかを指定します。例: 種類が値として選択されている場合、フィールド、プロパティ、その他の種類のメンバー(存在する場合)に対していくつかの領域 / グループが作成されます。なし以外のグループ化設定を選択するとすぐに、一致したコード項目をさらに分離できるに句が表示されます。

  6. 特定のタイプパターンまたは正規表現エントリがコードアイテムとどのように一致するかを定義する制約を設定するには、制約ビューに切り替えます。タイプパターンのこのビューを開くには、ヘッダーの対応するアイコンをクリックします。マッチャエントリのこのビューを開くには、ダブルクリックします。

  7. 制約ビューでは、選択した項目は条件のコンテナーとして表されます。これらの条件を設定するには、Toolbox エリアから編集したパターンまたはエントリにアイテムをドラッグします。

    • 論理コンテナーの項目は、複数の条件を適用する方法を定義するため、最初に追加する必要があります。これらのコンテナーの名前は、これらのコンテナー内で条件がどのように関連しているかをかなり明確に説明しています。論理コンテナーなしで制約を追加すると、それらはそしてコンテナーによってグループ化されます。

    • 制約グループの項目を使用すると、一致する項目を定義する必要があります(ないコンテナーにラップされている場合)。

      名前制約の値で正規表現を使用できることに注意してください。たとえば、MyTest.* は、MyTest_OneMyTest_TwoMyTest_Three という名前のアイテムと一致します。

      このグループからアイテムを論理コンテナーにドラッグし、右下の部分でそれらのプロパティを構成します。

    • 項目を修飾子グループからドラッグして、ターゲット項目に含めるべきかどうかを指定します。

    例: 非プライベートな静的フィールドとプロパティに一致するエントリは、次のようになります。

    Editing file layout: matcher entry example

ソース XAML を編集してファイルとタイプレイアウトを構成する

必要に応じて、ファイルとタイプのパターンのセットを記述するソース XAML を編集できます。これを行うには、ファイルレイアウトページの上部にある XAML をクリックします。このビューは、パターンセットをコピーして貼り付ける場合にも役立ちます。

デフォルトパターンの 1 つをロードして、このフォーマットで使用されているタグを確認することをお勧めします。たとえば、Entry タグは照合項目を定義し、Entry.Match はどのコード項目を一致させるべきかを指定します。Entry.SortBy タグは、一致したアイテムをどのようにソートするかを指定します。以下の例を参照してください。

ReSharper: Configuring file and type layout by editing the source XAML

この XAML コードはコンストラクターと一致し、最初に静的コンストラクターに移動するようにコンストラクターを並べ替えます。

シナリオ: 部分的な名前の一致によってリージョン内のアイテムをグループ化する

すべてのメソッドが test で始まり、一部のメソッドに 1 つの共通の部分文字列があり、他のメソッドには別の部分文字列があるクラスを考えてみます。

public void test_groupOne_nameOne(){ /*...*/} public void test_groupTwo_nameTwo(){ /*...*/} public void test_groupOne_nameTwo(){ /*...*/} public void test_groupTwo_nameOne(){ /*...*/}

タイプレイアウトを使用して、リージョン内のメソッドの各セットをラップし、リージョン名として共通の部分文字列を使用できます。

これを行うには、領域名フィールドに ${Name} を指定し、次の正規表現値を使用して名前制約をエントリに追加します: test\w+?_.*

ReSharper: group items in regions by partial name match

または、XAML ビューに次のパターンを追加します。

<TypePattern> <Region Name="${Name}" Priority="100"> <Region.GroupBy> <Name Is="(test\w+?)_.*" /> </Region.GroupBy> <Entry> <Entry.Match> <Name Is="test\w+?_.*" /> </Entry.Match> </Entry> </Region> </TypePattern>

レイアウトをクラスに適用した後、メソッドはソートされ、対応する領域にラップされます。

#region test_groupOne public void test_groupOne_nameOne(){ /*...*/ } public void test_groupOne_nameTwo(){ /*...*/ } #endregion #region test_groupTwo public void test_groupTwo_nameOne(){ /*...*/ } public void test_groupTwo_nameTwo(){ /*...*/ } #endregion

ファイルの並べ替えとメンバーの入力

ファイルを適用し、目的のスコープでレイアウト設定を入力するには、ビルトイン: フルクリーンアッププロファイルでコードクリーンアップ実行するか、以下で説明するように、特定のタスクのみを対象としたカスタムプロファイルを作成して実行します。

カスタムコードクリーンアッププロファイルでファイルとタイプレイアウトを適用する

  1. メインメニューから ReSharper | オプションを選択するか、Alt+R O を押します。

  2. クリーンアッププロファイル設定ページに移動します: コード編集 | コードのクリーンアップ | プロファイル

  3. 新しいカスタムクリーンアッププロファイルを作成するセクションの説明に従って、新しいプロファイルを作成します。新しいプロファイルの選択したプロファイル設定セクションで、ファイルレイアウトを適用するチェックボックスをオンにします。必要に応じて、このプロファイルで他のコードクリーンアップタスクを有効にすることができます。

  4. オプションダイアログで保存をクリックして変更を適用し、ReSharper に変更を保存する場所を選択させるか、保存先セレクターからこのレイヤーを選択して特定の設定レイヤーに変更を保存します。詳細については、「resharper 設定の管理と共有」を参照してください。

  5. ファイルレイアウトを適用する範囲を選択します。

    • ファイル内の任意の場所にキャレットを配置して、ファイルレイアウトをファイルに適用します。

    • ソリューションエクスプローラーの 1 つまたは複数の項目を選択して、これらのノードおよびその子項目のファイルにファイルレイアウトを適用します。

  6. 以下のいずれか 1 つを実行します:

    • Control+Alt+F を押すか、メインメニューから ReSharper | 編集 | コードのクリーンアップ…を選択してください。

    • テキストエディターの任意の場所を右クリックするか、選択項目を右クリックし、コンテキストメニューでコードのクリーンアップを選択します。

  7. 開いたコードのクリーンアップダイアログで、新しく作成したプロファイルを選択します。

  8. 実行をクリックします。ReSharper は、選択したスコープでファイルレイアウトを適用します。

コードクリーンアップダイアログを開いてプロファイルを選択せずにファイルレイアウトを適用する場合は、作成したプロファイルをサイレントクリーンアップにバインドし、Control+Shift+Alt+F を押して実行できます。ファイルレイアウトの適用と他のコードスタイルタスクを組み合わせたカスタムクリーンアッププロファイルを作成することもできます。

特定のタイプでのメンバーの並べ替えを無効にする

クリーンアップ中にメンバーの順序を変更したいが、特定の型では元のメンバーの順序を保持したい場合は、これらの型を JetBrains.Annotations[NoReorder] 属性でマークします。

この機能は、次の言語とテクノロジーでサポートされています。

関連ページ:

ReSharper 設定の管理と共有

ReSharper は、階層化された設定のメカニズムを使用して環境設定を保存するため、次の利点があります。さまざまなソリューションで異なる設定を行うことができます。環境設定のさまざまなサブセットを別の場所に保存し、特定のソリューションで作業するときに環境設定を組み合わせることができます。例: 記号のアイコンとチーム設定のコード形式を個人設定で保存し、これらの設定を自動的に組み合わせることができます。設定の特定のサブセットを VCS に保持することにより、チーム内の設定を同期できます。ReShar...

コードのクリーンアップ

ReSharper を使用すると、フォーマットやその他のコードスタイル設定を一括モードで適用して、1 つ以上のファイル、プロジェクト、ソリューション全体でコードスタイル違反を即座に排除できます。コードクリーンアッププロファイル:コードのクリーンアップには、ニーズに応じてさまざまな場合に適用できるさまざまな設定(プロファイル)があります。提供時の状態で使用可能な 3 つのデフォルトプロファイルがあります。コードのフォーマットのみを適用するビルトイン: コードの整形、コードのフォーマットとコードの...

アノテーションを使用してコードインスペクションを改善する

コード検査や他の多くの ReSharper の機能は、問題を検出し、改善を提案し、他の方法であなたを手助けするために、言語構成の動作を知ることに主に依存しています。ただし、この種の分析ではすべてを検出できるわけではありません。例: メソッドがフォーマットメソッドとして設計されている場合、メソッドの呼び出しに必要な引数が含まれていない場合、構造解析では潜在的な問題は見つかりません。この場合や他の多くの場合、ReSharper のは非常に役立ちます。このフレームワークで宣言された属性を使用することに...

ASP.NET MVC 特有の機能

ReSharper には、一般的な ASP.NET 機能に加えて、ASP.NET MVC での作業をより簡単にサポートする特殊機能があります。構文のハイライト:ASP.NET MVC メソッド呼び出しとパラメーターの特別な構文のハイライト: コード補完:文字列リテラルでアクションとコントローラーを参照するための専用コード補完: ナビゲーションと検索:さまざまなナビゲーション機能がアクションとコントローラーでも機能します。コード生成:使用箇所から新しいコントローラーとアクションを作成する: 最終...

言語による ReSharper: MSBuild

MSBuild は、アプリケーションを構築するために広く使用されているプラットフォームです。特定の XML タグを使用して、プロジェクトの構築方法や実行方法を定義できます。ReSharper を使用すると、より速く行うことができます。コード検査:あらかじめ定義された要素またはその属性の名前を誤って入力した場合、ReSharper はそのような不一致についてハイライト表示します。まだ定義されていないプロパティを参照しようとすると、ReSharper はそのようなケースも検出します。MSBuild...

言語による ReSharper: Google プロトコルバッファ (Protobuf)

ReSharper オプションのページで Protobuf サポートが明示的に有効になっている場合、ReSharper は Google Protocol Buffers (Protobuf) バージョン 2.x および 3.0 の .proto ファイルでコード分析および支援機能を提供します。ReSharper は、.proto ファイルの言語構文をハイライトし、エラーを検出してハイライトします。基本コード補完と他のタイピング支援機能はエディターで利用可能です。型と値の宣言に行き、それらの使用箇所を...