Skip to content

Commit

Permalink
gh-104050: Argument Clinic: Annotate CLanguage.render_option_group_pa…
Browse files Browse the repository at this point in the history
…rsing() (#106929)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
  • Loading branch information
erlend-aasland and AlexWaygood authored Jul 20, 2023
1 parent 8f4de57 commit 42c6300
Showing 1 changed file with 20 additions and 14 deletions.
34 changes: 20 additions & 14 deletions Tools/clinic/clinic.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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:
Expand All @@ -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
Expand Down Expand Up @@ -1374,7 +1373,11 @@ def group_to_variable_name(group: int) -> str:
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:
Expand All @@ -1398,11 +1401,11 @@ def render_option_group_parsing(self, f, template_dict):
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
Expand All @@ -1415,6 +1418,7 @@ def render_option_group_parsing(self, f, template_dict):
group = required
else:
right.append(group)
assert group is not None
group.append(p)

count_min = sys.maxsize
Expand All @@ -1433,19 +1437,21 @@ def render_option_group_parsing(self, f, template_dict):
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}:
Expand Down

0 comments on commit 42c6300

Please sign in to comment.