mirror of
https://github.com/j178/prek.git
synced 2026-03-29 09:29:14 +02:00
Fix PowerShell completion instruction syntax (#1568)
The PowerShell completion instruction used bash-style environment variable syntax (`COMPLETE=powershell prek`), which fails in PowerShell with `CommandNotFoundException`. ## Changes - Updated `docs/installation.md` to use PowerShell-native syntax for setting environment variables **Before:** ```powershell Add-Content -Path $PROFILE -Value '(COMPLETE=powershell prek) | Out-String | Invoke-Expression' ``` **After:** ```powershell Add-Content -Path $PROFILE -Value '$env:COMPLETE = "powershell"; prek | Out-String | Invoke-Expression; Remove-Item Env:\COMPLETE' ``` The fix sets `$env:COMPLETE` using PowerShell syntax, invokes `prek` to generate the completion script, and cleans up the temporary environment variable. <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>Powershell completion script results in CommandNotFoundException</issue_title> > <issue_description>### Summary > > Following the instructions for enabling Powershell shell completions, I ran `Add-Content -Path $PROFILE -Value '(COMPLETE=powershell prek) | Out-String | Invoke-Expression'`. This did what I expected it to: it added a line to my $PROFILE, `(COMPLETE=powershell prek) | Out-String | Invoke-Expression`. > > However, also as expected, that line results in this error when the profile loads (and, indeed, if one types that string at the prompt: > ``` > COMPLETE=powershell : The term 'COMPLETE=powershell' is not recognized as the name of a cmdlet, function, script file, or operable > program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. > At C:\Users\Patrick\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1:357 char:2 > + (COMPLETE=powershell prek) | Out-String | Invoke-Expression > + ~~~~~~~~~~~~~~~~~~~ > + CategoryInfo : ObjectNotFound: (COMPLETE=powershell:String) [], CommandNotFoundException > + FullyQualifiedErrorId : CommandNotFoundException > ``` > > If the problem isn't apparent, perhaps someone can tell me what it's designed to do so I can help? As a user of both Powershell & unix shells, I wasn't able to figure out what the command is that we want Powershell to run after glancing at some of the other completion scripts. > > ### Platform > > Windows 10 x86_64 > > ### Version > > prek 0.3.1 (bc142a25f2026-01-31) > > ### .pre-commit-config.yaml > > not relevant > > ### Log file > > 2026-02-05T03:33:51.720707Z DEBUG prek: 0.3.1 (bc142a25f2026-01-31) > 2026-02-05T03:33:51.720806Z DEBUG Args: ["c:\\users\\username \\.local\\bin\\prek.exe"] > 2026-02-05T03:33:51.803464Z TRACE get_root: close time.busy=82.6ms time.idle=5.10µs</issue_description> > > <agent_instructions>Fix the powershell completion instruction in installation.md: the style of running command with specified env var `COMPLETE=powershell prek` is bash-style, it does not work in powershell. Use something like `$env:COMPLETE = "powershell"; prek | Out-String | Invoke-Expression; Remove-Item Env:\COMPLETE` > </agent_instructions> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > <comment_new><author>@j178</author><body> > Thanks for the report! That instruction isn’t correct. Could you try adding this to your $PROFILE? > > ```pwsh > $env:COMPLETE = "powershell" > prek | Out-String | Invoke-Expression > Remove-Item Env:COMPLETE' > ```</body></comment_new> > </comments> > </details> <!-- START COPILOT CODING AGENT SUFFIX --> - Fixes j178/prek#1566 <!-- START COPILOT CODING AGENT TIPS --> --- 💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey). --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: j178 <10510431+j178@users.noreply.github.com>
This commit is contained in:
@@ -130,7 +130,7 @@ To enable shell autocompletion for prek commands, run one of the following:
|
||||
=== "PowerShell"
|
||||
|
||||
```powershell
|
||||
Add-Content -Path $PROFILE -Value '(COMPLETE=powershell prek) | Out-String | Invoke-Expression'
|
||||
Add-Content -Path $PROFILE -Value '$env:COMPLETE = "powershell"; prek | Out-String | Invoke-Expression; Remove-Item Env:\COMPLETE'
|
||||
```
|
||||
|
||||
Then restart your shell or source the config file.
|
||||
|
||||
Reference in New Issue
Block a user