Xonsh Compiler

    import xonsh.main, xonsh.execer, IPython, ast
    execer = xonsh.execer.Execer()
    class CachingCompiler(IPython.core.compilerop.CachingCompiler):
        def ast_parse(self, source, filename='<unknown>', symbol='exec'): 
            return globals()['execer']._parse_ctx_free(source + "\n", symbol, filename)[0] or ast.Module([])
    def load_ipython_extension(shell): 
        if not hasattr(__import__('builtins'), '__xonsh__'):
            with xonsh.main.main_context('-i'.split()): ...
        shell.compile = CachingCompiler()

    def unload_ipython_extension(shell): shell.compile = IPython.core.compilerop.CachingCompiler
    __name__ == '__main__' and load_ipython_extension(get_ipython())
Written on October 8, 2019