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));
        }
Exemplo n.º 2
0
        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));
        }