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/apps/website/build.js b/apps/website/build.js index f13a831..0d91d10 100644 --- a/apps/website/build.js +++ b/apps/website/build.js @@ -1,7 +1,18 @@ const { spawnSync } = require('child_process'); function runCommand(command, args) { - const result = spawnSync(command, args, { stdio: 'inherit', shell: true }); + const result = spawnSync(command, args, { + stdio: 'inherit', + shell: true, + env: { + ...process.env, + // Suppress the "Browserslist: caniuse-lite is outdated" warning. Although the warning is + // potentially useful, the check is performed in a way that is nondeterministic and can cause + // Rush pipelines to fail. Moreover, the outdated version is often irrelevant and/or nontrivial + // to upgrade. See this thread for details: https://github.com/microsoft/rushstack/issues/2981 + BROWSERSLIST_IGNORE_OLD_DATA: '1' + } + }); if (result.error) { console.log(result.error.message); process.exitCode = 1; 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