La fonctionnalité de reformatage du code ReSharper est très pratique et flexible, en particulier avec la nouvelle flexibilité de mise en page du code mise en place par JetBrains dans la version 3.0. Existe-t-il un ensemble standard de paramètres de style de code pour ReSharper qui correspondent aux règles imposées par Microsoft StyleCop, de sorte que la conformité StyleCop peut être aussi simple que l'exécution de la fonctionnalité ReSharper "reformater le code"?Existe-t-il une définition de style de code ReSharper standard correspondant à toutes les exigences StyleCop?
20
A
Répondre
10
Essayez le plugin ReSharper StyleCop à: http://www.codeplex.com/StyleCopForReSharper
3
Je cherche les mêmes choses.
Voici une mise en page de membre Personnalisé:
<?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 />
-->
basé sur celui-ci, qui ne fait pas l'affaire pour moi, mais qui mérite le crédit: http://www.clydesdalesoftware.net/blogs/jluif/CommentView,guid,1875594b-0d23-401f-8e22-f1cbf87beefe.aspx
Ceci est un en-tête snippet CONFORME à 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>
Toujours pas tout à fait là mais c'est un début.
Depuis cette réponse, la disposition des membres de type Custom a été placée dans StyleCop for resharper plugin. Voir here
Ce plugin semble pratique, mais vous avez mal compris ma question. Je cherchais des paramètres de formatage de style de code ReSharper pré-conservés qui correspondent à ceux mandatés par StyleCop (par exemple, ordre des membres publics/privés, espace entre parenthèses, etc.) –
Mise à jour: StyleCopForResharper est désormais livré avec un fichier de paramètres de style de code standard être importé dans ReSharper. –