// 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)); }