【发布时间】:2013-05-03 23:11:54
【问题描述】:
我刚刚下载了 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 块中的任意数量的语句,这些语句不是对自定义记录器的调用,并简单地附加一个对记录器的调用”?
【问题讨论】:
-
这对你来说看起来很糟糕:stackoverflow.com/questions/11657922/… 我认为这实际上是一个骗局,以迂回的方式。
-
啊该死的!我花了这么多时间在搜索上,没想到“负平等”!也就是说,除了“不要这样做”之外,我在该线程上的解决方案没有令人满意的答案。
-
在此处提交功能请求:youtrack.jetbrains.com/issues/RSRP - ReSharper 团队通常会很快解决重要问题。
-
在这件事上缺乏响应/资源几乎回答了我的“Resharper 是否值得花费”的查询。我希望像 ReSharper 类似的收费工具的基本功能集中有这样的东西。看起来 FxCop 可能更适用于这种情况。
-
无论如何我都会仔细考虑这样做。我以前见过人们做这样的事情,并在定期重新抛出异常的情况下以可怕的日志垃圾邮件告终。解决这类问题的机械方法通常是有问题的。采取更具体的方法并通过代码审查来执行不是更合适吗?