def autocomplete(state, code, source='<autocomplete>'): ac_state = AcState.clone(state) with context(state=ac_state): try: stmts = parser.parse_stmts(code, source, wrap_syntax_error=False) except UnexpectedCharacters as e: return {} except UnexpectedToken as e: tree = autocomplete_tree(e.puppet) if tree: try: stmts = parser.TreeToAst(code_ref=(code, source)).transform(tree) except pql_SyntaxError as e: return {} _eval_autocomplete(ac_state, stmts[:-1]) try: eval_autocomplete(ac_state, stmts[-1], True) except AutocompleteSuggestions as e: ns, = e.args return ns except Signal as e: ac_log.exception(e) else: _eval_autocomplete(ac_state, stmts) return ac_state.get_all_vars_with_rank()
def _eval_autocomplete(ac_state, stmts): for stmt in stmts: try: eval_autocomplete(ac_state, stmt, False) except Signal as e: ac_log.exception(e)