Improve codegen

Avoid on-import modification of classes.
This makes it possible to have multiple namespaces work together.

Implement equality on all generated types.
This enables support in tests as well feeling similar to dataclasses.

Make generated code constructors keyword-only.
This increases readability and reduces risk of breakage during upgrades.
This commit is contained in:
Lonami Exo
2023-07-08 12:15:11 +02:00
parent 7b707cfc6c
commit e74332de75
6 changed files with 67 additions and 12 deletions

View File

@@ -115,7 +115,7 @@ def generate(fs: FakeFs, tl: ParsedTl) -> None:
params = "".join(
f", {p.name}: {param_type_fmt(p.ty)}" for p in property_params
)
writer.write(f" def __init__(_s{params}) -> None:")
writer.write(f" def __init__(_s, *{params}) -> None:")
for p in property_params:
writer.write(f" _s.{p.name} = {p.name}")
@@ -183,7 +183,4 @@ def generate(fs: FakeFs, tl: ParsedTl) -> None:
for name in sorted(generated_type_names):
writer.write(f" types.{name},")
writer.write("))}")
writer.write(
"Reader._get_ty = TYPE_MAPPING.get # type: ignore [method-assign, assignment]"
)
writer.write(f"__all__ = ['LAYER', 'TYPE_MAPPING']")