【问题标题】:Disable duplicate declaration validation in Acorn在 Acorn 中禁用重复声明验证
【发布时间】:2020-07-26 12:41:29
【问题描述】:

我正在使用Acorn 将一些语法上有效的 JavaScript 代码解析为 ESTree 以供进一步处理。 Acorn 似乎也进行了一些语义检查 - 特别是它会为重复声明引发错误。比如解析下面的代码会抛出Identifier 'f' has already been declared的错误:

function f() { return 1; }
function f() { return 2; }

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

我查看了 parse(input, options) 函数的 Acorn 选项,但找不到任何听起来像我想要的东西。

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

【问题讨论】:

    标签: javascript parsing abstract-syntax-tree acorn


    【解决方案1】:

    似乎没有适当的方法来禁用语义验证。通过覆盖 raiseRecoverable 方法,我设法通过一个丑陋的 hack 获得了我想要的东西。

    这对我有用(请注意,我在这里使用的是 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
      }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 2019-06-09
      • 2015-10-31
      • 2020-09-12
      • 2019-01-12
      • 2018-08-07
      • 1970-01-01
      相关资源
      最近更新 更多