from mypy.types import LiteralType, AnyType, TypeOfAny, Type from mypy.plugin import Plugin, MethodContext from typing import Callable, Optional # If radd exists, there shouldn't be an error. If it doesn't exist, then there will be an error def type_add(ctx: MethodContext) -> Type: ctx.api.fail("fail", ctx.context) return AnyType(TypeOfAny.from_error) def type_radd(ctx: MethodContext) -> Type: return LiteralType(7, fallback=ctx.api.named_generic_type('builtins.int', [])) class TestPlugin(Plugin): def get_method_hook(self, fullname: str) -> Optional[Callable[[MethodContext], Type]]: if fullname == 'builtins.int.__add__': return type_add if fullname == 'builtins.int.__radd__': return type_radd return None def plugin(version: str) -> type[TestPlugin]: return TestPlugin