Skip to content

Commit 1d5a625

Browse files
gh-104050: Argument Clinic: Increase CConverter typing coverage (#106932)
Co-authored-by: Alex Waygood <[email protected]>
1 parent 42c6300 commit 1d5a625

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

Tools/clinic/clinic.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2698,10 +2698,10 @@ class CConverter(metaclass=CConverterAutoRegister):
26982698
"""
26992699

27002700
# The C name to use for this variable.
2701-
name: str | None = None
2701+
name: str
27022702

27032703
# The Python name to use for this variable.
2704-
py_name: str | None = None
2704+
py_name: str
27052705

27062706
# The C type to use for this variable.
27072707
# 'type' should be a Python string specifying the type, e.g. "int".
@@ -2864,7 +2864,11 @@ def _render_self(self, parameter: Parameter, data: CRenderData) -> None:
28642864
if self.length:
28652865
data.impl_parameters.append("Py_ssize_t " + self.length_name())
28662866

2867-
def _render_non_self(self, parameter, data):
2867+
def _render_non_self(
2868+
self,
2869+
parameter: Parameter,
2870+
data: CRenderData
2871+
) -> None:
28682872
self.parameter = parameter
28692873
name = self.name
28702874

@@ -2917,31 +2921,30 @@ def render(self, parameter: Parameter, data: CRenderData) -> None:
29172921
self._render_self(parameter, data)
29182922
self._render_non_self(parameter, data)
29192923

2920-
def length_name(self):
2924+
def length_name(self) -> str:
29212925
"""Computes the name of the associated "length" variable."""
2922-
if not self.length:
2923-
return None
2926+
assert self.length is not None
29242927
return self.parser_name + "_length"
29252928

29262929
# Why is this one broken out separately?
29272930
# For "positional-only" function parsing,
29282931
# which generates a bunch of PyArg_ParseTuple calls.
2929-
def parse_argument(self, list):
2932+
def parse_argument(self, args: list[str]) -> None:
29302933
assert not (self.converter and self.encoding)
29312934
if self.format_unit == 'O&':
29322935
assert self.converter
2933-
list.append(self.converter)
2936+
args.append(self.converter)
29342937

29352938
if self.encoding:
2936-
list.append(c_repr(self.encoding))
2939+
args.append(c_repr(self.encoding))
29372940
elif self.subclass_of:
2938-
list.append(self.subclass_of)
2941+
args.append(self.subclass_of)
29392942

29402943
s = ("&" if self.parse_by_reference else "") + self.name
2941-
list.append(s)
2944+
args.append(s)
29422945

29432946
if self.length:
2944-
list.append("&" + self.length_name())
2947+
args.append("&" + self.length_name())
29452948

29462949
#
29472950
# All the functions after here are intended as extension points.
@@ -3066,7 +3069,7 @@ def set_template_dict(self, template_dict: TemplateDict) -> None:
30663069
pass
30673070

30683071
@property
3069-
def parser_name(self):
3072+
def parser_name(self) -> str:
30703073
if self.name in CLINIC_PREFIXED_ARGS: # bpo-39741
30713074
return CLINIC_PREFIX + self.name
30723075
else:

0 commit comments

Comments
 (0)