From 4ac9bdc838fc8aaa48ada659b130d54367849809 Mon Sep 17 00:00:00 2001 From: Cheng Liu Date: Mon, 26 Aug 2024 22:07:37 -0700 Subject: [PATCH] fix: online completion --- apps/sparo-lib/src/services/ArgvService.ts | 11 ++++----- .../etc/sparo-top-level-2-completion.txt | 23 +++++++++++++++++++ .../sparo-completion-test/src/start-test.ts | 5 ++++ 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 build-tests/sparo-completion-test/etc/sparo-top-level-2-completion.txt diff --git a/apps/sparo-lib/src/services/ArgvService.ts b/apps/sparo-lib/src/services/ArgvService.ts index 1ba1bc3..de9c5db 100644 --- a/apps/sparo-lib/src/services/ArgvService.ts +++ b/apps/sparo-lib/src/services/ArgvService.ts @@ -108,10 +108,7 @@ export class ArgvService { const finalCommandNameSet: Set = new Set(finalCommands.map((x) => x.name)); const userInputCmdName: string = argv._[1] || ''; - if (current.includes('sparo')) { - // top level completion - done(finalCommands.map(({ name, description }) => `${name}:${description}`)); - } else if (finalCommandNameSet.has(userInputCmdName)) { + if (finalCommandNameSet.has(userInputCmdName)) { switch (current) { case 'add': { done(this._getFileCompletions()); @@ -159,14 +156,14 @@ export class ArgvService { break; } } - } else if (current) { + } else { + const prefix: string = current === 'sparo' ? '' : current; done( finalCommands - .filter(({ name }) => name.startsWith(current)) + .filter(({ name }) => name.startsWith(prefix)) .map(({ name, description }) => `${name}:${description}`) ); } - done([]); }; private _getFileCompletions(partial: string = ''): string[] { diff --git a/build-tests/sparo-completion-test/etc/sparo-top-level-2-completion.txt b/build-tests/sparo-completion-test/etc/sparo-top-level-2-completion.txt new file mode 100644 index 0000000..e45eebe --- /dev/null +++ b/build-tests/sparo-completion-test/etc/sparo-top-level-2-completion.txt @@ -0,0 +1,23 @@ +Running "sparo --get-yargs-completions sparo ": +auto-config:Automatic setup optimized git config +list-profiles:List all available profiles or query profiles that contain the specified project name +init-profile:Initialize a new profile. +clone:Clone a repository into a new directory +checkout:Updates files in the working tree to match the version in the index or the specified tree. If no pathspec was given, git checkout will also update HEAD to set the specified branch as the current branch. +fetch:fetch remote branch to local +pull:Incorporates changes from a remote repository into the current branch. +git-clone:original git clone command +git-checkout:original git checkout command +git-fetch:original git fetch command +git-pull:original git pull command +add:add file contents to the index +branch:list, create, or delete branches +commit:record changes to the repository +diff:show changes between commits, commit and working tree, etc +log:show commit logs +merge:join two or more development histories together +push:update remote refs along with associated objects +rebase:forward-port local commits to the updated upstream head +reset:reset current HEAD to the specified state +restore:restore working tree files +status:show the working tree status diff --git a/build-tests/sparo-completion-test/src/start-test.ts b/build-tests/sparo-completion-test/src/start-test.ts index 948ad08..72a43f2 100644 --- a/build-tests/sparo-completion-test/src/start-test.ts +++ b/build-tests/sparo-completion-test/src/start-test.ts @@ -25,6 +25,11 @@ export async function runAsync(runScriptOptions: IRunScriptOptions): Promise