放弃对 Babel AST 的支持
作者: fisker创建于 2026年9月17日更新于 2026年9月17日
标签status:needs discussionlang:javascripttype:refactor
目前,我们支持 Babel 和 ESTree AST。不同之处可以在 https://babeljs.io/docs/babel-parser#output 中找到。同时支持两种 AST 形状会增加维护成本。例如,`ChainExpression` 长期以来都不受支持,它首先被转换为 Babel AST。后来,在 https://GitHub.com/prettier/prettier/pull/15806 中,我们在所有地方都跳过了 `ChainExpression`;这种方法并没有很好地解决问题,并且还引发了问题。最后,我们在 #16471 (问题,在多个 PR 中修复) 中将 `ChainExpression` 重新引入,但为不同的 AST 添加了大量代码。我的想法是在 v4 中放弃对 Babel AST 的支持。由于我们已经有 `formatAST`,如果不在一个小版本中做到这一点,这可能会导致它崩溃。我们还有一个 `babel-flow` 解析器,它不受维护;我们不想处理对其可能做出的更改。如果我们决定完全删除它,我们将更容易进行维护,而且由于我们已经测试了 `__babel_estree` 解析器,这不会引发问题。即使我们仍然希望在 `formatAST` 中支持 Babel AST,我们也可以添加一层来将 Babel AST 转换为 ESTree AST;幸运的是,区分起来很容易:在 Babel AST 中,根节点是 `File`,而在 ESTree 中是 `Program`。
内容来源: prettier/prettier