asyncstdlib icon indicating copy to clipboard operation
asyncstdlib copied to clipboard

[Bug]: Incorrect overload handling for Any

Open maxfischer2781 opened this issue 1 year ago • 1 comments

What happened?

Since typing.Any matches literally anything, for @overload that start with special cases these are always picked in untyped code. Instead, @overload should prefer the most generic, conservative case.

This is related to and got my attention by the pandas concat type hints bug that causes Any -> ??? paths to select None -> Never overloads.

Minimal Reproducible Example

# Type test
# MyPy "correctly" reports the unused type ignore

async def test_filter_any(aitr: "AsyncIterator[int | None]") -> None:
    filter_any: Any = ...  # < we don't know the actual type and don't care
    async for item in a.filter(filter_any, aitr):
        print(2 + item)  # type: ignore

Request Assignment [Optional]

  • [ ] I already understand the cause and want to submit a bugfix.

maxfischer2781 avatar Mar 25 '24 09:03 maxfischer2781

There currently seems to be no way to fix this for both MyPy and PyRight. See the open StackOverflow question How to overload functions to handle Any-arguments? for the current status quo.

maxfischer2781 avatar Jun 16 '24 09:06 maxfischer2781