Resharper를 피하여 선언에 따라 영역을 추가하세요. (Avoid Resharper to add a region per Declaration)


문제 설명

Resharper를 피하여 선언에 따라 영역을 추가하세요. (Avoid Resharper to add a region per Declaration)

i have some trouble configuring the "Type Members Layout" of Resharper 7.1.3. 

I started using the template for using with regions and tried to customized it for my needs.

P L E A S E: No discussion about "not using regions, etc. ..."

My first problem is, that he is currently creating one region per field declaration in code, but of course i want to have ONE region with "Static Fields and Constants" and ONE region with "Fields and Constants".

The second problem is that he does not create a single region for my "Constructors". It seems that he just accepts the first two "Patterns" in the configuration but ignores the others.?!

See here the multiple Regions Problem:

My Type Members Layout looks like this:

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

Would be cool, if someone could give me the hint ;)

cheers, Chris


참조 솔루션

방법 1:

Have you tried writing 

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

instead of

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

?

As for your second problem ‑ you've created two default patterns. Rules for "Static Fields and Constants" and "Fields and Constants" came to the first pattern and rules for constuctors came to the second pattern. Seems like ReSharper accepts the first matching pattern and ignores all others. You need to remove these lines to combine your patterns:

</Pattern>

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

(by The ChrisDmitry Osinovskiy)

참조 문서

  1. Avoid Resharper to add a region per Declaration (CC BY‑SA 3.0/4.0)

#regions #C# #resharper






관련 질문

Resharper를 피하여 선언에 따라 영역을 추가하세요. (Avoid Resharper to add a region per Declaration)

모바일용 HTML 5의 특정 영역에 링크가 있는 이미지 (Image with links in certain areas in HTML 5 for mobile)

새로운 영역 생성 - Drupal 7에서 기쁨이 없음 (Creating New Region - No Joy in Drupal 7)

코드 영역을 접도록 Atom을 구성하는 방법 예: Sublime Text와 같은 ## region_name (How to configure Atom to fold code regions e.g. ## region_name like Sublime Text does)

선택 목록 apex 4.2를 기반으로 필드를 동적으로 추가 (Dynamically add fields based on select list apex 4.2)

HBase 클러스터에서 regionservers의 시작 코드를 얻는 방법은 무엇입니까? (How to get regionservers' startcode in a HBase cluster?)

코드에 자동으로 지역 추가 (Automatically add Regions to code)

Objective-C에서 startMonitoringForRegion을 사용하여 여러 지역을 스캔하는 방법 (How to scan multiple regions using startMonitoringForRegion in Objective-C)

HBase 테이블이 비어 있지만 영역이 증가합니다. (HBase table is empty, but regions are increased)







코멘트