diff --git a/python/src/com/jetbrains/python/inspections/PyNamedTupleInspection.kt b/python/src/com/jetbrains/python/inspections/PyNamedTupleInspection.kt index d7112341b4c7..e32bf43e1532 100644 --- a/python/src/com/jetbrains/python/inspections/PyNamedTupleInspection.kt +++ b/python/src/com/jetbrains/python/inspections/PyNamedTupleInspection.kt @@ -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 + } } } diff --git a/python/testData/inspections/PyDataclassInspection/inheritingDefaultArgumentThroughEmptyDataclass.py b/python/testData/inspections/PyDataclassInspection/inheritingDefaultArgumentThroughEmptyDataclass.py new file mode 100644 index 000000000000..c03a8c2bf8bf --- /dev/null +++ b/python/testData/inspections/PyDataclassInspection/inheritingDefaultArgumentThroughEmptyDataclass.py @@ -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 \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyDataclassInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyDataclassInspectionTest.java index 84f7f017c7f9..c542dc1864a3 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyDataclassInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyDataclassInspectionTest.java @@ -296,6 +296,11 @@ public class PyDataclassInspectionTest extends PyInspectionTestCase { doTest(); } + // PY-40018 + public void testInheritingDefaultArgumentThroughEmptyDataclass() { + doTest(); + } + @Override protected void doTest() { runWithLanguageLevel(