首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Acorn中禁用重复声明验证

在Acorn中禁用重复声明验证
EN

Stack Overflow用户
提问于 2020-07-26 20:41:29
回答 1查看 48关注 0票数 0

我正在使用Acorn将一些语法上有效的JavaScript代码解析成ESTree以便进一步处理。看起来Acorn也做了一些语义检查--特别是它抛出了一个重复声明的错误。例如,解析以下代码会抛出Identifier 'f' has already been declared错误

代码语言:javascript
复制
function f() { return 1; }
function f() { return 2; }

我不希望检查这样的语义错误-我正在对生成的ESTree进行自定义处理,所以源代码的语义有效性对我来说并不重要。

我已经查看了parse(input, options)函数的橡子选项,但我无法找到任何听起来像我想要的东西。

有没有办法禁用这种语义检查?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-14 11:10:45

似乎没有合适的方法来禁用语义验证。通过重写raiseRecoverable方法,我设法用一个丑陋的技巧得到了我想要的东西。

这对我很有效(请注意,我在这里使用的是TypeScript,但当然也可以在普通的JavaScript中做同样的事情):

代码语言:javascript
复制
import { Parser } from "acorn";
class SyntacticParser extends Parser {
  raiseRecoverable(pos: any, message: string) {
    if (message.includes("Identifier ") && message.includes(" has already been declared")) return;
    (Parser.prototype as any).raiseRecoverable.call(this, pos, message); // weird call syntax required because the TypeScript types for Parser doesn't contain the `raiseRecoverable` method
  }
}

这是一个丑陋的技巧,因为我正在根据字符串错误消息过滤掉重复的声明消息。然而,似乎没有更好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63100285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档