将ReSharper类型成员布局模式转换为构造函数后的公共枚举

将ReSharper类型成员布局模式转换为构造函数后的公共枚举,resharper,Resharper,我将此模式用于类型成员布局: <?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

我将此模式用于类型成员布局:

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

<!-- Changed pattern in (more) accordance to StyleCop from: http://blog.mijalko.com/2009/01/resharper-stylecop-and-type-members.html -->

<Patterns xmlns="urn:shemas-jetbrains-com:member-reordering-patterns">
  <!--Do not reorder COM interfaces and structs marked by StructLayout attribute-->
  <Pattern>
    <Match>
      <Or Weight="100">
        <And>
          <Kind Is="interface"/>
          <Or>
            <HasAttribute CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute"/>
            <HasAttribute CLRName="System.Runtime.InteropServices.ComImport"/>
          </Or>
        </And>
        <HasAttribute CLRName="System.Runtime.InteropServices.StructLayoutAttribute"/>
      </Or>
    </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>
    <!--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>
</Patterns>

它工作得很好。但是如果我在一个解决方案上清理代码,我会得到一个我认为应该可以使用该模式解决的问题

  • SA1201:所有枚举必须放在所有构造函数之后

如何使所有公共枚举位于(公共)构造函数之后?

最简单的方法是安装StyleCopForResharper插件,它将为您重新定义所有这些规则


注意:根据我的第一个答案,我推荐StyleCopForResharper插件

否则,可以移动枚举部分,使其显示在构造函数和析构函数之后:

<!--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>
<!--Enums-->
<Entry>
  <Match>
    <Kind Is="enum"/>
  </Match>
  <Sort>
    <Access Order="public internal protected-internal protected private"/>
    <Name/>
  </Sort>
</Entry>

如果只想将其限制为公共枚举,则需要两个规则,其中一个具有修改的匹配约束:

<Match>
     <And>
         <Kind Is="enum"/>
         <Access Is="public"/>
     </And>
 </Match>

以下内容适用于Resharper 5.1.1727。首先,有一个公共构造函数匹配

<!--public Constructors -->
<Entry>
  <Match>
<And>
    <Kind Is="constructor"/>
      <Access Is="public"/>
</And>
  </Match>
  <Sort>
    <Static/>
  </Sort>
</Entry>

我已经试过了。而且它(使用它附带的ReSharper规则)不起作用,至少对我来说是这样。我不能进口。我报告它是一个bug。请注意,StyleCopForResharper插件现在附带了一个模式文件,您可以导入该文件,该文件与styleCop的布局规则完全匹配。我实际上已经尝试过了。而且它(使用它附带的ReSharper规则)不起作用,至少对我来说是这样。我不能进口。我把它报告为一个bug。起初我认为它不起作用,但我在订购时出了一个错误。谢谢你的提示。
<!--public enum-->
<Entry>
  <Match>
    <And Weight="100">
      <Access Is="public"/>
      <Kind Is="enum"/>
    </And>
  </Match>
  <Sort>
    <Name/>
  </Sort>
</Entry>    
<Entry>
  <Match>
    <Kind Is="constructor"/>
  </Match>
  <Sort>
    <Static/>
  </Sort>
</Entry>
public class Child
{
    public Child(int id)
    {
    }

    public enum PublicParent
    {
        A = 1
    }

    private Child()
    {
    }

    private enum Sibling
    {
        B = 4
    }
}