代码之家  ›  专栏  ›  技术社区  ›  Mat

有没有javascript静态分析工具?[关闭]

  •  104
  • Mat  · 技术社区  · 16 年前

    我习惯了当我做一些愚蠢的事情时让编译器抱怨,比如在变量名上输入错误,但javascript有一个习惯让它通过。

    有没有针对javascript的静态分析工具?

    13 回复  |  直到 6 年前
        1
  •  46
  •   Andrew Marshall    13 年前

    我同意JSlint是最好的开始。注意 JavaScript Lint 不同于 JSLint . 我也建议退房 JSure 在我有限的测试中,它比它们中的任何一个都要好,尽管在实现中有一些粗糙的边缘,英特尔的Mac版本在我启动时崩溃了,尽管PowerPC版本甚至在英特尔上运行良好,Linux版本也运行良好。(开发商伯克·杜拉克(BerkeDurak)说,修好后他会给我回电话,但我没有他的消息。)

    不要期望JavaScript静态分析的效果和良好的C检查器的效果一样好。正如杜拉克告诉我的,任何非平凡的分析都非常困难,因为javascript的动态特性。

    (另一个更为模糊的仅限Mac的bug,这次使用jslint的konfabutator小部件:将bEdit文档图标拖到小部件上会将文档移到垃圾桶中。开发人员道格拉斯·克罗克福德(Douglas Crockford)没有在Mac上尝试过这个小部件。)

    2009年8月10日:今天 Static Analysis Symposium 西蒙·霍尔姆·詹森发表了一篇关于 TAJS: Type Analyzer for JavaScript 与安德斯•M勒和彼得•蒂曼合著。论文没有提到上述工具,但Jensen告诉我他看过其中的一些工具,对此没有印象。泰姬陵的代码应该在今年夏天的某个时候发布。

        2
  •  57
  •   Noah Sussman    7 年前

    更新答案,2017年:是。使用埃斯林。 http://eslint.org


    除了 JSLint (已在中提到 Flash Sheridan's answer ) Closure compiler (前面提到 awhyte's answer )我也从跑步中受益匪浅 JSHint PHP CodeSniffer . 截至2012年,这四种工具都是免费开放源码的,并在其背后有一个大型且活跃的开发人员社区。它们在执行的检查类型上各有一点不同(我认为是互补的):

    杰斯林特 设计是,仍然是道格拉斯克罗克福德的个人皮毛工具。它与一艘船一起航行 伟大的 默认规则集——Crockford自己的, constantly updated 正如他 continues to learn 关于JavaScript及其缺陷。JSLint是 highly opinionated 这通常是 seen as a good thing. 因此(故意)有 limited amount 您可以配置或禁用单个规则。但这会使将JSlint应用于遗留代码变得困难。

    杰辛特 与jslint非常相似(事实上 began life 但更容易/可能 configure or disable 通过命令行选项或通过 .jshintrc file .

    我特别喜欢这样,我可以告诉jshint报告 全部的 文件中的错误,即使有数百个错误。相比之下,尽管jslint确实有 maxerr 配置选项,当试图处理包含大量错误的文件时,它通常会提前退出。

    闭包编译器 在这方面非常有用,如果代码 不会 用闭包编译,您可以感觉到非常确定的所说代码 以某种基本的方式深深地冲洗。闭包编译可能是JS世界中最接近“解释器”语法检查的东西,比如 php -l ruby -c

    关闭也 warns you about potential issues 例如缺少参数和未声明或重新定义的变量。如果没有看到预期的警告,请尝试通过调用带有选项的闭包来提高警告级别。 --warning_level VERBOSE

    PHP代码转换器 can parse JavaScript 以及php和css。代码嗅探器提供几种不同的编码标准(比如 phpcs -i 其中包括对javascript代码的许多有用的嗅探,包括对 inline control structures superfluous whitespace .

    这里是一个 list of JavaScript sniffs 从1.3.6版开始在php codesniffer中提供,下面是 custom ruleset that would allow you to run them all at once. 使用自定义规则集,很容易 pick and choose the rules 你想申请。你甚至可以 write your own sniffs 如果你想强制执行一个特定的“房子风格”,它是不受支持的开箱即用。Afaik Codesniffer是本文中提到的四个工具中唯一支持定制和创建新静态分析规则的工具。不过需要注意的是:代码嗅探器也是上述工具中运行最慢的。

        3
  •  20
  •   awhyte    15 年前

    Google's "Closure" JS compiler 在编译时生成可配置的警告和错误。它肯定会发现拼写错误的变量和方法,以及arity错误。如果您愿意用闭包的方式编写JSDoc,那么它也可以对类型信息做很多工作。

    yui“compressor”工具也会发出警告,但尚未尝试。

    我对建立在Eclipse上的AptanaIDE没有太多运气,但其他人喜欢它。参见JSIDES的堆栈溢出讨论。

    IntellijIDE在我上次检查时不是免费的,它有Frickin的优秀JS支持。它将在您键入时检测并突出显示拼写错误的变量和方法,等等。它也有自动完成功能。

        4
  •  11
  •   user_19    11 年前

    总之,jslint、jshint、plato、eslint、google closure linter是可用的工具。 我在尝试Google Closing Linter for Windows时遇到了安装问题。但是,它在网页上确实提到它对Windows的支持是实验性的。 我找到并尝试了另一个工作正常的工具。下面是它的链接: http://esprima.org/

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

        5
  •  7
  •   Kangho Kim    6 年前

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

    wiki中的一个工具,但在本文中没有提到,是 DeepScan . 它的重点是找出运行时错误和质量问题,而不是对过梁的编码约定。它还包括typescript、react和vue.js。

    你可以在你的Github项目中试用它。

        6
  •  6
  •   learner_19    11 年前

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

        7
  •  4
  •   Kevin Hakanson    10 年前

    在Mozilla wiki上可以找到比通用列表更注重安全性的网站 Security/B2G/JavaScript code analysis

    本文档的目的是收集JavaScript代码分析 适合包括在即将到来的Mozilla项目或 内部使用。

    另外,至少有一种商业产品进行安全分析: Burp gets new JavaScript analysis capabilities

    最新版本的burp包含了一个新的JavaScript代码静态分析引擎。这使Burp扫描仪能够报告一系列新的漏洞,包括:

    • 基于DOM的XSS
    • javascript注入
    • 客户端SQL注入
    • 网络劫持
    • 本地文件路径操作
    • 基于DOM的开放重定向
    • Cookie篡改
    • Ajax请求头操作
    • 基于DOM的拒绝服务
    • Web消息操作
    • HTML5存储操作
        8
  •  4
  •   Peter Dillinger    9 年前

    在商业领域, Coverity Static Analysis 支持从7.7版(2015年年中)开始的javascript分析。关于您对打字错误的具体查询,我的宠物项目出现在最新版本中(8.0,2016年初) 是否找到拼写错误 程序元素的名称。

    作为项目的关键开发人员,请接受我无耻的插件:虽然还没有成熟到 venerated C/C++ analysis Coverity的javascript分析与同一个引擎有很大的共同之处,它同样关注于以较低的误报率发现高价值缺陷。除了发现一般的编程错误外,我们正在增加对在javascript(和其他语言)中发现安全缺陷的关注。

    现在,这里有一些它发现的打字错误(确切的打字错误留给读者作为练习,以强调这些是多么容易被忽视):

    J.S. (stable link) (latest revision)

    commands-packages-query.js: (stable link) (latest revision)

    series-pie-tests.js系列: (stable link) (latest revision)

    概述\u case.js: (stable link) (latest revision)

        9
  •  3
  •   Ishmael    16 年前

    我喜欢 Jslint 对于这类事情…

        10
  •  3
  •   Richard Ayotte    9 年前

    Flow 执行带有或不带批注的静态分析。

    如果需要注释,则语法与 TypeScript .

    安装 package 用:

    npm install --global flow-bin
    

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

        11
  •  2
  •   tstune    13 年前

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

    JSanalyse可以作为命令行工具执行,也可以通过Visual Studio层图表进行配置。它也很容易集成到构建中。通过封闭签入,您可以控制依赖项。

    http://jsanalyse.codeplex.com/

        12
  •  1
  •   Ira Baxter    14 年前

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

    它使用语言语法来指导检测,因此它将查找克隆,不管格式更改、插入/删除的注释、重命名的变量,甚至一些插入/删除的语句。

    该站点有一个在谷歌关闭库上运行的克隆程序示例。

        13
  •  0
  •   Brad Robinson    14 年前

    完全公开,我是幕后黑手: http://www.toptensoftware.com/minime 它可以缩小,模糊和一套合理的皮棉风格的检查。