diff --git a/python/extractor/tsg-python/python.tsg b/python/extractor/tsg-python/python.tsg index c832f7e63219..ff5de34da594 100644 --- a/python/extractor/tsg-python/python.tsg +++ b/python/extractor/tsg-python/python.tsg @@ -1282,15 +1282,17 @@ attr (@class.inner_scope -> @stmt.node) body = (named-child-index @stmt) } -; 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.bases (class_definition - superclasses: (argument_list element: (_ !value !name) @arg) + superclasses: (argument_list element: (_) @arg) ) @class { - edge @class.class_expr -> @arg.node - attr (@class.class_expr -> @arg.node) bases = (named-child-index @arg) + if (not (or + (instance-of @arg "keyword_argument") + (instance-of @arg "dictionary_splat"))) { + edge @class.class_expr -> @arg.node + attr (@class.class_expr -> @arg.node) bases = (named-child-index @arg) + } } ; Class.keywords of the form `foo=bar`