示例#1
0
        private void HandleSignatureHelpRequest(string id, string paramsJson)
        {
            if (id == null)
            {
                _sendToClient(JsonRpcHelper.CreateErrorResult(id, JsonRpcHelper.ErrorCode.InvalidRequest));
                return;
            }

            Contracts.AssertValue(id);
            Contracts.AssertValue(paramsJson);

            if (!TryParseParams(paramsJson, out SignatureHelpParams signatureHelpParams))
            {
                _sendToClient(JsonRpcHelper.CreateErrorResult(id, JsonRpcHelper.ErrorCode.ParseError));
                return;
            }

            var documentUri = signatureHelpParams.TextDocument.Uri;
            var scope       = _scopeFactory.GetOrCreateInstance(documentUri);

            var uri        = new Uri(documentUri);
            var expression = HttpUtility.ParseQueryString(uri.Query).Get("expression");

            if (expression == null)
            {
                _sendToClient(JsonRpcHelper.CreateErrorResult(id, JsonRpcHelper.ErrorCode.InvalidParams));
                return;
            }

            var cursorPosition = GetPosition(expression, signatureHelpParams.Position.Line, signatureHelpParams.Position.Character);
            var result         = scope.Suggest(expression, cursorPosition);

            _sendToClient(JsonRpcHelper.CreateSuccessResult(id, result.SignatureHelp));
        }
示例#2
0
        private void HandleInitialFixupRequest(string id, string paramsJson)
        {
            if (id == null)
            {
                _sendToClient(JsonRpcHelper.CreateErrorResult(id, JsonRpcHelper.ErrorCode.InvalidRequest));
                return;
            }

            Contracts.AssertValue(id);
            Contracts.AssertValue(paramsJson);

            if (!TryParseParams(paramsJson, out InitialFixupParams initialFixupParams))
            {
                _sendToClient(JsonRpcHelper.CreateErrorResult(id, JsonRpcHelper.ErrorCode.ParseError));
                return;
            }

            var documentUri = initialFixupParams.TextDocument.Uri;
            var scope       = _scopeFactory.GetOrCreateInstance(documentUri);

            var expression       = initialFixupParams.TextDocument.Text;
            var scopeDisplayName = scope as IPowerFxScopeDisplayName;

            if (scopeDisplayName != null)
            {
                expression = scopeDisplayName.TranslateToDisplayName(expression);
            }

            _sendToClient(JsonRpcHelper.CreateSuccessResult(id, new TextDocumentItem()
            {
                Uri  = documentUri,
                Text = expression
            }));
        }
示例#3
0
        private void HandleCompletionRequest(string id, string paramsJson)
        {
            if (id == null)
            {
                _sendToClient(JsonRpcHelper.CreateErrorResult(id, JsonRpcHelper.ErrorCode.InvalidRequest));
                return;
            }

            Contracts.AssertValue(id);
            Contracts.AssertValue(paramsJson);

            if (!TryParseParams(paramsJson, out CompletionParams completionParams))
            {
                _sendToClient(JsonRpcHelper.CreateErrorResult(id, JsonRpcHelper.ErrorCode.ParseError));
                return;
            }

            var documentUri = completionParams.TextDocument.Uri;
            var scope       = _scopeFactory.GetOrCreateInstance(documentUri);

            var uri        = new Uri(documentUri);
            var expression = HttpUtility.ParseQueryString(uri.Query).Get("expression");

            if (expression == null)
            {
                _sendToClient(JsonRpcHelper.CreateErrorResult(id, JsonRpcHelper.ErrorCode.InvalidParams));
                return;
            }

            var cursorPosition = GetPosition(expression, completionParams.Position.Line, completionParams.Position.Character);
            var result         = scope.Suggest(expression, cursorPosition);

            var items = new List <CompletionItem>();

            foreach (var item in result.Suggestions)
            {
                items.Add(new CompletionItem()
                {
                    Label         = item.DisplayText.Text,
                    Detail        = item.FunctionParameterDescription,
                    Documentation = item.Definition,
                    Kind          = GetCompletionItemKind(item.Kind)
                });
            }

            _sendToClient(JsonRpcHelper.CreateSuccessResult(id, new
            {
                items,
                isIncomplete = false
            }));
        }