From 0b61951a9c29c59cc0f787b6fda2146b242a0b47 Mon Sep 17 00:00:00 2001 From: Felix Becker Date: Tue, 13 Dec 2016 03:08:52 +0100 Subject: [PATCH] Support hover for definitions #201 --- src/Server/TextDocument.php | 9 +++++++-- tests/Server/TextDocument/HoverTest.php | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Server/TextDocument.php b/src/Server/TextDocument.php index d5c9323..1d58efc 100644 --- a/src/Server/TextDocument.php +++ b/src/Server/TextDocument.php @@ -276,8 +276,13 @@ class TextDocument return new Hover([]); } $range = Range::fromNode($node); - // Get the definition for whatever node is under the cursor - $def = $this->definitionResolver->resolveReferenceNodeToDefinition($node); + if ($definedFqn = DefinitionResolver::getDefinedFqn($node)) { + // Support hover for definitions + $def = $this->index->getDefinition($definedFqn); + } else { + // Get the definition for whatever node is under the cursor + $def = $this->definitionResolver->resolveReferenceNodeToDefinition($node); + } if ($def === null) { return new Hover([], $range); } diff --git a/tests/Server/TextDocument/HoverTest.php b/tests/Server/TextDocument/HoverTest.php index 80cef64..9f33268 100644 --- a/tests/Server/TextDocument/HoverTest.php +++ b/tests/Server/TextDocument/HoverTest.php @@ -26,6 +26,21 @@ class HoverTest extends ServerTestCase ], $reference->range), $result); } + public function testHoverForClassLikeDefinition() + { + // class TestClass implements TestInterface + // Get hover for TestClass + $definition = $this->getDefinitionLocation('TestClass'); + $result = $this->textDocument->hover( + new TextDocumentIdentifier($definition->uri), + $definition->range->start + )->wait(); + $this->assertEquals(new Hover([ + new MarkedString('php', "range), $result); + } + public function testHoverForMethod() { // $obj->testMethod();