-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Closed
Labels
as designedNot a bug, working as intendedNot a bug, working as intended
Description
Describe the bug
The following snippet of code should cause a type checker to emit an error. However, pyright sees no issue with it:
from typing import ClassVar, Protocol
class ClassVarProto(Protocol):
x: ClassVar[str]
class Foo:
x: ClassVar[str] = "x"
def expects_ClassVarProto(arg: ClassVarProto) -> None: ...
expects_ClassVarProto(Foo()) # should succeed
expects_ClassVarProto(Foo) # should fail (the object passed in has type `type[ClassVarProto]`, not `ClassVarProto`)Mypy correctly emits an error on the second call:
error: Argument 1 to "expects_ClassVarProto" has incompatible type "Type[Foo]"; expected "ClassVarProto" [arg-type]
note: ClassVar protocol member ClassVarProto.x can never be matched by a class object
I've reproduced this on pyright 1.1.284. I discovered the bug in my typeshed PR python/typeshed#9362: several tests I added for that PR pass on mypy, but fail on pyright. (FYI I also discovered an edge case in that PR where pyright appears to have the correct behaviour, but mypy is buggy.)
Metadata
Metadata
Assignees
Labels
as designedNot a bug, working as intendedNot a bug, working as intended