2013-05-13 48 views
5

我在配置Resharper 7.1.3的「類型成員佈局」時遇到了一些問題。避免Resharper爲每個聲明添加一個區域

我開始使用該模板來使用區域,並試圖根據我的需要對其進行自定義。

請:關於任何討論「不使用區域等......」

我的第一個問題是,他目前在代碼中創建每場聲明中的一個區域,但我當然希望有一帶有「靜態字段和常量」的區域以及帶有「字段和常量」的一個區域。

第二個問題是他沒有爲我的「構造函數」創建單個區域。看起來他只是接受配置中的前兩個「模式」,卻忽略了其他模式。

看到這裏的多個區域問題:

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> 

將是冷靜,如果有人可以給我的暗示;)

歡呼聲, Chris

回答

5

您是否嘗試過寫作的

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

代替

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

至於你的第二個問題 - 你已經創建了兩個默認模式。 「靜態字段和常量」和「字段和常量」的規則出現了第一種模式,並且構造函數的規則出現了第二種模式。看起來像ReSharper接受第一個匹配模式並忽略所有其他模式。你需要刪除這些線來結合你的模式:

</Pattern> 

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

嗨,大快捷答覆大。它就像一個魅力;)!但是,我使用多個「模式」的原因是,我希望Resharper清理字段和常量區域內的區域,但希望它單獨離開方法,屬性等區域。因爲有時我使用區域來分組特殊方法。如果我使用「清理代碼」,Resharper會破壞我的自定義區域。 :( – ChrisTTian667 2013-05-13 12:23:09

+0

@ ChrisTTian667不幸的是,現在不可能有​​選擇地刪除區域。 – 2013-05-13 12:39:21

相關問題