예제 #1
0
        public async Task <CompletionList> Handle(CompletionParams request, CancellationToken cancellationToken)
        {
            router.Window.LogInfo("completion request");
            (var code, var lines, var tree) = bufferManager.Get(request.TextDocument.Uri.ToString());
            var table = bufferManager.GetTable(request.TextDocument.Uri.ToString());
            int c     = request.Position.Character;
            int l     = request.Position.Line;

            if (lines == null)
            {
                return(new CompletionList());
            }

            string token = lines[l][c].ToString();

            int i = GetChar(l, c, code);

            router.Window.LogInfo(i.ToString());

            var context = tree.GetFirstAtChar(i);

            router.Window.LogInfo(tree.ToString());
            router.Window.LogInfo(i.ToString());
            router.Window.LogInfo(context.ToString());

            //creating items
            List <CompletionItem> items = new List <CompletionItem>();

            if (context is FileContext)
            {
                items.Add(CreateKeyword("namespace "));
                items.Add(CreateKeyword("using "));
                items.Add(CreateKeyword("class "));
            }
            else if (context is ClassBodyContext)
            {
                items.Add(CreateKeyword("var "));
                items.Add(CreateKeyword("def "));
                items.Add(CreateKeywordDrop("public:\n\t", request.Position));
                items.Add(CreateKeywordDrop("private:\n\t", request.Position));
                items.Add(CreateKeywordDrop("internal:\n\t", request.Position));
            }
            else
            {
                GetMembers(table, items);
            }


            return(items);
        }