From 34a3137f8e112f88220bf9530eccec9720261ba4 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Mon, 30 Jan 2023 09:59:42 +0100 Subject: [PATCH] [1.0 backport] Fix `AttrsInstance` protocol check with cache (#14551) Use correct fullname for `__attrs_attrs__` ClassVar to fix issue with warm cache. Closes #14099 (cherry picked from commit 8e9f89a8498a1242cf1a163f6dbdbd15da54c9a0) --- mypy/plugins/attrs.py | 2 +- test-data/unit/fine-grained-attr.test | 34 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/mypy/plugins/attrs.py b/mypy/plugins/attrs.py index 16e8891e5f57..50d2955d2584 100644 --- a/mypy/plugins/attrs.py +++ b/mypy/plugins/attrs.py @@ -828,7 +828,7 @@ def _add_attrs_magic_attribute( ctx.cls, MAGIC_ATTR_NAME, TupleType(attributes_types, fallback=attributes_type), - fullname=f"{ctx.cls.fullname}.{attr_name}", + fullname=f"{ctx.cls.fullname}.{MAGIC_ATTR_NAME}", override_allow_incompatible=True, is_classvar=True, ) diff --git a/test-data/unit/fine-grained-attr.test b/test-data/unit/fine-grained-attr.test index fd7c97da0662..3fd40b774c7b 100644 --- a/test-data/unit/fine-grained-attr.test +++ b/test-data/unit/fine-grained-attr.test @@ -46,3 +46,37 @@ A.__attrs_attrs__.b [out] == + +[case magicAttributeConsistency2-only_when_cache] +[file c.py] +import attr + +@attr.s +class Entry: + var: int = attr.ib() +[builtins fixtures/attr.pyi] + +[file m.py] +from typing import Any, ClassVar, Protocol +from c import Entry + +class AttrsInstance(Protocol): + __attrs_attrs__: ClassVar[Any] + +def func(e: AttrsInstance) -> None: ... +func(Entry(2)) + +[file m.py.2] +from typing import Any, ClassVar, Protocol +from c import Entry + +class AttrsInstance(Protocol): + __attrs_attrs__: ClassVar[Any] + +def func(e: AttrsInstance) -> int: + return 2 # Change return type to force reanalysis + +func(Entry(2)) + +[out] +==