mypy icon indicating copy to clipboard operation
mypy copied to clipboard

Possible bug in mypy when attribute and parameter share name on same line.

Open btimby opened this issue 3 months ago • 2 comments

Bug Report

(A clear and concise description of what the bug is.) I receive the following error from mypy:

api/serializers.py:10: error: Incompatible types in assignment (expression has type "CharField", base class "Field" defined the type as "Callable[..., Any] | str | None") [assignment]

The line in question is:

    source = serializers.CharField(source='source_name')

If I change the name of the attribute source to anything else, the error disappears. I think the attribute and parameter are getting mixed up. The error refers to the attribute assignment but reports the type Callable[..., Any] | str | None" which is correct for the parameter.

To Reproduce I created a project to display this behavior.

https://github.com/btimby/mypy-django-issue

# Ideally, a small sample program that demonstrates the problem.
# Or even better, a reproducible playground link https://mypy-play.net/ (use the "Gist" button)

Expected Behavior I don't think I should receive and error.

Actual Behavior I get an error.

Your Environment Ubuntu linux, python 3.10.2

  • Mypy version used: 1.10.0
  • Mypy command-line flags: .
  • Mypy configuration options from mypy.ini (and other config files):
[mypy]
plugins =
    mypy_django_plugin.main

strict_optional = True

[mypy.plugins.django-stubs]
django_settings_module = issue.settings
  • Python version used: 3.10.2

btimby avatar Apr 26 '24 15:04 btimby

Are you sure this isn't a bug in the Django plugin? It is developed independently from mypy itself.

JelleZijlstra avatar Apr 26 '24 15:04 JelleZijlstra

No I am not. I don't think the problem is with the type annotation itself. It seems systemic to me, since renaming the attribute clears the error.

btimby avatar Apr 26 '24 15:04 btimby