2013-05-13 17 views
5

Resharper 7.1.3の "Type Members Layout"を構成する際に問題があります。宣言ごとに領域を追加することを避けるためにResharperを避ける

リージョンを使用するためにテンプレートを使用し始め、自分のニーズに合わせてカスタマイズしようとしました。

PLEASE約ない議論「など、領域を使用していない...」

私の最初の問題は、彼が現在のコードでフィールド宣言ごとに一つの領域を作成しているが、もちろん私は1つを持つようにしたいということであり、 「静的フィールドと定数」のある領域と、「フィールドと定数」のある領域です。

第2の問題は、彼が私の「コンストラクタ」のために単一の領域を作成しないということです。彼はコンフィギュレーションの最初の2つの "Patterns"を受け入れますが、他のものは無視しているようです。

は、ここでは、複数の地域の問題を参照してください:

too many regions

私のタイプメンバーのレイアウトは次のようになります。

誰かが私にヒントを与えることができれば
<?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 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> 
      <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> 

    <Pattern RemoveAllRegions="true"> 
     <!-- static fields and constants --> 
     <Entry> 
      <Match> 
        <Or> 
         <And> 
          <Kind Is="constant"/> 
          <Static/> 
         </And>    
         <And> 
          <Kind Is="field"/> 
          <Static/> 
         </And>        
        </Or> 

      </Match> 
      <Sort> 
       <Readonly/> 
       <Name/> 
      </Sort> 
      <Group> 
       <Name Region="Static Fields and Constants"/> 
      </Group> 
     </Entry> 

     <!--fields and constants--> 
     <Entry> 
      <Match> 
        <Or> 
         <And> 
          <Kind Is="constant"/> 
          <Not> 
           <Static/> 
          </Not> 
         </And>    
         <And> 
          <Kind Is="field"/> 
          <Not> 
           <Static/> 
          </Not> 
         </And>     
        </Or> 
      </Match> 
      <Sort> 
       <Readonly/> 
       <Name/> 
      </Sort> 
      <Group> 
       <Name Region="Fields and Constants"/> 
      </Group> 
     </Entry> 
    </Pattern> 

    <!--Default pattern--> 
    <Pattern RemoveAllRegions="false"> 

     <!--public delegate--> 
     <Entry> 
      <Match> 
       <And Weight="100"> 
        <Access Is="public"/> 
        <Kind Is="delegate"/> 
       </And> 
      </Match> 
      <Sort> 
       <Name/> 
      </Sort> 
      <Group Region="Delegates"/> 
     </Entry> 

     <!--public enum--> 
     <Entry> 
      <Match> 
       <And Weight="100"> 
        <Access Is="public"/> 
        <Kind Is="enum"/> 
       </And> 
      </Match> 
      <Sort> 
       <Name/> 
      </Sort> 
      <Group> 
       <Name Region="${Name} enum"/> 
      </Group> 
     </Entry> 

     <!-- Constructors. Place static one first --> 
     <Entry> 
      <Match> 
       <Kind Is="constructor"/> 
      </Match> 
      <Sort> 
       <Static/> 
      </Sort> 
      <Group> 
       <Name Region="Constructor/Destructor"/> 
      </Group> 
     </Entry> 

     <!--properties, indexers--> 
     <Entry> 
      <Match> 
       <Or> 
        <Kind Is="property"/> 
        <Kind Is="indexer"/> 
       </Or> 
      </Match> 
      <Group Region="Properties"/> 
     </Entry> 

     <!--interface implementations--> 
     <Entry> 
      <Match> 
       <And Weight="100"> 
        <Kind Is="member"/> 
        <ImplementsInterface/> 
       </And> 
      </Match> 
      <Sort> 
       <ImplementsInterface Immediate="true"/> 
      </Sort> 
      <Group> 
       <ImplementsInterface Immediate="true" Region="${ImplementsInterface} Members"/> 
      </Group> 
     </Entry> 

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

     <!--nested types--> 
     <Entry> 
      <Match> 
       <Kind Is="type"/> 
      </Match> 
      <Sort> 
       <Name/> 
      </Sort> 
      <Group> 
       <Name Region="Nested type: ${Name}"/> 
      </Group> 
     </Entry> 
    </Pattern> 
</Patterns> 

は、クールになる;)

歓声、 クリス

答えて

5

あなたは

<Group Region="Static Fields and Constants"/> 

代わりの

<Group> 
    <Name Region="Static Fields and Constants"/> 
</Group> 

を書いてみましたか?

2番目の問題として、2つのデフォルトパターンが作成されています。 「静的フィールドと定数」と「フィールドと定数」のルールが最初のパターンになり、コンストラクタのルールが2番目のパターンになりました。 ReSharperは最初に一致するパターンを受け入れ、他のパターンはすべて無視するようです。パターンを結合するには、次の行を削除する必要があります。

</Pattern> 

<!--Default pattern--> 
<Pattern RemoveAllRegions="false"> 
+0

それは魅力のように動作します;)!しかし、私が複数の "Pattern"を使用した理由は、ResharperがFieldsとConstants Regions内のRegionsをクリーンアップすることを望んでいましたが、メソッド、プロパティなどにリージョンを残したいと思ったからです。なぜなら私は地域を使って特別な方法をグループ化することがあるからです。私が "クリーンアップコード"を使用する場合、Resharperはカスタム領域を破壊するでしょう。 : – ChrisTTian667

+0

@ ChrisTTian667残念ながら、領域を選択的に削除することは不可能です。 –