【问题标题】:strip comments from javascript files in bulk批量删除 javascript 文件中的注释
【发布时间】:2016-02-07 02:52:03
【问题描述】:

我正在对一个大型基础进行一些分析,主要是 javascript(实际上主要是 Siebel eScript,但在语法上或多或少是一回事)

多年来,糟糕的程序员一直在评论大段代码,通常是函数的全部内容,然后将其留在原处。我想通过代码库寻找这样的示例,以便我可以指导开发人员返回并清理其中的一些混乱。我有超过 10,000 个文件,所以我想要一个 bash 脚本来为我执行此操作。

我最终想要的是通过 linux fs 中的文本文件并输出每个文件的代码字符数与注释。

我尝试过的:

sed - 这里的几个问题会导致正则表达式找到 // 行和 /* */ 对并删除相关的 cmets。我已经尝试了一些 sn-ps,但它们似乎在我的足够多的代码上都失败了(不返回),或者去掉了非 cmets - 所以我认为正则表达式不是要走的路。

yui-compressor - 我试过这个,但我找不到如何让它只是剥离 cmets。缩小意味着我的wc -c 结果太偏了

现在这个问题的理想答案是告诉我使用什么命令行解析器来处理我的 javascript 文件以删除 cmets。剩下的事情我可以自己做,但感觉这就是我目前无法理解的部分。

【问题讨论】:

  • 如果你可以使用 Node.js,然后在你的文件中实现一个循环,并使用类似decomment 的东西从每个文件中删除 cmets。

标签: javascript parsing comments


【解决方案1】:

鉴于您不清楚操作系统,很难猜出您有什么命令行解析器。 (wc 在 Linux 和 cygwin 下可用,在 windows 下可用)。

我不认为这是一个“命令行”可以解决问题,您需要一个了解 Javascript 的工具,鉴于您的问题是保留有效的 javascript 词位并丢弃 cmets,看起来就像一个正则表达式是可能的。它可能很难写,因为它必须是语言中每个词位的所有正则表达式的析取。人们使用词法分析器生成器来计算析取;您可能无法手动完成。 (是的,我已经编写了生产 JavaScript 词法分析器)。

获得这种效果的最简单方法是使用完整的 Javascript 词法分析器/解析器。

我们的 Javascript Formatter 包含这样一个词法分析器/解析器;它的工作是重新格式化您的代码。它的命令行选项之一是剥离 cmets。您可以将其配置为使用项目文件一步处理大量文件。

根据 Seibel 的 escript 符合 ECMAScript 4 的断言,这可能对您有用。

【讨论】:

  • 谢谢艾拉。目前,我一直在开发 Debian vm(不确定确切的版本),但我可以访问 windows 和 macos,所以从这个角度来看,我可以相当不可知论。我将下载格式化程序的评估副本,看看它对我有什么作用。谢谢!
  • 我决定使用 python-jsmin,但 Ira 引导我找到了答案并帮助我缩小了 Google 研究范围。
【解决方案2】:

最终,我的解决方案是这样的:

for d in *Script*; do for f in ${d}/*; do echo `/usr/bin/python -m jsmin ${f} | wc -c` `wc -c ${f}`; done; done > function-size.txt

一些示例输出(发现大部分代码的示例已被注释):

36 2388 Business+Component+Server+Script/FS+Invoice+Adjustment.Old_BusComp_NewRecord
90 1981 Business+Component+Server+Script/FS+Invoice+Adjustment.Old_BusComp_PreGetFieldValue
43 2012 Business+Component+Server+Script/FS+Invoice+Adjustment.old_BusComp_PreSetFieldValue

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 2023-04-02
    • 2016-02-02
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多