web-dev-qa-db-ja.com

タイプメンバーをResharperで並べ替える方法

典型的なシナリオ:多くの人が取り組んだクラス。メソッドやプロパティなどをアルファベット順に並べ替えたいのですが。

私はこれを地域内で、またはクラス全体でグローバルに実行できるようにしたいと考えています。

Resharperでそれを実行する機能を確認しましたが、何も実行しないようです。

45
AngryHacker

「クリーンアップコード」機能を使用します。

メンバーの順序は、言語、C#、タイプメンバーレイアウトのReSharperオプションで設定できます。これは、ReSharperがメンバーを並べ替えるときに使用する、十分に文書化されたXMLレイアウト仕様です。

85
Lucero

デフォルトでは、ソートはアクティブ化されていません。リシャーパーオプションを開いてアクティブにしてから、ここにアクセスできます。

enter image description here

52
jgauffin

私のように、ウェブ検索でこの質問にたどり着いたが、質問の詳細が期待したものではなかったという人のために、個々のメンバーを上下に移動できることを知りたいと思うかもしれません。 Ctrl-Alt-Shiftを押しながら上矢印または下矢印を押すと、ファイルが表示されます。

(明らかに、それは質問の本文で要求されるアルファベット順の自動化された配置ではありませんが、タイトルで質問に対して見つけたいと思っていた答えでした。)

45
Ian Griffiths

考慮すべき代替案は Regionerate です。私たちはReSharperを使用していますが、Regionerateは、リージョンの作成とメンバーの並べ替え/再配置のニーズに適しています。もちろん、すべてカスタマイズ可能です。

更新: ReSharperのコードクリーンアップ を代わりに使用し始めました。

4
TrueWill

2つのこと:事前コンパイルされた条件(#if DEBUGなど)が型メンバーの並べ替えを停止する既知の(ただし、詳細には文書化されていない)条件があります。 http://youtrack.jetbrains.com/issue/RSRP-336643#tab=Comments 言い換えると、#IF DEBUGがある場合、並べ替えは行われません。

また、ReSharper 8.0.1(およびおそらく以前のバージョン)では、XMLテンプレートをDEFAULT WITH REGIONSに戻すボタンには、#REGIONグループ化を含めるためのステートメントがないことに気づきました。そこで、並べ替えを含むStyleCopフレンドリーなテンプレートを使用し、各タイプメンバーに#REGION-ingを追加しました。 CUSTOM TEMPLATEを選択した場合、このXMLに貼り付けて機能するはずです。

<Patterns xmlns="urn:shemas-jetbrains-com:member-reordering-patterns">

<!--  Do not reorder COM interfaces  -->
<Pattern>
    <Match>
        <And Weight="100">
            <Kind Is="interface" />
            <HasAttribute CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute" />
        </And>
    </Match>
</Pattern>

<!--  Special formatting of NUnit test fixture  -->
<Pattern RemoveAllRegions="true">
    <Match>
        <And Weight="100">
            <Kind Is="class" />
            <HasAttribute CLRName="NUnit.Framework.TestFixtureAttribute" Inherit="true" />
        </And>
    </Match>

    <!--  Setup/Teardow  -->
    <Entry>
        <Match>
            <And>
                <Kind Is="method" />
                <Or>
                    <HasAttribute CLRName="NUnit.Framework.SetUpAttribute" Inherit="true" />
                    <HasAttribute CLRName="NUnit.Framework.TearDownAttribute" Inherit="true" />
                    <HasAttribute CLRName="NUnit.Framework.FixtureSetUpAttribute" Inherit="true" />
                    <HasAttribute CLRName="NUnit.Framework.FixtureTearDownAttribute" Inherit="true" />
                </Or>
            </And>
        </Match>
    </Entry>
    <!--  All other members  -->
    <Entry />
    <!--  Test methods  -->
    <Entry>
        <Match>
            <And Weight="100">
                <Kind Is="method" />
                <HasAttribute CLRName="NUnit.Framework.TestAttribute" Inherit="false" />
            </And>
        </Match>
        <Sort>
            <Name />
        </Sort>
    </Entry>
</Pattern>

<!--  Default pattern  -->


<Pattern RemoveAllRegions="false">
    <!--  Delegates  -->
    <Entry>
        <Match>
            <And Weight="100">
                <Access Is="public" />
                <Kind Is="delegate" />
            </And>
        </Match>
        <Sort>
            <Access Order="public internal protected-internal protected private" />
            <Name />
        </Sort>
        <Group Region="Delegates" />
    </Entry>


    <!--  Fields and constants  -->
    <Entry>
        <Match>
            <Or>
                <Kind Is="field" />
                <Kind Is="constant" />
            </Or>
        </Match>

        <Sort>
            <Access Order="public internal protected-internal protected private" />
            <Kind Order="constant" />
            <Readonly />
            <Static />
            <Name />
        </Sort>
        <Group Region="Fields" />
    </Entry>

    <!--  Enums  -->
    <Entry>
        <Match>
            <Kind Is="enum" />
        </Match>
        <Sort>
            <Access Order="public internal protected-internal protected private" />
            <Name />
        </Sort>
        <Group Region="Enums" />
    </Entry>

    <!--  Constructors. Place static one first  -->
    <Entry>
        <Match>
            <Kind Is="constructor" />
        </Match>
        <Sort>
            <Static />
            <Access Order="public internal protected-internal protected private" />
        </Sort>
        <Group Region="Constructors" />
    </Entry>

    <!--  Destructors. Place static one first  -->
    <Entry>
        <Match>
            <Kind Is="destructor" />
        </Match>
        <Sort>
            <Static />
            <Access Order="public internal protected-internal protected private" />
        </Sort>
        <Group Region="Destructors" />
    </Entry>


    <!--  Events  -->
    <Entry>
        <Match>
            <Kind Is="event" />
        </Match>

        <Sort>
            <Access Order="public internal protected-internal protected private" />
            <Name />
        </Sort>
        <Group Region="Events" />
    </Entry>

    <!--  Properties  -->
    <Entry>
        <Match>
            <And>
                <Kind Is="property" />
                <Not>
                    <Kind Is="indexer" />
                </Not>
            </And>
        </Match>
        <Sort>
            <Access Order="public internal protected-internal protected private" />
            <Static />
            <Abstract />
            <Virtual />
            <Override />
            <Name />
        </Sort>
        <Group Region="Properties" />
    </Entry>

    <!--  Indexers  -->
    <Entry>
        <Match>
            <Kind Is="indexer" />
        </Match>
        <Sort>
            <Access Order="public internal protected-internal protected private" />
            <Static />
            <Abstract />
            <Virtual />
            <Override />
            <Name />
        </Sort>
        <Group Region="Indexers" />
    </Entry>

    <!--  Methods  -->
    <Entry>
        <Match>
            <And>
                <Or>
                    <Kind Is="method" />
                    <Kind Is="operator" />
                    <HandlesEvent />
                </Or>
                <Not>
                    <Kind Is="destructor" />
                </Not>
            </And>
        </Match>
        <Sort>
            <Access Order="public internal protected-internal protected private" />
            <Static />
            <Abstract />
            <Virtual />
            <Override />
            <Name />
        </Sort>
        <Group Region="Methods" />
    </Entry>

    <!--  all other members  -->
    <Entry />

    <!--  nested types  -->
    <Entry>
        <Match>
            <Kind Is="type" />
        </Match>
        <Sort>
            <Access Order="public internal protected-internal protected private" />
            <Static />
            <Abstract />
            <Virtual />
            <Override />
            <Name />
        </Sort>
        <Group Region="Nested Types" />
    </Entry>
</Pattern>
3
Clint StLaurent

特定のメソッドのパラメーターを並べ替える場合、カーソルがメソッド名にある場合は、[リファクタリング]> [署名の変更]を使用できます。 IntelliJショートカットを使用しているので、コマンドはCtrl + Shift + Rの後にCtrl + F6を押します。

Refactor context menu

その後、ダイアログがポップアップし、メソッドのパラメーターを並べ替えることができます。インターフェースの実装もリファクタリングします。

0
birdamongmen

jgauffinの答えは近いですが、(R#2017で)プロパティを並べ替えるには、ファイルレイアウトダイアログのヘッダーにある「XAML」オプションをクリックして変更する必要があることがわかりました

<Entry DisplayName="Properties, Indexers">
  <Entry.Match>
    <Or>
      <Kind Is="Property" />
      <Kind Is="Indexer" />
    </Or>
  </Entry.Match>
</Entry>

<Entry DisplayName="Properties, Indexers">
  <Entry.Match>
    <Or>
      <Kind Is="Property" />
      <Kind Is="Indexer" />
    </Or>
  </Entry.Match>
  <Entry.SortBy>
    <Name />
  </Entry.SortBy>
</Entry>

「並べ替え」プロパティは空で読み取り専用でした。これは、同じ名前のアイテムにのみ使用されるため意味があります(すべてのプロパティに一意の名前を付ける必要があります)

0
Robin Bennett