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

2024-02-22

当我做了一些愚蠢的事情(例如变量名拼写错误)时,我习惯于让编译器抱怨,但 JavaScript 习惯于让这种情况过去。

JavaScript 有静态分析工具吗?


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


此外JSLint http://jslint.org(已经在闪谢里丹的回答 https://stackoverflow.com/a/710837/55478)和闭包编译器 https://developers.google.com/closure/compiler/docs/gettingstarted_app(之前提到过奥怀特的回答 https://stackoverflow.com/a/2220180/55478)我也从跑步中得到了很多好处JSHint http://jshint.com/about and PHP 代码嗅探器 http://pear.php.net/package/PHP_CodeSniffer。截至 2012 年,所有四种工具都是免费开源的,并且背后有一个庞大而活跃的开发者社区。它们执行的检查类型各有不同(我认为是互补的):

JSLintDouglas Crockford 的设计初衷是,现在仍然是 Douglas Crockford 的个人 linting 工具。它附带一个great默认规则集——Crockford自己的,不断更新 https://github.com/douglascrockford/JSLint/commits/master/ as he 关于 JavaScript 及其陷阱。 JSLint 是固执己见 https://gist.github.com/1745829这通常是被视为一件好事。 http://docs.jquery.com/JQuery_Core_Style_Guidelines#JSLint因此(故意)有一个数量有限 http://www.jslint.com/lint.html#options您可以配置或禁用个别规则。但这会使将 ESLint 应用于遗留代码变得困难。

JSHint与 JSLint 非常相似(事实上它开始了生命 http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to-jshint/作为 JSLint 分支)但更容易/可能配置或禁用 http://www.jshint.com/docs/所有 JSLint 的检查都是通过命令行选项或通过.jshintrc file https://npmjs.org/package/jshint.

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

闭包编译器非常有用,因为如果代码won't用Closure编译,你可以感觉到很确定所说的代码is以某种基本方式深深地影响着。闭包编译可能是 JS 世界中最接近“解释器”语法检查的东西,例如php -l or ruby -c

封也警告您潜在的问题 https://developers.google.com/closure/compiler/docs/error-ref例如缺少参数以及未声明或重新定义的变量。如果您没有看到预期的警告,请尝试通过调用 Closure 并选择以下选项来提高警告级别--warning_level VERBOSE

PHP 代码嗅探器 可以解析JavaScript https://github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/Tokenizers/JS.php以及 PHP 和 CSS。 CodeSniffer 附带了几种不同的编码标准(例如phpcs -i来查看它们),其中包括许多有用的 JavaScript 代码嗅探,包括检查内联控制结构 https://github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/Standards/Generic/Sniffs/ControlStructures/InlineControlStructureSniff.php and 多余的空白 https://github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/Standards/Squiz/Sniffs/WhiteSpace/SuperfluousWhitespaceSniff.php.

这里有一个JavaScript 嗅探列表 https://gist.github.com/3375708#file_js_code_sniffs.md自版本 1.3.6 起可在 PHP CodeSniffer 中使用,这里是自定义规则集将允许您同时运行它们。 https://gist.github.com/3375708#file_js_sniffs.xml使用自定义规则集,很容易选择规则 http://pear.php.net/manual/en/package.php.php-codesniffer.annotated-ruleset.php你想申请。你甚至可以写你自己的嗅探 http://pear.php.net/manual/en/package.php.php-codesniffer.coding-standard-tutorial.php如果您想强制执行不支持开箱即用的特定“房屋风格”。 Afaik CodeSniffer 是这里提到的四个工具中唯一支持自定义和创建新静态分析规则的工具。但需要注意的是:CodeSniffer 也是所提到的所有工具中运行最慢的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有JavaScript静态分析工具? [关闭] 的相关文章

  • JavaScript onTouch 不工作

    谁能告诉我为什么这个 onTouch 处理程序没有触发 var myDiv document getElementById existingContent var myButton a href log out a myDiv append
  • 如何在同一页面上使用AJAX处理多个表单

    我有一个表单 当我单击 提交 时 它就被提交了 然后该表单隐藏 操作页面的结果显示在 div 中 classname dig 它工作正常 但是当我添加另一个表单时 它停止正常工作并且所有表单同时提交 我如何更改我的代码 done click
  • 关闭选项卡时要求确认[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我在某些浏览器上关闭页面时 我希望出现一个消息框 并询问我是否真的要关闭页面 有两个按钮 如果我单击No那么这个标签就不会被关闭 我怎样
  • 从数据 URI 解码 QR 码

    我尝试从数据 uri 中解码二维码 var dataUri data image gif base64 R0lGODdh9gD2AIAAAAAAAP ywAAAAA9gD2AAAC decodeQrCode dataUri cb 我已经尝试
  • 不和谐机器人 |不和谐.js |类型错误:无法读取未定义的属性“长度”

    我正在制作一个 Discord 机器人 并且正在使用 CodeLyon 的视频作为参考 该错误位于我的 message js 文件中 该文件包含以下内容 require dotenv config create cooldowns map
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • TypeError: props.render 不是一个函数(React hook 形式)

    我将方法作为我用react hook form制作的形式的道具传递 当从react hook form添加控制器时 它给了我 TypeError props render不是一个函数 我在网上找不到任何解决方案 因此感谢任何帮助 impor
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 使用 jQuery/JS 打开时使
    标签的内容具有动画效果

    我只想要 HTML5 的内容details标记为 滑行 动画打开 而不是仅仅弹出打开 立即出现 这可以用 jQuery Javascript 实现吗 Fiddle http jsfiddle net 9h4Hq HTML
  • Google App Engine:修改云运行环境

    我正在尝试部署一个使用自定义 Node js 服务器的 Next js 应用程序 我想将自定义构建变量注入应用程序 next config js const NODE ENV process env NODE ENV const envTy
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐