ReSharper 2020.3 ヘルプ

コードフォーマットルールの管理と適用

ReSharper | 編集 | コードの整形
Control+Alt+L
ReSharper_ReformatCode

コードスタイルの重要な点は、コードのフォーマット方法、つまり、空白と空白行を使用してコードブロックを配置および分離する方法、インデントにタブを使用するかどうか、および使用する方法。

ReSharper コードフォーマットルールの広範なセットには、デフォルトの Visual Studio フォーマットオプションと多数のベストプラクティスを考慮したデフォルト構成があります。フォーマットルールのすべての詳細を構成し、コードにルールを適用できます。これらのルールは、ReSharper がコード補完およびコード生成機能を備えた新しいコードを生成し、コードテンプレートを適用し、リファクタリングを実行するときに適用されます。フォーマットルールは、現在の選択、現在のファイル、またはソリューション全体までのより広い範囲の既存のコードにも適用できます。

編集および貼り付けられたコードの自動フォーマット

エディターでコードを入力すると、ReSharper はセミコロン ; を入力するとすぐに式を再フォーマットし、閉じ括弧 } を入力するとすぐにコードのブロックを再フォーマットします。必要であれば、ReSharper オプション(Alt+R, O)の環境 | エディター | 振る舞いページでこれらの種類の自動フォーマットを無効にすることができます。

ReSharper では、コードを貼り付けるときに、フォーマットルールを自動的に適用することもできます。デフォルトでは、貼り付けられたコードは完全に再フォーマットされませんが、インデント設定のみが適用されます。貼り付けたコードを完全にフォーマットする場合、または貼り付け時のフォーマットを無効にする場合は、ReSharper オプションの環境 | エディター | 振る舞いページ(Alt+R, O)の貼り付けで自動フォーマットセレクターを使用します。

既定では、Visual Studio は編集済みおよび貼り付け済みのコードに独自のフォーマット規則を適用します。ReSharper の自動フォーマット機能を使用している場合は、Visual Studio の自動フォーマットを無効にすることをお勧めします。Visual Studio のオプション(ツール | オプション)で行うことができます。たとえば、C# の場合、テキストエディター | C# | コードスタイル | フォーマット | 一般オプションページの対応するチェックボックスをクリアします。

既存のコードを再フォーマットする

ReSharper は、既存のコードを再フォーマットするいくつかの方法を提供します。一言で言えば、いつも Control+Alt+L を使うことができますが、以下に述べるいくつかの詳細や選択肢があります。

スコープ内の既存のコードを再フォーマットする

  1. コードを再フォーマットする範囲を選択します。

    • エディターで選択して、選択範囲のコードを再フォーマットします。

    • ファイル内の任意の位置にキャレットを設定して、ファイル内のコードを再フォーマットします。

    • ソリューションエクスプローラーの 1 つまたは複数の項目を選択して、これらの項目およびその子項目にあるファイルのコードを再フォーマットします。

  2. Control+Alt+L を押すか、メインメニューから ReSharper | 編集 | コードの整形を選択します。あるいは、Control+Shift+A を押して、ポップアップでコマンド名を入力して、そこで選択することもできます。

Alt+Enter アクションリストから現在の選択範囲内のコードを再フォーマットすることができます。

現在の選択範囲のコードを再フォーマットする

  1. エディターで、再フォーマットするコードブロックを選択します。

  2. Alt+Enter を押すか、キャレットの左側にあるアクションインジケーターをクリックして、アクションリストを開きます。

  3. アクションリストで Themed icon code cleanup option page screen gray 選択のフォーマットを選択します。

    Reformatting currently selected code

または、コードのクリーンアップを使用して、任意のスコープでコードを再フォーマットできます。コードの再フォーマットを他のコードスタイルの適用と組み合わせる場合は、コードのクリーンアップが役立つことがあります。

コードクリーンアップでコードを再フォーマットする

  1. コードを再フォーマットする範囲を選択します。

    • エディターで選択して、選択範囲のコードを再フォーマットします。

    • ファイル内の任意の位置にキャレットを設定して、ファイル内のコードを再フォーマットします。

    • ソリューションエクスプローラーの 1 つまたは複数の項目を選択して、これらの項目およびその子項目にあるファイルのコードを再フォーマットします。

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

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

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

  3. 開いているコードのクリーンアップダイアログで、ビルトイン: コードの整形プロファイルを選択します。

  4. 実行をクリックします。ReSharper は、書式の設定に応じて、選択した範囲のコードを再フォーマットします。

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

コードインスペクションを使用して、C# および C++ のフォーマット規則を維持する

C# および C++ では、コードインスペクション機能を使用して、コードのフォーマットスタイルを維持することもできます。ReSharper は、数十のフォーマットインスペクションを提供します。これらはすべてデフォルトで無効になっています。

ソリューションによっては、メソッド間でのインデントサイズの違い、switch ステートメント内の case ラベルのインデントの違い、改行の欠落など、コードベースに何百ものマイナーなフォーマット違反がある可能性があります。これらすべての違反に対してコードインスペクションを有効にすると、うるさすぎることがあります。

一方、コードの可読性を低下させたり、コードの理解に影響を及ぼす可能性のあるフォーマットの問題があります。例:

  • 1 つの同じ行に複数の型メンバーがあり

  • 1 行に複数のステートメント

  • 子ステートメントの前後に間違ったインデントがあり

  • 宣言波括弧

  • 宣言波括弧のインデントが間違っています。

このようなフォーマットの問題については、コードインスペクションを有効にすることをお勧めします。

ReSharper: Code inspections and quick-fixes for violations of the code formatting style

既存のフォーマットを保持

いくつかのフォーマットルールを「ソフトに」適用できます。つまり、ReSharper がコード補完コード生成機能を使用して新しいコードを生成し、コードテンプレートを適用してリファクタリングを実行すると、このようなルールが適用されますが、既存のコード再フォーマットするとこれらのルールは無視されます(たとえば、Control+Alt+L を使用)。

フォーマット規則の厳格さを緩和するには、特定のコンテキストに対して既存のまま...最大空白行を維持するシンプルラップ設定を使用します。ReSharper オプション(Alt+R, O)でこれらの設定の構成を確認または変更できます。

ReSharper: keep existing formatting for selected rules

さまざまな改行スタイルでコードを再フォーマットする

ReSharper では、同様のコードをさまざまな方法で再フォーマットするために、フォーマット規則ではなく明示的なアクションを使用することもできます。これらのアクションは、関連ルールの既存のフォーマットを維持することを選択したときに最も役立ちます。ただし、設定を厳しくすると、対応する明示的なフォーマットアクションは機能しなくなります。そのような構成では、影響を受けるコンテキストでフォーマットルールを常に適用する必要があるからです。例: 既存のまま... 設定が無効になっている場合は、次に説明する wrap/ chop/ 広々とした / コンパクトなコマンドでも同じ結果が得られます。一部の折り返し規則が切り捨てる... に設定されている場合は、wrap/ compact コマンドを呼び出しても、対応するコンテキスト内のコードは常に切り刻まれます。

長い行をラップしてチョップする

長い行を折り返すおよび長い行を切り詰めるアクションは、キャレットが許容最大行長より長い行にある場合に使用可能になります。ReSharper オプション(Alt+R, O)のコード編集 | C# | スタイルのフォーマット | 改行および折り返しページで右余白 (カラム) 設定を使用して、キャレットを構成できます。

Alt+Enter を押して、必要な改行を追加するアクションの 1 つを選択できます。

長い行を折り返すは、設定された行の長さを超えないように、十分な改行を追加します。

再フォーマットする前に

var reportHtml = CreateReport("359CD313-7C7E-49B2-A2AB-E12FDFD1319D", DateTimeOffset.UtcNow.AddMonths(-1), DateTimeOffset.UtcNow, useRichText: true);

再フォーマット後

var reportHtml = CreateReport("359CD313-7C7E-49B2-A2AB-E12FDFD1319D", DateTimeOffset.UtcNow.AddMonths(-1), DateTimeOffset.UtcNow, useRichText: true);

長い行を切り詰めるは、ライン上の各エンティティに改行を追加します:

再フォーマットする前に

var reportHtml = CreateReport("359CD313-7C7E-49B2-A2AB-E12FDFD1319D", DateTimeOffset.UtcNow.AddMonths(-1), DateTimeOffset.UtcNow, useRichText: true);

再フォーマット後

var reportHtml = CreateReport("359CD313-7C7E-49B2-A2AB-E12FDFD1319D", DateTimeOffset.UtcNow.AddMonths(-1), DateTimeOffset.UtcNow, useRichText: true);

コードブロックのコンパクトで広々とした厳密なフォーマット

コードを明示的に再フォーマットするための別の一連のアクションは、選択範囲内でよりコンパクト(改行数が少ない)またはより広範囲(改行数)の形式を強制できます。

これらのアクションを呼び出すには、コードブロック( Control+W を使用して論理ブロックを選択することができます)を選択し、Alt+Enter を押してから選択のフォーマットのいずれかのアクションを選択します。

改行が多すぎてコードを読むのに役立たない場合は、削除することをお勧めします。以下の例では、空の getter と setter は有用な情報を持ちませんため、安全に 1 行に配置できます。コンパクトフォーマット (より少ない改行) アクションでこれを行うことができます:

再フォーマットする前に 再フォーマット後
public string Name { get; set; } public int Age { get; set; }
public string Name { get; set; } public int Age { get; set; }

広々としたフォーマット (チョップ) を使用すると、複数行のコードブロックを読みやすくすることができます。例: 複雑な if 文や重い XElement コンストラクター呼び出しで改行を追加したい場合があります:

再フォーマットする前に

summaryTable.Add(new XElement("tr", new XElement("td", XmlHelpers.CreateHyperlink(inspection.Text, CodeInspectionHelpers.TryGetStaticHref(inspection.Id), null, true), new XComment(compoundName)), new XElement("td", GetSeverityLink(inspection.Severity))));

再フォーマット後

summaryTable.Add(new XElement("tr", new XElement("td", XmlHelpers.CreateHyperlink(inspection.Text, CodeInspectionHelpers.TryGetStaticHref(inspection.Id), null, true), new XComment(compoundName)), new XElement("td", GetSeverityLink(inspection.Severity))));

厳密な形式アクションは、既存のまま... 環境設定の構成方法とは関係なく、既存の改行を無視して選択範囲を再フォーマットします。

コードフォーマットルールを構成する

フォーマットルールは非常に高いレベルの詳細に設定できます。例: 特定の演算子の周囲に空白を配置するか、入れ子になった using 文をインデントするかを定義できます。

コードフォーマットルールを構成する

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

  2. コード編集 | 一般的な書式スタイルページを使用して、すべての言語で適用されるオプションを確認し、設定します。

  3. コード編集 | [ 言語 ] | スタイルのフォーマットページを使用して、言語固有のフォーマットを構成します。これらのページでは、下部にあるプレビュー領域を使用して、ReSharper がコードに特定の設定を適用する方法を表示できます。

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

オプションページを掘り下げる代わりに、コードブロックを選択して、そのブロックに適用可能なフォーマットルールのみを設定することができます。変更されたフォーマッタ設定が、エディター内の選択したブロックのコードにどのように影響するかを観察することができます。

選択したコードのフォーマットルールを構成する

  1. エディターで、再フォーマットするコードブロックを選択します。

  2. Alt+Enter を押すか、キャレットの左側にあるアクションインジケーターをクリックして、アクションリストを開きます。

  3. 選択のフォーマット | 構成を選択します。

  4. 開いたダイアログに、選択したコードブロックに影響を与えるすべてのフォーマットルールが表示されます。コードブロック自体は点線のフレームで囲まれます。

    Configuring formatting rules for selected code
  5. フォーマットルールを変更すると、選択したブロックのコードにどのように影響するかがわかります。

  6. ダイアログで保存をクリックして変更を適用し、ReSharper に保存場所を選択させるか、次へ保存リストを使用して変更を特定の設定レイヤーに保存します。詳細については、ReSharper 設定の管理と共有を参照してください。

  7. 次へ保存セレクターで .editorconfig を選択することにより、構成済みのフォーマット規則を EditorConfigエクスポートすることも選択できることに注意してください。

  8. オプションで、コメントとして保存をクリックすることもできます。これにより、選択したブロックの前後に変更内容がコメントとして保存されます。これにより、設定を変更せずに、目的のフォーマッタルールをローカルで上書きできます。

  9. ReSharper はダイアログを閉じ、コードブロックを再フォーマットします。

既存のコードのフォーマットルールを使用する

個々のフォーマット設定を微調整する別の方法は、既存のコードサンプルからフォーマットルールを学習することです。これは、選択したブロック、現在のファイル、ファイルのセット、1 つ以上のプロジェクト、またはソリューション全体です。ReSharper は、選択したサンプルを分析し、現在の設定とは異なるフォーマットルールを一覧表示します。その後、検出されたルールを確認し、必要に応じて変更し、目的の設定レイヤーまたは .editorconfig または .clang-format 形式の構成ファイルに保存できます。

既存のコードから書式ルールを学ぶ

  1. フォーマットを分析する範囲を選択します。

    • 選択範囲内のフォーマットを分析するには、エディターで選択を行います。

    • ファイル内の任意の場所にキャレットを設定して、ファイル内のフォーマットを分析します。

    • これらの項目とその子項目にあるファイルのフォーマットを分析するには、ソリューションエクスプローラーで 1 つ以上の項目を選択します。

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

    • メインメニューの ReSharper | 編集 | フォーマット設定の検出を選択します。

    • 右クリックし、コンテキストメニューでフォーマット設定の検出を選択します。

    • コードサンプルが選択項目の場合は、Alt+Enter を押して選択のフォーマット | フォーマットを検出するを選択します。

  3. 現在の設定と異なる規則を確認してください。

    ReSharper: Using formatting rules from existing code

  4. ダイアログで保存をクリックして変更を適用し、ReSharper に保存場所を選択させるか、次へ保存リストを使用して変更を特定の設定レイヤーに保存します。詳細については、ReSharper 設定の管理と共有を参照してください。

  5. コードサンプルが選択項目の場合は、必要に応じてコメントとして保存をクリックできます。これにより、選択したブロックの前後に変更内容がコメントとして保存されます。これにより、設定を変更せずに、目的のフォーマッタルールをローカルで上書きできます。

コメントを使用してフォーマッターを構成する

ReSharper では、実際にルールを変更することなく、設定済みのフォーマットルールから逸脱することができます。コードの特定の部分でフォーマッタを完全に無効にすることもできます。

フォーマッタは、C#、C++、JavaScript、TypeScript、HTML、Protobuf のコメントで設定できます。

フォーマッタを無効にするには、次のコメントを使用します。

  • // @formatter:off — この行の後のフォーマッタを無効にする

  • // @formatter:on — この行の後にフォーマッタを有効にする

フォーマッタを無効にしすぎると、個々のフォーマットルールをコメントで変更できます。

コメントを使用して個々の書式ルールを変更する

  1. 調整するフォーマットルールの名前を見つけます。ReSharper オプションのコード編集 | [ 言語 ] | スタイルのフォーマットページ(Alt+R, O)で調べることができます。または、目的のルールが適用されるコードブロックを選択し、Alt+Enter を押して選択のフォーマット | 構成を選択することもできます。開いたダイアログで、選択に影響するすべてのルールを調べ、変更して、変更のライブプレビューを表示することもできます。このダイアログでは、コメントとして保存をクリックすることもできます。ReSharper は、変更されたすべてのルールに必要なコメントを生成します。

  2. ルールの名前がわかっている場合は、EditorConfig プロパティのインデックスでその ID を検索できます。ブラウザーで検索を使用します。例: セミコロンの前のスペースをトリガーするルールを検索する場合は、セミコロンのを検索すると、ID: space_before_semicolon が見つかります。

  3. インデックス Web ページでルールの ID を見つけたら、説明リンクをクリックして、このルールに許可されている値を確認します。 space_before_semicolon の例に従うと、true または false受け入れることができます。

  4. ルールを変更するコードの前に次のコメントを追加します。
    // @formatter:<rule_ID> <value>、たとえば、セミコロンの前のスペースを有効にするには、次を追加します
    // @formatter:space_before_semicolon true

  5. ルールの新しい値は、ファイルの最後まで適用されます。オプションで構成された値に戻す場合は、次のコメントを追加します。
    たとえば、// @formatter:<rule_ID> restore
    // @formatter:space_before_semicolon restore

フォーマットルールを保存および共有する

レイヤーベースの設定のメカニズムを使用して、コードのフォーマットを保存します。とりわけ、このメカニズムにより、さまざまなソリューションのさまざまな設定を維持したり、これらの設定を VCS に保持したり、チームメンバーと自動的に共有することができます。

すべての言語の場合は EditorConfig で、C++、JavaScript、TypeScript の場合はクラン形式を使用して、フォーマット設定を構成することもできます。これらの設定は、ソリューション階層のさまざまなレベルの .editorconfig.clang-format、または _clang-format ファイルに保存できます。ファイルは通常 VCS に置かれるため、そこで定義された設定はプロジェクトチーム間で共有されます。
ReSharper を使用すると、EditorConfig を使用して、ReSharper のオプションダイアログで使用できるフォーマット設定を定義できます。サポートされている EditorConfig プロパティの名前と説明は、EditorConfig リファレンスにあります。
Clang-Format に関しては、ReSharper はサポートされている Clang-Format オプションのみを適用します。

.editorconfig ファイルに定義されているフォーマットプロパティは、この .editorconfig ファイルが適用される範囲の ReSharper 設定で定義されているものと同じプロパティを上書きすることに注意してください。Clang-Format で定義されたフォーマットプロパティは、ReSharper 設定と EditorConfig 設定の両方を上書きします。

フォーマットオプションを共有するときに知っておくべきもう 1 つの重要な点は、インデントスタイル(タブ / スペース)とサイズがデフォルトで Visual Studio オプションから取得されることです。特定の言語でこれらの設定を共有する場合は、ReSharper オプションのコード編集 | [ 言語 ] | スタイルのフォーマット | タブとインデントページでインデントスタイルとサイズを Visual Studio から使用するチェックボックスをオフにして、変更を共有設定レイヤーに保存します。

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

C# の機能の使用方法については、こちらの説明と例を参照してください。他言語の詳細については、言語による ReSharper の対応するトピックを参照してください。

関連ページ:

コード補完 (IntelliSense)

ReSharper は、高度な機能を備えた Visual Studio のネイティブコード補完(IntelliSense)を補完し、拡張します。例: あなたの入力に基づいて提案のリストを絞り込み、選択した型と拡張メソッドを自動的にインポートし、メソッド名を補完するときに括弧を追加し、型に応じて変数とフィールド名を提案するなど。ReSharper のコード補完の機能に慣れ親しむために、いくつかの実装の基本があります: デフォルトでは、ReSharper はネイティブ Visual Studio の...

アクションインジケータとアクションリスト

ReSharper が Visual Studio テキストエディターに追加する最も注目すべきものの中には、アクションインジケータとアクションリストがあります。これらは、ReSharper でサポートされているすべてのファイル(C#、VB.NET、XML、CSS、JavaScript、ASP.NET など)に表示され、使用可能なアクションについて通知し、適用できます。アクションインジケータ:アクションインジケータは、設定に応じて、アクションバーの左マージンやテキストエディターの本文に表示される...

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

コードアノテーションを使用して、ReSharper がコードをインスペクションする方法をカスタマイズすることもできます。設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押し...

コードのクリーンアップダイアログ

コードのクリーンアップダイアログでは、利用可能なコードクリーンアッププロファイルを使用して、選択したスコープ内のコードをクリーンアップしたり、カスタムクリーンアッププロファイルを作成および編集したりできます。このダイアログでクリーンアッププロファイルを作成または変更する場合、変更はスマート保存ロジックを使用して保存されることに注意してください。変更を共有設定レイヤーに保存する必要がある場合は、ReSharper オプションのページで変更を行い、次へ保存をクリックしてから、目的の設定レイヤーを選択...

EditorConfig を使用する

どのフォーマットスタイルの設定がファイルフォーマット情報ウィンドウの現在のファイルに影響するかを見ることができます。ReSharper は、EditorConfig 形式で定義されたコード形式スタイル、コード構文スタイル、C# の命名スタイル、コードインスペクション重大度レベルをサポートします。Matthell は、ReSharper が EditorConfig を使用してフォーマットルールの設定全体をどのように維持するのをヘルプいるかを示しています。EditorConfig とは何ですか? R...

ReSharper 設定の管理と共有

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