diff --git a/python/src/com/jetbrains/python/inspections/PyDataclassInspection.kt b/python/src/com/jetbrains/python/inspections/PyDataclassInspection.kt
index 5f6d8bd56710..95c843c6033a 100644
--- a/python/src/com/jetbrains/python/inspections/PyDataclassInspection.kt
+++ b/python/src/com/jetbrains/python/inspections/PyDataclassInspection.kt
@@ -26,8 +26,12 @@ class PyDataclassInspection : PyInspection() {
companion object {
private val ORDER_OPERATORS = setOf("__lt__", "__le__", "__gt__", "__ge__")
private val DATACLASSES_HELPERS = setOf("dataclasses.fields", "dataclasses.asdict", "dataclasses.astuple", "dataclasses.replace")
- private val ATTRS_HELPERS =
- setOf("attr.__init__.fields", "attr.__init__.asdict", "attr.__init__.astuple", "attr.__init__.assoc", "attr.__init__.evolve")
+ private val ATTRS_HELPERS = setOf("attr.__init__.fields",
+ "attr.__init__.fields_dict",
+ "attr.__init__.asdict",
+ "attr.__init__.astuple",
+ "attr.__init__.assoc",
+ "attr.__init__.evolve")
}
override fun buildVisitor(holder: ProblemsHolder,
@@ -522,7 +526,7 @@ class PyDataclassInspection : PyInspection() {
private fun processHelperAttrsArgument(argument: PyExpression?, calleeQName: String) {
if (argument == null) return
- val instance = calleeQName != "attr.__init__.fields"
+ val instance = calleeQName != "attr.__init__.fields" && calleeQName != "attr.__init__.fields_dict"
if (isNotExpectedDataclass(myTypeEvalContext.getType(argument), PyDataclassParameters.Type.ATTRS, !instance, instance)) {
val presentableCalleeQName = calleeQName.replaceFirst(".__init__.", ".")
diff --git a/python/testData/inspections/PyDataclassInspection/attrsHelpersArgument.py b/python/testData/inspections/PyDataclassInspection/attrsHelpersArgument.py
index d425eb835f2d..9cf1ac80dba3 100644
--- a/python/testData/inspections/PyDataclassInspection/attrsHelpersArgument.py
+++ b/python/testData/inspections/PyDataclassInspection/attrsHelpersArgument.py
@@ -9,6 +9,9 @@ class A:
attr.fields(A)
attr.fields(A())
+attr.fields_dict(A)
+attr.fields_dict(A())
+
attr.asdict(A())
attr.astuple(A())
attr.assoc(A())
@@ -23,6 +26,9 @@ class B:
attr.fields(B)
attr.fields(B())
+attr.fields_dict(B)
+attr.fields_dict(B())
+
attr.asdict(B())
attr.astuple(B())
attr.assoc(B())
@@ -36,6 +42,7 @@ attr.evolve(p)
+ attr.fields_dict(p)
attr.asdict(p)
attr.astuple(p)
@@ -62,6 +71,7 @@ def union1(p: Union[A, B]):
def union2(p: Union[Type[A], Type[B]]):
attr.fields(p)
+ attr.fields_dict(p)
attr.asdict(p)
attr.astuple(p)