]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-104050: Argument Clinic: Annotate `output_templates()` (#106732)
authorErlend E. Aasland <erlend@python.org>
Fri, 14 Jul 2023 12:20:58 +0000 (14:20 +0200)
committerGitHub <noreply@github.com>
Fri, 14 Jul 2023 12:20:58 +0000 (12:20 +0000)
Co-authored-by: AlexWaygood <alex.waygood@gmail.com>
Tools/clinic/clinic.py

index 2dce33690993dd7929ebfc38d167d01f1d2962d1..726ebc04f55bd503f169eb5038141d41631e64e1 100755 (executable)
@@ -792,11 +792,14 @@ class CLanguage(Language):
             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 @@ class CLanguage(Language):
 
         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 @@ class CLanguage(Language):
 
         # 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 @@ class CLanguage(Language):
             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 @@ class CLanguage(Language):
                 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 @@ class CLanguage(Language):
             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("""