Skip to content

Commit b32407b

Browse files
authored
[red-knot] Dataclasses: synthesize __init__ with proper signature (#17428)
## Summary This changeset allows us to generate the signature of synthesized `__init__` functions in dataclasses by analyzing the fields on the class (and its superclasses). There are certain things that I have not yet attempted to model in this PR, like `kw_only`, [`dataclasses.KW_ONLY`](https://docs.python.org/3/library/dataclasses.html#dataclasses.KW_ONLY) or functionality around [`dataclasses.field`](https://docs.python.org/3/library/dataclasses.html#dataclasses.field). ticket: #16651 ## Ecosystem analysis These two seem to depend on missing features in generics (see [relevant code here](https://github.com/konradhalas/dacite/blob/9898ccbb783e7e6a35ae165e7deb9fa84edfe21c/tests/core/test_generics.py#L54)): > ```diff > + error[lint:unknown-argument] /tmp/mypy_primer/projects/dacite/tests/core/test_generics.py:54:24: Argument `x` does not match any known parameter > + error[lint:unknown-argument] /tmp/mypy_primer/projects/dacite/tests/core/test_generics.py:54:38: Argument `y` does not match any known parameter > ``` These two are true positives. See [relevant code here](https://github.com/konradhalas/dacite/blob/9898ccbb783e7e6a35ae165e7deb9fa84edfe21c/tests/core/test_config.py#L154-L161). > ```diff > + error[lint:invalid-argument-type] /tmp/mypy_primer/projects/dacite/tests/core/test_config.py:161:24: Argument to this function is incorrect: Expected `int`, found `Literal["test"]` > + error[lint:invalid-argument-type] /tmp/mypy_primer/projects/dacite/tests/core/test_config.py:172:24: Argument to this function is incorrect: Expected `int | float`, found `Literal["test"]` > ``` This one depends on `**` unpacking of dictionaries, which we don't support yet: > ```diff > + error[lint:missing-argument] /tmp/mypy_primer/projects/mypy_primer/mypy_primer/globals.py:218:11: No arguments provided for required parameters `new`, `old`, `repo`, `type_checker`, `mypyc_compile_level`, `custom_typeshed_repo`, `new_typeshed`, `old_typeshed`, `new_prepend_path`, `old_prepend_path`, `additional_flags`, `project_selector`, `known_dependency_selector`, `local_project`, `expected_success`, `project_date`, `shard_index`, `num_shards`, `output`, `old_success`, `coverage`, `bisect`, `bisect_output`, `validate_expected_success`, `measure_project_runtimes`, `concurrency`, `base_dir`, `debug`, `clear` > ``` ## Test Plan New Markdown tests.
1 parent b4de245 commit b32407b

File tree

3 files changed

+539
-61
lines changed

3 files changed

+539
-61
lines changed

0 commit comments

Comments
 (0)