Skip to content

Commit 24ae548

Browse files
authored
Merge pull request github#17809 from github/tausbn/python-fix-kwargs-in-class-bases
Python: Fix bug in handling of `**kwargs` in class bases
2 parents e1e3568 + 9803bbd commit 24ae548

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
class Foo(int, object, metaclass=type):
1+
class Foo(int, object, metaclass=type, **kwargs):
22
x = 5

python/extractor/tsg-python/python.tsg

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,16 +1277,18 @@
12771277
attr (@class.inner_scope -> @stmt.node) body = (named-child-index @stmt)
12781278
}
12791279

1280-
; Class.bases - using `(_ !name)` as a proxy for all non-keyword arguments.
1280+
; Class.bases - using `(_ !value !name)` as a proxy for all non-keyword arguments.
1281+
; In particular, `keyword_argument` nodes have a `name` field, and `dictionary_splat`
1282+
; nodes have a `value` field.
12811283
(class_definition
1282-
superclasses: (argument_list element: (_ !name) @arg)
1284+
superclasses: (argument_list element: (_ !value !name) @arg)
12831285
) @class
12841286
{
12851287
edge @class.class_expr -> @arg.node
12861288
attr (@class.class_expr -> @arg.node) bases = (named-child-index @arg)
12871289
}
12881290

1289-
; Class.keywords
1291+
; Class.keywords of the form `foo=bar`
12901292
(class_definition
12911293
superclasses: (argument_list element: (keyword_argument) @arg)
12921294
) @class
@@ -1295,6 +1297,15 @@
12951297
attr (@class.class_expr -> @arg.node) keywords = (named-child-index @arg)
12961298
}
12971299

1300+
; Class.keywords of the form `**kwargs`
1301+
(class_definition
1302+
superclasses: (argument_list element: (dictionary_splat) @arg)
1303+
) @class
1304+
{
1305+
edge @class.class_expr -> @arg.node
1306+
attr (@class.class_expr -> @arg.node) keywords = (named-child-index @arg)
1307+
}
1308+
12981309
;;;;;; End of Class
12991310

13001311
;;;;;; Assign statements

0 commit comments

Comments
 (0)