2010-06-22 5 views
2

Puisque resharper ne donne toujours aucun avertissement concernant les objets implémentant IDisposable, j'aimerais créer des modèles de recherche personnalisés disponibles dans resharper 5.0.Motif de recherche personnalisé Resharper pour avertir les objets IDisposable

Jusqu'à présent, j'ai ceci:

(Et ne me dérangerait pas mes remplacer des commentaires dans les modèles, je ne suis pas vraiment à ce sujet, je veux juste un avertissement clair dans le code lorsqu'ils traitent avec des objets à usage unique

- <CustomPatterns> 
- <Pattern Severity="WARNING"> 
    <Comment>This class implements IDisposable interface.</Comment> 
    <ReplaceComment>Please use Using statement, or dispose the object manually when done using.</ReplaceComment> 
    <SearchPattern>$type$</SearchPattern> 
    <Params /> 
- <Placeholders> 
    <IdentifierPlaceholder Name="var" Type="" ExactType="False" RegEx="" CaseSensitive="True" /> 
    <TypePlaceholder Name="type" Type="System.IDisposable" ExactType="False" /> 
    <ArgumentPlaceholder Name="args" Minimal="-1" Maximal="-1" /> 
    </Placeholders> 
    </Pattern> 
- <Pattern Severity="WARNING"> 
    <Comment>This class implements IDisposable interface.</Comment> 
    <ReplaceComment>Please use Using statement, or dispose the object manually when done using.</ReplaceComment> 
    <SearchPattern>new $type$($args$)</SearchPattern> 
    <Params /> 
- <Placeholders> 
    <IdentifierPlaceholder Name="var" Type="" ExactType="False" RegEx="" CaseSensitive="True" /> 
    <TypePlaceholder Name="type" Type="System.IDisposable" ExactType="False" /> 
    <ArgumentPlaceholder Name="args" Minimal="-1" Maximal="-1" /> 
    </Placeholders> 
    </Pattern> 
    </CustomPatterns> 

Ceci gère les cas de déclaration de variables, par ex.

Bitmap myBitmap = GetBitmap(); 
private Bitmap _bitmap; 

et les appels CTOR, par ex.

var myBitmap = new Bitmap(...); 

Ce qu'il ne supporte pas, est la suivante:

var myBitmap = GetBitmap(); 

Je ne peux pas trouver un exemple de la façon de définir un modèle de recherche qui soit trouver l'utilisation « var », ou une méthode type de retour, c'est-à-dire typeof IDisposable.

Je suis sûr qu'il y a un moyen, je ne peux pas le trouver cependant.

Répondre

2

Le problème avec ces modèles est qu'ils ne disparaissent pas lorsque vous disposez réellement de l'objet, sauf peut-être pour les déclarations de variables locales à l'intérieur d'instructions. Il ne suit pas non plus la propriété des objets, par ex. pour les méthodes d'usine et les méthodes de transfert. Donc, je crois que faire à travers des modèles structurés est presque inutile.

Quoi qu'il en soit, vous devrez peut-être deux modèles pour les contrôles variables locales comme

var $identifier$ = $expression$; 
$type$ $identifier$ = $expression$; 

où l'expression et le type mettent en œuvre IDisposable.

+0

Bien sûr, je comprends cela, mais tout ce que je veux, c'est un avertissement quand un objet jetable est d'abord déclaré. Merci pour les questions, mais elles ne semblent pas fonctionner. Si j'utilise seulement $ expression $, cela fonctionne, mais avertit chaque fois que l'objet est utilisé, où je veux un avertissement seulement dans la déclaration. – Rita

0

Bien que cela ne répond pas directement à votre question, il existe diverses techniques d'exécution pour trouver IDisposable s non. Here's one such technique.

Questions connexes