有没有JavaScript的静态分析工具?

我习惯于让我的编译器抱怨,当我做一个愚蠢的,像一个variables名错字,但JavaScript有一个习惯,让这个通过。

有没有JavaScript的静态分析工具?

我同意JSLint是最好的开始。 请注意, JavaScript Lint不同于JSLint 。 我还build议检查一下JSure ,在我的有限testing中比其中任何一个testing都做得更好,虽然在实现方面有些毛病 – 英特尔Mac版本在启动时崩溃,尽pipePowerPC版本在英特尔上运行良好, Linux版本也运行良好。 (开发人员Berke Durak说,这个问题已经解决了,他会回到我身边,但是我没有听到他的消息。)

不要像从一个好的C检查器那样期待JavaScript静态分析。 正如Durak告诉我的,“由于Javascript的dynamic性,任何非平凡的分析都非常困难。”

(另外一个更加晦涩的Mac只有bug,这次是使用JSLint的Konfabulator部件:将一个BBEdit文档图标拖到widget上,将文档移动到垃圾桶中,开发人员Douglas Crockford没有在Mac上试过该部件。

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

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


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

JSLint被devise成是道格拉斯·克罗克福德的私人工具。 它附带了一个伟大的默认规则集 – Crockford自己的, 不断更新,因为他不断学习 JavaScript及其陷阱。 JSLint 非常有见地,这通常被认为是一件好事。 因此,有(有意) 有限的数量,你可以做configuration或禁用单个规则。 但是这可能会使应用JSLint到传统代码变得困难。

JSHint与JSLint非常相似(事实上,它始于 JSLint fork),但通过命令行选项或通过.jshintrc文件 configuration或禁用所有JSLint的检查变得更加容易/可能。

我特别喜欢我可以告诉JSHint报告文件中的所有错误,即使有数百个错误。 相比之下,尽pipeJSLint确实有maxerrconfiguration选项,但是在尝试处理包含大量错误的文件时,通常会相对较早地进行救援。

Closure编译器是非常有用的,因为如果代码不能用Closure编译的话,你可以非常肯定地说,这个代码在某种根本的方面非常深的。 closures编译可能是JS界最接近“解释器”语法检查,如php -lruby -c

closures还会警告您潜在的问题 ,如缺less参数以及未声明或重新定义的variables。 如果您没有看到预期的警告,请尝试通过调用Closure来增加警告级别,并带有--warning_level VERBOSE选项

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

下面是PHP CodeSniffer 1.3.6版本中提供的JavaScript嗅探列表,这里是一个自定义规则集,可以让你一次运行它们。 使用自定义规则集,很容易挑选您想要应用的规则 。 而且,如果您想强制执行某种不受支持的“房屋风格”,甚至可以自己写嗅探 。 Afaik CodeSniffer是这里提到的四个支持定制和创build新静态分析规则的唯一工具。 一个警告虽然:CodeSniffer也是提到的任何工具的最慢的运行。

Google的“Closure”JS编译器会在编译时产生可configuration的警告和错误。 它肯定会发现拼写错误的variables和方法,再加上参数错误。 如果你愿意写JsDoc Closure的方式,它也可以用types信息做很多事情。

YUI的“压缩机”工具也可以产生警告,但还没有尝试过。

我没有太多的运气与build立在Eclipse上的Aptana IDE,但其他人喜欢它。 请参阅JS IDE的堆栈溢出讨论。

IntelliJ IDE,这是不是最后我检查了,有frickin优秀的JS支持。 它会检测和突出拼写错误的variables和方法,你键入,等等。 它也有自动完成。

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

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

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

安全/ B2G / JavaScript代码分析可以在Mozilla Wiki上find比通用列表更多的安全性

本文档的目的是收集适用于即将到来的Mozilla项目或内部使用的JavaScript代码分析工具。

另外至less有一个商业产品可以进行安全分析: Burp获得了新的JavaScript分析function

Burp的最新版本包括一个用于JavaScript代码静态分析的新引擎。 这使得Burp Scanner能够报告一系列新的漏洞,其中包括:

  • 基于DOM的XSS
  • JavaScript注入
  • 客户端SQL注入
  • WebSocket劫持
  • 本地文件path操作
  • 基于DOM的开放redirect
  • Cookie操作
  • Ajax请求头部操作
  • 基于DOM的拒绝服务
  • Web消息操作
  • HTML5存储操作

我喜欢Jslint这种事情…

在商业领域, Coverity Static Analysis支持从版本7.7(2015年中)开始的JavaScript分析。 关于您input错别字的具体问题,我最近发布的8.0(2016年初)的宠物项目确实在程序元素名称中find拼写错误

作为该项目的关键开发人员,请接受我的无耻插件:尽pipe还没有成熟的C / C ++分析那么成熟,但Coverity的JavaScript分析与许多引擎相同,同样专注于寻找低价值的缺陷误报率报告错误率。 除了发现一般的编程错误之外,我们越来越重视查找JavaScript(和其他语言)中的安全缺陷。

现在,这里有一些错别字(确切的错字是读者的一个练习,强调这些错误可以轻易被忽略):

merge.js 🙁 稳定链接) (最新版本)

commands-packages-query.js 🙁 稳定链接) (最新版本)

series-pie-tests.js 🙁 稳定链接) (最新版本)

outline_case.js 🙁 稳定链接) (最新版本)

你可以在Wiki中看到一些JavaScript静态代码分析的工具。

在Wiki中的一个工具,但在这篇文章中没有提到,是DeepScan 。 其重点是find运行时错误和质量问题,而不是编码短尾的约定。 它也涵盖了TypeScript和React。

你可以尝试一下你的GitHub项目。

JSAnalyse刚刚发布在codeplex上。 它是一个分析JavaScript文件之间的依赖关系的工具。 您甚至可以定义允许的依赖关系,并且JSAnalysis检查定义的规则是否被满足。 即使在大型项目中也可以跟踪JavaScript依赖关系,并且拥有干净的架构。

JSAnalyse可以作为命令行工具执行,也可以通过Visual Studio Layer Diagramm进行configuration。 这也很容易融入build设。 通过门控签入,您可以控制依赖关系。

http://jsanalyse.codeplex.com/

Flow使用和不使用注释进行静态分析。

如果您需要注释,则语法与TypeScript兼容。

安装软件包 :

 npm install --global flow-bin 

还有一些工具。 看看gulp-flowtype ,也许SublimeLinter-flow

我们的SD ECMAScript CloneDR是一个工具,用于在大型JavaScript源代码库中查找重复代码的精确和几乎错过的副本。

它使用语言语法来指导检测,所以尽pipe格式发生了变化,插入/删除了注释,重命名了variables,甚至还有一些插入/删除的语句,但它仍能find克隆。

该网站在Google的Closure库上运行了一个示例CloneDR。

充分的披露,我背后是: http : //www.toptensoftware.com/minime它做缩小,混淆和一套合理的皮棉风格检查。