当前位置:  开发笔记 > 编程语言 > 正文

有没有JavaScript静态分析工具?

如何解决《有没有JavaScript静态分析工具?》经验,为你挑选了6个好方法。

我习惯让我的编译器抱怨当我做一些愚蠢的事情就像变量名称上的拼写错误但JavaScript有习惯让它通过.

有没有适用于JavaScript的静态分析工具?



1> Noah Sussman..:

更新的回答,2017年:是的.使用ESLint.http://eslint.org


除了JSLint的(已经提到的Flash Sheridan的答案)和Closure编译器(前面提到awhyte的答案)我曾经也从运行得到了很多好处JSHint和PHP CodeSniffer.截至2012年,所有这四个工具都是免费的开源软件,并且拥有一个庞大而活跃的开发人员社区.在他们执行的各种检查中,它们各有不同(我认为是互补的):

JSLint的设计目标仍然是Douglas Crockford的个人linting工具.它附带了一个很好的默认规则集 - Crockford自己的,随着他继续学习 JavaScript及其陷阱而不断更新.JSLint 非常自以为是,这通常被视为一件好事.因此,有(故意)一个有限的数量,你可以做配置或禁用单独的规则.但这可能会使JSLint应用于遗留代码变得困难.

JSHint非常相似的JSLint(事实上,它开始生活作为JSLint的叉),但它更容易/可配置或禁用通过命令行选项或通过所有的JSLint的检查.jshintrc文件.

我特别喜欢我可以告诉JSHint报告文件中的所有错误,即使有数百个错误.相比之下,尽管JSLint确实有maxerr配置选项,但在尝试处理包含大量错误的文件时,它通常会相对较早地纾困.

Closure编译器非常有用,如果代码不能用Closure编译,你可以非常肯定地说某些代码在某种基本方面深深地冲洗了.闭包编译可能是JS世界中最接近"解释器"语法检查的东西,如php -lruby -c

Closure还会警告您潜在的问题,例如缺少参数以及未声明或重新定义的变量.如果您没有看到预期的警告,请尝试通过选择Closure调用Closure来提高警告级别--warning_level VERBOSE

PHP CodeSniffer 可以解析JavaScript以及PHP和CSS.CodeSniffer附带了几种不同的编码标准(比如phpcs -i看它们),其中包括许多有用的JavaScript代码嗅探,包括对内联控制结构和多余空白的检查.

以下是PHP CodeSniffer 1.3.6版本中提供的JavaScript嗅探列表,这是一个自定义规则集,允许您一次性运行它们. 使用自定义规则集,可以轻松选择要应用的规则.如果你想强制执行开箱即用的特殊"家居风格",你甚至可以编写自己的嗅探器.Afaik CodeSniffer是这里提到的四个工具中唯一支持自定义和创建新静态分析规则的工具.但有一点需要注意:CodeSniffer也是所提到的任何工具中运行速度最慢的.


现在可以通过CPD获得JavaScript代码的复制粘贴检测.据我所知,这是第一个用于JavaScript的强大的开源代码复制工具!http://pmd.sourceforge.net并且还可以看到"是否有CPD工具可用于javascript?" http://stackoverflow.com/a/13745190/55478

2> Flash Sherid..:

我同意JSLint是最好的起点.请注意,JavaScript Lint与JSLint不同.我还建议检查JSure,在我的有限测试中做得比其中任何一个都要好,尽管在实现中有一些粗略的边缘 - 英特尔Mac版本在启动时崩溃了,尽管PowerPC版本在Intel上运行良好, Linux版也运行良好.(开发人员,Berke Durak说,当它修复后他会回复我,但我没有收到他的消息.)

不要期望从一个好的C检查器获得的JavaScript静态分析.正如Durak告诉我的那样,"由于Javascript的动态特性,任何非平凡的分析都非常困难."

(另一个,甚至更加模糊的Mac-bug,这次使用JSLint的Konfabulator小部件:将BBEdit文档图标拖到窗口小部件上会将文档移动到垃圾箱.开发人员Douglas Crockford没有在Mac上试过这个小部件.)

2009年8月10日:今天在静态分析研讨会上,Simon Holm Jensen发表了一篇关于TAJS的文章:JavaScript类型分析器,由AndersMøller和Peter Thiemann编写.本文没有提到上述工具,但Jensen告诉我他看了一些并没有留下深刻印象.TAJS的代码应该在今年夏天的某个时候提供.


TAJS的源代码现已推出.
@UpTheCreek:JSLint可以在GitHub上找到.

3> 小智..:

Google的"Closure"JS编译器在编译时生成可配置的警告和错误.它肯定会发现拼写错误的变量和方法,以及arity错误.如果你愿意用Closure方式编写JsDoc,它也可以用类型信息做很多事情.

YUI"压缩器"工具也可以产生警告,但还没有尝试过.

我对使用Eclipse构建的Aptana IDE没有太多运气,但其他人喜欢它.请参阅JS IDE的Stack Overflow讨论.

IntelliJ IDE,我最后检查不是免费的,具有非常好的JS支持.它会在您键入时检测并突出显示拼写错误的变量和方法等.它也有自动完成功能.



4> user_19..:

总之,JSLint,JSHint,Plato,ESLint,Google Closure-Linter是可用的工具.我在试用Google Closure-Linter for Windows时遇到了安装问题.但是,它确实在网页上提到它对Windows的支持是实验性的.我发现并尝试了另一种效果很好的工具.这是它的链接:http: //esprima.org/

此外,这是工具Esprima的github链接:https: //github.com/ariya/esprima



5> Kangho Kim..:

您可以在此Wiki中看到一些用于JavaScript静态代码分析的工具.

Wiki中的一个工具是DeepScan,但在本文中未提及.它的重点是找到运行时错误和质量问题,而不是编码简约的编程惯例.它还包括TypeScript,React和Vue.js.

您可以尝试使用GitHub项目.



6> learner_19..:

我尝试了ESlint并发现它很好..你也可以在那里添加自定义规则.这里是github repo:https://github.com/nzakas/eslint,这里是它的介绍:http:// www. nczonline.net/blog/2013/07/16/introducing-eslint/

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有