private FuncDefinitionAst GetCurrentFunctionAst(ProgramAst programAst, Position position) { foreach (FuncDefinitionAst ast in programAst.funcDefinitionAsts) { if (Contains(ast, position)) { return(ast); } } return(null); }
public void ProcessProgram(ProgramAst programAst) { foreach (var element in programAst.Elements) { if (element is DeclarationStatementAst declarationStatement) { ProcessDeclarationStatement(declarationStatement); } else if (element is FunctionAst function) { ProcessFunction(function); } else { throw new ArgumentException($"Unknown ast type of one element: {element.GetType()}"); } } }
private IEnumerable <CompletionItem> CreateFunctions(ProgramAst ast) { return(ast.funcDefinitionAsts.Select(e => CreateCompletionItem(e.funcName, CompletionItemKind.Function, $"function {e.funcName}({string.Join(", ", e.args.Select(a => a.VarName))})"))); }