Resharper自定义搜索模式以警告IDisposable对象

时间:2010-06-22 21:05:35

标签: c# .net resharper idisposable

由于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。

我确定有办法,但我找不到它。

2 个答案:

答案 0 :(得分:2)

这些模式的问题在于,当您实际处理对象时它们不会消失,除了可能用于使用语句内的局部变量声明。它也不跟踪对象所有权,例如用于工厂方法和传递方法。因此,我认为通过结构化模式实现它是无用的。

无论如何,您可能需要两种模式进行局部变量检查,例如

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

其中表达式和类型正在实现IDisposable。

答案 1 :(得分:0)

虽然这不能直接回答您的问题,但有各种运行时技术可以找到无关的IDisposableHere's one such technique