public override Task <Hover> Handle(HoverParams request, CancellationToken cancellationToken) { RhetosDocument rhetosDocument; // Visual Studio may issue hover before DidOpen if hover happens before solution is fully loaded try { rhetosDocument = rhetosWorkspace.GetRhetosDocument(request.TextDocument.Uri); } catch (InvalidOperationException) { log.LogWarning($"Trying to resolve hover on document that is not opened '{request.TextDocument.Uri}'."); return(Task.FromResult <Hover>(null)); } var descInfo = rhetosDocument.GetHoverDescriptionAtPosition(request.Position.ToLineChr()); if (string.IsNullOrEmpty(descInfo.description)) { return(Task.FromResult <Hover>(null)); } var response = new Hover() { Range = new Range(descInfo.startPosition.ToPosition(), descInfo.endPosition.ToPosition()), Contents = new MarkedStringsOrMarkupContent(descInfo.description) }; return(Task.FromResult(response)); }
public override Task <SignatureHelp> Handle(SignatureHelpParams request, CancellationToken cancellationToken) { log.LogDebug($"SignatureHelp requested at {request.Position.ToLineChr()}."); var rhetosDocument = rhetosWorkspace.GetRhetosDocument(request.TextDocument.Uri); if (rhetosDocument == null) { return(Task.FromResult <SignatureHelp>(null)); } var signatures = rhetosDocument.GetSignatureHelpAtPosition(request.Position.ToLineChr()); if (signatures.signatures == null) { return(Task.FromResult <SignatureHelp>(null)); } ParameterInformation FromRhetosParameter(ConceptMember conceptMember) => new ParameterInformation() { Documentation = "", Label = new ParameterInformationLabel(ConceptInfoType.ConceptMemberDescription(conceptMember)) }; SignatureInformation FromRhetosSignature(RhetosSignature rhetosSignature) => new SignatureInformation() { Documentation = rhetosSignature.Documentation, Label = rhetosSignature.Signature, Parameters = new Container <ParameterInformation>(rhetosSignature.Parameters.Select(FromRhetosParameter)) }; var signatureHelp = new SignatureHelp() { Signatures = new Container <SignatureInformation>(signatures.signatures.Select(FromRhetosSignature)), ActiveSignature = signatures.activeSignature ?? 100, ActiveParameter = signatures.activeParameter ?? 100 }; return(Task.FromResult(signatureHelp)); }
public override Task <CompletionList> Handle(CompletionParams request, CancellationToken cancellationToken) { log.LogDebug($"Completion requested at {request.Position.ToLineChr()}."); var document = rhetosWorkspace.GetRhetosDocument(request.TextDocument.Uri); if (document == null) { return(Task.FromResult <CompletionList>(null)); } var keywords = document.GetCompletionKeywordsAtPosition(request.Position.ToLineChr()); var completionItems = keywords .Select(keyword => new CompletionItem() { Label = keyword, Kind = CompletionItemKind.Keyword, Detail = conceptQueries.GetFullDescription(keyword) }) .ToList(); var completionList = new CompletionList(completionItems); return(Task.FromResult(completionList)); }