我正在使用Acorn将一些语法上有效的JavaScript代码解析成ESTree以便进一步处理。看起来Acorn也做了一些语义检查--特别是它抛出了一个重复声明的错误。例如,解析以下代码会抛出Identifier 'f' has already been declared错误
function f() { return 1; }
function f() { return 2; }我不希望检查这样的语义错误-我正在对生成的ESTree进行自定义处理,所以源代码的语义有效性对我来说并不重要。
我已经查看了parse(input, options)函数的橡子选项,但我无法找到任何听起来像我想要的东西。
有没有办法禁用这种语义检查?
发布于 2020-08-14 11:10:45
似乎没有合适的方法来禁用语义验证。通过重写raiseRecoverable方法,我设法用一个丑陋的技巧得到了我想要的东西。
这对我很有效(请注意,我在这里使用的是TypeScript,但当然也可以在普通的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
}
}这是一个丑陋的技巧,因为我正在根据字符串错误消息过滤掉重复的声明消息。然而,似乎没有更好的方法。
https://stackoverflow.com/questions/63100285
复制相似问题