1919use PhpParser \NodeTraverser ;
2020use PhpParser \NodeVisitor ;
2121use PhpParser \Parser ;
22+ use PhpParser \PhpVersion ;
2223use PhpParser \PrettyPrinter \Standard ;
2324
2425/**
2930 */
3031class UseStatementManipulator
3132{
32- protected Parser \ Php7 $ parser ;
33+ protected Parser $ parser ;
3334 protected Lexer \Emulative $ lexer ;
3435 protected Standard $ printer ;
3536
@@ -51,14 +52,22 @@ class UseStatementManipulator
5152
5253 public function __construct (string $ sourceCode )
5354 {
54- $ this ->lexer = new Lexer \Emulative ([
55- 'usedAttributes ' => [
56- 'comments ' ,
57- 'startLine ' , 'endLine ' ,
58- 'startTokenPos ' , 'endTokenPos ' ,
59- ],
60- ]);
61- $ this ->parser = new Parser \Php7 ($ this ->lexer );
55+ /* @legacy Support for nikic/php-parser v4 */
56+ if (class_exists (PhpVersion::class)) {
57+ $ version = PhpVersion::fromString (\PHP_VERSION );
58+ $ this ->lexer = new Lexer \Emulative ($ version );
59+ $ this ->parser = new Parser \Php8 ($ this ->lexer , $ version );
60+ } else {
61+ $ this ->lexer = new Lexer \Emulative ([
62+ 'usedAttributes ' => [
63+ 'comments ' ,
64+ 'startLine ' , 'endLine ' ,
65+ 'startTokenPos ' , 'endTokenPos ' ,
66+ ],
67+ ]);
68+ $ this ->parser = new Parser \Php7 ($ this ->lexer );
69+ }
70+
6271 $ this ->printer = new Standard ();
6372
6473 $ this ->setSourceCode ($ sourceCode );
@@ -73,7 +82,14 @@ protected function setSourceCode(string $sourceCode): void
7382 {
7483 $ this ->sourceCode = $ sourceCode ;
7584 $ this ->oldStmts = $ this ->parser ->parse ($ sourceCode );
76- $ this ->oldTokens = $ this ->lexer ->getTokens ();
85+
86+ /* @legacy Support for nikic/php-parser v4 */
87+ if (\is_callable ([$ this ->parser , 'getTokens ' ])) {
88+ $ this ->oldTokens = $ this ->parser ->getTokens ();
89+ } elseif (\is_callable ($ this ->lexer ->getTokens (...))) {
90+ $ this ->oldTokens = $ this ->lexer ->getTokens ();
91+ }
92+
7793 if (null === $ this ->oldStmts ) {
7894 return ;
7995 }
0 commit comments