PyCQA / pyflakes

A simple program which checks Python source files for errors
https://pypi.org/project/pyflakes
MIT License
1.36k stars 178 forks source link

F821 with Annotated import alias #789

Open alanhdu opened 11 months ago

alanhdu commented 11 months ago

We have a use-case where we sometimes import Annotated under a different name (since there is a naming collision with an existing object callled Annotations and Annotated[Annotations, ...] can be hard to read. Unfortunately, it looks like if we try to do this, then we fail with a false positive:

from typing_extensions import Annotated as WithSchema

def f(x: WithSchema[int, "hello"]) -> None:
    return

fails pyflakes with F821 undefined name 'hello.

Everything works fine if we do not use the Annotated as WithSchema import alias though. Would it be possible to extend the logic to also handle such a case?

cc @nishkakar @ezrilow

jayvdb commented 7 months ago

Confirm the "as" syntax triggers this. Thanks for raising the issue.

If you want to find the problem, very likely it is somewhere in _is_typing_helper

It may not be taking into account alias.asname c.f. https://docs.python.org/3/library/ast.html#ast.alias