Wiki

Clone wiki

Greenkeeper / SortingDefinition

Configure sorting

Sorting can be configured in the optionsdialog. Navigate in Visual Studio to the ReSharper-Options, menuitem Greenkeeper Sorting (ReSharper > Options > Greenkeeper > Sorting).

OptionsDialog

The sorting could be defined as xml. Here is a simple example:

#!xml
<?xml version="1.0" encoding="utf-8"?>
<DeclarationSortingDefinition>

  <DeclarationSorter type="DeclarationSorter"> 
    <DeclarationComparer type="AlphanumericDeclarationComparer"/>
  </DeclarationSorter>

  <AdditionalExecutor type="CodeFormatExecutor"/>

</DeclarationSortingDefinition>
This configuration sort your code alphabetically and reformats the code after sorting.

##Xml-Elements in config

DeclarationSorterTypes

  • DeclarationSorter

  • ConditionalDeclarationSorter (XmlElements: ClassDeclarationCondition, DeclarationSorter)

  • MultiConditionalDeclarationSorter (XmlElements: ConditionalDeclarationSorter)

ClassDeclarationConditionTypes

  • AttributeClassDeclarationCondition (XmlAttributes: Attributes)

  • NoClassDeclarationCondition

DeclarationComparerTypes

  • AccessRightsDeclarationComparer (XmlAttributes: AccessRightsOrder -> e.g. "PRIVATE,INTERNAL" -> "PUBLIC", "INTERNAL", "PROTECTED", "PROTECTED_OR_INTERNAL", "PROTECTED_AND_INTERNAL", "PRIVATE", "NONE")

  • AlphanumericDeclarationComparer

  • AttributeDeclarationComparer (XmlAttributes: AttributeOrder -> e.g "Test,TestCase")

  • ConditionalDeclarationComparer (XmlElements: DeclarationCondition, DeclarationComparer)

  • DeclarationBaseElementComparer (XmlAttributes: ExcludedTypes -> e.g. "System.Object,System.IDisposable")

  • ModifiersDeclarationComparer (XmlAttributes: ModifierNameOrder -> e.g. "Static,Readonly" -> "None","Abstract","Sealed", "Virtual", "Override", "Static", "Readonly", "Extern" , "Unsafe", "Volatile")

  • MultiDeclarationComparer (XmlElements: DeclarationComparer)

  • ParameterCountDeclarationComparer

  • RegionDeclarationComparer

  • SortedIndexDeclarationComparer

  • TypeDeclarationComparer (XmlAttributes: TypeOrder -> e.g. "Constant, Method" -> "Method", "Constant", "Property", "Field", "Constructor", "Destructor", "Event", "Indexer", "Delegate", "Operator")

  • UsageOrderDeclarationComparer (XmlElements: DeclarationComparer)

  • UsageOrderRootDeclarationComparer

DeclarationConditionTypes

  • TypeDeclarationCondition (XmlAttributes: Types -> e.g. "Constant, Method" -> "Method", "Constant", "Property", "Field", "Constructor", "Destructor", "Event", "Indexer", "Delegate", "Operator")

  • AccessRightsDeclarationCondition (XmlAttributes: AccessRights -> e.g. "PRIVATE,INTERNAL" -> "PUBLIC", "INTERNAL", "PROTECTED", "PROTECTED_OR_INTERNAL", "PROTECTED_AND_INTERNAL", "PRIVATE", "NONE")

AdditionalExecutorTypes

  • BrokenRegionRemoverExecutor

  • CodeFormatExecutor (XmlAttributes: Profile -> "DEFAULT", "INDENT", "GENERATOR", "SOFT")

  • MultiAdditionalExecutor (XmlElements: AdditionalExecutor)

  • RegionKeeperExecutor

Default sorting behaviour

Here is a more complex example and already the default sorting behaviour:

#!xml

<?xml version="1.0" encoding="utf-8"?>
<DeclarationSortingDefinition>
    <DeclarationSorter type="MultiConditionalDeclarationSorter"> 
         <ConditionalDeclarationSorter>
            <ClassDeclarationCondition type="AttributeClassDeclarationCondition" Attributes="TestFixture"/>
            <DeclarationSorter type="DeclarationSorter">
                <DeclarationComparer type="MultiDeclarationComparer">
                    <DeclarationComparer type="TypeDeclarationComparer" TypeOrder="Constant,Field,Property,Constructor,Method"/>        
                    <DeclarationComparer type="ConditionalDeclarationComparer"> 
                        <DeclarationCondition type="TypeDeclarationCondition" Types="Method" />
                        <DeclarationComparer type="UsageOrderDeclarationComparer">  
                            <DeclarationComparer type="MultiDeclarationComparer">   
                                <DeclarationComparer type="SortedIndexDeclarationComparer"/>    
                                <DeclarationComparer type="AttributeDeclarationComparer" AttributeOrder="TestFixtureSetUp,TestFixtureTearDown,SetUp,TearDown,Test|TestCase|TestCaseSource" />   
                            </DeclarationComparer> 
                        </DeclarationComparer> 
                    </DeclarationComparer>
                    <DeclarationComparer type="ModifiersDeclarationComparer" ModifierNameOrder="Static,Readonly"/>  
                    <DeclarationComparer type="AccessRightsDeclarationComparer" AccessRightsOrder="PUBLIC,INTERNAL,PROTECTED,PRIVATE"/>
                    <DeclarationComparer type="ConditionalDeclarationComparer">
                        <DeclarationCondition type="TypeDeclarationCondition" Types="Constructor" />
                        <DeclarationComparer type="ParameterCountDeclarationComparer"/>
                    </DeclarationComparer>
                    <DeclarationComparer type="SortedIndexDeclarationComparer"/>
                </DeclarationComparer>          
            </DeclarationSorter>
        </ConditionalDeclarationSorter>     

        <ConditionalDeclarationSorter>
            <ClassDeclarationCondition type="NoClassDeclarationCondition" />
            <DeclarationSorter type="DeclarationSorter"> 
                <DeclarationComparer type="MultiDeclarationComparer">
                    <DeclarationComparer type="TypeDeclarationComparer" TypeOrder="Constant,Field,Property,Constructor,Method"/>        
                    <DeclarationComparer type="ConditionalDeclarationComparer"> 
                        <DeclarationCondition type="TypeDeclarationCondition" Types="Method" />
                        <DeclarationComparer type="UsageOrderDeclarationComparer">  
                            <DeclarationComparer type="MultiDeclarationComparer">   
                                <DeclarationComparer type="SortedIndexDeclarationComparer"/>    
                                <DeclarationComparer type="UsageOrderRootDeclarationComparer"/> 
                                <DeclarationComparer type="ModifiersDeclarationComparer" ModifierNameOrder="Static,Readonly"/>  
                                <DeclarationComparer type="AccessRightsDeclarationComparer" AccessRightsOrder="PUBLIC,INTERNAL,PROTECTED,PRIVATE"/> 
                                <DeclarationComparer type="ParameterCountDeclarationComparer"/>     
                            </DeclarationComparer> 
                        </DeclarationComparer> 
                    </DeclarationComparer>
                    <DeclarationComparer type="ModifiersDeclarationComparer" ModifierNameOrder="Static,Readonly"/>  
                    <DeclarationComparer type="AccessRightsDeclarationComparer" AccessRightsOrder="PUBLIC,INTERNAL,PROTECTED,PRIVATE"/>
                    <DeclarationComparer type="ConditionalDeclarationComparer">
                        <DeclarationCondition type="TypeDeclarationCondition" Types="Constructor" />
                        <DeclarationComparer type="ParameterCountDeclarationComparer"/>
                    </DeclarationComparer>
                    <DeclarationComparer type="SortedIndexDeclarationComparer"/>    
                </DeclarationComparer>      
            </DeclarationSorter>
        </ConditionalDeclarationSorter>

    </DeclarationSorter>
</DeclarationSortingDefinition>

Updated