From 1d5a625eb09ec160d403e526bb6a685525389b99 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 21 Jul 2023 00:45:02 +0200 Subject: [PATCH] gh-104050: Argument Clinic: Increase CConverter typing coverage (#106932) Co-authored-by: Alex Waygood --- Tools/clinic/clinic.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 6d1796cd613..003ecf784d7 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -2698,10 +2698,10 @@ class CConverter(metaclass=CConverterAutoRegister): """ # The C name to use for this variable. - name: str | None = None + name: str # The Python name to use for this variable. - py_name: str | None = None + py_name: str # The C type to use for this variable. # 'type' should be a Python string specifying the type, e.g. "int". @@ -2864,7 +2864,11 @@ class CConverter(metaclass=CConverterAutoRegister): if self.length: data.impl_parameters.append("Py_ssize_t " + self.length_name()) - def _render_non_self(self, parameter, data): + def _render_non_self( + self, + parameter: Parameter, + data: CRenderData + ) -> None: self.parameter = parameter name = self.name @@ -2917,31 +2921,30 @@ class CConverter(metaclass=CConverterAutoRegister): self._render_self(parameter, data) self._render_non_self(parameter, data) - def length_name(self): + def length_name(self) -> str: """Computes the name of the associated "length" variable.""" - if not self.length: - return None + assert self.length is not None return self.parser_name + "_length" # Why is this one broken out separately? # For "positional-only" function parsing, # which generates a bunch of PyArg_ParseTuple calls. - def parse_argument(self, list): + def parse_argument(self, args: list[str]) -> None: assert not (self.converter and self.encoding) if self.format_unit == 'O&': assert self.converter - list.append(self.converter) + args.append(self.converter) if self.encoding: - list.append(c_repr(self.encoding)) + args.append(c_repr(self.encoding)) elif self.subclass_of: - list.append(self.subclass_of) + args.append(self.subclass_of) s = ("&" if self.parse_by_reference else "") + self.name - list.append(s) + args.append(s) if self.length: - list.append("&" + self.length_name()) + args.append("&" + self.length_name()) # # All the functions after here are intended as extension points. @@ -3066,7 +3069,7 @@ class CConverter(metaclass=CConverterAutoRegister): pass @property - def parser_name(self): + def parser_name(self) -> str: if self.name in CLINIC_PREFIXED_ARGS: # bpo-39741 return CLINIC_PREFIX + self.name else: