Package Exports
- commander-completion
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (commander-completion) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
commander-completion 
Shell completion for Commander.js
This was built as part of foundry, a CLI utility for making releases painless.
$ npm pub|
$ npm publish |
Getting Started
Install the module with: npm install commander-completion
var program = require('commander-completion')(require('commander'));
program.name = 'git';
program
.command('checkout')
.completion(function (info, cb) {
// For `git checkout dev/|`
// info.words.value = ['git', 'checkout', 'dev/']
// info.word.partialLeft = 'dev/'
getGitBranches(function (err, allBranches) {
if (err) {
return cb(err);
}
var branches = allBranches.filter(function (branch) {
// 'chec' === 'chec' (from 'checkout')
return partialLeftWord === branch.substr(0, partialLeftWord.length);
});
cb(null, branches);
});
})
.action(function () {
// Checkout a git branch
});
program
.command('completion')
.action(function () {
program.completion({
line: process.env.COMP_LINE,
cursor: process.env.COMP_POINT
});
});
// Parse in arguments (e.g. `COMP_LINE="git che" COMP_POINT=7 git completion`)
// Logs: ['checkout']
program.parse(process.argv);
Documentation
commander-completion
exposes a mixin function, mixinCommanderCompletion
, as its module.exports
. After we mixin to Commander.js
, we add more methods onto command()
objects.
Currently, you are required to specify the name
property of your program
.
mixinCommanderCompletion(commander)
Add new completion methods to Commander.js' Command
objects
- commander
Object
- Instance ofCommander.js
Command.completion(completionFn)
New method available on Commander.js Commands
(e.g. program.command('remote').completion(completionFn)
)
Save completion function to call when completing the current command
- completionFn
Function
- Error-first callback that will callback with matches -completion
should have a signature offunction (info, cb)
- info
Object
- Collection of distilled information about original input- The format will be the returned value from twolfson/line-info
- cb
Function
- Error-first callback function to run with matchescb
has a signature offunction (err, results)
- info
Command.complete(params, cb)
New method available on Commander.js Commands
(e.g. program.command('remote').complete(params, cb)
)
Get completion results for current command
- params
Object
- Information similar to that passed in bybash's
tab completion- line
String
- Input to complete against (similar toCOMP_LINE
) - cursor
Number
- Index withinline
of the cursor (similar toCOMP_POINT
)
- line
- cb
Function
- Optional error-first callback function that receives matchescb
should have a signature offunction (err, results)
- If
cb
is not provided,err
will be thrown andresults
will be printed tostdout
viaconsole.log
Examples
An full example of git
would be
var program = require('commander-completion')(require('commander'));
program.name = 'git';
program
// `git checkout master`
.command('checkout')
.option('-b', 'Checkout new branch') // `git checkout -b dev/hai`
.completion(function (info, cb) {
// Get git branches and find matches
})
.action(function () {
// Checkout a `git` branch
});
var remote = program.command('remote');
remote
// `git remote add origin git@github.com:...`
// No possible tab completion here
.command('add')
.action(function () {
// Add a `git` remote
});
remote
// `git remote rm origin`
.command('rm')
.completion(function (info, cb) {
// Get git branches and find matches
})
.action(function () {
// Remove a `git` remote
});
program.complete({
// `git remo|add`
line: 'git remoadd',
cursor: 8
}, function (err, results) {
results; // ['remote']
});
program.complete({
// `git remote |`
line: 'git remote ',
cursor: 11
}, function (err, results) {
results; // ['add', 'rm']
});
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint via npm run lint
and test via npm test
.
Donating
Support this project and others by twolfson via donations.
http://twolfson.com/support-me
Unlicense
As of Dec 16 2013, Todd Wolfson has released this repository and its contents to the public domain.
It has been released under the UNLICENSE.