由于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'用法或方法返回类型,即typeis IDisposable。
我确定有办法,但我找不到它。
答案 0 :(得分:2)
这些模式的问题在于,当您实际处理对象时它们不会消失,除了可能用于使用语句内的局部变量声明。它也不跟踪对象所有权,例如用于工厂方法和传递方法。因此,我认为通过结构化模式实现它是无用的。
无论如何,您可能需要两种模式进行局部变量检查,例如
var $identifier$ = $expression$;
$type$ $identifier$ = $expression$;
其中表达式和类型正在实现IDisposable。
答案 1 :(得分:0)
虽然这不能直接回答您的问题,但有各种运行时技术可以找到无关的IDisposable
。 Here's one such technique