From 82b9f82df2054496c1422dca31ae44a50b98484e Mon Sep 17 00:00:00 2001 From: Jan Nedbal Date: Thu, 11 Apr 2024 14:32:42 +0200 Subject: [PATCH] UsedSymbolExtractor: fix incorrect detection of attribute (#121) --- src/UsedSymbolExtractor.php | 7 ++++++- tests/UsedSymbolExtractorTest.php | 12 ++++++++++++ tests/data/not-autoloaded/used-symbols/attribute.php | 4 ++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/data/not-autoloaded/used-symbols/attribute.php diff --git a/src/UsedSymbolExtractor.php b/src/UsedSymbolExtractor.php index ec2ebcd..1bffa9d 100644 --- a/src/UsedSymbolExtractor.php +++ b/src/UsedSymbolExtractor.php @@ -11,6 +11,7 @@ use function token_get_all; use const PHP_VERSION_ID; use const T_AS; +use const T_ATTRIBUTE; use const T_CLASS; use const T_COMMENT; use const T_CONST; @@ -337,9 +338,13 @@ private function getFqnSymbolKind(int $pointerBeforeName, int $pointerAfterName) break; } while ($pointerAfterName < $this->numTokens); + // phpcs:disable Squiz.PHP.CommentedOutCode.Found if ( $tokenAfterName === '(' - && $tokenBeforeName[0] !== T_NEW // eliminate new \ClassName( syntax + && !( + $tokenBeforeName[0] === T_NEW // eliminate new \ClassName( + || (PHP_VERSION_ID > 80000 && $tokenBeforeName[0] === T_ATTRIBUTE) // eliminate #[\AttributeName( + ) ) { return SymbolKind::FUNCTION; } diff --git a/tests/UsedSymbolExtractorTest.php b/tests/UsedSymbolExtractorTest.php index 1df98bb..5447e3e 100644 --- a/tests/UsedSymbolExtractorTest.php +++ b/tests/UsedSymbolExtractorTest.php @@ -4,6 +4,7 @@ use PHPUnit\Framework\TestCase; use function file_get_contents; +use const PHP_VERSION_ID; class UsedSymbolExtractorTest extends TestCase { @@ -112,6 +113,17 @@ public function provideVariants(): iterable __DIR__ . '/data/not-autoloaded/used-symbols/curly-braces.php', [] ]; + + yield 'attribute' => [ + __DIR__ . '/data/not-autoloaded/used-symbols/attribute.php', + PHP_VERSION_ID >= 80000 + ? [ + SymbolKind::CLASSLIKE => [ + 'SomeAttribute' => [3], + ], + ] + : [] + ]; } } diff --git a/tests/data/not-autoloaded/used-symbols/attribute.php b/tests/data/not-autoloaded/used-symbols/attribute.php new file mode 100644 index 0000000..c8ed873 --- /dev/null +++ b/tests/data/not-autoloaded/used-symbols/attribute.php @@ -0,0 +1,4 @@ +