public SymbolInformation[] CMGetClassifiersSendServer(int start, int end, string ffn) { try { if (_rpc == null) { return(null); } CMGetClassifiersParams p = new CMGetClassifiersParams(); Uri uri = new Uri(ffn); p.TextDocument = uri; p.Start = start; p.End = end; SymbolInformation[] result = _rpc.InvokeAsync <SymbolInformation[]>("CMGetClassifiers", p).Result; return(result); } catch (Exception) { } return(null); }
public async System.Threading.Tasks.Task <SymbolInformation[]> CMGetClassifiers(JToken arg) { CMGetClassifiersParams request = arg.ToObject <CMGetClassifiersParams>(); Document document = CheckDoc(request.TextDocument); int start = request.Start; int end = request.End; if (trace) { System.Console.Error.WriteLine("<-- CMGetClassifiers"); System.Console.Error.WriteLine(arg.ToString()); (int, int)bs = LanguageServer.Module.GetLineColumn(start, document); System.Console.Error.WriteLine(""); } IEnumerable <DocumentSymbol> r = LanguageServer.Module.Get(document); List <SymbolInformation> symbols = new List <SymbolInformation>(); foreach (DocumentSymbol s in r) { if (!(start <= s.range.Start.Value && s.range.Start.Value <= end)) { continue; } SymbolInformation si = new SymbolInformation(); if (s.kind == 0) { si.Kind = SymbolKind.Variable; // Nonterminal } else if (s.kind == 1) { si.Kind = SymbolKind.Enum; // Terminal } else if (s.kind == 2) { //si.Kind = 0; // Comment continue; } else if (s.kind == 3) { // si.Kind = 0; // Keyword continue; } else if (s.kind == 4) { // si.Kind = SymbolKind.Number; // Literal continue; } else if (s.kind == 5) { // si.Kind = 0; // Mode continue; } else if (s.kind == 6) { // si.Kind = SymbolKind.Enum; // Channel continue; } else { // si.Kind = 0; // Default. continue; } si.Name = s.name; si.Location = new Microsoft.VisualStudio.LanguageServer.Protocol.Location { Uri = request.TextDocument }; (int, int)lcs = LanguageServer.Module.GetLineColumn(s.range.Start.Value, document); (int, int)lce = LanguageServer.Module.GetLineColumn(s.range.End.Value, document); si.Location.Range = new Microsoft.VisualStudio.LanguageServer.Protocol.Range { Start = new Position(lcs.Item1, lcs.Item2), End = new Position(lce.Item1, lce.Item2) }; symbols.Add(si); } if (trace) { System.Console.Error.Write("returning "); System.Console.Error.WriteLine(string.Join(" ", symbols.Select(s => { SymbolInformation v = s; return("<" + v.Name + "," + v.Kind + ">"); }))); } SymbolInformation[] result = symbols.ToArray(); return(result); }