Exemple #1
0
        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);
        }