@@ -142,6 +142,8 @@ def to_tuple(t):
142
142
"@deco1\n @deco2()\n @deco3(1)\n class C: pass" ,
143
143
# Decorator with generator argument
144
144
"@deco(a for a in b)\n def f(): pass" ,
145
+ # Decorator with attribute
146
+ "@a.b.c\n def f(): pass" ,
145
147
# Simple assignment expression
146
148
"(a := 1)" ,
147
149
# Positional-only arguments
@@ -616,6 +618,11 @@ def test_issue18374_binop_col_offset(self):
616
618
self .assertEqual (grandchild_binop .end_col_offset , 3 )
617
619
self .assertEqual (grandchild_binop .end_lineno , 1 )
618
620
621
+ def test_issue39579_dotted_name_end_col_offset (self ):
622
+ tree = ast .parse ('@a.b.c\n def f(): pass' )
623
+ attr_b = tree .body [0 ].decorator_list [0 ].value
624
+ self .assertEqual (attr_b .end_col_offset , 4 )
625
+
619
626
class ASTHelpers_Test (unittest .TestCase ):
620
627
maxDiff = None
621
628
@@ -1903,6 +1910,7 @@ def main():
1903
1910
('Module' , [('AsyncFunctionDef' , (4 , 0 , 4 , 19 ), 'f' , ('arguments' , [], [], None , [], [], None , []), [('Pass' , (4 , 15 , 4 , 19 ))], [('Name' , (1 , 1 , 1 , 6 ), 'deco1' , ('Load' ,)), ('Call' , (2 , 1 , 2 , 8 ), ('Name' , (2 , 1 , 2 , 6 ), 'deco2' , ('Load' ,)), [], []), ('Call' , (3 , 1 , 3 , 9 ), ('Name' , (3 , 1 , 3 , 6 ), 'deco3' , ('Load' ,)), [('Constant' , (3 , 7 , 3 , 8 ), 1 , None )], [])], None , None )], []),
1904
1911
('Module' , [('ClassDef' , (4 , 0 , 4 , 13 ), 'C' , [], [], [('Pass' , (4 , 9 , 4 , 13 ))], [('Name' , (1 , 1 , 1 , 6 ), 'deco1' , ('Load' ,)), ('Call' , (2 , 1 , 2 , 8 ), ('Name' , (2 , 1 , 2 , 6 ), 'deco2' , ('Load' ,)), [], []), ('Call' , (3 , 1 , 3 , 9 ), ('Name' , (3 , 1 , 3 , 6 ), 'deco3' , ('Load' ,)), [('Constant' , (3 , 7 , 3 , 8 ), 1 , None )], [])])], []),
1905
1912
('Module' , [('FunctionDef' , (2 , 0 , 2 , 13 ), 'f' , ('arguments' , [], [], None , [], [], None , []), [('Pass' , (2 , 9 , 2 , 13 ))], [('Call' , (1 , 1 , 1 , 19 ), ('Name' , (1 , 1 , 1 , 5 ), 'deco' , ('Load' ,)), [('GeneratorExp' , (1 , 5 , 1 , 19 ), ('Name' , (1 , 6 , 1 , 7 ), 'a' , ('Load' ,)), [('comprehension' , ('Name' , (1 , 12 , 1 , 13 ), 'a' , ('Store' ,)), ('Name' , (1 , 17 , 1 , 18 ), 'b' , ('Load' ,)), [], 0 )])], [])], None , None )], []),
1913
+ ('Module' , [('FunctionDef' , (2 , 0 , 2 , 13 ), 'f' , ('arguments' , [], [], None , [], [], None , []), [('Pass' , (2 , 9 , 2 , 13 ))], [('Attribute' , (1 , 1 , 1 , 6 ), ('Attribute' , (1 , 1 , 1 , 4 ), ('Name' , (1 , 1 , 1 , 2 ), 'a' , ('Load' ,)), 'b' , ('Load' ,)), 'c' , ('Load' ,))], None , None )], []),
1906
1914
('Module' , [('Expr' , (1 , 0 , 1 , 8 ), ('NamedExpr' , (1 , 1 , 1 , 7 ), ('Name' , (1 , 1 , 1 , 2 ), 'a' , ('Store' ,)), ('Constant' , (1 , 6 , 1 , 7 ), 1 , None )))], []),
1907
1915
('Module' , [('FunctionDef' , (1 , 0 , 1 , 18 ), 'f' , ('arguments' , [('arg' , (1 , 6 , 1 , 7 ), 'a' , None , None )], [], None , [], [], None , []), [('Pass' , (1 , 14 , 1 , 18 ))], [], None , None )], []),
1908
1916
('Module' , [('FunctionDef' , (1 , 0 , 1 , 26 ), 'f' , ('arguments' , [('arg' , (1 , 6 , 1 , 7 ), 'a' , None , None )], [('arg' , (1 , 12 , 1 , 13 ), 'c' , None , None ), ('arg' , (1 , 15 , 1 , 16 ), 'd' , None , None ), ('arg' , (1 , 18 , 1 , 19 ), 'e' , None , None )], None , [], [], None , []), [('Pass' , (1 , 22 , 1 , 26 ))], [], None , None )], []),
0 commit comments