alecthomas / importmagic

A Python library for finding unresolved symbols in Python code, and the corresponding imports
BSD 2-Clause "Simplified" License
120 stars 20 forks source link

Python3 type hint annotations are not considered #46

Open djanderson opened 7 years ago

djanderson commented 7 years ago

Hi, thanks for the great project.

Currently it seems that importmagic doesn't look for __annotations__ properties added in recent version of python 3, so python3 syntax-aware checkers complain if I use a type hint without importing the name, but importmagic will delete any import that's only referenced in a type annotation.

Test case:

import importmagic

code = """
from typing import Iterable

def print_it(it: Iterable):
    for i in it:
        print(i)

print_it(['a', 'b', 'c'])
"""

scope = importmagic.Scope.from_source(code)
unresolved, unreferenced = scope.find_unresolved_and_unreferenced_symbols()
print("unreferenced: {}".format(unreferenced))

from typing import Iterable

def print_it(it: Iterable):
    for i in it:
        print(i)

print("function annotation: {}".format(print_it.__annotations__))

Output:

$ python3 importmagictest.py 
unreferenced: {'Iterable'}
function annotation: {'it': typing.Iterable<+T_co>}
alecthomas commented 7 years ago

Well spotted, and great test case, thanks for the bug report. I'll try to get to that this weekend.

alecthomas commented 7 years ago

(unrelated, but both of our avatars are photographs of Autumn leaves)

leos commented 7 years ago

Any updates with this? Running into the same issue.

glyph commented 1 year ago

It looks like #49 fixed this?