progress
parent
3cc0c038bf
commit
8551907577
|
@ -119,4 +119,8 @@ class Something {
|
||||||
public function hello() {
|
public function hello() {
|
||||||
echo 'Hi!';
|
echo 'Hi!';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public function selfParamTest(self $something) {
|
||||||
|
$something->hello();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -747,7 +747,7 @@ class DefinitionResolver
|
||||||
$type = $this->typeResolver->resolve($node->type);
|
$type = $this->typeResolver->resolve($node->type);
|
||||||
} else if ($node->type instanceof Node\Name && strtolower((string)$node->type) === 'self') {
|
} else if ($node->type instanceof Node\Name && strtolower((string)$node->type) === 'self') {
|
||||||
// handle self reference
|
// handle self reference
|
||||||
$class = getClosestNode($node, Node\Stmt\Class_::class);
|
$class = getClosestNode($node->type, Node\Stmt\Class_::class);
|
||||||
if ($class !== null) {
|
if ($class !== null) {
|
||||||
return new Types\Object_(new Fqsen('\\' . $class->name));
|
return new Types\Object_(new Fqsen('\\' . $class->name));
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,9 +85,10 @@ abstract class ServerTestCase extends TestCase
|
||||||
'TestClass::testMethod()' => new Location($globalSymbolsUri, new Range(new Position(57, 4), new Position(60, 5))),
|
'TestClass::testMethod()' => new Location($globalSymbolsUri, new Range(new Position(57, 4), new Position(60, 5))),
|
||||||
'test_function()' => new Location($globalSymbolsUri, new Range(new Position(78, 0), new Position(81, 1))),
|
'test_function()' => new Location($globalSymbolsUri, new Range(new Position(78, 0), new Position(81, 1))),
|
||||||
'whatever()' => new Location($globalReferencesUri, new Range(new Position(21, 0), new Position(23, 1))),
|
'whatever()' => new Location($globalReferencesUri, new Range(new Position(21, 0), new Position(23, 1))),
|
||||||
'Something' => new Location($globalSymbolsUri, new Range(new Position(109, 0), new Position(121, 1))),
|
'Something' => new Location($globalSymbolsUri, new Range(new Position(109, 0), new Position(125, 1))),
|
||||||
'Something::getInstance()' => new Location($globalSymbolsUri, new Range(new Position(111, 4), new Position(113, 5))),
|
'Something::getInstance()' => new Location($globalSymbolsUri, new Range(new Position(111, 4), new Position(113, 5))),
|
||||||
'Something::hello()' => new Location($globalSymbolsUri, new Range(new Position(118, 4), new Position(120, 5))),
|
'Something::hello()' => new Location($globalSymbolsUri, new Range(new Position(118, 4), new Position(120, 5))),
|
||||||
|
'Something::selfParamTest()' => new Location($globalSymbolsUri, new Range(new Position(122, 4), new Position(124, 5))),
|
||||||
|
|
||||||
// Namespaced
|
// Namespaced
|
||||||
'TestNamespace' => new Location($symbolsUri, new Range(new Position( 2, 10), new Position( 2, 23))),
|
'TestNamespace' => new Location($symbolsUri, new Range(new Position( 2, 10), new Position( 2, 23))),
|
||||||
|
@ -219,7 +220,8 @@ abstract class ServerTestCase extends TestCase
|
||||||
1 => new Location($globalReferencesUri, new Range(new Position(31, 13), new Position(31, 40)))
|
1 => new Location($globalReferencesUri, new Range(new Position(31, 13), new Position(31, 40)))
|
||||||
],
|
],
|
||||||
'Something' => [
|
'Something' => [
|
||||||
0 => new Location($globalReferencesUri, new Range(new Position(45, 0), new Position(56, 9))) // Something::getInstance()->hello()
|
0 => new Location($globalReferencesUri, new Range(new Position(45, 0), new Position(56, 9))), // Something::getInstance()->hello()
|
||||||
|
1 => new Location($globalSymbolsUri, new Range(new Position(123, 8), new Position(123, 18))) // $something->hello();
|
||||||
],
|
],
|
||||||
'Something::getInstance()' => [
|
'Something::getInstance()' => [
|
||||||
0 => new Location($globalReferencesUri, new Range(new Position(45, 0), new Position(45, 24))) // Something::getInstance()->hello()
|
0 => new Location($globalReferencesUri, new Range(new Position(45, 0), new Position(45, 24))) // Something::getInstance()->hello()
|
||||||
|
|
|
@ -46,6 +46,20 @@ class HoverTest extends ServerTestCase
|
||||||
], $reference->range), $result);
|
], $reference->range), $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testHoverForSelfParamTypeDefinition()
|
||||||
|
{
|
||||||
|
// class Something
|
||||||
|
// get hover for Something::getInstance() (returns a instance of Something)
|
||||||
|
$reference = $this->getReferenceLocations('Something')[1];
|
||||||
|
$result = $this->textDocument->hover(
|
||||||
|
new TextDocumentIdentifier($reference->uri),
|
||||||
|
$reference->range->end
|
||||||
|
)->wait();
|
||||||
|
$this->assertEquals(new Hover([
|
||||||
|
new MarkedString('php', "<?php\nclass Something")
|
||||||
|
], $reference->range), $result);
|
||||||
|
}
|
||||||
|
|
||||||
public function testHoverForClassLikeDefinition()
|
public function testHoverForClassLikeDefinition()
|
||||||
{
|
{
|
||||||
// class TestClass implements TestInterface
|
// class TestClass implements TestInterface
|
||||||
|
|
|
@ -62,6 +62,7 @@ class SymbolTest extends ServerTestCase
|
||||||
new SymbolInformation('Something', SymbolKind::CLASS_, $this->getDefinitionLocation('Something'), ''),
|
new SymbolInformation('Something', SymbolKind::CLASS_, $this->getDefinitionLocation('Something'), ''),
|
||||||
new SymbolInformation('getInstance', SymbolKind::METHOD, $this->getDefinitionLocation('Something::getInstance()'), 'Something'),
|
new SymbolInformation('getInstance', SymbolKind::METHOD, $this->getDefinitionLocation('Something::getInstance()'), 'Something'),
|
||||||
new SymbolInformation('hello', SymbolKind::METHOD, $this->getDefinitionLocation('Something::hello()'), 'Something'),
|
new SymbolInformation('hello', SymbolKind::METHOD, $this->getDefinitionLocation('Something::hello()'), 'Something'),
|
||||||
|
new SymbolInformation('selfParamTest', SymbolKind::METHOD, $this->getDefinitionLocation('Something::selfParamTest()'), 'Something'),
|
||||||
new SymbolInformation('whatever', SymbolKind::FUNCTION, $this->getDefinitionLocation('whatever()'), ''),
|
new SymbolInformation('whatever', SymbolKind::FUNCTION, $this->getDefinitionLocation('whatever()'), ''),
|
||||||
|
|
||||||
new SymbolInformation('SecondTestNamespace', SymbolKind::NAMESPACE, $this->getDefinitionLocation('SecondTestNamespace'), '')
|
new SymbolInformation('SecondTestNamespace', SymbolKind::NAMESPACE, $this->getDefinitionLocation('SecondTestNamespace'), '')
|
||||||
|
|
Loading…
Reference in New Issue