我刚刚下载了 Resharper 7.1 的试用版。我的目标是强制执行一个规则,即我们的自定义记录器必须在我们的 c# 代码库中的所有 catch 块上使用。例子;
try{
// Any amount of code
}
catch(Exception e){
}
应该是非法的,但是:
try{
// Any amount of code
}
catch(Exception e){
Logger.LogException(e.Message, e);
}
完全可以接受。为此,我设置了以下模式来检测和重构。
搜索模式:
try{
$anystatements$
}
catch($exceptiontype$ $exceptionarg$){
$anycatchstatements$
}
替换模式:
try{
$anystatements$
}
catch($exceptiontype$ $exceptionarg$){
Logger.LogException($exceptionarg$.Message, $exceptionarg$)
$anycatchstatements$
}
Resharper 可以很好地检测到气味,但是将替换模式本身视为气味,因为 Logging 的添加行与$anycatchstatement$
占位符匹配。
如何定义一个占位符来描述“匹配 catch 块中的任意数量的语句,这些语句不是对自定义记录器的调用,而是简单地附加一个对记录器的调用”?