2008-09-11 61 views

回答

10

尝试在ReSharper的插件StyleCop的:http://www.codeplex.com/StyleCopForReSharper

+0

这个插件看起来很方便,但你误解了我的问题。我正在寻找一些预置的ReSharper代码样式格式设置,它们与StyleCop所要求的格式设置相匹配(例如公共/私人成员的排序,圆括号内的空格等) – 2008-09-29 10:19:40

3

我正在寻找同样的东西。

这里是一个自定义类型成员的布局:

<?xml version="1.0" encoding="utf-8"?> 
<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"/> 
      <HasAttribute CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute"/> 
     </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> 

    <!--Default pattern--> 
    <Pattern> 
    <!--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> 

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

    <!-- Events--> 
    <Entry> 
     <Match> 
     <Kind Is="event"/> 
     </Match> 
     <Sort> 
     <Name/> 
     </Sort> 
     <Group Region="Events"/> 
    </Entry> 

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

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

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

    <!-- public Methods --> 
    <Entry> 
     <Match> 
     <And> 
      <Kind Is="method"/> 
      <Access Is="public"/> 
     </And> 
     </Match> 
     <Sort> 
     <Static/> 
     <Name/> 
     </Sort> 
     <Group> 
     </Group> 
    </Entry> 

    <!-- internal Methods --> 
    <Entry> 
     <Match> 
     <And> 
      <Kind Is="method"/> 
      <Access Is="internal"/> 
     </And> 
     </Match> 
     <Sort> 
     <Static/> 
     <Name/> 
     </Sort> 
     <Group> 
     </Group> 
    </Entry> 

    <!--protected internal Methods --> 
    <Entry> 
     <Match> 
     <And> 
      <Kind Is="method"/> 
      <Access Is="protected-internal"/> 
     </And> 
     </Match> 
     <Sort> 
     <Static/> 
     <Name/> 
     </Sort> 
     <Group> 
     </Group> 
    </Entry> 


    <!-- protected Methods --> 
    <Entry> 
     <Match> 
     <And> 
      <Kind Is="method"/> 
      <Access Is="protected"/> 
     </And> 
     </Match> 
     <Sort> 
     <Static/> 
     <Name/> 
     </Sort> 
     <Group> 
     </Group> 
    </Entry> 

    <!-- private Methods --> 
    <Entry> 
     <Match> 
     <And> 
      <Kind Is="method"/> 
      <Access Is="private"/> 
     </And> 
     </Match> 
     <Sort> 
     <Static/> 
     <Name/> 
     </Sort> 
     <Group> 
     </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> 
<!-- 
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 /> 
--> 

基于此一个,那没做的伎俩对我,但谁值得信贷:http://www.clydesdalesoftware.net/blogs/jluif/CommentView,guid,1875594b-0d23-401f-8e22-f1cbf87beefe.aspx

这是一个标题片断一项符合到stylecop:

// <copyright file="$FileName$" company="$Company$"> 
// Copyright (c) 2008 All Right Reserved 
// </copyright> 
// <author>$author$</author> 
// <email>$email$</email> 
// <date>$date$</date> 
// <summary>$summary$</summary> 

还不够,但它是一个开始。

由于这个答案自定义类型成员布局已被放在StyleCop for resharper插件。见here

相关问题