【问题标题】:Search for commented-out code across files in Eclipse在 Eclipse 中跨文件搜索注释掉的代码
【发布时间】:2011-05-07 20:24:54
【问题描述】:

有没有一种快速的方法可以在 Eclipse 中跨 Java 文件查找所有注释掉的代码? 搜索中的任何选项,或者可以执行此操作的任何附加组件?

应该只能找到被注释掉的代码,而不是普通的cmets。

【问题讨论】:

  • 我怀疑你会找到类似的东西。如前所述,可能有一个插件可以做到这一点,但我没有遇到过。
  • 您的问题不清楚。查找 cmets 很简单:搜索“/*”或“//”。而且由于 cmets 与代码没有正式的关系,什么时候评论“关于”附近的代码,什么时候它只是一个评论(“一首十四行诗……”)?你真正想做的是什么?
  • 我想他想找到被注释掉的代码,而不是有注释的代码。
  • @Ira,这就是我想做的事情以及我问这个问题的原因:我有一个从 SCM 签出的代码库,并且必须找出所有已注释代码的文件。 (只是为了确保不存在不再可用/不可执行的代码)

标签: java eclipse search comments code-analysis


【解决方案1】:

在 Eclipse 中,我只是在打开正则表达式复选框的情况下进行文件搜索:

(/\*.*;.*\*/)|(//.*;)

它会在

中找到分号

// 这些;

和 /* 这些; */

为我工作。

【讨论】:

  • 这是一个好的开始,即使 tt 可能会给出一些误报,例如 String s = "http://some.site";
  • 为了帮助避免来自 url 的误报,我使用/\*.*;.*\*/|[^:]//.*;|^//.*;,它要求 // 不能出现在 :
  • @KevinL,我认为这不适用于file:///somefile形式的网址
  • 又好又快。对于喜欢rgrep 的人,不要忘记正则表达式中| 运算符所需的-E
  • 使用分号是个好主意,我必须说。几乎不能 100% 精确,但可以找到大多数被注释掉的代码块。
【解决方案2】:
【解决方案3】:

您可以使用任务标签标记您自己的注释代码。您可以在 Eclipse 中创建自己的任务标签。

从菜单中,转到窗口 -> 首选项。在首选项对话框中,转到常规 -> 编辑器 -> 结构化文本编辑器 -> 任务标签。

添加适当的任务标签,例如 COMMENTED。将优先级设置为低。

然后,您注释掉的任何代码,您都可以使用 COMMENTED 任务标签进行标记。这些任务标签的列表及其位置将显示在“任务”视图中。

【讨论】:

    【解决方案4】:

    @Jorn 说:

    我认为 [OP] 想要找到被注释掉的代码,而不是有注释的代码。

    如果意图是找到注释掉的代码,那么我认为一般来说是不可能的。问题是无法区分以代码或伪代码形式编写的 cmets 与被注释掉的代码。做出这种区分需要人类的智慧。

    现在 IDE 通常具有“切换 cmets”功能,可以以特定方式输出代码。编写一个与 特定的 IDE。但这可能还不够好,尤其是重新格式化代码通常会消除使注释掉的代码可识别的特征。

    【讨论】:

      【解决方案5】:

      如果问题是查找被注释掉的代码,则需要一种查找 cmets 的方法,以及确定注释是否可能包含代码的方法。

      执行此操作的一种简单方法是搜索包含类似代码内容的注释。我很想寻找包含“;”的 cmets字符(或其他一些罕见的指示符,例如“=”);很难有任何有趣的注释代码不包含此内容,并且根据我使用 cmets 的经验,我看不到很多人编写的包含此内容的代码。对此的正则表达式搜索应该非常简单,即使它发现了一些额外的误报(例如 // 在字符串文字中)。

      实现此目的的更复杂的方法是使用 Java 词法分析器或解析器。如果您有一个词法分析器在标记处返回 cmets(并非所有都这样做,Java 编译器对 cme​​ts 不感兴趣),那么您可以简单地扫描词位以获取注释并执行我上面描述的分号检查。使用这种方法,您不会收到任何误报命中,例如字符串文字中的内容。

      如果您有一个重新设计的解析器,可以将 cmets 捕获为 AST 的一部分(例如我们的 SD Java Front End), 您可以机械地扫描解析树中的 cmets,将注释上下文反馈给解析器 查看内容是否类似于代码,并报告通过该测试的任何内容,以某个大小相关的错误率为模 (15 个字符中的 10 个错误意味着“确实是评论”)。现在“类似代码”的测试需要 重构解析器愿意识别 (Java) 语言的任何 子字符串。 我们在 Java 前端底层的DMS Software Reengineering Toolkit 实际上可以做到这一点,使用对隐藏在前端的语法的访问,因为它愿意为任何语言(非)终端开始解析, 这个问题是“你能找到消耗字符串的(非)终端序列吗?”。

      词法分析器和解析器方法分别是小锤子和大锤子。如果 OP 只做一次,他可以坚持手动正则表达式搜索。如果问题是反复审查代码库(大型组织需要),他会想要一个可以定期运行的工具。

      【讨论】:

        【解决方案6】:

        您可以在 Eclipse 中进行搜索。

        您只需要搜索/*//

        但是,您只会找到包含该表达式的文件,而不是我相信您所追求的实际内容。

        但是,如果您使用的是Linux,您可以轻松获得所有 cmets。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-17
          • 2015-09-30
          • 1970-01-01
          • 2014-11-19
          • 2011-08-07
          • 1970-01-01
          • 1970-01-01
          • 2011-09-05
          相关资源
          最近更新 更多