PowerShell/PowerShellEditorServices

Leaky implementation of tab-completion / IntelliSense surfaces phantom variables named for the parameters of the TabExpansion2 function

mklement0 opened this issue · 0 comments

Prerequisites

  • Write a descriptive title.
  • Make sure you are able to repro it on the latest version
  • Search the existing issues.

Steps to reproduce

Note:

  • I've observed the symptom in the context of tab-completion in Visual Studio Code, but I assume the underlying problem is relevant to this repo.

  • The editor's tab completion / IntelliSense always "knows" the following phantom variables due to a leaky implementation detail (they correspond to the parameter names of the TabExpansion2 function):

    • $ast, $tokens, $positionOfCursor, $options
  • Tab-completion / IntelliSense results of these variables is based on the type these (parameter) variables have in Tabexpansion2, even if you explicitly define them with a value of a different type.

    • For instance, even if you define [int] $positionOfCursor = 42 in your script, tab-completion on a later line still shows the properties of the [IScriptPosition] type that the -positionOfCursor parameter is typed as.

    • Even if you don't define your own versions of these variables, their mere (ostensible) presence during tab-completion is confusing.

In an empty .ps1 file open in Visual Studio Code, type the following

$tokens.

Expected behavior

No IntelliSense results, given that $tokens isn't defined.

Actual behavior

IntelliSense results are the [array] type's instance property names, because the -token parameter of TabExpansion2 happens to be array-typed (Token[]])

Error details

No response

Environment data

Name                           Value
----                           -----
PSVersion                      7.3.0
PSEdition                      Core
GitCommitId                    7.3.0
OS                             Darwin 22.1.0 Darwin Kernel Version 22.1.0: Sun Oct  9 20:15:09 PDT 2022; root:xnu-8792.41.9~2/RELEASE_ARM64_T6000
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Version

PowerShell Extension v2022.11.0

Visuals

No response