批量删除 javascript 个文件中的评论
strip comments from javascript files in bulk
我正在对一个大的基础做一些分析,主要是 javascript(实际上主要是 Siebel eScript,但在语法上或多或少是一样的)
多年来,糟糕的程序员一直在注释大段代码,通常是函数的全部内容,然后将其留在那里。我想遍历代码库寻找这样的例子,这样我就可以指导开发人员回去清理一些混乱。我有超过 10,000 个文件,所以我想要一个 bash 脚本来为我执行此操作。
我最终想要的是在 linux fs 中遍历文本文件并输出每个文件的代码与注释的字符数。
我尝试过的:
sed - 这里的一些问题导致找到 // 行和 /* */ 对并删除相关注释的正则表达式。我已经尝试了一些片段,但它们似乎在我的足够多的代码上失败了(不是 return),或者删除了非注释 - 所以我认为正则表达式不是要走的路。
yui-compressor - 我试过了,但我找不到如何让它只删除评论。缩小意味着我的 wc -c
结果太偏斜了
现在这个问题的理想答案是告诉我使用什么命令行解析器来处理我的 javascript 文件以删除评论。我可以自己完成剩下的部分,但感觉这是我目前无法完成的部分。
鉴于您不清楚 OS,很难猜测您使用的是什么命令行解析器。 (wc 在 Linux 下可用,对于 cygwin,在 windows 下可用)。
我不认为 "command line" 可以解决问题,您需要一个知道 Javascript 的工具,鉴于您的问题是保留有效的 javascript 词位, 并且只扔掉评论,这似乎是一个正则表达式是可能的。它可能很难写,因为它必须是语言中每个词位的所有正则表达式的析取。人们使用词法分析器生成器来计算该析取;你可能不能用手做。 (是的,我已经编写了生产 JavaScript 词法分析器)。
获得此效果的最简单方法是获得完整的 Javascript lexer/parser。
我们的Javascript Formatter包含这样一个lexer/parser;它的工作是重新格式化你的代码。它的命令行选项之一是去除注释。您可以将其配置为使用项目文件一步处理大量文件。
根据 Seibel 关于 escript 符合 ECMAScript 4 的断言,这可能对您有用。
最终,我的解决方案是:
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
我正在对一个大的基础做一些分析,主要是 javascript(实际上主要是 Siebel eScript,但在语法上或多或少是一样的)
多年来,糟糕的程序员一直在注释大段代码,通常是函数的全部内容,然后将其留在那里。我想遍历代码库寻找这样的例子,这样我就可以指导开发人员回去清理一些混乱。我有超过 10,000 个文件,所以我想要一个 bash 脚本来为我执行此操作。
我最终想要的是在 linux fs 中遍历文本文件并输出每个文件的代码与注释的字符数。
我尝试过的:
sed - 这里的一些问题导致找到 // 行和 /* */ 对并删除相关注释的正则表达式。我已经尝试了一些片段,但它们似乎在我的足够多的代码上失败了(不是 return),或者删除了非注释 - 所以我认为正则表达式不是要走的路。
yui-compressor - 我试过了,但我找不到如何让它只删除评论。缩小意味着我的 wc -c
结果太偏斜了
现在这个问题的理想答案是告诉我使用什么命令行解析器来处理我的 javascript 文件以删除评论。我可以自己完成剩下的部分,但感觉这是我目前无法完成的部分。
鉴于您不清楚 OS,很难猜测您使用的是什么命令行解析器。 (wc 在 Linux 下可用,对于 cygwin,在 windows 下可用)。
我不认为 "command line" 可以解决问题,您需要一个知道 Javascript 的工具,鉴于您的问题是保留有效的 javascript 词位, 并且只扔掉评论,这似乎是一个正则表达式是可能的。它可能很难写,因为它必须是语言中每个词位的所有正则表达式的析取。人们使用词法分析器生成器来计算该析取;你可能不能用手做。 (是的,我已经编写了生产 JavaScript 词法分析器)。
获得此效果的最简单方法是获得完整的 Javascript lexer/parser。
我们的Javascript Formatter包含这样一个lexer/parser;它的工作是重新格式化你的代码。它的命令行选项之一是去除注释。您可以将其配置为使用项目文件一步处理大量文件。
根据 Seibel 关于 escript 符合 ECMAScript 4 的断言,这可能对您有用。
最终,我的解决方案是:
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