Merge pull request #85 from tiktok/fix-completion

Fix completion
This commit is contained in:
Cheng Liu 2024-08-27 10:42:34 -07:00 committed by GitHub
commit fa688a5253
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 54 additions and 8 deletions

View file

@ -108,10 +108,7 @@ export class ArgvService {
const finalCommandNameSet: Set<string> = new Set<string>(finalCommands.map((x) => x.name)); const finalCommandNameSet: Set<string> = new Set<string>(finalCommands.map((x) => x.name));
const userInputCmdName: string = argv._[1] || ''; const userInputCmdName: string = argv._[1] || '';
if (current.includes('sparo')) { if (finalCommandNameSet.has(userInputCmdName)) {
// top level completion
done(finalCommands.map(({ name, description }) => `${name}:${description}`));
} else if (finalCommandNameSet.has(userInputCmdName)) {
switch (current) { switch (current) {
case 'add': { case 'add': {
done(this._getFileCompletions()); done(this._getFileCompletions());
@ -159,14 +156,14 @@ export class ArgvService {
break; break;
} }
} }
} else if (current) { } else {
const prefix: string = current === 'sparo' ? '' : current;
done( done(
finalCommands finalCommands
.filter(({ name }) => name.startsWith(current)) .filter(({ name }) => name.startsWith(prefix))
.map(({ name, description }) => `${name}:${description}`) .map(({ name, description }) => `${name}:${description}`)
); );
} }
done([]);
}; };
private _getFileCompletions(partial: string = ''): string[] { private _getFileCompletions(partial: string = ''): string[] {

View file

@ -1,7 +1,18 @@
const { spawnSync } = require('child_process'); const { spawnSync } = require('child_process');
function runCommand(command, args) { 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) { if (result.error) {
console.log(result.error.message); console.log(result.error.message);
process.exitCode = 1; process.exitCode = 1;

View file

@ -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

View file

@ -25,6 +25,11 @@ export async function runAsync(runScriptOptions: IRunScriptOptions): Promise<voi
name: 'sparo-top-level-completion', name: 'sparo-top-level-completion',
args: prefixArgs.concat([]) args: prefixArgs.concat([])
}, },
{
kind: 'sparo-command',
name: 'sparo-top-level-2-completion',
args: prefixArgs.concat([''])
},
// auto-config // auto-config
{ {
kind: 'sparo-command', kind: 'sparo-command',

View file

@ -0,0 +1,10 @@
{
"changes": [
{
"packageName": "sparo",
"comment": "Fix an edge case for shell completion",
"type": "none"
}
],
"packageName": "sparo"
}