避免使用Resharper按照声明添加区域

时间:2013-05-13 10:24:09

标签: c# resharper regions

我在配置Resharper 7.1.3的“类型成员布局”时遇到了一些麻烦。

我开始使用模板与区域一起使用,并尝试根据我的需要对其进行自定义。

P L E A S E:不讨论“不使用地区等......”

我的第一个问题是,他目前正在代码中为每个字段声明创建一个区域,但当然我希望一个区域包含“静态字段和常量”,一个区域包含“字段和常量”。

第二个问题是他没有为我的“Constructors”创建一个区域。他似乎只接受了配置中的前两个“模式”,但忽略了其他模式。?!

在这里看到多个地区问题:

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>

如果有人能给我提示,那会很酷;)

欢呼声, 克里斯

1 个答案:

答案 0 :(得分:5)

你有没有尝试过写作

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

而不是

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

至于你的第二个问题 - 你已经创建了两个默认模式。 “静态字段和常量”和“字段和常量”的规则出现在第一种模式中,构造规则进入第二种模式。似乎ReSharper接受第一个匹配模式并忽略所有其他模式。您需要删除这些行以组合您的模式:

</Pattern>

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