Ignore init=False attributes while inspecting fields order (PY-30880)

This commit is contained in:
Semyon Proshev
2018-07-16 15:44:23 +03:00
parent e5533d991d
commit 8b0dbf4e1b
3 changed files with 21 additions and 3 deletions
@@ -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)
@@ -59,4 +59,10 @@ class D1:
@attr.dataclass
class D2:
x: int = attr.ib(default=attr.NOTHING)
y: int
y: int
@attr.dataclass
class E1:
x: int = 0
y: int = attr.ib(init=False)
@@ -76,4 +76,10 @@ class C3:
x: int = dataclasses.field(default_factory=dataclasses.MISSING)
y: int
C3(1, 2)
C3(1, 2)
@dataclasses.dataclass
class D1:
x: int = 0
y: int = dataclasses.field(init=False)