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:
def permute_right_option_groups(
- l: Sequence[ParamGroup]
+ l: Sequence[Iterable[Parameter]]
) -> Iterator[ParamTuple]:
"""
Given [(1,), (2,), (3,)], should yield:
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
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:
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
group = required
else:
right.append(group)
+ assert group is not None
group.append(p)
count_min = sys.maxsize
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}: