-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
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
Fix callable instance variable support #10548
Conversation
This comment has been minimized.
This comment has been minimized.
This is great! It's a very long-lasting bug so it's wonderful to get it fixed. The mypy-primer output looks very promising. https://github.com/willmcgugan/rich/blob/master/rich/pager.py#L20 seems like it's missing a |
Yes, mypy-primer looks very promising! (I'm also excited, thinking about all the |
This comment has been minimized.
This comment has been minimized.
Diff from mypy_primer, showing the effect of this PR on open source code: pydantic (https://github.com/samuelcolvin/pydantic.git)
+ pydantic/validators.py:503: error: unused "type: ignore" comment
+ pydantic/main.py:556: error: Redundant cast to "Callable[[Any], Any]" [redundant-cast]
+ pydantic/dataclasses.py:172: error: unused "type: ignore" comment
+ pydantic/dataclasses.py:173: error: unused "type: ignore" comment
sphinx (https://github.com/sphinx-doc/sphinx.git)
+ sphinx/domains/std.py: note: In member "handle_signature" of class "GenericObject":
+ sphinx/domains/std.py:58:20: error: Too few arguments
+ sphinx/domains/std.py:58:36: error: Argument 1 has incompatible type "BuildEnvironment"; expected "GenericObject"
+ sphinx/domains/std.py:58:46: error: Argument 2 has incompatible type "str"; expected "BuildEnvironment"
+ sphinx/domains/std.py:58:51: error: Argument 3 has incompatible type "desc_signature"; expected "str"
rich (https://github.com/willmcgugan/rich.git)
+ rich/pager.py:26: error: Too few arguments
graphql-core (https://github.com/graphql-python/graphql-core.git)
+ src/graphql/execution/execute.py:207: error: unused "type: ignore" comment
+ src/graphql/execution/execute.py:208: error: unused "type: ignore" comment
+ src/graphql/execution/execute.py:879: error: unused "type: ignore" comment
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fantastic, thank you!
Currently bumping into a bug with py3.6 python/mypy#10548
Just wanted to say thank you again! This fixes a longstanding issue! |
This reverts commit 6ab0efc. Reverting the change since it causes a significant backward compatibility break. Code like this previously worked as expected: ``` class C: def f(self) -> None: pass g = f C().g() ``` However, #10548 broke this in a subtle way (no error on definition), and instead required the introduction of a ClassVar annotation for `g`, which is non-intuitive and error-prone. For example, some typeshed stubs use method aliases such as the above (e.g. stubs for `logging`), and the change broke those stubs. It's also arguably inconsistent, since normally ClassVar annotations are optional. Any fix to the original issue should avoid breaking method aliases such as the above. Hopefully the fix can be adjusted suitably. The PR may have broken incremental mode somehow as well -- cached and uncached runs sometimes produce different results. The root cause is still unclear, however.
This reverts commit 6ab0efc. Reverting the change since it causes a significant backward compatibility break. Code like this previously worked as expected: ``` class C: def f(self, ...) -> None: pass g = f C().g(...) # Now sometimes generates an error ``` However, #10548 broke this in a subtle way (no error on definition, it sometimes generates an error on call), and instead required the introduction of a ClassVar annotation for `g`, which is non-intuitive and error-prone. For example, some typeshed stubs use method aliases such as the above (e.g. stubs for `logging`), and the change broke those stubs. It's also arguably inconsistent, since normally ClassVar annotations are optional. Any fix to the original issue should avoid breaking method aliases such as the above. Hopefully the fix can be adjusted suitably. The PR may have broken incremental mode somehow as well -- cached and uncached runs sometimes produce different results. The root cause is still unclear, however.
This reverts commit 6ab0efc. Reverting the change since it causes a significant backward compatibility break. Code like this previously worked as expected: ``` class C: def f(self, ...) -> None: pass g = f C().g(...) # Now sometimes generates an error ``` However, #10548 broke this in a subtle way (no error on definition, it sometimes generates an error on call), and instead required the introduction of a ClassVar annotation for `g`, which is non-intuitive and error-prone. For example, some typeshed stubs use method aliases such as the above (e.g. stubs for `logging`), and the change broke those stubs. It's also arguably inconsistent, since normally ClassVar annotations are optional. Any fix to the original issue should avoid breaking method aliases such as the above. Hopefully the fix can be adjusted suitably. The PR may have broken incremental mode somehow as well -- cached and uncached runs sometimes produce different results. The root cause is still unclear, however.
…n#11571) This reverts commit 6ab0efc. Reverting the change since it causes a significant backward compatibility break. Code like this previously worked as expected: ``` class C: def f(self, ...) -> None: pass g = f C().g(...) # Now sometimes generates an error ``` However, python#10548 broke this in a subtle way (no error on definition, it sometimes generates an error on call), and instead required the introduction of a ClassVar annotation for `g`, which is non-intuitive and error-prone. For example, some typeshed stubs use method aliases such as the above (e.g. stubs for `logging`), and the change broke those stubs. It's also arguably inconsistent, since normally ClassVar annotations are optional. Any fix to the original issue should avoid breaking method aliases such as the above. Hopefully the fix can be adjusted suitably. The PR may have broken incremental mode somehow as well -- cached and uncached runs sometimes produce different results. The root cause is still unclear, however.
Fixes python#708 and Fixes python#5485 Prevent handling as bounded method of callable members declared as instance variables.
Fixes #708 and Fixes #5485
Prevent handling as bounded method of callable members declared as instance variables.