Skip to content

Commit 5548097

Browse files
authored
gh-104683: clinic.py: refactor four simple classes as dataclasses (#106476)
1 parent 003ba71 commit 5548097

File tree

1 file changed

+20
-31
lines changed

1 file changed

+20
-31
lines changed

Tools/clinic/clinic.py

+20-31
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import contextlib
1414
import copy
1515
import cpp
16+
import dataclasses as dc
1617
import enum
1718
import functools
1819
import hashlib
@@ -1858,11 +1859,10 @@ def is_stop_line(line):
18581859
return Block(input_output(), dsl_name, output=output)
18591860

18601861

1862+
@dc.dataclass(slots=True)
18611863
class BlockPrinter:
1862-
1863-
def __init__(self, language, f=None):
1864-
self.language = language
1865-
self.f = f or io.StringIO()
1864+
language: Language
1865+
f: io.StringIO = dc.field(default_factory=io.StringIO)
18661866

18671867
def print_block(self, block, *, core_includes=False):
18681868
input = block.input
@@ -2328,15 +2328,13 @@ def parse(self, block: Block) -> None:
23282328
block.output = s.getvalue()
23292329

23302330

2331+
@dc.dataclass(repr=False)
23312332
class Module:
2332-
def __init__(
2333-
self,
2334-
name: str,
2335-
module = None
2336-
) -> None:
2337-
self.name = name
2338-
self.module = self.parent = module
2333+
name: str
2334+
module: Module | None = None
23392335

2336+
def __post_init__(self) -> None:
2337+
self.parent = self.module
23402338
self.modules: ModuleDict = {}
23412339
self.classes: ClassDict = {}
23422340
self.functions: list[Function] = []
@@ -2345,22 +2343,16 @@ def __repr__(self) -> str:
23452343
return "<clinic.Module " + repr(self.name) + " at " + str(id(self)) + ">"
23462344

23472345

2346+
@dc.dataclass(repr=False)
23482347
class Class:
2349-
def __init__(
2350-
self,
2351-
name: str,
2352-
module: Module | None = None,
2353-
cls = None,
2354-
typedef: str | None = None,
2355-
type_object: str | None = None
2356-
) -> None:
2357-
self.name = name
2358-
self.module = module
2359-
self.cls = cls
2360-
self.typedef = typedef
2361-
self.type_object = type_object
2362-
self.parent = cls or module
2363-
2348+
name: str
2349+
module: Module | None = None
2350+
cls: Class | None = None
2351+
typedef: str | None = None
2352+
type_object: str | None = None
2353+
2354+
def __post_init__(self) -> None:
2355+
self.parent = self.cls or self.module
23642356
self.classes: ClassDict = {}
23652357
self.functions: list[Function] = []
23662358

@@ -2606,13 +2598,10 @@ def get_displayname(self, i: int) -> str:
26062598
return f'"argument {i}"'
26072599

26082600

2601+
@dc.dataclass
26092602
class LandMine:
26102603
# try to access any
2611-
def __init__(self, message: str) -> None:
2612-
self.__message__ = message
2613-
2614-
def __repr__(self) -> str:
2615-
return '<LandMine ' + repr(self.__message__) + ">"
2604+
__message__: str
26162605

26172606
def __getattribute__(self, name: str):
26182607
if name in ('__repr__', '__message__'):

0 commit comments

Comments
 (0)