问题标签 [esprima]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
144 浏览

javascript - Javascript 解析器本身是用 ESPRIMA 之类的 javascript 编写的,它是如何工作的?那么谁解析ESPRIMA的javascript

我的理解是“在计算机技术中,解析器是一个程序,通常是编译器的一部分,它以顺序源程序指令、交互式在线命令、标记标签或其他一些定义的接口的形式接收输入并将它们分解分成几个部分(例如,名词(对象)、动词(方法)以及它们的属性或选项),然后可以由其他编程(例如,编译器中的其他组件)管理。解析器也可以检查以查看已提供所有必要的输入。” 这意味着解析器会分解 javascript 并形成一些树并将其解析为机器代码以运行,但是在 esprima 的情况下它是如何发生的。

0 投票
0 回答
124 浏览

javascript - 如何使用 esprima 计算 if/for/while/switch/try 语句的数量

我想显示具有超过 3 个 if/for/while/switch/try 语句(与声纳相同)的文件到目前为止我有代码可以遍历整个文件的树和计数语句:

例如,对于此代码,我如何计算程序中的路径:

它应该显示 5 和 2 而不是 7。

0 投票
2 回答
233 浏览

javascript - 是否有任何框架支持 AST 节点访问的事件?

在使用从 JS 源代码生成 JSON 格式的 AST 的Esprima JavaScript Parser 时,我注意到如果我可以注册节点的类型(字符串)并在访问此类节点时触发事件会很方便,例如作为:

通过进行一些研究,JSHint似乎在内部实现了此类功能,但无法从其 API 中获得。对此有什么建议吗?

编辑:我想要做的是能够注册事件以便在访问 AST 节点时被触发。简而言之,在特定 JSON 节点访问中触发事件的框架对于这种情况就足够了。

0 投票
1 回答
310 浏览

javascript - esprima.js/gulp-strip-debug 通过在剥离调试器语句时报告无用的错误来干扰 gulp-jshint 任务

这是昨天才开始发生的事情,让我很头疼。

作为我为arcade.ly构建的一部分,我有一个check-scripts任务可以剥离调试代码并在我的所有 JavaScript 上运行jshint

直到昨天,这一切都很好,如果有问题,我会收到一个有用的jshint错误,告诉我到底出了什么问题。现在,当我运行时gulp check-scripts,如果出现问题,我经常会收到这种错误:

如您所见,那里没有有用的信息。目前我正在重构,所以我的变更集通常涵盖许多文件。这里的问题是我可以看到 esprima 的解析器不满意,但我不知道哪个文件破坏了它,也不知道该文件中的哪一行代码。

我可以通过迭代地注释和取消注释中的行check-scripts并重新运行gulp-checkscripts,最终通过注释和取消注释代码来解决这个问题,但这显然有点麻烦。

在这种情况下,这是导致错误的代码:

如您所见,缺少逗号,导致错误。

问题似乎是由 引起的gulp-strip-debug,但如果我简单地禁用这个jshint会因为debugger语句而抱怨。由于即使在开发中我也需要构建以运行该站点,所以这很麻烦。

我想我可以禁用gulp-strip-debug和配置jshint以忽略debugger语句,仅用于开发构建,但是有没有办法配置gulp-strip-debug来更好地报告错误,或者这是一个错误/设计缺陷/疏忽?

任何见解/建议将不胜感激。

谢谢,

巴特

0 投票
3 回答
114 浏览

javascript - 在不强制执行特定样式的情况下验证 JavaScript 代码

我想验证一些 JavaScript 代码的语法正确性,但不对用户强制执行特定的编码样式。

我的第一种方法是esvalidate使用esprima. 这部分完成了工作,因为它检测到意外的令牌,例如:

没有检测到的是从未声明过的变量的使用,例如:

诸如此类的工具eslint会检测到这一点,但是很难以不对用户强制执行特定样式的方式配置 ESLint(我并不是说不可能,我只是说这是一项巨大的工作,因为您需要检查每条规则并决定是启用还是禁用它,并且有数百条规则,这是……是的,嗯,大量的工作)。

我还有什么其他选择?如果没有这种努力,我如何验证代码?

顺便说一句:我想在这里验证什么?这不是语法(我的意思是,从语法上讲,一切都很好,只是没有意义),但也不是语义。这种检查的正确术语是什么?

0 投票
1 回答
273 浏览

aurelia - Aurelia 1 中的 Aurelia-auth 的 ESPRIMA 错误

我正在尝试转换 Aurelia 项目并遇到问题。我安装了 aurelia-auth 并在 aurelia.json 文件中将其配置为: { "name": "aurelia-auth", "path": "../node_modules/aurelia-auth/src", "main": "aurelia-auth" }

当我尝试使用 au-cli 运行应用程序时,我收到一系列错误,如下所示:

commonJs.convert: COULD NOT CONVERT: C:/Development/UCCSS/aurelia-v1- uccss/node_modules/aurelia-auth/src/aurelia-auth.js, so skipping it. Error was: Error: Line 1: Unexpected token { uid: 10, name: 'writeBundles', branch: false, error: { [Error: Parse error using esprima for file: C:/Development/UCCSS/aurelia-v1-uccss/node_modules/aurelia-auth/src/aurelia-auth.js Error: Line 1: Unexpected token] moduleTree: [ 'config/routerConfig' ], fileName: 'C:/Development/UCCSS/aurelia-v1-uccss/src/config/routerConfig.js' }, duration: [ 0, 925164337 ], time: 1470156183228 }

最新版本的 Aurelia 是否可能破坏了 aurelia-auth,或者有没有办法解决这个问题?

谢谢,

罗斯

0 投票
0 回答
187 浏览

reactjs - reactjs中的意外令牌非法 - 开玩笑,即使组件正确呈现

我试图对反应组件进行单元测试。但是当我尝试使用TestUtils.renderIntoDocument()方法 jest 渲染它时会抛出一个错误

在我的代码中无处可去。所以我尝试一个一个地删除元素,并认为图像组件可能导致了问题。

在这篇文章中看到 react-native 中发生了一个几乎类似的问题。如果有人可以对此有所了解。这将会非常棒。!

谢谢

0 投票
0 回答
204 浏览

javascript - 使用 Esprima 查找“for”、“var”、“function”等必要的子表达式

我正在尝试为 Javascript 中的每个表达式自动生成正确的标点符号。

例子:

我想拿绳子"for"

并返回["init", "test", "update", "body"]

我可以从中生成类似的东西:["(", ")", "{", "}"].

也就是说,我需要正确表达所需的所有标准字符。

我知道的:

我知道 Esprima 可以为正确的javascript 代码生成 AST。生成节点的每个节点都有其每个子节点的键。如果我能找到(例如)"for"在 AST 中生成的节点,以及与该节点类型关联的键,那么我就完成了。

我认为答案在 Esprima 源中的某个地方,但我不确定在哪里寻找。

问题:

如何找到(例如)"for"会以正确表达式生成的 AST 节点,以及如何找到该节点的子节点?

干杯,非常感谢任何帮助!

0 投票
1 回答
7588 浏览

typescript - 打字稿 -> AST -> 打字稿

有没有办法将 TypeScript 文件解析为 AST,修改 AST,然后像Esprima + Escodegen那样将其解析回 TypeScript ?

重要的是我不想先将 TypeScript 代码编译/转换成 JavaScript。

0 投票
1 回答
579 浏览

esprima - `esprima` AST Tree:如何轻松检测和添加函数括号?

TL;DR:我想做与https://github.com/nolanlawson/optimize-js相同的事情,但是esprima当我使用estraverse.

ESPrima 为以下代码提供相同的输出节点:

http://esprima.org/demo/parse.html?code=!function%20()%7B%7D()%0A%0A!(function%20()%7B%7D)()

例如 - 我将遍历 AST 树。在 Function Expression ExpressionStatement 节点上,我想检查 - 如果该节点没有围绕函数的括号 - 我想添加它。

那么,我如何检测函数括号,如何添加它们?我查看令牌,但我不知道如何将平面令牌对象与具有指定 AST 节点的对象相关联。