Espree v3.0.0 Alpha 1 发布

我们很高兴地宣布,我们刚刚发布了 Espree v3.0.0 的首个 alpha 版本。这是一个包含重大更改的主要版本,请务必仔细阅读这篇文章。

安装

由于 Espree v3.0.0 是一个预发布版本,您需要使用 @next 标签进行安装

$ npm install espree@next

@latest 标签仍然指向 Espree v2.x 的最新版本。

注意: 我们发布此版本是为了收集反馈。如果您发现问题,请 提交 issue 以帮助我们。

亮点

以下是此版本中一些更改的亮点。

基于 Acorn

我们从未打算维护另一个 JavaScript 解析器。当 Espree 首次推出时,Esprima 的开发已经停止,似乎需要有东西来填补这个空白。我们 fork 了 Esprima 以启动 Espree,并从此开始开发。然而,Esprima 重新开始开发,我们决定在某个时候将 Espree 折叠回 Esprima。其中一个主要的症结在于能够开启和关闭不同的语言特性。虽然这种能力在路线图上,但它在遥远的未来,我们需要做出决定。

最终,我们发现 Acorn 已经支持了生成与 Esprima 和 Espree 相同输出所需的 hooks。由于我们不想继续维护一个独立的解析器,因此决定在 Acorn 之上构建 Espree。实际上,Espree 是一个适配器,可以直接从 Acorn 生成 Esprima 输出。这使我们既可以继续开发 Espree 以单独开启和关闭语言特性,又可以为主要的开源 JavaScript 解析器之一做出贡献。

这次切换花费了大量的时间和精力,非常感谢 Ingvar Stepanyan 的所有帮助,他通过直接向 Espree 贡献代码以及帮助修复 Acorn 上的错误,使这一切成为可能。

AST 和输出差异

由于 Acorn 的工作方式与 Esprima 略有不同,因此输出有一些变化。这些变化相对较小,并且已验证不会在 ESLint 中引起问题,因此我们希望这些变化对其他使用者也不会产生太大影响。

  1. 节点和 token 上新增了 startend 属性。Acorn 在内部使用这些属性作为解析例程的一部分,尝试删除或使其不可枚举会导致性能下降。因此,我们决定保留这些属性。它们与 range 数组中的两个值完全对应。
  2. 现在,每个节点的结尾都被认为是最后一个 token 的位置。Esprima 和 Espree v2.x 在节点的范围中包含尾随空格,但 Acorn 和 Espree v3.x 不包含。
  3. 错误消息有所不同。Espree v3.x 没有尝试复制 Esprima 的错误消息,而是直接使用 Acorn 的消息。错误对象格式相同,只是消息的实际文本不同。

Bug 修复

  • 修复:(‘…’) 应该能解析 #202
  • 修复:MetaProperty 应该有两个 Identifier #206
  • 修复:generator + computed property method 被解析为非 computed。 #207
  • 修复:解析标识符中的 unicode 转义符 (修复 #181) (Nicholas C. Zakas)
  • 修复:确保 object rest 在解构参数中有效 (修复 #213) (Nicholas C. Zakas)

最新的 ESLint 新闻、案例研究、教程和资源。

Evolving flat config with extends
5 分钟阅读

使用 extends 改进扁平化配置

您的 eslint.config.js 文件现在可以使用 extends 来简化您的配置。

ESLint v9.22.0 released
1 分钟阅读

ESLint v9.22.0 发布

我们刚刚发布了 ESLint v9.22.0,这是一个 ESLint 的小版本升级。此版本添加了一些新功能,并修复了之前版本中发现的几个错误。

ESLint v9.21.0 released
2 分钟阅读

ESLint v9.21.0 发布

我们刚刚发布了 ESLint v9.21.0,这是一个 ESLint 的小版本升级。此版本添加了一些新功能,并修复了之前版本中发现的几个错误。