C Java PHP Perl Python 的程序代码美化工具
(Pretty Print Program/Source Code Beautifier)使用
作者: 车东 Email: chedongATbigfoot.com/chedongATchedong.com
写于:2002/04 最后更新: 06/29/2003 02:43:16
您来自http://www1.baidu.com/baidu?cl=3&tn=baidu&word=java+%C7%B6%C8%EB+perl
请在这里给我留言
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.chedong.com/tech/indent_tools.html
关键词:pretty print indent perltidy pydent astyle htmltidy source code beautifier
内容摘要:
写本文的目的无非是2个:
如果前任程序员缩进非常不整齐的代码非常影响现任维护者的代码阅读速度。
新的项目代码(无论在什么编辑环境下编写)都能够非常好的适应公司的缩进规范,可以便于开发者之间的交流。
如果马上能从以下列表中找到你需要的就完全不必耐心的看到最后:相应工具包中的文档会有更详细的使用说明
c, c++ c# ==> indent Astylejava ==> astyle Jalopy Jacobe ImportScrbberphp ==> phpCodeBeautifierperl ==> perlTidypython ==> Pydent
asp ==> VBSBeaut
程序员应该是善于沟通的,代码美化的意义在于体现了开发者对他人的尊重,使用好的编码约定可以使源代码明白、易读、准确,更加直观且与其他语言约定保持一致,从而让程序员之间更好的沟通。
有统计表明缩进良好的代码可以提高代码阅读的效率40%以上,而另一个统计是软件开发工作的70%以上是维护前人的代码,因此对以往代码的格式美化往往也是系统重构(refactoring)的第一步。代码美化工具(pretty print program)的使用可以使基本的代码缩进规范成为一种更容易中械闹贫取�
另外,如果作为部门代码规范的制订者也应该了解程序员不是机器,写代码时完全不犯代码缩进错误几乎是不可能的。基于工具的批量格式化和整理工具方便的配置导入/导出机制制定统一的缩进规范才是一个真正有可操作性的制度。
几种开放源代码的代码美化工具的介绍
工具名称 适用语言 简介 安装/使用
indent c indent就是代码美化工具的代名词 indent是gcc附带的一个标准工具,
indent [options] [input-files]
indent [options] [single-input-file] [-o output-file]
perltidy perl
perltidy本身也是用perl写的 下载后: perl Makefile.PL;make;make install
perltidy [ options ] file1 file2 file3 ...
(output goes to file1.tdy, file2.tdy, file3.tdy, ...)
perltidy [ options ] file1 -o outfile
perltidy [ options ] file1 -st >outfile
perltidy [ options ] <infile >outfile
astyle c c++ java (php) 一个速度很快的C/C++/Java源代码美化工具。
astyle比indent好在有很多成套的的风格定义:ansi java linux...不必记住复杂的缩进具体选项。 下载源代码解包后,make, 生成astyle可执行文件
astyle [options] < Original > Beautified
astyle [options] Foo.cpp Bar.cpp [...]
astyle --style=ansi *.cpp
我尝试过用它来格式化PHP程序也很有效(当然是不合HTML代码混在一起的纯PHP代码)。
jalopy java 功能强大的JAVA代码格式化工具,除了标准界面外,命令行工具,还可作为ANT JBUILDER ECLIPSE JDEVELOPER等工具的插件使用,并提供API 从http://prdownloads.sourceforge.net/jalopy/下载
并参考相应安装文档
pydent python pythius包含了2个工具:
pydent: 代码缩进工具
pystat: 代码统计工具 下载源代码解包后:
Run "python setup.py build"
Run "python setup.py install"
htmltidy html/xml HTML代码的纠错工具,可以帮助你的HTML代码更好的符合W3C规范,现在被称作tidy,因为它不仅只使用于HTML,也现在也适用于XHTML XML的格式化。
但JSP不适合ASP PHP JSP等嵌入式脚本的代码美化
下载源代码后 make 生成tidy可执行文件:
tidy file1 file2 ...
注意:对于含有中文的页面要使用 -raw选项
tidy.exe -raw -imuq -wrap 132 -f %f.err %f
选项说明:
-raw: 不修改中文字符 (output values above 127 without conversion to entities)
-i indend 缺省HTML按2个空格缩进
-m 覆盖原文件
-u 强制所有HTML标记大写(这个可以不加)
-wrap 页面代码宽度大于132行强制换行
-f %f.err 将错误输出到“相应文件名.err”文件中
HTMLTIDY支持XML的格式美化:
tidy -xml -imq web.xml
tidy -xml -imq build.xml
其他工具介绍:
php代码美化工具
phpCB: php code beautifier 有命令行版本,也有图形界面的代码查看器。
http://www.phpedit.net/products/phpCodeBeautifier/
Java的代码美化工具
如果是专门针对JAVA代码的格式化,Jacobe也是很好的选择,它缺省包含了一个完全按照SUN的代码规范的格式化配置文件。而且甚至有JIndent这种商业化代码整理工具以获得更好的效果。
ImportScrbber: java import声明的整理工具,能够将import java.util.*这样的引用变成单条的引用,并且帮助删除已经不再需要的引用。 http://importscrubber.sourceforge.net/
介绍这些工具的都可以在这里可以找到:Jacobe Jindent Jxbeautifier...
http://directory.google.com/Top/Computers/Programming/Languages/Java/Development_Tools/Code_Beautifiers/
使用命令行工具实现代码的批量修改
Windows 2000下:用for命令实现目录遍历和文件过滤及命令执行,例如:
for /R %f in (*.java) do astyle --style=java %f
for /R %f in (*.htm*) do tidy -raw -imq -wrap 132 -f %f.err %f
for /R %f in (*.asp) do vbsbeaut.exe -i -s4 %f
Linux:用find -exec 遍历执行,例如:
find ./ -name *.java -exec astyle --style=ansi {} \;
因此不要被很多商业化软件漂亮的图形界面所迷惑,当面对上千个源文件时,能够基于命令行的批量操作也是一个非常重要的功能。
针对Eclipse等IDE开发环境的工具插件使用
越来越多的IDE开发环境都包含了代码美化功能,但有些仍不如这些专门的工具强大,而且如果开发人员中有的用Eclipse,有的是JBuilder的忠实用户,如何让他们都能方便的遵守代码规范呢?答案就是用全Jalopy针对这些主流IDE开发环境的插件。
Jalopy: Java代码美化工具: http://jalopy.sourceforge.net/
Eclipse plug-in: http://jalopy.sourceforge.net/plugin-eclipse.html
CheckStyple: Java代码代码规范(缩进,命名)检查工具 http://checkstyle.sourceforge.net
Eclipse plug-in: http://www.atlas-sw.com/downloads/downloads-index.html
安装:
作为Eclipse的插件安装都非常方便,下载后解包到Eclipse/plug-in/目录下重启Eclipse即可:
配置:
Jalopy: Windows ==> Jalopy Preference 配置的导入/导出在General选单中,
CheckStyle: Windows ==> perference ==> checkstyle 配置的导入/导出就在配置界面右侧
标准配置的导入/导出功能可以大大降低开发人员针对以上工具的学习时间,对于大部分开发者来说不需要详细了解其中所有的选项配置,只要知道将标准配置导入就可以了。我常用的Jalopy配置文件
使用:
Jalopy: 在代码编辑界面点右键的选单中除了原有的Format选项外,还多出了Format with Jalopy选项,而Eclipse自身带有的Source=>Orgenize Imports也是能够达到Imports Srubber同样的功效。
CheckStyle是一个非常复杂的代码风格检查过程:包括缩进,命名规范等,因此缺省是Disable的,启动针对一个项目的CheckStyle需要在点:项目的properties==>CheckStyle==>Enable。
而且以上这些工具都包含了针对ant的扩展,可以方便的加入到ant脚本中进行自动的代码整理/统计。
参考资料:
GNU Coding Standards
http://www.gnu.org/prep/standards_toc.html
Code Conventions for the Java(TM) Programming Language
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
PHP Coding Standard
http://alltasks.net/code/php_coding_standard.html
Perl Style
http://www.perldoc.com/perl5.6.1/pod/perlstyle.html
pb: Perl/Javascript Beautifier
http://www.arachnoid.com/lutusp/ftp/cgi/pb.txt
HTML XML XHTML CSS...
http://www.w3c.org
C-C++ Beautifier HOW-TO:
http://www.tldp.org/HOWTO/C-C++Beautifier-HOWTO/
VBScript代码规范
http://msdn.microsoft.com/library/en-us/script56/html/vbsCodingConventions.asp
VBSBeaut代码整理工具
http://www.daansystems.com/vbsbeaut/
Java组件之间的依赖度分析
http://www.clarkware.com/software/JDepend.html
代码检查
http://www.thecortex.net/clover/index.html
更多XP工具
http://directory.google.com/Top/Computers/Programming/Languages/Java/Coding_Standards/
http://www.xprogramming.com/software.htm
http://www.qsm.com/CodeCounters.html
附:为什么HTMLTIDY的不适合重新格式化JSP PHP ASP等HTML嵌入式脚本语言
而有些无法解析的错误其实是代码不规范造成的。
JAVASCRIPT中的"<"
比如for (i = 1; i<a; i++)需要改成for (i = 1; i < a; i++) ^ ^ "<"前后需要加空格,否则HTMLTIDY会把<a当成HTML标记
HTML属性中包含JSP标记:
对于一般的JSP属性输出TIDY是可以认出来的比如: <input type=text size="9" name="alias" maxlength=20 value=<%=infoForm.getAlias()%> > 但像这样的代码:<img border=0 src=/image/upload/content/<%=nfoForm.getId()%><%=infoForm.getPhoto()%> width=120> 由于属性的开头不是<%,因此会出现IMG没有结尾错误
HTMLTIDY缺省是将代码完全补齐的,而实际上很多HTML代码是在被包含文件中。而且HTMLTIDY对中文编码得识别还有一定问题(目前只支持BIG5)
原因:
为什么嵌入式代码很难维护?毕竟针对不规范的HTML语法检查器要比一个语言的解析器要复杂的多。举例来说,比如针对这样的代码:
<?php echo "<table>";?>
</table>
这样形式的代码,美化工具必须同时懂得HTML语法和PHP语法才行,所以大部分格式工具都是针对一种语言,或者针对嵌入脚本的程序部分的格式化,或者只对针对纯HTML格式化。只有少数Virsual Age, Forte等大型开发工具里包含了JSP的代码美化,另外就是SLICKEDIT这种大型商业文本奔鞯取�
解决:对于包含程序的JSP ASP等文件的HTML部分的格式美化最好还是使用专门的HTML编辑工具Dreamweaver(≥4)和Frontpage(≥2000)中的格式化工具来实现。比如:对于FRONTPAGE从菜单的工具==>网页选项==>HTML源代码选单里选择“使用下面的规则重新格式化源代码”。
总之,使用HTML和程序在一起的嵌入式脚本语言本身就是一件非常不好的开发习惯。从长远来开用XML/XSLT等技术实现数据/表现/逻辑的分离是一种更适合大规模开发的模式。
为了目前大量的ASP PHP JSP应用我还是通过Google上找到一些工具,相信HOMESITE等。其实前面提到的VBSBeautifier其实也是调用Perl 5.8在Windows上的
一个用于ASP的代码美化工具:VbsBeaut
http://www.daansystems.com/vbsbeaut/
一个用于ASP JSP PHP编辑并带有代码美化功能的工具:BPHTML
http://www.bphtml.com/about.php
一个基于Java的HTML编辑器,内嵌了C C++ Java JavaScript Perl等类C语言的代码美化器:http://www.arachnoid.com/arachnophilia/index.html
Beautifier highlights and indents source code using highlight configuration files (which are similar to Ultraedit highlighting files). As such, it supports C, C#, Java, Perl, PHP, Pascal, Lisp, Mumps, Eiffel, Euphoria, and x86 Assembler, amongst others. http://www.beautifier.org/
Trita is a source code beautifier which learns your personal formatting style by examining examples of your code.
http://www.trita.com/
支持:Java, Javscript, CSS, JSP, HTML, ASP, Lisp, Delphi, C#, C++, PHP, Perl, Python, and SQL.
原文出处:<a href="http://www.chedong.com/tech/indent_tools.html">http://www.chedong.com/tech/indent_tools.html</a>
<<返回
<<返回首页
--
|__ __ __ o __ _|_ [1B [29D| ) | ) ) | __) |_, (__| [1B [29D |
[32;1mHow Much I'm Special To You [m
__ ___ __ |
Welcome to |__) (_-_ | ' |_, !
|
[m [1;35m※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.142.186] [m
--
[水仙子]凤凰台上月儿高,何处何人品玉箫。
眼睁睁盼不得他来到,陈抟也睡不着,空教人穰穰劳劳。
银台上灯将灭,玉炉中香渐消。业眼难交。
[m [1;31m※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.134.136] [m
--
Is a programming language a tool for instructing machines? A means for commu-
nicating between programmers? A vehicle for expressing high-level designs? ...
My conclusion is that a general-purpose programming language must be all of
those to serve its diverse set of users. The only thing a language cannot be
-- and survive -- is be a mere collection of "neat" features.
--- Bjarne Stroustrup
[m [1;34m※ 来源:·BBS 水木清华站 smth.org·[FROM: 162.105.221.37] [m
--
[0;1;40;37m [0;1;40;37m О [0;40;37m
[0;1;40;37m ο [0;40;37m
[0;1;40;37m __ __ · ★ [0;40;37m
[0;1;40;37m ┋ ┫ [0;1;5;40;37m◎ [0;1;40;37m┣ [0;1;5;40;31m [0;1;40;37m ┫ [0;1;5;40;37m◎ [0;1;40;37m┣ ☆ [0;40;37m
[0;1;40;37m ∧ ▔▔ ▔▔ [44;37m目瞪口呆的 [44;31m小笨 [44;37m≈≈≈≈ [40;37m [0;40;37m
[0;1;40;37m ╰╯ [40;31m [40;37m [30;40mby mirocle [0;40;37m
[m [1;37m※ 来源:·BBS 水木清华站 smth.org·[FROM: 211.67.27.58] [m
【 在 MetalSlugX (皮诺曹◎无心无肝) 的大作中提到: 】
: 自己写,喜欢用tab,贴出来转成4 spaces
--
程序员要搞的有两个对象:
第一个是技术
第二个不是意识形态
[m [1;35m※ 来源:·BBS 水木清华站 smth.org·[FROM: 162.105.60.210] [m
【 在 ilovecpp (cpp) 的大作中提到: 】
: 有人喜欢indent=2呢?
--
你是否孤独寂寞,如果是,那么你下楼买一根绳一根棍,将绳子系在棍上,在起风时
去楼顶挥动棍子,别人要问你干什么呢?你就说:我抽风呢。。。
[m [1;37m※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.42.124] [m
【 在 ilovecpp (cpp) 的大作中提到: 】
: 哎,你说我bt也就罢了,python标准库也都成了bt
--
[1;31m╭════╮ [32m╭════╮ [34m╭════╮ [35m╭════╮ [36m╭══╮ [34m [0;37m [m
[1;31m║ [41;37m╔ [0;41;37m [31m [1;31m║ [40;32m║ [42;37m╔ [32m ║ [40;34m║ [44;37m╔ [0;44;34m [1;34m║ [40;35m║ [45;37m╔ [35m ║ [40;36m║ [46;37m╔ [36m ║ [0;40;37m [m
[1;31m║ [41;37m║ [31m╭═╮║ [40;32m╰ [42;32m╮ ╭╮║ [40;34m║ [44;37m║ [34m ╭╮║ [40;35m║ [45;37m║ [35m╭═╮║ [40;36m║ [46;37m║ [36m ║ [0;40;37m [m
[1;31m║ [41;31m ╰ [40m═╯ [41;31m║ [40;32m ║ [42;32m ║ [40m║ [42;32m║ [40;34m║ [44;34m ║ [40m║ [44;34m║ [40;35m║ [45;35m ╰ [40m═╯ [45;35m║ [40;36m║ [46;36m ╰ [40m═╮ [m
[1;31m║ [41;31m ╭═╮║ [40;32m╭╯ [42;32m ╰ [40m╯ [42;32m║ [40;34m║ [44;34m ╰ [40m╯ [44;34m║ [40;35m║ [45;35m ╭═╮║ [40;36m║ [46;36m ║ [m
[1;31m╰ [41;31m═╯ [0;40;37m [1;31m╰ [41;31m╯ [40;32m╰ [42;32m════╯ [40;34m╰ [44;34m════╯ [40;35m╰ [45;35m═╯ [40m ╰ [45;35m╯ [40;36m╰ [46;36m════╯ [m
[m [1;36m※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.32.137.2] [m
【 在 scaner (南北西东) 的大作中提到: 】
: 习惯上应该都是用tab做indent
: 回头自己设置喜欢的tab size就好了吧。
: 用space 太bt了
--
没有在最喜欢的时候上身的衣服,
没有在最可口的时候品嚐的蛋糕,
就像没有在最想做的时候去做的事情,都是遗憾。
生命也有保存期限,想做的事
该趁早去做。
[m [1;32m※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.120.25.7] [m
--
[清江引]弃微名去来心快哉,一笑白云外。
知音三五人,痛饮何妨碍。醉袍袖舞嫌天地窄。
[山坡羊]无官何患,无钱何惮,休教无德人轻慢。
你便列朝班,铸铜山,止不过只为衣和饭,腹内不饥身上暖。
官,君莫想;钱,君莫想。
[m [1;32m※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.68.41] [m
【 在 ganzhi (野叟) 的大作中提到: 】
: 用space才是标准,因为tab键在不同的环境下翻译成的空格数目不一致。
: 所以在保存的时候通常应该用space保存
--
[m [1;36m※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.118.75.17] [m
【 在 ilovecpp (cpp) 的大作中提到: 】
: 然后把注释中的tab完全搞乱
--
Simple things should be simple.
Complex things should be possible.
--- Alan Kay
[m [1;36m※ 来源:·BBS 水木清华站 smth.org·[FROM: 162.105.221.37] [m
--
Now I sit by my window and I watch the cars roll by
I fear I'll do some damage one fine day
[m [1;31m※ 来源:·BBS 水木清华站 smth.org·[FROM: 128.2.185.78] [m
【 在 siphon (...) 的大作中提到: 】
: this is another religious war
: anyway, if you use emacs, you don't need to worry about it
--
没有在最喜欢的时候上身的衣服,
没有在最可口的时候品嚐的蛋糕,
就像没有在最想做的时候去做的事情,都是遗憾。
生命也有保存期限,想做的事
该趁早去做。
[m [1;35m※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.120.25.7] [m