Поскольку resharper по-прежнему не выдает никаких предупреждений относительно объектов, реализующих IDisposable, я хотел бы создать несколько пользовательских шаблонов поиска, доступных в resharper 5.0.
Пока у меня есть это:
(И не берите в голову мои заменяющие комментарии в шаблонах, мне это безразлично, я просто хочу иметь четкое предупреждение в коде при работе с одноразовыми объектами.)
- <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>
Это обрабатывает случаи объявления переменных, например
Bitmap myBitmap = GetBitmap();
private Bitmap _bitmap;
и вызовы CTOR, например
var myBitmap = new Bitmap(...);
Что он не поддерживает, так это:
var myBitmap = GetBitmap();
Я не могу найти ни одного примера того, как определить шаблон поиска, который либо найдет использование 'var', либо тип возврата метода, который является typeof IDisposable.
Я уверен, что есть способ, но я не могу его найти.