Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrong file blamed for a mixture of NamedTuple and passing a function instead of type. #8511

Closed
mikolajz opened this issue Mar 7, 2020 · 2 comments · Fixed by #8549
Closed
Labels
bug mypy got something wrong false-positive mypy gave an error on correct code priority-0-high

Comments

@mikolajz
Copy link

mikolajz commented Mar 7, 2020

  • Are you reporting a bug, or opening a feature request?
    bug

  • Please insert below the code you are checking with mypy,

    • Create an empty dir/init.py.
    • Create dir/file1.py with:
import typing

def foo():
  pass


Type1 = typing.NamedTuple('Type1', [
    ('foo', foo),
])
  • Create file2.py (in the root dir) with:
from typing import NamedTuple

from dir.file1 import Type1

Type2 = NamedTuple('Type2', [
    ('x', Type1),
])
  • Run: mypy file2.py --follow-imports=silent

  • What is the actual behavior/output?

The error message is:
file2.py:8: error: Name 'foo' is not defined

-> Note that file2.py has no line 8 (it the problematic line in file1.py) and no mention of foo.

  • What is the behavior/output you expect?
    • the error message should point to file1.py or say something about Type1 in file2.py being invalid.
    • foo is well defined in this case, making the error message more cryptic.

When reducing this case I've found that removing --follow-import-silent gives an error message about file1.py which is actionable, but the other message is still present and is wrong, since the line number refers to a line in file1.py.

  • What are the versions of mypy and Python you are using?

mypy 0.761 on Python 3.5.2

  • What are the mypy flags you are using? (For example --strict-optional)

--follow-imports=silent

@msullivan msullivan added bug mypy got something wrong false-positive mypy gave an error on correct code priority-0-high labels Mar 16, 2020
@msullivan
Copy link
Collaborator

Oh this looks nasty. Anything that gives errors in the wrong file is really bad!

msullivan added a commit that referenced this issue Mar 17, 2020
Fixes #8511.

This is a workaround of #4987, where UnboundTypes can leak.
msullivan added a commit that referenced this issue Mar 17, 2020
Fixes #8511.

This is a workaround of #4987, where UnboundTypes can leak.
@mikolajz
Copy link
Author

Yes, it was quite tricky to find that the error was because in a completely different file someone used numpy.array instead of numpy.ndarray.

msullivan added a commit that referenced this issue Mar 17, 2020
Fixes #8511.

This is a workaround of #4987, where UnboundTypes can leak.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug mypy got something wrong false-positive mypy gave an error on correct code priority-0-high
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants