我正在寻找一个命令行工具,它可以删除输入中的所有注释 file并返回剥离的输出。它支持流行很好 编程语言,如c,c ++,python,php,javascript,html,css等 必须是语法感知而不是基于regexp,因为后者会捕获 源代码字符串中的模式也是如此。有没有这样的工具?
我完全清楚评论是有用的信息,经常留下它们 因为它们是个好主意。只是我的重点是不同的用例。
答案 0 :(得分:4)
cloc
,一个免费的Perl脚本,可以做到这一点。
从源代码中删除注释
如何判断cloc是否正确识别评论?说服自己cloc的一种方法是做正确的事情是使用其
--strip-comments
选项从文件中删除注释和空行,然后将精简文件与原始文件进行比较。
答案 1 :(得分:2)
您可以使用emacs脚本完成所需的工作。
我为你编写了这个脚本,它完全符合你的要求,可以很容易地扩展到任何语言。
文件名:kill-comments
#!/usr/bin/python
import subprocess
import sys
import os
target_file = sys.argv[1]
command = "emacs -batch -l ~/.emacs-batch " + \
target_file + \
" --eval '(kill-comment (count-lines (point-min) (point-max)))'" + \
" -f save-buffer"
#to load a custom .emacs script (for more syntax support),
#use -l <file> in the above command
#print command
fnull = open(os.devnull, 'w')
subprocess.call(command, shell = True, stdout = fnull, stderr = fnull)
fnull.close()
使用它只需致电:
kill-comments <file-name>
要添加任何语言,请编辑〜/ .emacs-batch并添加该语言的主要模式。 您可以在http://www.emacswiki.org基本上找到所需的语法识别模式。
例如,这是我的〜/ .emacs-batch文件。它扩展了上面的脚本以从javascript文件中删除注释。 (我的〜/ .el目录中有javascript.el)
(setq load-path (append (list (concat (getenv "HOME") "/.el")) load-path))
(load "javascript")
(setq auto-mode-alist (cons '("\\.js$" . javascript-mode) auto-mode-alist))
通过添加javascript,这将删除您提到的所有文件类型的评论以及更多。
祝你好运,编码愉快!
答案 2 :(得分:1)
Paul Dixon关于从脚本中删除评论的response to this question可能值得一看。
答案 3 :(得分:0)
我不知道这样的工具 - 这与说没有工具不一样。
我曾经开始设计一个,但很快就会变得疯狂 - 没有C和C ++评论规则的帮助。
/\
* Comment? *\
/
(答案:是的!)
"/\
* Comment? *\
/"
(答案:不!)
要合理地完成工作,你必须要注意:
这些结合起来使这项工作几乎不可能完成。
我最终得到了一个程序 scc 来删除C和C ++注释。它的酷刑测试包括比上面显示的评论更糟糕的例子 - 它做得不错。但是扩展它来做shell或Perl或者Python或者(接受你的选择)是非常重要的,我没有这样做。
答案 4 :(得分:0)
尚无此类工具。
答案 5 :(得分:-1)
你可以哄骗GNU Source-highlight来做这件事。