Получить смещение и длину узла - PullRequest
0 голосов
/ 10 мая 2019

Я использую пакет nikic / php-parser для анализа файла PHP, предоставленного пользователем. В этом файле будет несколько функций PHP, и мне нужно знать, какие из них, а также точное смещение и длину определения.

Например:

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

В этом случае у меня есть одна функция с именем x, и смещение (с которого начинается function) равно 6 , а длина считается до }, в этом случае 16 .

Итак, я включил два атрибута в анализаторе: startFilePos и endFilePos, но по какой-то причине он не даст мне эту информацию.

1 Ответ

0 голосов
/ 10 мая 2019

Хорошо, теперь я вижу ...

Я запускаю его как:

$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' ]
]));

Теперь я правильно получаю смещение файла.

...