mirror of
https://github.com/pnpm/pnpm.git
synced 2026-04-27 18:46:18 -04:00
fix(shell-completion): give correct suggestions when command line ends with a space (#10607)
* fix(shell-completion): give correct suggestions when command line ends with a space fixes an issue where if you tried to complete any part of any subcommand with a space before <TAB> (eg: `pnpm run <TAB>`, `pnpm rm react <TAB>`), pnpm would give you suggestions for the root command, as if you had typed `pnpm <TAB>` close #7964 close #5426 --------- Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
5
.changeset/young-radios-fly.md
Normal file
5
.changeset/young-radios-fly.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/plugin-commands-completion": patch
|
||||
---
|
||||
|
||||
Give correct suggestions when command line ends with a space. #[10607](https://github.com/pnpm/pnpm/pull/10607/changes)
|
||||
@@ -26,10 +26,7 @@ export function createCompletionServer (
|
||||
const env = tabtab.parseEnv(process.env)
|
||||
if (!env.complete) return
|
||||
|
||||
// Parse only words that are before the pointer and finished.
|
||||
// Finished means that there's at least one space between the word and pointer
|
||||
const finishedArgv = env.partial.slice(0, -env.lastPartial.length)
|
||||
const inputArgv = splitCmd(finishedArgv).slice(1)
|
||||
const inputArgv = splitCmd(stripPartialWord(env)).slice(1)
|
||||
// We cannot autocomplete what a user types after "pnpm test --"
|
||||
if (inputArgv.includes('--')) return
|
||||
const { params, options, cmd } = await opts.parseCliArgs(inputArgv)
|
||||
@@ -48,3 +45,14 @@ export function createCompletionServer (
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the portion of the command line that consists of fully typed words,
|
||||
*/
|
||||
function stripPartialWord (env: { partial: string, lastPartial: string }): string {
|
||||
if (env.lastPartial.length > 0) {
|
||||
// stripping any word the user is currently typing.
|
||||
return env.partial.slice(0, -env.lastPartial.length)
|
||||
}
|
||||
return env.partial
|
||||
}
|
||||
Reference in New Issue
Block a user