diff --git a/src/Protocol/ParameterInformation.php b/src/Protocol/ParameterInformation.php index 89b5e53..fa9b7bf 100644 --- a/src/Protocol/ParameterInformation.php +++ b/src/Protocol/ParameterInformation.php @@ -23,4 +23,17 @@ class ParameterInformation * @var string|null */ public $documentation; + + /** + * Create ParameterInformation + * + * @param string $label The label of this signature. Will be shown in the UI. + * @param string $documentation The human-readable doc-comment of this signature. Will be shown in the UI but can + * be omitted. + */ + public function __construct(string $label, string $documentation = null) + { + $this->label = $label; + $this->documentation = $documentation; + } } diff --git a/src/Protocol/SignatureHelp.php b/src/Protocol/SignatureHelp.php index 407b25a..f7aec6f 100644 --- a/src/Protocol/SignatureHelp.php +++ b/src/Protocol/SignatureHelp.php @@ -29,4 +29,18 @@ class SignatureHelp * @var int|null */ public $activeParameter; + + /** + * Create a SignatureHelp + * + * @param SignatureInformation[] $signatures List of signature information + * @param int|null $activeSignature The active signature, zero based + * @param int|null $activeParameter The active parameter, zero based + */ + public function __construct(array $signatures = [], $activeSignature = null, int $activeParameter = null) + { + $this->signatures = $signatures; + $this->activeSignature = $activeSignature; + $this->activeParameter = $activeParameter; + } } diff --git a/src/Protocol/SignatureInformation.php b/src/Protocol/SignatureInformation.php index 77e152c..d545f65 100644 --- a/src/Protocol/SignatureInformation.php +++ b/src/Protocol/SignatureInformation.php @@ -31,4 +31,19 @@ class SignatureInformation * @var ParameterInformation[]|null */ public $parameters; + + /** + * Create a SignatureInformation + * + * @param string $label The label of this signature. Will be shown in the UI. + * @param ParameterInformation[]|null The parameters of this signature + * @param string|null The human-readable doc-comment of this signature. Will be shown in the UI + * but can be omitted. + */ + public function __construct(string $label, array $parameters = null, string $documentation = null) + { + $this->label = $label; + $this->parameters = $parameters; + $this->documentation = $documentation; + } } diff --git a/src/SignatureHelpProvider.php b/src/SignatureHelpProvider.php index ed9522a..ccfca28 100644 --- a/src/SignatureHelpProvider.php +++ b/src/SignatureHelpProvider.php @@ -72,14 +72,13 @@ class SignatureHelpProvider $params = $this->getParameters($calledNode, $calledDoc); $label = $this->getLabel($calledNode, $params, $calledDoc); - $signatureInformation = new SignatureInformation(); - $signatureInformation->label = $label; - $signatureInformation->parameters = $params; - $signatureInformation->documentation = $this->definitionResolver->getDocumentationFromNode($calledNode); - $signatureHelp = new SignatureHelp(); - $signatureHelp->signatures = [$signatureInformation]; - $signatureHelp->activeSignature = 0; - $signatureHelp->activeParameter = $activeParam; + $signatureInformation = new SignatureInformation( + $label, + $params, + $this->definitionResolver->getDocumentationFromNode($calledNode) + ); + $signatureHelp = new SignatureHelp([$signatureInformation], 0, $activeParam); + return $signatureHelp; } @@ -191,10 +190,10 @@ class SignatureHelpProvider if ($element->default) { $param .= ' = ' . $element->default->getText($doc->getContent()); } - $info = new ParameterInformation(); - $info->label = $param; - $info->documentation = $this->definitionResolver->getDocumentationFromNode($element); - $params[] = $info; + $params[] = new ParameterInformation( + $param, + $this->definitionResolver->getDocumentationFromNode($element) + ); } } return $params; diff --git a/tests/Server/TextDocument/SignatureHelpTest.php b/tests/Server/TextDocument/SignatureHelpTest.php index d5482a9..aab21cc 100644 --- a/tests/Server/TextDocument/SignatureHelpTest.php +++ b/tests/Server/TextDocument/SignatureHelpTest.php @@ -192,19 +192,12 @@ class SignatureHelpTest extends TestCase { $params = []; foreach ($info['parameters'] as $param) { - $paramInfo = new ParameterInformation(); - $paramInfo->label = $param['label']; - $paramInfo->documentation = $param['documentation']; + $paramInfo = new ParameterInformation($param['label'], $param['documentation']); $params[] = $paramInfo; } - $signature = new SignatureInformation(); - $signature->label = $info['label']; - $signature->documentation = $info['documentation']; - $signature->parameters = $params; - $help = new SignatureHelp(); - $help->signatures = [$signature]; - $help->activeSignature = $info['activeSignature']; - $help->activeParameter = $info['activeParameter']; + $signature = new SignatureInformation($info['label'], $params, $info['documentation']); + $help = new SignatureHelp([$signature], $info['activeSignature'], $info['activeParameter']); + return $help; } }