Skip to content

Commit

Permalink
fix(completion): Avoid default command and recommendations during com…
Browse files Browse the repository at this point in the history
…pletion (#1123)
  • Loading branch information
evocateur authored and bcoe committed May 10, 2018
1 parent f13ebf4 commit 036e7c5
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 5 deletions.
31 changes: 31 additions & 0 deletions test/completion.js
Expand Up @@ -26,6 +26,37 @@ describe('Completion', () => {
r.logs.should.include('foo')
})

it('avoids interruption from command recommendations', () => {
const r = checkUsage(() =>
yargs(['./completion', '--get-yargs-completions', './completion', 'a'])
.command('apple', 'fruit')
.command('aardvark', 'animal')
.recommendCommands()
.completion()
.argv
)

r.errors.should.deep.equal([])
r.logs.should.include('apple')
r.logs.should.include('aardvark')
})

it('avoids interruption from default command', () => {
const r = checkUsage(() =>
yargs(['./usage', '--get-yargs-completions', './usage', ''])
.usage('$0 [thing]', 'skipped', subYargs => {
subYargs.command('aardwolf', 'is a thing according to google')
})
.command('aardvark', 'animal')
.completion()
.argv
)

r.errors.should.deep.equal([])
r.logs.should.not.include('aardwolf')
r.logs.should.include('aardvark')
})

it('avoids repeating already included commands', () => {
const r = checkUsage(() => yargs(['./completion', '--get-yargs-completions', 'apple'])
.command('foo', 'bar')
Expand Down
13 changes: 8 additions & 5 deletions yargs.js
Expand Up @@ -1036,8 +1036,11 @@ function Yargs (processArgs, cwd, parentRequire) {
argv[helpOpt] = true
}
}

const handlerKeys = command.getCommands()
const skipDefaultCommand = argv[helpOpt] && (handlerKeys.length > 1 || handlerKeys[0] !== '$0')
const requestCompletions = completion.completionKey in argv
const skipRecommendation = argv[helpOpt] || requestCompletions
const skipDefaultCommand = skipRecommendation && (handlerKeys.length > 1 || handlerKeys[0] !== '$0')

if (argv._.length) {
if (handlerKeys.length) {
Expand All @@ -1064,13 +1067,13 @@ function Yargs (processArgs, cwd, parentRequire) {

// recommend a command if recommendCommands() has
// been enabled, and no commands were found to execute
if (recommendCommands && firstUnknownCommand && !argv[helpOpt]) {
if (recommendCommands && firstUnknownCommand && !skipRecommendation) {
validation.recommendCommands(firstUnknownCommand, handlerKeys)
}
}

// generate a completion script for adding to ~/.bashrc.
if (completionCommand && ~argv._.indexOf(completionCommand) && !argv[completion.completionKey]) {
if (completionCommand && ~argv._.indexOf(completionCommand) && !requestCompletions) {
if (exitProcess) setBlocking(true)
self.showCompletionScript()
self.exit(0)
Expand All @@ -1082,7 +1085,7 @@ function Yargs (processArgs, cwd, parentRequire) {

// we must run completions first, a user might
// want to complete the --help or --version option.
if (completion.completionKey in argv) {
if (requestCompletions) {
if (exitProcess) setBlocking(true)

// we allow for asynchronous completions,
Expand Down Expand Up @@ -1130,7 +1133,7 @@ function Yargs (processArgs, cwd, parentRequire) {

// if we're executed via bash completion, don't
// bother with validation.
if (!argv[completion.completionKey]) {
if (!requestCompletions) {
self._runValidation(argv, aliases, {}, parsed.error)
}
}
Expand Down

0 comments on commit 036e7c5

Please sign in to comment.