gh-104050: Argument Clinic: Annotate CLanguage.render_option_group_parsing() (#106929)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
Erlend E. Aasland 2023-07-20 23:33:33 +02:00 committed by GitHub
parent 8f4de57699
commit 42c6300d4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 20 additions and 14 deletions

View File

@ -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}: