]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-104050: Argument Clinic: Annotate CLanguage.render_option_group_parsing() (#106929)
authorErlend E. Aasland <erlend@python.org>
Thu, 20 Jul 2023 21:33:33 +0000 (23:33 +0200)
committerGitHub <noreply@github.com>
Thu, 20 Jul 2023 21:33:33 +0000 (21:33 +0000)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Tools/clinic/clinic.py

index bff8935df13bc61c7e3d59a42ee62d0ade882019..6d1796cd6135ed3fda8301fd9304a0252dbccc83 100755 (executable)
@@ -530,12 +530,11 @@ class PythonLanguage(Language):
     checksum_line = "#/*[{dsl_name} end generated code: {arguments}]*/"
 
 
-ParamGroup = Iterable["Parameter"]
 ParamTuple = tuple["Parameter", ...]
 
 
 def permute_left_option_groups(
-        l: Sequence[ParamGroup]
+        l: Sequence[Iterable[Parameter]]
 ) -> Iterator[ParamTuple]:
     """
     Given [(1,), (2,), (3,)], should yield:
@@ -552,7 +551,7 @@ def permute_left_option_groups(
 
 
 def permute_right_option_groups(
-        l: Sequence[ParamGroup]
+        l: Sequence[Iterable[Parameter]]
 ) -> Iterator[ParamTuple]:
     """
     Given [(1,), (2,), (3,)], should yield:
@@ -569,9 +568,9 @@ def permute_right_option_groups(
 
 
 def permute_optional_groups(
-        left: Sequence[ParamGroup],
-        required: ParamGroup,
-        right: Sequence[ParamGroup]
+        left: Sequence[Iterable[Parameter]],
+        required: Iterable[Parameter],
+        right: Sequence[Iterable[Parameter]]
 ) -> tuple[ParamTuple, ...]:
     """
     Generator function that computes the set of acceptable
@@ -1374,7 +1373,11 @@ class CLanguage(Language):
         adjective = "left_" if group < 0 else "right_"
         return "group_" + adjective + str(abs(group))
 
-    def render_option_group_parsing(self, f, template_dict):
+    def render_option_group_parsing(
+            self,
+            f: Function,
+            template_dict: TemplateDict
+    ) -> None:
         # positional only, grouped, optional arguments!
         # can be optional on the left or right.
         # here's an example:
@@ -1398,11 +1401,11 @@ class CLanguage(Language):
         if isinstance(parameters[0].converter, self_converter):
             del parameters[0]
 
-        group = None
+        group: list[Parameter] | None = None
         left = []
         right = []
-        required = []
-        last = unspecified
+        required: list[Parameter] = []
+        last: int | Literal[Sentinels.unspecified] = unspecified
 
         for p in parameters:
             group_id = p.group
@@ -1415,6 +1418,7 @@ class CLanguage(Language):
                     group = required
                 else:
                     right.append(group)
+            assert group is not None
             group.append(p)
 
         count_min = sys.maxsize
@@ -1433,19 +1437,21 @@ class CLanguage(Language):
                 continue
 
             group_ids = {p.group for p in subset}  # eliminate duplicates
-            d = {}
+            d: dict[str, str | int] = {}
             d['count'] = count
             d['name'] = f.name
             d['format_units'] = "".join(p.converter.format_unit for p in subset)
 
-            parse_arguments = []
+            parse_arguments: list[str] = []
             for p in subset:
                 p.converter.parse_argument(parse_arguments)
             d['parse_arguments'] = ", ".join(parse_arguments)
 
             group_ids.discard(0)
-            lines = [self.group_to_variable_name(g) + " = 1;" for g in group_ids]
-            lines = "\n".join(lines)
+            lines = "\n".join([
+                self.group_to_variable_name(g) + " = 1;"
+                for g in group_ids
+            ])
 
             s = """\
     case {count}: