예제 #1
0
        private MixinSignature GetSignature(int pos, IAst astRoot, ITrackingSpan applicableToSpan)
        {
            var visitor = new FindNodeAstVisitor(new NSpan(pos, pos));

            visitor.Visit(astRoot);

            foreach (var ast in visitor.Stack)
            {
                if (ast is FunctionRef)
                {
                    var functionRef = (FunctionRef)ast;
                    if (functionRef.IsSymbolEvaluated && functionRef.Symbol.IsFunctionEvaluated)
                    {
                        var symbol     = functionRef.Symbol;
                        var function   = symbol.Function;
                        var parameters = function.Parameters.MakeCompletionList("")
                                         .OfType <FunctionParameterSymbol>()
                                         .OrderBy(p => p.Index)
                                         .Select(p => p.Name)
                                         .ToList();
                        var paramString = string.Join(", ", parameters);

                        return(CreateSignature(_buffer, function.Name + "(" + paramString + ")", "", applicableToSpan));
                    }

                    return(null);
                }
            }

            return(null);
        }
        private HashSet <Completion> CompleteWord(int pos, IAst astRoot, IParseResult parseResult, SourceSnapshot source, ITextSnapshot compiledSnapshot)
        {
            var completionList = new HashSet <Completion>();
            var nspan          = new NSpan(pos, pos);

            if (IsInsideComment(parseResult, nspan))
            {
                return(completionList);
            }

            var visitor = new FindNodeAstVisitor(nspan);

            visitor.Visit(astRoot);
            var stack = visitor.Stack
                        .Where(ast => !(ast is IEnumerable))        // Skip IAstList
                        .ToArray();

            if (ShouldComplete(stack, pos, compiledSnapshot))
            {
                GetCompletions(completionList, stack);
                AddKeywordCompletions(stack, completionList);
            }

            return(completionList);
        }
예제 #3
0
        public IAst[] GetCurrentAstStack(string fileName, int caretPosition)
        {
            var file = LatestResult?.GetFile(fileName);

            if (file == null)
            {
                return(new IAst[0]);
            }

            var visitor = new FindNodeAstVisitor(new NSpan(caretPosition, caretPosition));

            visitor.Visit(file.Ast);

            return(visitor.Stack.ToArray());
        }