【问题标题】:Custom inspection pattern for catch block logging用于捕获块记录的自定义检查模式
【发布时间】: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 可能更适用于这种情况。
  • 无论如何我都会仔细考虑这样做。我以前见过人们做这样的事情,并在定期重新抛出异常的情况下以可怕的日志垃圾邮件告终。解决这类问题的机械方法通常是有问题的。采取更具体的方法并通过代码审查来执行不是更合适吗?

标签: c# resharper


【解决方案1】:

不幸的是,不,我正在使用 Resharper 8 EAP (http://confluence.jetbrains.com/display/ReSharper/ReSharper+8+EAP),但它仍然没有这样的选项。

证明你应该看看代码合同,或http://www.postsharp.net/ 或类似的东西。

Vladimir Reshetnikov 也是对的 - 他们的团队可以为您提供很多帮助。您可以通过电子邮件或网络表单轻松与他们联系。他们有非常好的开发人员,公司允许与客户直接沟通。他们来自俄罗斯:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多