Esempio n. 1
0
        public async System.Threading.Tasks.Task <int> CMNextSymbol(JToken arg)
        {
            CMNextSymbolParams request  = arg.ToObject <CMNextSymbolParams>();
            Document           document = CheckDoc(request.TextDocument);
            int  pos     = request.Pos;
            bool forward = request.Forward;

            if (trace)
            {
                System.Console.Error.WriteLine("<-- CMNextSymbol");
                System.Console.Error.WriteLine(arg.ToString());
                (int, int)bs = LanguageServer.Module.GetLineColumn(pos, document);
                System.Console.Error.WriteLine("");
            }
            IEnumerable <Location> r       = LanguageServer.Module.GetDefs(document);
            List <object>          symbols = new List <object>();
            int next_sym = forward ? int.MaxValue : -1;

            foreach (Location s in r)
            {
                if (forward)
                {
                    if (s.Range.Start.Value > pos && s.Range.Start.Value < next_sym)
                    {
                        next_sym = s.Range.Start.Value;
                    }
                }
                else
                {
                    if (s.Range.Start.Value < pos && s.Range.Start.Value > next_sym)
                    {
                        next_sym = s.Range.Start.Value;
                    }
                }
            }
            if (next_sym == int.MaxValue)
            {
                next_sym = -1;
            }

            if (trace)
            {
                System.Console.Error.Write("returning ");
                System.Console.Error.WriteLine(next_sym);
            }
            return(next_sym);
        }
Esempio n. 2
0
        public int CMNextSymbolSendServer(string ffn, int pos, bool forward)
        {
            try
            {
                if (_rpc == null)
                {
                    return(-1);
                }

                CMNextSymbolParams p = new CMNextSymbolParams();
                Uri uri = new Uri(ffn);
                p.TextDocument = uri;
                p.Pos          = pos;
                p.Forward      = forward;
                int result = _rpc.InvokeAsync <int>("CMNextSymbol", p).Result;
                return(result);
            }
            catch (Exception)
            {
            }
            return(-1);
        }