8
votes

Comment utilisez-vous la fonctionnalité correspondante des motifs dans Resharper 5?

La nouvelle correspondance du modèle de Resharper 5 semble très puissante, bien qu'il faut un peu de bricolage pour déterminer comment l'utiliser.

Pour ceux qui ne connaissent pas cette fonctionnalité, il vous permet de rechercher des modèles spécifiques dans votre code. Les instances de tels modèles peuvent éventuellement être remplacées par une alternative. En Intellij, cela s'appelait la recherche structurelle et remplacer. C'est beaucoup plus puissant que la simple recherche / remplacement de Regex.

J'aimerais collecter une série de modèles que les gens utilisent afin que je puisse mieux utiliser cette fonctionnalité.

Je propose que chaque réponse inclue:

  • Une brève introduction de la justification du motif
  • Un exemple de ce qu'il correspond à
  • Un exemple facultatif de remplacement
  • le XML généré en exportant le modèle afin que d'autres puissent l'essayer trop

3 commentaires

Je suis nouveau à Resharper 5, mais voulez-vous dire que les cas où Resharper (par exemple) recommande d'utiliser Linq à la place d'une foreseach qui existe uniquement pour localiser un sous-ensemble d'objets dans une collection?


@Jyelton - Resharper recommandera ce genre de chose hors de la boîte. La fonctionnalité que je parle ici est celle qui vous permet d'ajouter votre propre type de suggestions / astuces / avertissements / erreurs. Si vous voulez que R # reporte certains types de choses que ce n'est pas déjà, vous pouvez les programmer en vous-même. Voir certains des exemples que j'ai postés ci-dessous.


Merci, cela explique le motif correspondant à moi. Cela ressemble à une grande référence.


9 Réponses :


1
votes

Redémarrage d'un chronomètre

.NET 4 introduit le System.Diagnostics.stopwatch.Diagnostics.stopwatch.Reesteart () Méthode qui peut ranger votre code.

avant: xxx

après: xxx

xml: < Pré> xxx


0 commentaires

10
votes

correspondant à un bit [drapeaux] Enum

.NET 4 introduit la méthode system.enum.hasflag qui peut ranger votre code.

avant: xxx

après: xxx

xml: < Pré> xxx


1 commentaires

Joli. J'ai toujours écrit une méthode privée pour faire cela comme je me suis détesté me répétant, mais maintenant je sais mieux! :)



4
votes

jetbrains offrent un Catalogue de modèle d'exemple pour la recherche structurelle et remplacer pour le téléchargement contenant 17 motifs :

  • 'ESSAY / enfin' Block peut être converti en "Utilisation" Déclaration
  • Méthode StringBuilder.Append peut être converti en StringBuilder.AppendFormat
  • comparaison avec true est redondant
  • La déclaration conditionnelle est redondante
  • le code est inaccessible
  • 'si' block n'est jamais exécuté
  • branches identiques dans une déclaration conditionnelle
  • Affectation des composés redondants avec | = Opérateur
  • Affectation des composés redondants avec & = opérateur
  • Assignement de composé redondant avec | = opérateur (cas alternatif)
  • Affectation des composés redondants avec & = opérateur (cas alternatif)
  • Initialisation redondante à Bloc de faux et à la condition
  • Initialisation redondante au bloc VRAI et à la condition
  • Méthode Methy Array.CreateInstance peut être remplacé par une expression de création de matrice
  • Méthode de méthode.CreateInstance peut être remplacé par une expression de création de matrice bidimensionnelle
  • Utilisation redondante de gettype () == typeof () avec une valeur de valeur
  • Méthode detype peut être utilisé pour le filtrage à base de type

0 commentaires

1
votes

Par exemple, Microsoft recommande (et L'analyse de code / FXCOP génère avertissements appropriés) si vous faites une comparaison entre une valeur de chaîne et une chaîne vide, utiliser le string.isnullorempty () méthode.

http: //david.gardiner. net.au/2010/02/resharper-5-tructural-search-and.html


1 commentaires

R # fait cela hors de la boîte, à la construction 5.1.1757.11 au moins. Ce serait bien d'avoir un soutien à la conversion vers string.isnullorwhitepace cependant.



1
votes

Celui-ci est différent. J'ai découvert plus tard dans mon projet que Mbunit affirme que la comparaison des valeurs de propriété à Enums ne rendant pas de beaux messages lors de l'utilisation du ASTERTEX.THAT Syntaxe.

Alors j'ai créé un motif pour trouver ceci: xxx

... et le remplace par ceci: xxx

Voici le motif: xxx


0 commentaires

4
votes

supprimer si em> enveloppe strong> autour si em> corps.

Exemple: P>

Ce code: P>

  <Pattern Severity="HINT">
    <Comment>if</Comment>
    <ReplaceComment>Remove enclosing if</ReplaceComment>
    <ReplacePattern>$body$</ReplacePattern>
    <SearchPattern>if($condition$){$body$}</SearchPattern>
    <Params />
    <Placeholders>
      <StatementPlaceholder Name="body" Minimal="-1" Maximal="-1" />
      <ExpressionPlaceholder Name="condition" ExpressionType="System.Boolean" ExactType="True" />
    </Placeholders>
  </Pattern>


0 commentaires

1
votes

enlever les accolades enfermées forte> autour d'un corps.

Exemple: p>

Ce code: p>

<Pattern Severity="HINT">
  <Comment>Curly braces with body</Comment>
  <ReplaceComment>Remove braces</ReplaceComment>
  <ReplacePattern>$body$</ReplacePattern>
  <SearchPattern>{$body$}</SearchPattern>
  <Params />
  <Placeholders>
    <StatementPlaceholder Name="body" Minimal="-1" Maximal="-1" />
  </Placeholders>


0 commentaires

1
votes

à 'comme "casting fort>.

Exemple: P>

Ce code: P>

<Pattern Severity="HINT">
  <Comment>Cast</Comment>
  <ReplaceComment>To 'as' cast</ReplaceComment>
  <ReplacePattern>$exp$ as $type$</ReplacePattern>
  <SearchPattern>($type$)$exp$</SearchPattern>
  <Params />
  <Placeholders>
    <TypePlaceholder Name="type" Type="" ExactType="True" />
    <ExpressionPlaceholder Name="exp" ExpressionType="" ExactType="True" />
  </Placeholders>
</Pattern>


0 commentaires

1
votes

à couler régulier fort>.

Exemple: P>

Ce code: P>

<Pattern Severity="HINT">
  <Comment>Cast (as)</Comment>
  <ReplaceComment>To regular cast</ReplaceComment>
  <ReplacePattern>($type$)$exp$</ReplacePattern>
  <SearchPattern>$exp$ as $type$</SearchPattern>
  <Params />
  <Placeholders>
    <ExpressionPlaceholder Name="exp" ExpressionType="" ExactType="True" />
    <TypePlaceholder Name="type" Type="" ExactType="True" />
  </Placeholders>
</Pattern>


2 commentaires

C'est quelque chose que j'espérais voir ajouté à R # depuis un moment maintenant. Je n'avais pas envisagé de le faire via SSR. Merci! L'opération inverse pourrait être utile aussi (moulée vers comme ).


@ AUTREWNOAKES J'ai aussi ajouté l'opération inverse. Voir la réponse à 'comme' Cast ( Stackoverflow.com/a/9330016/1187616 )