Одна из вещей, которые я люблю о Resharper, что вы можете создать собственный тип пользователей Layout и использовать его для форматирования всех ваших файлов.
Это означает, что вы можете сортировать все поля/свойства/методы/конструкторы/переопределения/реализации интерфейса/делегаты/перечисления и т. Д. И т. Д. В любом mannar, который вам нравится (включая подсерии по имени, модификатору доступа и т. Д.), А затем даже заключите их в регионах, если вы выберете.
Например вот принципы я в настоящее время код на:
CONSIDER grouping members into the following sections in the specified order:
• All fields
• All constructors
• Public and protected properties
• Public and protected methods
• Events
• All explicit interface implementations
• Internal members
• Private members
• All nested types
When more than one access modifier is in a section, the most visible access modifier should come first (e.g. public before protected).
DO use #region blocks around not publicly callable and explicit interface implementation groups.
#region internal members
...
#endregion
#region private members
...
#endregion
А вот шаблон я использую, чтобы соответствовать им:
<?xml version="1.0" encoding="utf-8" ?>
<!--
I. Overall
I.1 Each pattern can have <Match>....</Match> element. For the given type declaration, the pattern with the match, evaluated to 'true' with the largest weight, will be used
I.2 Each pattern consists of the sequence of <Entry>...</Entry> elements. Type member declarations are distributed between entries
I.3 If pattern has RemoveAllRegions="true" attribute, then all regions will be cleared prior to reordering. Otherwise, only auto-generated regions will be cleared
I.4 The contents of each entry is sorted by given keys (First key is primary, next key is secondary, etc). Then the declarations are grouped and en-regioned by given property
II. Available match operands
Each operand may have Weight="..." attribute. This weight will be added to the match weight if the operand is evaluated to 'true'.
The default weight is 1
II.1 Boolean functions:
II.1.1 <And>....</And>
II.1.2 <Or>....</Or>
II.1.3 <Not>....</Not>
II.2 Operands
II.2.1 <Kind Is="..."/>. Kinds are: class, struct, interface, enum, delegate, type, constructor, destructor, property, indexer, method, operator, field, constant, event, member
II.2.2 <Name Is="..." [IgnoreCase="true/false"] />. The 'Is' attribute contains regular expression
II.2.3 <HasAttribute CLRName="..." [Inherit="true/false"] />. The 'CLRName' attribute contains regular expression
II.2.4 <Access Is="..."/>. The 'Is' values are: public, protected, internal, protected internal, private
II.2.5 <Static/>
II.2.6 <Abstract/>
II.2.7 <Virtual/>
II.2.8 <Override/>
II.2.9 <Sealed/>
II.2.10 <Readonly/>
II.2.11 <ImplementsInterface CLRName="..."/>. The 'CLRName' attribute contains regular expression
II.2.12 <HandlesEvent />
-->
<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>
<Group Region="Setup/Teardown"/>
</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">
<!--public delegate-->
<Entry>
<Match>
<And Weight="100">
<Access Is="public"/>
<Kind Is="delegate"/>
</And>
</Match>
<Sort>
<Name/>
</Sort>
<Group/>
</Entry>
<!--public enum-->
<Entry>
<Match>
<And Weight="100">
<Access Is="public"/>
<Kind Is="enum"/>
</And>
</Match>
<Sort>
<Name/>
</Sort>
<Group/>
</Entry>
<!--fields and constants-->
<Entry>
<Match>
<Or>
<Kind Is="constant"/>
<Kind Is="field"/>
</Or>
</Match>
<Sort>
<Kind Order="constant field"/>
<Static/>
<Readonly/>
<Access Order="public"/>
<Name/>
</Sort>
<Group/>
</Entry>
<!--Constructors. Place static one first-->
<Entry>
<Match>
<Kind Is="constructor"/>
</Match>
<Sort>
<Static/>
</Sort>
<Group/>
</Entry>
<!--public and protected properties, indexers-->
<Entry>
<Match>
<And>
<Or>
<Kind Is="property"/>
<Kind Is="indexer"/>
</Or>
<Or>
<Access Is="public"/>
<Access Is="protected"/>
</Or>
</And>
</Match>
<Sort>
<Access Order="public"/>
<Name/>
</Sort>
<Group/>
</Entry>
<!-- Methods -->
<Entry>
<Match>
<And>
<Kind Is="method"/>
<Or>
<Access Is="public"/>
<Access Is="protected"/>
</Or>
</And>
</Match>
<Sort>
<Access Order="public"/>
<Name/>
</Sort>
<Group/>
</Entry>
<!-- Events-->
<Entry>
<Match>
<Kind Is="event"/>
</Match>
<Sort>
<Name/>
</Sort>
<Group/>
</Entry>
<!--interface implementations-->
<Entry>
<Match>
<And Weight="100">
<Kind Is="member"/>
<ImplementsInterface/>
</And>
</Match>
<Sort>
<ImplementsInterface Immediate="true"/>
<Kind Order="property"/>
<Name/>
</Sort>
<Group/>
</Entry>
<!--internal properties, indexers, methods-->
<Entry>
<Match>
<And>
<Or>
<Kind Is="property"/>
<Kind Is="indexer"/>
<Kind Is="method"/>
</Or>
<Access Is="internal"/>
</And>
</Match>
<Sort>
<Access Order="public"/>
<Kind Order="property"/>
<Name/>
</Sort>
<Group Region="Internal Members"/>
</Entry>
<!--private properties, indexers, methods-->
<Entry>
<Match>
<And>
<Or>
<Kind Is="property"/>
<Kind Is="indexer"/>
<Kind Is="method"/>
</Or>
<Access Is="private"/>
</And>
</Match>
<Sort>
<Access Order="public"/>
<Kind Order="property"/>
<Name/>
</Sort>
<Group Region="Private Members"/>
</Entry>
<!--all other members-->
<Entry/>
<!--nested types-->
<Entry>
<Match>
<Kind Is="type"/>
</Match>
<Sort>
<Name/>
</Sort>
<Group/>
</Entry>
</Pattern>
</Patterns>
Это делает форматирование кода для удовлетворения ваших компаний кодирования стиль такой же простой, как и одна комбинация клавиш.
Вы думаете о коммерческой или индивидуальной лицензии? Это для личного или корпоративного использования? –
коммерческая лицензия – StackUnderflow