-
Notifications
You must be signed in to change notification settings - Fork 770
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
[Type hints] Pylance is confused by type(parameter_name)
instructions
#4942
Comments
type(self)
instructionstype(varname)
instructions
type(varname)
instructionstype(parameter_name)
instructions
…` and `type(x) == T` type guards when `T` is a dynamic type rather than a specific class. This addresses microsoft/pylance-release#4942.
Thanks for the great bug report. I appreciate the detail you provided. This is a bug in the type narrowing behavior for the This bug will be fixed in the next release of pyright and included in a future release of pylance. Here's what autocomplete looks like with the bug fix in place: |
@erictraut, wow I'm so impressed ! I wrote that like 25 minutes ago and you already took care of it, that's very nice ! Thank you very much for the extremely fast turnaround ! To be honest I'm quite out of words here 😄 |
…` and `type(x) == T` type guards when `T` is a dynamic type rather than a specific class. This addresses microsoft/pylance-release#4942. (#6111) Co-authored-by: Eric Traut <erictr@microsoft.com>
This issue has been fixed in prerelease version 2023.10.21, which we've just released. You can find the changelog here: CHANGELOG.md |
Environment data
Language Server version: 2023.10.11
OS and version: linux x64 (arch linux ; Linux arch-linux 6.1.56-1-lts SMP PREEMPT_DYNAMIC Fri, 06 Oct 2023 14:13:03 +0000 x86_64 GNU/Linux)
Python version (and distribution if applicable, e.g. Anaconda): python 3.11.5
python.analysis.indexing: true
python.analysis.typeCheckingMode: off
Visual Studio Code Insiders About data panel :
Code Snippet
Note about variable names :
The
__eq__
method takes a__value
parameter, but as names are optional one can change the signature toother
, as it is done in other programming languages, so I did it for code clarity but the issue still shows up here :Observations
Conditions to make the autocompletion work :
__value
variable intoother
)other
variable at this point of code is unbound and is invalid. This was working on previous version, why nothing shows up here ?How to break it
Type information doesn't change, but if you try to use the
type(...)
instruction on__value
, then it breaks.Surprisingly, it does not break when executed on
self
variable, it's really an issue with the__value
variable (and probably with regular parameters variables, it does not have to be named__value
for this error to occur) !-> Nothing seems to be caught by the server in the logs, but they are attached anyway.
Here you can find the code sample archive with the logs bundled in logs.txt :
pylance_bug.zip
Repro Steps
Comment out the code below :
Try to write
self.name
and trigger autocompletion while writing : -> works as it should, completion should suggest "self.name"Uncomment the above block of code and try to type in
self.name
again, same procedure -> autocompletion is not triggered and the pop up shows theNo suggestions.
message.Expected behavior
Type hints / autocompletion should be working independently from checking the type(...) instruction
Actual behavior
Type hints / autocompletion is broken as soon as you use type(...) on a parameter (only checked against the eq() function override
Logs
The text was updated successfully, but these errors were encountered: