From 8b0dbf4e1b3c0678e5253743ebb1119a008a1713 Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Mon, 16 Jul 2018 15:36:58 +0300 Subject: [PATCH] Ignore `init=False` attributes while inspecting fields order (PY-30880) --- .../jetbrains/python/inspections/PyDataclassInspection.kt | 8 +++++++- .../inspections/PyDataclassInspection/attrsFieldsOrder.py | 8 +++++++- .../inspections/PyDataclassInspection/fieldsOrder.py | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/python/src/com/jetbrains/python/inspections/PyDataclassInspection.kt b/python/src/com/jetbrains/python/inspections/PyDataclassInspection.kt index 63d976f8ccb0..7815e5de6d0c 100644 --- a/python/src/com/jetbrains/python/inspections/PyDataclassInspection.kt +++ b/python/src/com/jetbrains/python/inspections/PyDataclassInspection.kt @@ -17,6 +17,7 @@ import com.jetbrains.python.psi.impl.PyCallExpressionHelper import com.jetbrains.python.psi.impl.PyEvaluator import com.jetbrains.python.psi.impl.stubs.PyDataclassFieldStubImpl import com.jetbrains.python.psi.resolve.PyResolveContext +import com.jetbrains.python.psi.stubs.PyDataclassFieldStub import com.jetbrains.python.psi.types.* class PyDataclassInspection : PyInspection() { @@ -102,7 +103,12 @@ class PyDataclassInspection : PyInspection() { PyNamedTupleInspection.inspectFieldsOrder( node, this::registerProblem, - { !PyTypingTypeProvider.isClassVar(it, myTypeEvalContext) }, + { + val stub = it.stub + val fieldStub = if (stub == null) PyDataclassFieldStubImpl.create(it) else stub.getCustomStub(PyDataclassFieldStub::class.java) + + fieldStub?.initValue() != false && !PyTypingTypeProvider.isClassVar(it, myTypeEvalContext) + }, { val fieldStub = PyDataclassFieldStubImpl.create(it) diff --git a/python/testData/inspections/PyDataclassInspection/attrsFieldsOrder.py b/python/testData/inspections/PyDataclassInspection/attrsFieldsOrder.py index e82a83396a1b..ef71aa22114a 100644 --- a/python/testData/inspections/PyDataclassInspection/attrsFieldsOrder.py +++ b/python/testData/inspections/PyDataclassInspection/attrsFieldsOrder.py @@ -59,4 +59,10 @@ class D1: @attr.dataclass class D2: x: int = attr.ib(default=attr.NOTHING) - y: int \ No newline at end of file + y: int + + +@attr.dataclass +class E1: + x: int = 0 + y: int = attr.ib(init=False) \ No newline at end of file diff --git a/python/testData/inspections/PyDataclassInspection/fieldsOrder.py b/python/testData/inspections/PyDataclassInspection/fieldsOrder.py index b70e9d47543f..75e16dda02c5 100644 --- a/python/testData/inspections/PyDataclassInspection/fieldsOrder.py +++ b/python/testData/inspections/PyDataclassInspection/fieldsOrder.py @@ -76,4 +76,10 @@ class C3: x: int = dataclasses.field(default_factory=dataclasses.MISSING) y: int -C3(1, 2) \ No newline at end of file +C3(1, 2) + + +@dataclasses.dataclass +class D1: + x: int = 0 + y: int = dataclasses.field(init=False) \ No newline at end of file