public function getSignatureHelp(PhpDocument $doc, Position $position): Promise
    {
        return coroutine(function () use ($doc, $position) {
            // Find the node under the cursor
            $node = $doc->getNodeAtPosition($position);

            // Find the definition of the item being called
            list($def, $argumentExpressionList) = yield $this->getCallingInfo($node);

            if (!$def || !$def->signatureInformation) {
                return new SignatureHelp();
            }

            // Find the active parameter
            $activeParam = $argumentExpressionList
                ? $this->findActiveParameter($argumentExpressionList, $position, $doc)
                : 0;

            return new SignatureHelp([$def->signatureInformation], 0, $activeParam);
        });
    }