Skip empty classes while inspecting fields order (incl inherited) (PY-40018)

GitOrigin-RevId: 53ce68c45df4049346c67416d250b2e36e2c762c
This commit is contained in:
Semyon Proshev
2020-01-10 13:09:02 +00:00
committed by intellij-monorepo-bot
parent dcccee7474
commit bbaead5046
3 changed files with 32 additions and 4 deletions
@@ -31,10 +31,20 @@ class PyNamedTupleInspection : PyInspection() {
val ancestors = cls.getAncestorClasses(context)
val ancestorsFields = ancestors.map {
when {
!classFieldsFilter(it) -> Ancestor.FILTERED
processFields(it, fieldsFilter, hasAssignedValue).fieldsWithDefaultValue.isNotEmpty() -> Ancestor.HAS_FIELD_WITH_DEFAULT_VALUE
else -> Ancestor.HAS_NOT_FIELD_WITH_DEFAULT_VALUE
if (!classFieldsFilter(it)) {
Ancestor.FILTERED
}
else {
val processor = processFields(it, fieldsFilter, hasAssignedValue)
if (processor.fieldsWithDefaultValue.isNotEmpty()) {
Ancestor.HAS_FIELD_WITH_DEFAULT_VALUE
}
else if (processor.lastFieldWithoutDefaultValue != null) {
Ancestor.HAS_NOT_FIELD_WITH_DEFAULT_VALUE
}
else {
Ancestor.FILTERED
}
}
}
@@ -0,0 +1,13 @@
from dataclasses import dataclass
@dataclass
class AnimalClass:
number_legs: int = None
@dataclass
class MamaClass(AnimalClass):
pass
@dataclass
class CatClass(MamaClass):
pet_name: str = None
@@ -296,6 +296,11 @@ public class PyDataclassInspectionTest extends PyInspectionTestCase {
doTest();
}
// PY-40018
public void testInheritingDefaultArgumentThroughEmptyDataclass() {
doTest();
}
@Override
protected void doTest() {
runWithLanguageLevel(