Skip to content

Commit c292f17

Browse files
bcallerBen Caller
authored and
Ben Caller
committed
Support AnnAssign in StmtVisitor
Assignments with type annotations were added in python 3.6.
1 parent f78599f commit c292f17

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
x: int
2+
y: int=5

pyt/cfg/stmt_visitor.py

+8
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,14 @@ def visit_Assign(self, node):
422422
path=self.filenames[-1]
423423
))
424424

425+
def visit_AnnAssign(self, node):
426+
if node.value is None:
427+
return IgnoredNode()
428+
else:
429+
assign = ast.Assign(targets=[node.target], value=node.value)
430+
ast.copy_location(assign, node)
431+
return self.visit(assign)
432+
425433
def assignment_call_node(self, left_hand_label, ast_node):
426434
"""Handle assignments that contain a function call on its right side."""
427435
self.undecided = True # Used for handling functions in assignments

tests/cfg/cfg_test.py

+19
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,25 @@ def test_assignment_and_builtin_line_numbers(self):
720720
self.assertLineNumber(assign, 1)
721721
self.assertLineNumber(builtin, 2)
722722

723+
def test_assignment_with_annotation(self):
724+
self.cfg_create_from_file('examples/example_inputs/assignment_with_annotation.py')
725+
726+
self.assert_length(self.cfg.nodes, expected_length=3)
727+
728+
entry = 0
729+
assign = 1
730+
exit_node = 2
731+
732+
self.assertInCfg([(assign, entry), (exit_node, assign)])
733+
self.assertEqual(self.cfg.nodes[assign].label, 'y = 5')
734+
735+
def test_assignment_with_annotation_line_numbers(self):
736+
self.cfg_create_from_file('examples/example_inputs/assignment_with_annotation.py')
737+
738+
assign = self.cfg.nodes[1]
739+
740+
self.assertLineNumber(assign, 2)
741+
723742
def test_multiple_assignment(self):
724743
self.cfg_create_from_file('examples/example_inputs/assignment_multiple_assign.py')
725744

0 commit comments

Comments
 (0)