代码之家  ›  专栏  ›  技术社区  ›  David Rodrigues

获取节点偏移和长度

  •  0
  • David Rodrigues  · 技术社区  · 5 年前

    我在用这个包裹 nikic/php-parser 解析用户提供的PHP文件。这个文件将有一些PHP函数,我需要知道是哪一个,以及定义的确切偏移量和长度。

    例如:

    Line | Content
       1 | <?php\n
       2 | function x() { }\n
       3 | x();
    

    在这种情况下,我有一个函数叫做 x ,以及 抵消 (其中 function 开始)是 ,以及 长度 计算到 } ,在本例中是 十六 .

    所以我在parser上启用了两个属性: startFilePos endFilePos ,但出于某种原因,它不会给我这些信息。

    1 回复  |  直到 5 年前
        1
  •  0
  •   David Rodrigues    5 年前

    好吧,现在我明白了。。。

    我运行它就像:

    $this->parser = (new ParserFactory)->create(ParserFactory::ONLY_PHP7, null, [
        'usedAttributes' => [ 'startFilePos', 'endFilePos' ]
    ]);
    

    但实际上第三个参数并没有像我所期望的那样传递给Lexer,它只支持一个不推荐使用的选项 throwOnError .

    所以我直接把它应用到Lexer上:

    $this->parser = (new ParserFactory)->create(ParserFactory::ONLY_PHP7, new Lexer([
        'usedAttributes' => [ 'startFilePos', 'endFilePos' ]
    ]));
    

    现在我正确地收到了文件偏移量。

    推荐文章