Beispiel #1
0
        // https://microsoft.github.io/language-server-protocol/specification#textDocument_hover
        string GetHover(string json)
        {
            PosData posData = GetPosData(json);

            if (posData == null)
            {
                return(null);
            }

            Hover hover = null;

            if (/*parserData.Success &&*/ posData.SelectedNode != null && posData.SelectedNode.Length > 0)
            {
                switch (posData.SelectedNode[0])
                {
                case MethodNode methodNode:

                    IMethod method = parserData.GetMethod(methodNode.Name);

                    if (method != null)
                    {
                        hover = new Hover(new MarkupContent(MarkupContent.Markdown, method.GetLabel(true)))
                        {
                            range = methodNode.Location.range
                        }
                    }
                    ;
                    break;

                case ImportNode importNode:

                    string path = Extras.CombinePathWithDotNotation(posData.File, importNode.File);

                    if (path != null)
                    {
                        hover = new Hover(new MarkupContent(MarkupContent.Markdown, path))
                        {
                            range = importNode.Location.range
                        }
                    }
                    ;

                    break;

                default:
                    hover = null;
                    break;
                }
            }

            return(JsonConvert.SerializeObject(hover));
        }
        // https://microsoft.github.io/language-server-protocol/specification#textDocument_hover
        static string GetHover(string json)
        {
            dynamic inputJson = JsonConvert.DeserializeObject(json);
            string  document  = inputJson.textDocument;

            int line      = inputJson.caret.line;
            int character = inputJson.caret.character;
            Pos caret     = new Pos(line, character);

            var parser = ParserData.GetParser(document, new Parse.Pos(caret.line, caret.character));

            Hover hover = null;

            if (parser.Success && parser.Bav.SelectedNode.Count > 0)
            {
                switch (parser.Bav.SelectedNode[0])
                {
                case MethodNode methodNode:

                    var type = Translate.GetMethodType(parser.UserMethods, methodNode.Name);

                    if (type == null)
                    {
                        hover = null;
                    }

                    Parameter[] parameters;
                    if (type == Translate.MethodType.Method)
                    {
                        parameters = Element.GetMethod(methodNode.Name).GetCustomAttributes <Parameter>()
                                     .ToArray();
                    }
                    else if (type == Translate.MethodType.CustomMethod)
                    {
                        parameters = CustomMethods.GetCustomMethod(methodNode.Name).GetCustomAttributes <Parameter>()
                                     .ToArray();
                    }
                    else if (type == Translate.MethodType.UserMethod)
                    {
                        parameters = UserMethod.GetUserMethod(parser.UserMethods, methodNode.Name).Parameters;
                    }
                    else
                    {
                        parameters = null;
                    }

                    if (parameters != null)
                    {
                        hover = new Hover(new MarkupContent(MarkupContent.Markdown, methodNode.Name + "(" + Parameter.ParameterGroupToString(parameters) + ")"))
                        {
                            range = methodNode.Range
                        }
                    }
                    ;
                    break;

                default:
                    hover = null;
                    break;
                }
            }

            return(JsonConvert.SerializeObject(hover));
        }