public Task <Hover> Handle(HoverParams request, CancellationToken cancellationToken) { try { var scriptFile = _projectManager.GetScriptForFilePath(request.TextDocument.Uri.ToFilePath()); if (scriptFile == null) { return(Task.FromResult <Hover>(null)); } var identifier = scriptFile.Node.GetDescendantNodeOfTypeAtPosition <IdentifierNode>(request.Position.ToPosition()); if (identifier == null) { return(Task.FromResult <Hover>(null)); } var symbol = identifier.GetDeclaredOrReferencedSymbol(); if (symbol == null) { return(Task.FromResult <Hover>(null)); } var displayText = new DisplayTextEmitter().GetDisplayText(symbol); return(Task.FromResult(new Hover() { Contents = new MarkedStringsOrMarkupContent(DisplayTextToMarkupContent(displayText)), Range = identifier.Range.ToRange() })); } catch (Exception e) { _logger.LogWarning(e, "Error while handling request."); } return(Task.FromResult <Hover>(null)); }
public Task <SignatureHelp> Handle(SignatureHelpParams request, CancellationToken cancellationToken) { try { var scriptFile = _projectManager.GetScriptForFilePath(request.TextDocument.Uri.ToFilePath()); if (scriptFile == null) { return(Task.FromResult <SignatureHelp>(null)); } var requestPosition = request.Position.ToPosition(); var functionCallExpression = scriptFile.Node.GetDescendantNodeOfTypeAtPosition <FunctionCallExpressionNode>(requestPosition); if (functionCallExpression == null) { return(Task.FromResult <SignatureHelp>(null)); } var functionSymbol = functionCallExpression.Identifier.GetDeclaredOrReferencedSymbol(); if (functionSymbol == null) { return(Task.FromResult <SignatureHelp>(null)); } var activeParameterIndex = functionCallExpression.GetFunctionParameterIndexAtPosition(requestPosition); var displayTextEmitter = new DisplayTextEmitter(); var displayText = functionSymbol is FunctionSymbol asFunctionSymbol? displayTextEmitter.GetDisplayTextForFunction(asFunctionSymbol) : functionSymbol is EventSymbol asEventSymbol? displayTextEmitter.GetDisplayTextForEvent(asEventSymbol) : null; if (displayText == null) { return(Task.FromResult <SignatureHelp>(null)); } return(Task.FromResult(new SignatureHelp() { ActiveParameter = activeParameterIndex, Signatures = new SignatureInformation[] { new SignatureInformation() { Documentation = displayText.Documentation, Label = $"{displayText.ShortNamePrefix}({displayText.Parameters.Select(p => p.Text).Join(", ")})", Parameters = displayText.Parameters.Select(p => new ParameterInformation() { Label = p.Text }).ToArray() } } })); } catch (Exception e) { _logger.LogWarning(e, "Error while handling request."); } return(Task.FromResult <SignatureHelp>(null)); }