mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Ignore unresolved __attrs_attrs__ for attrs (PY-29929)
This commit is contained in:
@@ -2,12 +2,16 @@
|
||||
package com.jetbrains.python.inspections
|
||||
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import com.jetbrains.python.codeInsight.stdlib.PyDataclassParameters
|
||||
import com.jetbrains.python.codeInsight.stdlib.parseDataclassParameters
|
||||
import com.jetbrains.python.psi.PyElement
|
||||
import com.jetbrains.python.psi.PyExpression
|
||||
import com.jetbrains.python.psi.PyFunction
|
||||
import com.jetbrains.python.psi.PyUtil
|
||||
import com.jetbrains.python.psi.resolve.PyResolveContext
|
||||
import com.jetbrains.python.psi.resolve.QualifiedNameFinder
|
||||
import com.jetbrains.python.psi.types.PyClassType
|
||||
import com.jetbrains.python.psi.types.PyType
|
||||
import com.jetbrains.python.psi.types.TypeEvalContext
|
||||
|
||||
class PyThirdPartyInspectionExtension : PyInspectionExtension() {
|
||||
@@ -29,6 +33,12 @@ class PyThirdPartyInspectionExtension : PyInspectionExtension() {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun ignoreUnresolvedMember(type: PyType, name: String, context: TypeEvalContext): Boolean {
|
||||
return name == "__attrs_attrs__" &&
|
||||
type is PyClassType &&
|
||||
parseDataclassParameters(type.pyClass, context)?.type == PyDataclassParameters.Type.ATTRS
|
||||
}
|
||||
|
||||
private fun resolvesTo(expression: PyExpression, qualifiedName: String, resolveContext: PyResolveContext): Boolean {
|
||||
return ContainerUtil.exists(PyUtil.multiResolveTopPriority(expression, resolveContext)) {
|
||||
it is PyElement && QualifiedNameFinder.getQualifiedName(it) == qualifiedName
|
||||
|
||||
+12
@@ -770,6 +770,18 @@ public class PyUnresolvedReferencesInspectionTest extends PyInspectionTestCase {
|
||||
"print(<error descr=\"Unresolved reference 'module'\">module</error>)");
|
||||
}
|
||||
|
||||
// PY-29929
|
||||
public void testAttrsSpecialAttribute() {
|
||||
doTestByText("import attr\n" +
|
||||
"\n" +
|
||||
"@attr.s\n" +
|
||||
"class C:\n" +
|
||||
" a = attr.ib()\n" +
|
||||
"\n" +
|
||||
"print(C.__attrs_attrs__)\n" +
|
||||
"print(C(1).__attrs_attrs__)");
|
||||
}
|
||||
|
||||
// PY-32927
|
||||
public void testPrefixExpressionOnClassHavingSkeletons() {
|
||||
doMultiFileTest();
|
||||
|
||||
Reference in New Issue
Block a user