Thursday, January 08, 2009

Resharper, Stylecop and type members layout

In order to resort type members layout to match requirements of StyleCop using ReSharper open ReSharper's settings, choose "Type Members Layout" and paste following 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="true">


 


    <!--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>


    </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>


    </Entry>


 


    <!--Enums-->


    <Entry>


      <Match>


        <Kind Is="enum"/>


      </Match>


      <Sort>


        <Access Order="public internal protected-internal protected private" />


        <Name/>


      </Sort>


    </Entry>


 


    <!--Constructors. Place static one first-->


    <Entry>


      <Match>


        <Kind Is="constructor"/>


      </Match>


      <Sort>


        <Static/>


        <Access Order="public internal protected-internal protected private" />


      </Sort>


    </Entry>


 


    <!--Destructors. Place static one first-->


    <Entry>


      <Match>


        <Kind Is="destructor"/>


      </Match>


      <Sort>


        <Static/>


        <Access Order="public internal protected-internal protected private" />


      </Sort>


    </Entry>


 


    <!-- Events -->


    <Entry>


      <Match>


        <Kind Is="event"/>


      </Match>


      <Sort>


        <Access Order="public internal protected-internal protected private" />


        <Name/>


      </Sort>


    </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>


    </Entry>


 


    <!--Indexers-->


    <Entry>


      <Match>


        <Kind Is="indexer"/>


      </Match>


      <Sort>


        <Access Order="public internal protected-internal protected private" />


        <Static/>


        <Abstract/>


        <Virtual/>


        <Override/>


        <Name/>


      </Sort>


    </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>


    </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>


    </Entry>


  </Pattern>




Now, choose Cleanup Code.

( tnx to Jordan Dimitrov)

3 comments:

Anonymous said...

Thanks for this. I've been looking for a StyleCop type reformat pattern for ages (on and off). I tried Regionerate, which is a nice little tool, but it would often stop working and seemed a little buggy. Oh well, that's Beta2 for you!
This will save me LOADS of time.

Ben said...

Nice work. I'm using it on Resharper6 and it seems to be working just fine.
Thanks.

Dan said...

Nice work. I Appreciate this. Have used it before, and had to find it again to use on another project.