[Python-checkins] gh-104050: Argument Clinic: Annotate `output_templates()` (#106732)

AlexWaygood webhook-mailer at python.org
Fri Jul 14 08:21:01 EDT 2023


https://github.com/python/cpython/commit/7c95345e4f93f4a2475418f17df5aae39dea861f
commit: 7c95345e4f93f4a2475418f17df5aae39dea861f
branch: main
author: Erlend E. Aasland <erlend at python.org>
committer: AlexWaygood <Alex.Waygood at Gmail.com>
date: 2023-07-14T12:20:58Z
summary:

gh-104050: Argument Clinic: Annotate `output_templates()` (#106732)

Co-authored-by: AlexWaygood <alex.waygood at gmail.com>

files:
M Tools/clinic/clinic.py

diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index 2dce33690993d..726ebc04f55bd 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -792,11 +792,14 @@ def docstring_for_c_string(
             add('"')
         return ''.join(text)
 
-    def output_templates(self, f):
+    def output_templates(
+            self,
+            f: Function
+    ) -> dict[str, str]:
         parameters = list(f.parameters.values())
         assert parameters
-        assert isinstance(parameters[0].converter, self_converter)
-        del parameters[0]
+        first_param = parameters.pop(0)
+        assert isinstance(first_param.converter, self_converter)
         requires_defining_class = False
         if parameters and isinstance(parameters[0].converter, defining_class_converter):
             requires_defining_class = True
@@ -809,7 +812,7 @@ def output_templates(self, f):
 
         new_or_init = f.kind.new_or_init
 
-        vararg = NO_VARARG
+        vararg: int | str = NO_VARARG
         pos_only = min_pos = max_pos = min_kw_only = pseudo_args = 0
         for i, p in enumerate(parameters, 1):
             if p.is_keyword_only():
@@ -897,7 +900,7 @@ def output_templates(self, f):
 
         # parser_body_fields remembers the fields passed in to the
         # previous call to parser_body. this is used for an awful hack.
-        parser_body_fields = ()
+        parser_body_fields: tuple[str, ...] = ()
         def parser_body(
                 prototype: str,
                 *fields: str,
@@ -932,6 +935,7 @@ def parser_body(
             return linear_format(output(), parser_declarations=declarations)
 
         if not parameters:
+            parser_code: list[str] | None
             if not requires_defining_class:
                 # no parameters, METH_NOARGS
                 flags = "METH_NOARGS"
@@ -1165,7 +1169,7 @@ def parser_body(
                 flags = 'METH_METHOD|' + flags
                 parser_prototype = parser_prototype_def_class
 
-            add_label = None
+            add_label: str | None = None
             for i, p in enumerate(parameters):
                 if isinstance(p.converter, defining_class_converter):
                     raise ValueError("defining_class should be the first "
@@ -1308,6 +1312,8 @@ def parser_body(
             cpp_if = "#if " + conditional
             cpp_endif = "#endif /* " + conditional + " */"
 
+            assert clinic is not None
+            assert f.full_name is not None
             if methoddef_define and f.full_name not in clinic.ifndef_symbols:
                 clinic.ifndef_symbols.add(f.full_name)
                 methoddef_ifndef = normalize_snippet("""



More information about the Python-checkins mailing list