summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorErlend E. Aasland <erlend@python.org>2023-07-20 22:45:02 (GMT)
committerGitHub <noreply@github.com>2023-07-20 22:45:02 (GMT)
commit1d5a625eb09ec160d403e526bb6a685525389b99 (patch)
treee308bdc48b2d131224a86b62254be455750cd58e /Tools
parent42c6300d4faa1b1582914d84551b83c814ccfdae (diff)
downloadcpython-1d5a625eb09ec160d403e526bb6a685525389b99.zip
cpython-1d5a625eb09ec160d403e526bb6a685525389b99.tar.gz
cpython-1d5a625eb09ec160d403e526bb6a685525389b99.tar.bz2
gh-104050: Argument Clinic: Increase CConverter typing coverage (#106932)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/clinic/clinic.py29
1 files changed, 16 insertions, 13 deletions
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index 6d1796c..003ecf7 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: