ReSharper 2018.2ヘルプ

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

ReSharper | 編集 | コードの再フォーマット
Ctrl+Alt+L
ReSharper_ReformatCode

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

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

編集して貼り付けたコードの自動書式設定

エディタにコードを入力すると、ReSharperはセミコロン ; を入力するとすぐに式を再フォーマットし、閉じる波括弧 }を入力するとすぐにコードブロックを再フォーマットします。必要に応じて、ReSharperオプションの環境 | エディター | エディタの動作ページでこれらの種類の自動書式設定を無効にすることができます。

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. アクションリストで ThemedIcon CodeCleanupOptionPage Screen Gray 選択のフォーマットを選択します。

    Reformatting currently selected code

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

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

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

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

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

  2. 以下のいずれか 1 つを実行します:
    • Ctrl+Alt+F を押すか、メインメニューからReSharper | 編集 | クリーンアップコードを選択してください。

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

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

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

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

コードインスペクションを使用してC#およびC++の書式設定規則を更新する

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

ソリューションによっては、コードベースに何百もの小さなフォーマット違反がある可能性があります。メソッド間の異なる字下げサイズ、switch文の異なる大文字小文字の字下げ、改行の欠落などがあります。これらのすべての違反に対してコードインスペクションを有効にすることはあまりにも騒々しい可能性があります。

一方、コードの可読性を低下させたり、コードの理解に影響を及ぼす可能性のある書式設定の問題があります: 例えば:

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

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

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

  • 宣言波括弧、

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

このようなフォーマットの問題については、可能にするコードインスペクションを推奨します。

既存の書式を維持する

ReSharperがコード補完コード生成機能を備えた新しいコードを生成し、コード・テンプレートを適用してリファクタリング (refactoring)を実行するときに、このルールが適用されるという意味で、「ZZP5P」などの既存のコードを再フォーマットする場合はこれらのルールは無視されます。 。

書式設定の規則を厳しく保つには、特定のコンテキストに対して既存のまま...最大空白行を維持する、およびシンプルラッププリファレンスを使用します: ReSharperオプションでこれらの設定の確認や変更ができます:

ReSharper: keep existing formatting for selected rules

異なる改行スタイルのコードを再フォーマットする

またReSharperでは、ルールを書式設定して別の方法で同様のコードを再フォーマットするのではなく、明示的なアクションを使用することもできます。これらのアクションは、 既存の書式を維持するに関連するルールを選択した場合に最も役立ちます。ただし、より厳密な設定がある場合、対応する明示的な書式設定アクションは機能しません。このような構成とは、影響を受けるコンテキストで常に書式設定ルールを適用する必要があるためです。例:既存のまま...の設定を無効にすると、後述のwrap / chop / spacious / compactコマンドで同じ結果が得られます。いくつかのラッピングルールがチョップ...に設定されている場合、wrap / compactコマンドを呼び出しても、対応するコンテキストのコードは常に切り詰められます。

長い行の折り返しと細断

長い行を折り返す長い行を切り詰めるのアクションは、キャレットがライン上にあるときに使用可能になります。これは許容される最大ライン長より長いです。 ReSharperオプションのコード編集 | 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);

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

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

これらのアクションを呼び出すには、コードブロック( Ctrl+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 | オプションを選択します。

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

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

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

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

選択したコードの書式設定ルールを構成するには

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

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

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

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

    Configuring formatting rules for selected code

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

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

  7. オプションで、コメントとして保存をクリックできます。このようにして、選択したブロックの前後に変更が コメントとしてに保存されます。これにより、設定を変更せずに、希望のフォーマッタルールをローカルでオーバーライドできます。

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

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

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

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

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

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

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

コメント付きの個々の書式設定ルールを変更するには

  1. 編集する書式設定ルールの名前を探します。 ReSharperオプション(コード編集 | [言語] | スタイルの書式設定)で検索するか、希望のルールが適用されるコードブロックを選択し、 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の下に保持したり、チームメンバーと自動的に共有することができます。

ReSharperは、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設定の両方を上書きします。

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

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

Language: C#

Language: VB.NET

Language: C++

Language: HTML

Language: ASP.NET

Language: Razor

Language: JavaScript

Language: TypeScript

Language: CSS

Language: XML

Language: XAML

Language: Resx

Language: Build Scripts

Language: Protobuf

Language: JSON

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

Feature is available

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

最終更新日: 2018年11月5日

関連事項