mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
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:
@@ -1,2 +1,2 @@
|
||||
class Foo(int, object, metaclass=type):
|
||||
class Foo(int, object, metaclass=type, **kwargs):
|
||||
x = 5
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user