Merge pull request #17809 from github/tausbn/python-fix-kwargs-in-class-bases

Python: Fix bug in handling of `**kwargs` in class bases
This commit is contained in:
Taus
2024-10-23 15:04:54 +02:00
committed by GitHub
2 changed files with 15 additions and 4 deletions

View File

@@ -1,2 +1,2 @@
class Foo(int, object, metaclass=type):
class Foo(int, object, metaclass=type, **kwargs):
x = 5

View File

@@ -1277,16 +1277,18 @@
attr (@class.inner_scope -> @stmt.node) body = (named-child-index @stmt)
}
; Class.bases - using `(_ !name)` as a proxy for all non-keyword arguments.
; Class.bases - using `(_ !value !name)` as a proxy for all non-keyword arguments.
; In particular, `keyword_argument` nodes have a `name` field, and `dictionary_splat`
; nodes have a `value` field.
(class_definition
superclasses: (argument_list element: (_ !name) @arg)
superclasses: (argument_list element: (_ !value !name) @arg)
) @class
{
edge @class.class_expr -> @arg.node
attr (@class.class_expr -> @arg.node) bases = (named-child-index @arg)
}
; Class.keywords
; Class.keywords of the form `foo=bar`
(class_definition
superclasses: (argument_list element: (keyword_argument) @arg)
) @class
@@ -1295,6 +1297,15 @@
attr (@class.class_expr -> @arg.node) keywords = (named-child-index @arg)
}
; Class.keywords of the form `**kwargs`
(class_definition
superclasses: (argument_list element: (dictionary_splat) @arg)
) @class
{
edge @class.class_expr -> @arg.node
attr (@class.class_expr -> @arg.node) keywords = (named-child-index @arg)
}
;;;;;; End of Class
;;;;;; Assign statements