File tree Expand file tree Collapse file tree 3 files changed +8
-6
lines changed
src/semmle/python/dataflow/new/internal
test/experimental/dataflow Expand file tree Collapse file tree 3 files changed +8
-6
lines changed Original file line number Diff line number Diff line change @@ -68,5 +68,11 @@ Node importNode(string name) {
6868 // Because named imports are modelled as `AttrRead`s, the statement `from foo import bar as baz`
6969 // is interpreted as if it was an assignment `baz = foo.bar`, which means `baz` gets tracked as a
7070 // reference to `foo.bar`, as desired.
71- result .asCfgNode ( ) .getNode ( ) = any ( ImportExpr i | i .getName ( ) = name )
71+ exists ( ImportExpr imp_expr |
72+ imp_expr .getName ( ) = name and
73+ result .asCfgNode ( ) .getNode ( ) = imp_expr and
74+ // in `import foo.bar` we DON'T want to give a result for `importNode("foo.bar")`,
75+ // only for `importNode("foo")`. We exclude those cases with the following clause.
76+ not exists ( Import imp | imp .getAName ( ) .getValue ( ) = imp_expr )
77+ )
7278}
Original file line number Diff line number Diff line change 44| test2.py:1:19:1:21 | ControlFlowNode for ImportMember | mypkg.foo |
55| test2.py:1:24:1:26 | ControlFlowNode for ImportMember | mypkg.bar |
66| test3.py:1:8:1:16 | ControlFlowNode for ImportExpr | mypkg |
7- | test3.py:1:8:1:16 | ControlFlowNode for ImportExpr | mypkg.foo |
87| test3.py:2:8:2:16 | ControlFlowNode for ImportExpr | mypkg |
9- | test3.py:2:8:2:16 | ControlFlowNode for ImportExpr | mypkg.bar |
108| test4.py:1:8:1:16 | ControlFlowNode for ImportExpr | mypkg.foo |
119| test4.py:2:8:2:16 | ControlFlowNode for ImportExpr | mypkg.bar |
1210| test5.py:1:8:1:12 | ControlFlowNode for ImportExpr | mypkg |
1311| test5.py:9:6:9:10 | ControlFlowNode for ImportExpr | mypkg |
1412| test5.py:9:19:9:29 | ControlFlowNode for ImportMember | mypkg.bar |
1513| test6.py:1:8:1:12 | ControlFlowNode for ImportExpr | mypkg |
1614| test6.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg |
17- | test6.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg.foo |
1815| test7.py:1:6:1:10 | ControlFlowNode for ImportExpr | mypkg |
1916| test7.py:1:19:1:21 | ControlFlowNode for ImportMember | mypkg.foo |
2017| test7.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg |
21- | test7.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg.foo |
2218| test7.py:9:6:9:10 | ControlFlowNode for ImportExpr | mypkg |
2319| test7.py:9:19:9:21 | ControlFlowNode for ImportMember | mypkg.foo |
2420| test_deep.py:1:6:1:21 | ControlFlowNode for ImportExpr | start.middle.end |
Original file line number Diff line number Diff line change @@ -108,7 +108,7 @@ def track_self(self): # $ tracked_self
108108
109109def test_long_import_chain ():
110110 import foo .bar
111- foo .baz # $ SPURIOUS: tracked_foo_bar_baz
111+ foo .baz
112112 x = foo .bar .baz # $ tracked_foo_bar_baz
113113 do_stuff (x ) # $ tracked_foo_bar_baz
114114
You can’t perform that action at this time.
0 commit comments