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); }
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()); }