PowerShellEditorServices icon indicating copy to clipboard operation
PowerShellEditorServices copied to clipboard

`Find-Ast -AtCursor` doesn't work inside `param(...)` blocks.

Open mklement0 opened this issue 1 year ago • 0 comments

Prerequisites

  • [X] I have written a descriptive issue title.
  • [X] I have searched all open and closed issues to ensure it has not already been reported.
  • [X] I have read the troubleshooting guide.
  • [X] I am sure this issue is with PowerShell Editor Services itself and does not reproduce in a standalone PowerShell instance, and is not an issue with my editor.
  • [X] I have verified that I am using the latest version of PowerShell Editor Services.
  • [X] If this is a security issue, I have read the security issue reporting guidance.

Summary

In Visual Studio Code with the PowerShell extension installed, placing the cursor inside a param(...) block in or next to a parameter (variable) declaration and calling Find-Ast -AtCursor doesn't recognize the cursor location as a System.Management.Automation.Language.ParameterAst instance and instead returns the entire script (System.Management.Automation.Language.NamedBlockAst)

It currently only works in inline parameter declarations of functions.

PowerShell Version

PowerShell 7.4.0

Editor Version

Visual Studio Code 1.85.1

PowerShell Editor Services Version

3.13.0

Steps to Reproduce

  • Using the PIC (PowerShell Integrated Console) in Visual Studio code with psedit $PROFILE, add the following code to $PROFILE (and ensure that profile loading is enabled):
function Rename-Variable {
  param($Context)

  $variable = Find-Ast -AtCursor
  $variable.GetType().Fullname | Write-Verbose -Verbose
}
  • Then add F2 as a keybinding, via keybindings.json:
{
  "key": "F2",
  "command": "PowerShell.InvokeRegisteredEditorCommand",
  "args": {
    "commandName": "Rename-Variable"
  },
  "when": "editorLangId == 'powershell' && editorTextFocus"
}
  • Start a new session, and create a PowerShell script file with the following content:
param(
  [string] $Foo
)
  • Place the cursor in the middle of $Foo and press F2

You should see System.Management.Automation.Language.ParameterAst, but currently get System.Management.Automation.Language.NamedBlockAst

Visuals

image

Logs

No response

mklement0 avatar Dec 23 '23 20:12 mklement0