From f6fcbf0ebfc310304b17b7032df3374394833e73 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" <erlend.aasland@protonmail.com> Date: Thu, 18 May 2023 23:50:35 +0200 Subject: [PATCH 1/2] gh-104050: Add more typing annotations to Argument Clinic - class Class - class Module - class PythonParser - function compute_checksum() - function parse_file() - variable unsupported_special_methods --- Tools/clinic/clinic.py | 50 ++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 5fcf2bf485fc8a..8f608d4855a422 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -2227,7 +2227,12 @@ def _module_and_class(self, fields): return module, cls -def parse_file(filename, *, verify=True, output=None): +def parse_file( + filename: str, + *, + verify: bool = True, + output: str | None = None +) -> None: if not output: output = filename @@ -2259,7 +2264,7 @@ def parse_file(filename, *, verify=True, output=None): write_file(fn, data) -def compute_checksum(input, length=None): +def compute_checksum(input: str, length: int | None = None) -> str: input = input or '' s = hashlib.sha1(input.encode('utf-8')).hexdigest() if length: @@ -2270,10 +2275,10 @@ def compute_checksum(input, length=None): class PythonParser: - def __init__(self, clinic): + def __init__(self, clinic: Clinic) -> None: pass - def parse(self, block): + def parse(self, block: Block) -> None: s = io.StringIO() with OverrideStdioWith(s): exec(block.input) @@ -2281,19 +2286,33 @@ def parse(self, block): class Module: - def __init__(self, name, module=None): + def __init__( + self, + name: str, + module: Module | None = None + ) -> None: self.name = name self.module = self.parent = module - self.modules = collections.OrderedDict() - self.classes = collections.OrderedDict() - self.functions = [] + self.modules: ModuleDict = collections.OrderedDict() + self.classes: ClassDict = collections.OrderedDict() + self.functions: list[Function] = [] - def __repr__(self): + def __repr__(self) -> str: return "<clinic.Module " + repr(self.name) + " at " + str(id(self)) + ">" +ModuleDict = dict[str, Module] + + class Class: - def __init__(self, name, module=None, cls=None, typedef=None, type_object=None): + def __init__( + self, + name: str, + module: Module | None = None, + cls: Class | None = None, + typedef: str | None = None, + type_object: str | None = None + ) -> None: self.name = name self.module = module self.cls = cls @@ -2301,13 +2320,16 @@ def __init__(self, name, module=None, cls=None, typedef=None, type_object=None): self.type_object = type_object self.parent = cls or module - self.classes = collections.OrderedDict() - self.functions = [] + self.classes: ClassDict = collections.OrderedDict() + self.functions: list[Function] = [] - def __repr__(self): + def __repr__(self) -> str: return "<clinic.Class " + repr(self.name) + " at " + str(id(self)) + ">" -unsupported_special_methods = set(""" +ClassDict = dict[str, Class] + + +unsupported_special_methods: set[str] = set(""" __abs__ __add__ From 51078a6f3a452b77ed02ed3bd7df0446fc4cd8a6 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" <erlend.aasland@protonmail.com> Date: Fri, 19 May 2023 00:30:07 +0200 Subject: [PATCH 2/2] Address review and remove some incorrect annotations --- Tools/clinic/clinic.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 8019fd0f91448a..3d4961e6e7d7dd 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -2266,7 +2266,10 @@ def parse_file( write_file(fn, data) -def compute_checksum(input: str, length: int | None = None) -> str: +def compute_checksum( + input: str | None, + length: int | None = None +) -> str: input = input or '' s = hashlib.sha1(input.encode('utf-8')).hexdigest() if length: @@ -2287,11 +2290,13 @@ def parse(self, block: Block) -> None: block.output = s.getvalue() +ModuleDict = dict[str, "Module"] + class Module: def __init__( self, name: str, - module: Module | None = None + module = None ) -> None: self.name = name self.module = self.parent = module @@ -2303,15 +2308,15 @@ def __init__( def __repr__(self) -> str: return "<clinic.Module " + repr(self.name) + " at " + str(id(self)) + ">" -ModuleDict = dict[str, Module] +ClassDict = dict[str, "Class"] class Class: def __init__( self, name: str, module: Module | None = None, - cls: Class | None = None, + cls = None, typedef: str | None = None, type_object: str | None = None ) -> None: @@ -2328,8 +2333,6 @@ def __init__( def __repr__(self) -> str: return "<clinic.Class " + repr(self.name) + " at " + str(id(self)) + ">" -ClassDict = dict[str, Class] - unsupported_special_methods: set[str] = set("""