【问题标题】:Quick and easy way to remove "dead" (commented out) code删除“死”(注释掉)代码的快速简便方法
【发布时间】:2010-03-10 22:14:22
【问题描述】:

我正在使用一个继承的代码库,其中包含数千行注释掉的代码。我知道以前的编码员打算将他所有的辛勤工作留给后代,而不是简单地删除它,但是:我永远不会阅读它,它只会妨碍它。一个问题示例是,当我对某些代码段执行文本搜索时,我在注释代码中获得了数十个“错误”命中。皮塔饼。

是否有一种快速/简单的方法来检测大块已注释掉的代码?也许是一个聪明的正则表达式?

我此时恰好在 VB.NET 中工作,注释字符是一个撇号。

【问题讨论】:

  • 有没有想保留的cmets?是否应该只删除看起来包含代码的评论,而不是包含普通文本的评论?
  • 这就是问题所在。有一些有用的 cmets,但它们位于两行、三行或四行顶部。无用的、带注释的代码往往会运行数十行或数百行注释。
  • 我认为一些聪明的正则表达式可以解决这个问题。可以找到以单个撇号开头的 10 个或更多连续行的东西。如果正则表达式为我选择了注释代码,我可以简单地点击删除并移动到下一个块。

标签: .net vb.net regex dead-code


【解决方案1】:

您可以使用正则表达式搜索。搜索

^.*'.*$

查找带有注释的单行。您可能希望找到至少 3 行以注释开头的行:

^.*'.*\n.*'.*\n.*'.*$

让猫远离你的键盘。

【讨论】:

  • 这不会最终删除所有需要的 cmets 吗?您如何区分旧代码和所需的 cmets?
  • 这是为了查找和选择注释代码,按 DEL 是 OP 的工作。
  • +1。这将比我涉及宏的答案更快且用户控制更多。
  • 这非常接近工作。我只是稍微调整一下正则表达式。我试过这样的:^.*'.*\n.*'.*\n.*'.*\n.*'.*\n.*'.*\n.*'.*\n. *'.*\n.*'.*\n.*'.*$ 丑陋但有点作品。一个缺点是它还会选择末尾带有注释的行。更好的匹配是检测换行符 + 任何空格 + 撇号 + 代码
  • 同意nobugz。我只需要加快进程。让 RegEx 进行选择,我将决定所选代码是否值得保留。我要么按 F3 继续前进,要么按 Del。
【解决方案2】:
(^\s*//.*\n)^10

找出 10 条// 样式的并发注释行。

注释掉的测试:

\s*//\s*\[Test\].*\n

【讨论】:

  • 这帮我找到了一大堆被注释掉的代码:)
  • 出于某种原因,这不再适用于我,我必须使用 (^\s*//.*\n){10}
  • @Ronnie:谢谢。我必须按照你在 VS2010 中提到的那样做。我也花了一点时间才意识到这是馈送到“查找/替换+使用正则表达式复选框”的。这是一个很棒的提示!
  • \s*//\s*\[Test\].*\n 是干什么用的?
【解决方案3】:

恐怕我同意达菲莫的观点。我认为您不会找到一种可靠的自动方法来删除注释掉的代码。我敢肯定,如果你足够努力地搜索,你会找到一个,但你最好把时间花在你的工作上。

我过去曾遇到过这种情况(太频繁了),我最终要做的是在处理各种模块时删除注释掉的代码。

例如,我打开类 Person 进行更改,我看到注释掉的代码尚未删除。我签出代码(我们使用 VSS),删除错误代码,签入,最后签出以完成我的工作。

这一切都需要时间来解决,但我认为这是解决问题的有效利用时间。

【讨论】:

  • “我们使用 VSS” - 很抱歉。这是市场上最糟糕的产品,毫无疑问。当有更多功能强大且无需成本的替代品时,您为什么要这样做?但感谢您的支持。
  • +1。我也遇到过这种情况,我也是这样做的。如果某些特定的注释掉的代码让您烦恼,请将其删除。如果它存在于其他地方,但它现在没有妨碍你,那么删除它是浪费时间。务实,不要浪费时间整理有效且不需要更改或阅读的代码。
  • @duffymo:我同意,但这超出了我的控制范围。 (我提出了建议)但是,这是公司的标准,而且是一家大公司。
  • @MarkJ:谢谢。我认为你很好地阐述了我的想法。
【解决方案4】:

MZ-tools 拥有到review dead code 的设施。

【讨论】:

    【解决方案5】:

    对于任何最终出现在此处的 C# 人员,请使用以下正则表达式查找已注释掉的行。

    (^|[^/])//[^/]
    

    【讨论】:

      【解决方案6】:

      这就是版本控制系统的用途。

      我会确保它处于版本控制之下(希望不是 Visual Source Safe),检查它,删除所有注释代码,然后重新检查它。

      我也不鼓励您的开发团队在未来使用这种做法。

      【讨论】:

      • 我们正在使用 Subversion,所以我不担心“丢失”任何东西。这段代码在多年前开始它的生命,等待它,VB3,在版本控制系统成为规范之前。我正在手动去除污垢,但它是劳动密集型的,所以我正在寻找一种更快的方法。我想继续并重构“实时”代码。
      • 听起来像是教育问题。告诉你的团队不要再这样做了,然后开始努力收拾烂摊子。
      【解决方案7】:

      我建议为 Visual Studio 编写或查找有助于删除 cmets 的宏。

      一些伪逻辑:

      • 从行号开始,读取第一个字符。记住这个行号。
      • 如果是VB注释字符',则继续
      • 读取下一行的第一个字符。如果是注释字符,则继续。
      • 当找到不是注释字符的行时,分析遍历的行数。
      • 如果遍历的行数与您的阈值 n 匹配,则删除它们。

      【讨论】:

        【解决方案8】:

        我知道这是一个旧线程,但没有提到对我有帮助的技巧。

        我搜索这个正则表达式:

        (^\s*'.=.\n)^

        它会查找包含等号的已注释掉的行。我的经验是,大多数被注释掉的代码块至少包含一行有赋值的行,而等号在实际 cmets 中非常罕见。

        我不会自动替换,我只是按 F3,如果它匹配单行,我只需按 Enter 键以用新行替换突出显示的文本。如果它落在一行注释掉的行中,那么我只需手动选择,再按回车键和 F3。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-07
          • 1970-01-01
          • 2016-08-07
          • 2018-11-16
          • 2017-02-28
          • 1970-01-01
          相关资源
          最近更新 更多