From c38cbd22ac7b6f38cd13042634908359b55d05a9 Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Sun, 27 Dec 2020 09:36:45 +0000 Subject: [PATCH] Update highlighter to be aware of use statements --- .../Model/Highlighter.php | 10 ++++++++ .../Integration/Model/HighlighterTest.php | 24 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/lib/LanguageServerReferenceFinder/Model/Highlighter.php b/lib/LanguageServerReferenceFinder/Model/Highlighter.php index 4635c31d..295acee8 100644 --- a/lib/LanguageServerReferenceFinder/Model/Highlighter.php +++ b/lib/LanguageServerReferenceFinder/Model/Highlighter.php @@ -11,6 +11,7 @@ use Microsoft\PhpParser\Node\Expression\ScopedPropertyAccessExpression; use Microsoft\PhpParser\Node\Expression\Variable; use Microsoft\PhpParser\Node\MethodDeclaration; +use Microsoft\PhpParser\Node\NamespaceUseClause; use Microsoft\PhpParser\Node\Parameter; use Microsoft\PhpParser\Node\PropertyDeclaration; use Microsoft\PhpParser\Node\QualifiedName; @@ -258,6 +259,15 @@ private function constants(SourceFileNode $rootNode, string $name): Generator private function namespacedNames(Node $rootNode, string $fullyQualfiiedName): Generator { foreach ($rootNode->getDescendantNodes() as $node) { + if ($node instanceof NamespaceUseClause && $node->namespaceName instanceof QualifiedName && (string)$node->namespaceName === $fullyQualfiiedName) { + yield new DocumentHighlight( + new Range( + PositionConverter::intByteOffsetToPosition($node->namespaceName->getStart(), $node->getFileContents()), + PositionConverter::intByteOffsetToPosition($node->namespaceName->getEndPosition(), $node->getFileContents()) + ), + DocumentHighlightKind::TEXT + ); + } if ($node instanceof ClassDeclaration && (string)$node->getNamespacedName() === $fullyQualfiiedName) { yield new DocumentHighlight( new Range( diff --git a/tests/LanguageServerReferenceFinder/Integration/Model/HighlighterTest.php b/tests/LanguageServerReferenceFinder/Integration/Model/HighlighterTest.php index 4f4149fc..f926263c 100644 --- a/tests/LanguageServerReferenceFinder/Integration/Model/HighlighterTest.php +++ b/tests/LanguageServerReferenceFinder/Integration/Model/HighlighterTest.php @@ -174,6 +174,30 @@ function (Highlights $highlights) { self::assertEquals(DocumentHighlightKind::TEXT, $highlights->at(0)->kind); } ]; + + yield 'class name and use statement' => [ + 'bar()', + function (Highlights $highlights) { + self::assertCount(2, $highlights); + self::assertEquals(DocumentHighlightKind::TEXT, $highlights->at(0)->kind); + } + ]; + + yield 'class name and multiple use statements' => [ + <<<'EOT' +bar() +EOT + , + function (Highlights $highlights) { + self::assertCount(2, $highlights); + self::assertEquals(DocumentHighlightKind::TEXT, $highlights->at(0)->kind); + } + ]; } /**