definitionResolver = $definitionResolver; $this->index = $index; } /** * Returns signature help for a specific cursor position in a document * * @param PhpDocument $doc The opened document * @param Position $pos The cursor position * @return SignatureHelp */ public function provideSignature(PhpDocument $doc, Position $pos) : SignatureHelp { $node = $doc->getNodeAtPosition($pos); while ($node && !($node instanceof ArgumentExpressionList) && !($node instanceof CallExpression) && $node->parent ) { $node = $node->parent; } if (!($node instanceof ArgumentExpressionList) && !($node instanceof CallExpression) ) { return new SignatureHelp; } $count = null; if ($node instanceof ArgumentExpressionList) { $count = 0; foreach ($node->getElements() as $param) { $count ++; } while ($node && !($node instanceof CallExpression) && $node->parent) { $node = $node->parent; } if (!($node instanceof CallExpression)) { return new SignatureHelp; } } $def = $this->definitionResolver->resolveReferenceNodeToDefinition($node->callableExpression); if (!$def) { return new SignatureHelp; } return new SignatureHelp( [ new SignatureInformation( trim(str_replace(['public', 'protected', 'private', 'function', 'static'], '', $def->declarationLine)), $def->documentation, $def->parameters ) ], 0, $count !== null && $def->parameters !== null && $count < count($def->parameters) ? $count : null ); } }