##// END OF EJS Templates
Fix missing locations in modified AST....
Thomas Kluyver -
Show More
@@ -2694,7 +2694,7 b' class InteractiveShell(SingletonConfigurable):'
2694 warn("AST transformer %r threw an error. It will be unregistered." % transformer)
2694 warn("AST transformer %r threw an error. It will be unregistered." % transformer)
2695 self.ast_transformers.remove(transformer)
2695 self.ast_transformers.remove(transformer)
2696
2696
2697 return node
2697 return ast.fix_missing_locations(node)
2698
2698
2699
2699
2700 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
2700 def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'):
@@ -438,6 +438,31 b' class TestAstTransform(unittest.TestCase):'
438 with tt.AssertNotPrints('-55'):
438 with tt.AssertNotPrints('-55'):
439 ip.run_cell('print (n)')
439 ip.run_cell('print (n)')
440
440
441 class IntegerWrapper(ast.NodeTransformer):
442 """Wraps all integers in a call to Integer()"""
443 def visit_Num(self, node):
444 if isinstance(node.n, int):
445 return ast.Call(func=ast.Name(id='Integer', ctx=ast.Load()),
446 args=[node], keywords=[])
447
448 class TestAstTransform2(unittest.TestCase):
449 def setUp(self):
450 self.intwrapper = IntegerWrapper()
451 ip.ast_transformers.append(self.intwrapper)
452
453 self.calls = []
454 def Integer(*args):
455 self.calls.append(args)
456 ip.push({"Integer": Integer})
457
458 def tearDown(self):
459 ip.ast_transformers.remove(self.intwrapper)
460 del ip.user_ns['Integer']
461
462 def test_run_cell(self):
463 ip.run_cell("n = 2")
464 self.assertEqual(self.calls, [(2,)])
465
441 class ErrorTransformer(ast.NodeTransformer):
466 class ErrorTransformer(ast.NodeTransformer):
442 """Throws an error when it sees a number."""
467 """Throws an error when it sees a number."""
443 def visit_Num(self):
468 def visit_Num(self):
General Comments 0
You need to be logged in to leave comments. Login now