Skip to content

Commit

Permalink
handle dumb decorators better
Browse files Browse the repository at this point in the history
  • Loading branch information
hauntsaninja committed Nov 27, 2021
1 parent 085b88f commit e600b0e
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
10 changes: 7 additions & 3 deletions mypy/checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,11 +510,15 @@ def check_overlapping_overloads(self, defn: OverloadedFuncDef) -> None:
if isinstance(inner_type, CallableType):
impl_type = inner_type
elif isinstance(inner_type, Instance):
inner_call = find_member('__call__', inner_type, inner_type, is_operator=True)
assert inner_call is not None
impl_type = cast(CallableType, inner_call)
inner_call = get_proper_type(
find_member('__call__', inner_type, inner_type, is_operator=True)
)
if isinstance(inner_call, CallableType):
impl_type = inner_call
else:
assert False
if impl_type is None:
self.msg.not_callable(inner_type, defn.impl)

is_descriptor_get = defn.info and defn.name == "__get__"
for i, item in enumerate(defn.items):
Expand Down
9 changes: 9 additions & 0 deletions test-data/unit/check-overloading.test
Original file line number Diff line number Diff line change
Expand Up @@ -5382,4 +5382,13 @@ def f_c(arg: int) -> None: ...
def f_c(arg: str) -> None: ...
@dec_c # E: Overloaded function implementation does not accept all possible arguments of signature 2
def f_c(arg): ...

def dec_d(f: Callable[..., Any]) -> int: ...

@overload
def f_d(arg: int) -> None: ...
@overload
def f_d(arg: str) -> None: ...
@dec_d # E: "int" not callable
def f_d(arg): ...
[builtins fixtures/dict.pyi]

0 comments on commit e600b0e

Please sign in to comment.