diff --git a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/PyDataclasses.kt b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/PyDataclasses.kt index 4d682985a0c2..526bdb24e219 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/codeInsight/PyDataclasses.kt +++ b/python/python-psi-impl/src/com/jetbrains/python/codeInsight/PyDataclasses.kt @@ -566,7 +566,7 @@ private fun resolveDataclassParameters( if (dataclassTransformStub != null) { val resolvedFieldSpecifiers = dataclassTransformStub.fieldSpecifiers - .flatMap { PyResolveUtil.resolveQualifiedNameInScope(it, ScopeUtil.getScopeOwner(pyClass)!!, context) } + .flatMap { PyResolveUtil.resolveQualifiedNameInScope(it, dataclassTransformDecorator.containingFile as ScopeOwner, context) } .filterIsInstance() .mapNotNull { it.qualifiedName } .map { QualifiedName.fromDottedString(it) } diff --git a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_base.py b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_base.py index 74d32f17f4fb..9cc4619c626e 100644 --- a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_base.py +++ b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_base.py @@ -1,7 +1,9 @@ from typing import dataclass_transform +import dt_field -@dataclass_transform() + +@dataclass_transform(field_specifiers=(dt_field.DataclassField,)) class DataclassBase: def __init_subclass__(cls, **kwargs): import dataclasses diff --git a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_class.py b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_class.py index aadcb0155f74..4e6fbd8d9640 100644 --- a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_class.py +++ b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_class.py @@ -1,6 +1,10 @@ from dt_base import DataclassBase +from dt_field import DataclassField class RecordViaBaseClass(DataclassBase, kw_only=True): id: int - name: str + name: str = DataclassField() + address: str | None = DataclassField(default=None) + + diff --git a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_field.py b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_field.py new file mode 100644 index 000000000000..a02202968b9a --- /dev/null +++ b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnBaseClass/dt_field.py @@ -0,0 +1,10 @@ +import dataclasses + + +class DataclassField: + def __init__(self, + *, + kw_only=dataclasses.MISSING, + default=dataclasses.MISSING, + default_factory=dataclasses.MISSING): + ... diff --git a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_class.py b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_class.py index 95f276126c91..5dbbcbf82de2 100644 --- a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_class.py +++ b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_class.py @@ -1,7 +1,9 @@ from dt_decorator import my_dt_decorator +from dt_field import DataclassField @my_dt_decorator(kw_only=True) class RecordViaDecorator: id: int - name: str + name: str = DataclassField() + address: str | None = DataclassField(default=None) diff --git a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_decorator.py b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_decorator.py index cffe715eaa33..f3cbfd104ebc 100644 --- a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_decorator.py +++ b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_decorator.py @@ -1,7 +1,9 @@ from typing import dataclass_transform, Callable +import dt_field -@dataclass_transform() + +@dataclass_transform(field_specifiers=(dt_field.DataclassField,)) def my_dt_decorator(**kwargs) -> Callable[[type], type]: import dataclasses return dataclasses.dataclass(**kwargs) # type: ignore diff --git a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_field.py b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_field.py new file mode 100644 index 000000000000..a02202968b9a --- /dev/null +++ b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnDecorator/dt_field.py @@ -0,0 +1,10 @@ +import dataclasses + + +class DataclassField: + def __init__(self, + *, + kw_only=dataclasses.MISSING, + default=dataclasses.MISSING, + default_factory=dataclasses.MISSING): + ... diff --git a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_class.py b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_class.py index d5fd64d8a15f..fda887b422a1 100644 --- a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_class.py +++ b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_class.py @@ -1,6 +1,8 @@ from dt_base import DataclassBase +from dt_field import DataclassField class RecordViaMetaClass(DataclassBase, kw_only=True): id: int - name: str + name: str = DataclassField() + address: str | None = DataclassField(default=None) diff --git a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_field.py b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_field.py new file mode 100644 index 000000000000..a02202968b9a --- /dev/null +++ b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_field.py @@ -0,0 +1,10 @@ +import dataclasses + + +class DataclassField: + def __init__(self, + *, + kw_only=dataclasses.MISSING, + default=dataclasses.MISSING, + default_factory=dataclasses.MISSING): + ... diff --git a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_meta.py b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_meta.py index 57fbcab10c50..73fa013d57ae 100644 --- a/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_meta.py +++ b/python/testData/inspections/PyArgumentListInspection/InitByDataclassTransformOnMetaClass/dt_meta.py @@ -1,7 +1,9 @@ from typing import dataclass_transform +import dt_field -@dataclass_transform() + +@dataclass_transform(field_specifiers=(dt_field.DataclassField,)) class DataclassMeta(type): def __new__( cls,