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

[Type hints] Pylance is confused by type(parameter_name) instructions #4942

Closed
bebenlebricolo opened this issue Oct 10, 2023 · 3 comments
Closed
Assignees
Labels
fixed in next version (main) A fix has been implemented and will appear in an upcoming version

Comments

@bebenlebricolo
Copy link

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 :

Property Value
Version 1.84.0-insider
Commit 55d1cfea45b665bb54e46d11bd3ccddf9e66108b
Date 2023-10-09T06:11:32.070Z
Electron 25.8.4
ElectronBuildId 24154031
Chromium: 114.0.5735.289
Node.js 18.15.0
V8 11.4.183.29-electron.0
OS Linux x64 6.1.56-1-lts

Note : this issue was also reproduced in Pylance v2023.10.10 with regular releases of Visual Studio Code (not insiders)
And also with VSCodium project, but this is orthogonal to this problem as support is not official I believe.

Code Snippet

from dataclasses import dataclass
from typing import cast

@dataclass
class Other:
    name : str

class HintBug :
    name : str
    others : list[Other]

    def __eq__(self, other: object) -> bool:
        if type(self) != type(other) :  # <-- That's where the issue shows up : the type(xxx) instruction breaks completion
            return False
        other = cast(Other, other)  # This is optional but helps to write the custom comparison code, it does not seem to impact autocompletion at this point
        self.name # <-- self. does not raise autocompletion, self.name type hint (mouse hover) is : "(function) name: never" 

Note about variable names :

The __eq__ method takes a __value parameter, but as names are optional one can change the signature to other, as it is done in other programming languages, so I did it for code clarity but the issue still shows up here :

    def __eq__(self, __value: object) -> bool:
        if type(self) != type(__value) :
            return False
        self.name # <-- Still not recognized as a member variable !

Observations

Conditions to make the autocompletion work :

  • ⚠️ This code is not complete on purpose and shows the state right before the breaking change (I discovered that while renaming the __value variable into other)
  • ⚠️ Second observation : I would have expected Pylance to show me that the other variable at this point of code is unbound and is invalid. This was working on previous version, why nothing shows up here ?

working_completion

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) !

broken_completion
-> 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

  1. Comment out the code below :

      #      if type(self) != type(__value) :
      #       return False
  2. Try to write self.name and trigger autocompletion while writing : -> works as it should, completion should suggest "self.name"

  3. 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 the No 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

2023-10-10 10:12:13.110 [info] [Info  - 10:12:13] (78942) Pylance (sync) language server 2023.10.11 (pyright 71ed1178) starting
2023-10-10 10:12:13.111 [info] [Info  - 10:12:13] (78942) Server root directory: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist
2023-10-10 10:12:13.111 [info] [Info  - 10:12:13] (78942) Starting service instance "PylanceBugs"
2023-10-10 10:12:13.150 [info] [Info  - 10:12:13] (78942) Setting pythonPath for service "PylanceBugs": "/bin/python"
2023-10-10 10:12:13.150 [info] [Info  - 10:12:13] (78942) Setting environmentName for service "PylanceBugs": "3.11.5 (global)"
2023-10-10 10:12:13.153 [info] [Warn  - 10:12:13] (78942) stubPath /<MyHome>/Documents/Repos/PylanceBugs/typings is not a valid directory.
2023-10-10 10:12:13.183 [info] [Info  - 10:12:13] (78942) Assuming Python version 3.11
2023-10-10 10:12:13.237 [info] [Info  - 10:12:13] (78942) Found 1 source file
2023-10-10 10:12:18.805 [info] [Info  - 10:12:18] (78942) [IDX(3)] Long operation: indexing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/bundled/stubs/sklearn/cluster/__init__.pyi (3152ms)
2023-10-10 10:12:21.897 [info] [Info  - 10:12:21] (78942) [IDX(3)] Long operation: index execution environment /<MyHome>/Documents/Repos/PylanceBugs (7367ms)
2023-10-10 10:12:22.370 [info] [Info  - 10:12:22] (78942) [IDX(3)] Long operation: index packages /<MyHome>/Documents/Repos/PylanceBugs (7851ms)
2023-10-10 10:45:04.032 [info] [Info  - 10:45:04] (80956) Pylance (sync) language server 2023.10.11 (pyright 71ed1178) starting
2023-10-10 10:45:04.032 [info] [Info  - 10:45:04] (80956) Server root directory: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist
2023-10-10 10:45:04.033 [info] [Info  - 10:45:04] (80956) Starting service instance "PylanceBugs"
2023-10-10 10:45:04.079 [info] (80956) No configuration file found.
2023-10-10 10:45:04.079 [info] (80956) No pyproject.toml file found.
2023-10-10 10:45:04.079 [info] [Info  - 10:45:04] (80956) Setting pythonPath for service "PylanceBugs": "/bin/python"
2023-10-10 10:45:04.079 [info] [Info  - 10:45:04] (80956) Setting environmentName for service "PylanceBugs": "3.11.5 (global)"
2023-10-10 10:45:04.082 [info] [Warn  - 10:45:04] (80956) stubPath /<MyHome>/Documents/Repos/PylanceBugs/typings is not a valid directory.
2023-10-10 10:45:04.113 [info] [Info  - 10:45:04] (80956) Assuming Python version 3.11
2023-10-10 10:45:04.113 [info] (80956) Assuming Python platform Linux
2023-10-10 10:45:04.204 [info] [Info  - 10:45:04] (80956) Search paths for /<MyHome>/Documents/Repos/PylanceBugs
2023-10-10 10:45:05.169 [info] [Info  - 10:45:05] (80956)   /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib
2023-10-10 10:45:05.172 [info] [Info  - 10:45:05] (80956)   /<MyHome>/Documents/Repos/PylanceBugs
2023-10-10 10:45:05.172 [info] [Info  - 10:45:05] (80956)   /<MyHome>/Documents/Repos/PylanceBugs/typings
2023-10-10 10:45:05.173 [info] [Info  - 10:45:05] (80956)   /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stubs/...
2023-10-10 10:45:05.173 [info] [Info  - 10:45:05] (80956)   /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/bundled/stubs
2023-10-10 10:45:05.173 [info] [Info  - 10:45:05] (80956)   /usr/lib/python3.11
2023-10-10 10:45:05.173 [info] [Info  - 10:45:05] (80956)   /usr/lib/python3.11/lib-dynload
2023-10-10 10:45:05.174 [info] [Info  - 10:45:05] (80956)   /usr/lib/python3.11/site-packages
2023-10-10 10:45:05.174 [info] [Info  - 10:45:05] (80956) Adding fs watcher for library directories:
 /usr/lib/python3.11
/usr/lib/python3.11/lib-dynload
/usr/lib/python3.11/site-packages
2023-10-10 10:45:05.174 [info] [Info  - 10:45:05] (80956) Adding fs watcher for directories:
 /<MyHome>/Documents/Repos/PylanceBugs
2023-10-10 10:45:05.174 [info] (80956) Searching for source files
2023-10-10 10:45:05.176 [info] [Info  - 10:45:05] (80956) Found 1 source file
2023-10-10 10:45:05.180 [info] (80956) [FG] parsing: /<MyHome>/Documents/Repos/PylanceBugs/class.py (44ms)
2023-10-10 10:45:05.180 [info] (80956) [FG] parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/builtins.pyi [fs read 10ms] (94ms)
2023-10-10 10:45:05.180 [info] (80956) [FG] binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/builtins.pyi (33ms)
2023-10-10 10:45:05.180 [info] (80956) [FG] binding: /<MyHome>/Documents/Repos/PylanceBugs/class.py (1ms)
2023-10-10 10:45:05.185 [info] (80956) [BG(2)] analyzing: /<MyHome>/Documents/Repos/PylanceBugs/class.py ...
2023-10-10 10:45:05.186 [info] (80956) [BG(2)]   parsing: /<MyHome>/Documents/Repos/PylanceBugs/class.py (78ms)
2023-10-10 10:45:05.186 [info] (80956) [IDX(3)] scan packages /<MyHome>/Documents/Repos/PylanceBugs ...
2023-10-10 10:45:05.186 [info] (80956) [IDX(3)]   read stdlib indices (36ms)
2023-10-10 10:45:05.187 [info] (80956) [BG(2)]   parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/builtins.pyi [fs read 5ms] (125ms)
2023-10-10 10:45:05.187 [info] (80956) [BG(2)]   binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/builtins.pyi (35ms)
2023-10-10 10:45:05.187 [info] (80956) [BG(2)]   binding: /<MyHome>/Documents/Repos/PylanceBugs/class.py (1ms)
2023-10-10 10:45:05.187 [info] (80956) [BG(2)]   checking: /<MyHome>/Documents/Repos/PylanceBugs/class.py ...
2023-10-10 10:45:05.187 [info] (80956) [BG(2)]     parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/typing.pyi [fs read 1ms] (40ms)
2023-10-10 10:45:05.188 [info] (80956) [BG(2)]     binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/typing.pyi (9ms)
2023-10-10 10:45:05.188 [info] (80956) [BG(2)]     parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/typing_extensions.pyi [fs read 0ms] (4ms)
2023-10-10 10:45:05.188 [info] (80956) [BG(2)]     binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/typing_extensions.pyi (6ms)
2023-10-10 10:45:05.188 [info] (80956) [BG(2)]     parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/_typeshed/__init__.pyi [fs read 0ms] (6ms)
2023-10-10 10:45:05.189 [info] (80956) [BG(2)]     binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/_typeshed/__init__.pyi (3ms)
2023-10-10 10:45:05.190 [info] (80956) [BG(2)]     parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/types.pyi [fs read 0ms] (18ms)
2023-10-10 10:45:05.190 [info] (80956) [BG(2)]     binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/types.pyi (4ms)
2023-10-10 10:45:05.190 [info] (80956) [BG(2)]     parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/abc.pyi [fs read 0ms] (1ms)
2023-10-10 10:45:05.193 [info] (80956) [BG(2)]     binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/abc.pyi (1ms)
2023-10-10 10:45:05.195 [info] (80956) [BG(2)]     parsing: /usr/lib/python3.11/dataclasses.py [fs read 0ms] (55ms)
2023-10-10 10:45:05.196 [info] (80956) [BG(2)]     binding: /usr/lib/python3.11/dataclasses.py (17ms)
2023-10-10 10:45:05.197 [info] (80956) [BG(2)]     parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/dataclasses.pyi [fs read 0ms] (20ms)
2023-10-10 10:45:05.198 [info] (80956) [BG(2)]     binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/dataclasses.pyi (1ms)
2023-10-10 10:45:05.198 [info] (80956) [BG(2)]     parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/collections/abc.pyi [fs read 0ms] (0ms)
2023-10-10 10:45:05.199 [info] (80956) [BG(2)]     binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/collections/abc.pyi ...
2023-10-10 10:45:05.199 [info] (80956) [BG(2)]       parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/_collections_abc.pyi [fs read 0ms] (2ms)
2023-10-10 10:45:05.199 [info] (80956) [BG(2)]       binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/_collections_abc.pyi (1ms)
2023-10-10 10:45:05.200 [info] (80956) [BG(2)]     binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/collections/abc.pyi (5ms)
2023-10-10 10:45:05.271 [info] (80956) [BG(2)]     parsing: /usr/lib/python3.11/typing.py [fs read 0ms] (106ms)
2023-10-10 10:45:05.335 [info] (80956) [BG(2)]     binding: /usr/lib/python3.11/typing.py (38ms)
2023-10-10 10:45:05.368 [info] (80956) [BG(2)]   checking: /<MyHome>/Documents/Repos/PylanceBugs/class.py (473ms)
2023-10-10 10:45:05.369 [info] (80956) [BG(2)] analyzing: /<MyHome>/Documents/Repos/PylanceBugs/class.py (718ms)
2023-10-10 10:45:05.415 [info] (80956) [BG(2)] indexing: /<MyHome>/Documents/Repos/PylanceBugs/class.py [found 2] (1ms)
2023-10-10 10:45:05.416 [info] (80956) [BG(2)] getSemanticTokens full at /<MyHome>/Documents/Repos/PylanceBugs/class.py (7ms)
2023-10-10 10:45:05.419 [info] (80956) [BG(2)] getSemanticTokens range 0:0 - 17:0 at /<MyHome>/Documents/Repos/PylanceBugs/class.py (3ms)
2023-10-10 10:45:05.581 [info] (80956) [IDX(3)] scan packages /<MyHome>/Documents/Repos/PylanceBugs (866ms)
2023-10-10 10:45:05.706 [info] (80956) [IDX(3)] index packages /<MyHome>/Documents/Repos/PylanceBugs ...
2023-10-10 10:45:05.706 [info] (80956) [IDX(3)]   index execution environment /<MyHome>/Documents/Repos/PylanceBugs ...
2023-10-10 10:45:05.707 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_afm.py [skipped: private or protected file] (1ms)
2023-10-10 10:45:05.707 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_c_internal_utils.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.708 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_cm.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.708 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_color_data.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.708 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_constrained_layout.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.709 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_docstring.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.709 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_enums.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.709 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_fontconfig_pattern.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.709 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_layoutgrid.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.710 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_mathtext.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.710 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_mathtext_data.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.710 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_pylab_helpers.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.710 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_text_helpers.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.711 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_tight_bbox.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.711 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_tight_layout.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.711 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_version.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.712 [info] (80956) [IDX(3)]     indexing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/bundled/stubs/sklearn/_config.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.712 [info] (80956) [IDX(3)]     indexing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/bundled/stubs/sklearn/_distributor_init.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.712 [info] (80956) [IDX(3)]     indexing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/bundled/stubs/sklearn/_min_dependencies.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.712 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/__phello__/__init__.py [skipped: no '__all__' defined] (1ms)
2023-10-10 10:45:05.713 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/concurrent/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.713 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/distutils/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.713 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/idlelib/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.714 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/lib2to3/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.714 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/pydoc_data/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.714 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/turtledemo/__init__.py [skipped: no '__all__' defined] (1ms)
2023-10-10 10:45:05.714 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/urllib/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.715 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/wsgiref/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.715 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/xmlrpc/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.715 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/Cython/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.715 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/OpenImageIO/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.716 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/Screenkey/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.716 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/alabaster/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.716 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/aniso8601/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.716 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/apiclient/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.717 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/autocommand/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.717 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/avahi/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.717 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/binaryornot/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.717 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/boolean/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.718 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/boost/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.718 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/bytesize/__init__.py [skipped: no '__all__' defined] (1ms)
2023-10-10 10:45:05.718 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/caca/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.718 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/cftime/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.718 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/coverage/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.718 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/curl/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.719 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/cycler/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.719 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/debian_bundle/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.719 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/dill/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.719 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/distlib/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.719 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/freecad/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.720 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/future/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.720 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/gcovr/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.720 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/gi/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.720 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/gitdb/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.720 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/gluster/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.720 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/gnomemusic/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.721 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/googleapiclient/__init__.py [skipped: no '__all__' defined] (1ms)
2023-10-10 10:45:05.721 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/gtweak/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.721 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/jeepney/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.721 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/lensfun/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.721 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/libfuturize/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.721 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/libmount/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.721 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/libnvme/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.722 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/libpasteurize/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.722 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/libscanbuild/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.722 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/libsmbios_c/__init__.py [skipped: no '__all__' defined] (1ms)
2023-10-10 10:45:05.722 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/license_expression/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.722 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/logutils/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.722 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/louis/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.722 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/lxml/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.723 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/mako/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.723 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_animation_data.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.723 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_blocking_input.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.723 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_cm_listed.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.723 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_image.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.723 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_internal_utils.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.724 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_path.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.724 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_qhull.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.724 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_tri.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.724 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_ttconv.pyi [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.724 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/matplotlib/_type1font.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.725 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/med/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.725 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/msgpack/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.725 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/mypyc/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.725 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/netsnmp/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.725 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/nspektr/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.725 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/orca/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.726 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/orcus/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.726 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/past/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.726 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/pbr/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.726 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/pkgconfig/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.727 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/pooch/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.727 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/pyasn1_modules/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.727 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/pyatspi/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.728 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/pytest_cov/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.728 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/pyximport/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.728 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/scipy/_distributor_init.py [skipped: private or protected file] (0ms)
2023-10-10 10:45:05.728 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/scipy/conftest.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.728 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/scipy/version.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.729 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/scour/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.729 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/shapely/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.729 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/shiboken2_generator/__init__.py [skipped: no '__all__' defined] (1ms)
2023-10-10 10:45:05.729 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/smmap/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.729 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/speechd/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.730 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/speechd_config/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.730 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/tempora/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.730 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/uc_micro/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.730 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/webencodings/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.730 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/webtest/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.731 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/wheel/__init__.py [skipped: no '__all__' defined] (1ms)
2023-10-10 10:45:05.731 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/wrapt/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.731 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/wx/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.731 [info] (80956) [IDX(3)]     indexing: /usr/lib/python3.11/site-packages/xcbgen/__init__.py [skipped: no '__all__' defined] (0ms)
2023-10-10 10:45:05.741 [info] (80956) [IDX(3)]   index execution environment /<MyHome>/Documents/Repos/PylanceBugs [found 6619 in 297 files] (42ms)
2023-10-10 10:45:05.742 [info] (80956) [IDX(3)] index packages /<MyHome>/Documents/Repos/PylanceBugs [found 6619 in 1 exec envs] (81ms)
2023-10-10 10:45:28.007 [info] (80956) [FG] parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/typing.pyi [fs read 0ms] (18ms)
2023-10-10 10:45:28.019 [info] (80956) [FG] binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/typing.pyi (12ms)
2023-10-10 10:45:28.033 [info] (80956) [FG] parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/typing_extensions.pyi [fs read 0ms] (9ms)
2023-10-10 10:45:28.038 [info] (80956) [FG] binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/typing_extensions.pyi (5ms)
2023-10-10 10:45:28.071 [info] (80956) [FG] parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/_typeshed/__init__.pyi [fs read 1ms] (9ms)
2023-10-10 10:45:28.075 [info] (80956) [FG] binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/_typeshed/__init__.pyi (3ms)
2023-10-10 10:45:28.088 [info] (80956) [FG] parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/types.pyi [fs read 1ms] (13ms)
2023-10-10 10:45:28.095 [info] (80956) [FG] binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/types.pyi (8ms)
2023-10-10 10:45:28.105 [info] (80956) [FG] parsing: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/abc.pyi [fs read 0ms] (2ms)
2023-10-10 10:45:28.106 [info] (80956) [FG] binding: /<MyHome>/.vscode-insiders/extensions/ms-python.vscode-pylance-2023.10.11/dist/typeshed-fallback/stdlib/abc.pyi (0ms)

@bebenlebricolo bebenlebricolo changed the title [Type hints] Pylance is confused by type(self) instructions [Type hints] Pylance is confused by type(varname) instructions Oct 10, 2023
@github-actions github-actions bot added the needs repro Issue has not been reproduced yet label Oct 10, 2023
@bebenlebricolo bebenlebricolo changed the title [Type hints] Pylance is confused by type(varname) instructions [Type hints] Pylance is confused by type(parameter_name) instructions Oct 10, 2023
erictraut pushed a commit to microsoft/pyright that referenced this issue Oct 10, 2023
…` and `type(x) == T` type guards when `T` is a dynamic type rather than a specific class. This addresses microsoft/pylance-release#4942.
@erictraut
Copy link
Contributor

Thanks for the great bug report. I appreciate the detail you provided.

This is a bug in the type narrowing behavior for the type(x) is T and type(x) == T type guards in pyright. (Pyright is the static type checker upon which pylance is built.) If you're interested learning more about type narrowing and type guards, refer to this documentation.

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:
image

@bebenlebricolo
Copy link
Author

bebenlebricolo commented Oct 10, 2023

@erictraut, wow I'm so impressed ! I wrote that like 25 minutes ago and you already took care of it, that's very nice !
I saw your PR and I'm glad the fix is actually so contained, and the tests that go with it will serve as a non-regression test for future releases.

Thank you very much for the extremely fast turnaround !
As a developer coming from the C/C++/C# world, using type hints in Python is really important as part of the whole workflow, and that really makes or breaks the experience for me.

To be honest I'm quite out of words here 😄

erictraut added a commit to microsoft/pyright that referenced this issue Oct 10, 2023
…` 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>
@heejaechang heejaechang added fixed in next version (main) A fix has been implemented and will appear in an upcoming version and removed needs repro Issue has not been reproduced yet labels Oct 10, 2023
@heejaechang
Copy link
Contributor

This issue has been fixed in prerelease version 2023.10.21, which we've just released. You can find the changelog here: CHANGELOG.md

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fixed in next version (main) A fix has been implemented and will appear in an upcoming version
Projects
None yet
Development

No branches or pull requests

3 participants