Skip to content
This repository was archived by the owner on Jan 13, 2026. It is now read-only.

Commit 53b8330

Browse files
committed
Add parsing support for class declaration keywords like metaclass
1 parent 32bd4c4 commit 53b8330

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

rewrite/rewrite/python/_parser_visitor.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,13 +228,14 @@ def visit_ClassDef(self, node):
228228
name = self.__convert_name(node.name)
229229
save_cursor = self._cursor
230230
interfaces_prefix = self.__whitespace()
231-
if node.bases and self.__cursor_at('('):
231+
if (node.bases or node.keywords) and self.__cursor_at('('):
232+
all = node.bases + node.keywords
232233
self.__skip('(')
233234
interfaces = JContainer(
234235
interfaces_prefix,
235236
[
236-
self.__pad_list_element(self.__convert_type(n), i == len(node.bases) - 1, end_delim=')') for i, n in
237-
enumerate(node.bases)],
237+
self.__pad_list_element(self.__convert_type(n), i == len(all) - 1, end_delim=')') for i, n in
238+
enumerate(all)],
238239
Markers.EMPTY
239240
)
240241
elif self.__cursor_at('('):

rewrite/tests/python/all/class_test.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,22 @@ def test_bases_via_call():
8686
"""\
8787
def fun():
8888
return []
89-
89+
9090
class Derived(fun()):
9191
pass
9292
"""
9393
)
9494
)
95+
96+
97+
def test_metaclass():
98+
# language=python
99+
rewrite_run(
100+
python(
101+
"""\
102+
from typing import Type
103+
class Derived(metaclass=Type):
104+
pass
105+
"""
106+
)
107+
)

0 commit comments

Comments
 (0)