Skip to content

Commit

Permalink
Check in examples
Browse files Browse the repository at this point in the history
  • Loading branch information
mklabs committed Apr 26, 2016
1 parent 6e15dc6 commit 82de5ef
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 8 deletions.
87 changes: 87 additions & 0 deletions examples/bower-complete/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#! /usr/bin/env node

var fs = require('fs');
var path = require('path');
var read = fs.readSync;
var exists = fs.existsSync

var tabtab = require('../..')();
var parse = require('parse-help');
var exec = require('child_process').exec;
var reg = /^\s+(\w+)\s+(.+)$/gim;
var regline = /^\s+(\w+)\s+(.+)$/i;
var debug = require('../../src/debug')('bower-complete');


function help(cmd, done) {
cmd = cmd || '';
var cache = path.join('/tmp', 'tabtab.' + (cmd || 'help') + '.json');
if (exists(cache)) {
var dt = require(cache);
return done(null, dt);
}

debug('>bower ' + cmd + ' --help');
exec('bower ' + cmd + ' --help', function(err, out) {
if (err) return done(err);
var data = parse(out);
data.commands = out.match(reg).filter(function(line) {
return !(/<command>/).test(line);
}).map(function(m) {
var parts = m.match(regline);
return {
name: parts[1],
description: (parts[2] || 'tabtab').replace(/'/g, ' ')
};
});

fs.writeFileSync(path.join('/tmp/', 'tabtab.' + (cmd || 'help') + '.json'), JSON.stringify(data));
return done(null, data);
});
}


tabtab.on('bower', function(compl, done) {
var line = compl.line;
var last = compl.last;
if (last === 'bower') last = '';

help(last + ' --help', function(err, data) {
if (err) return done(err);

var results = data.commands.concat();
// var results = [];

if (compl.last === 'bower') {
results = results.concat(Object.keys(data.flags).map(function(key) {
var flag = data.flags[key];
return {
name: '--' + key,
description: (flag.description || 'tabtab').replace(/'/g, ' ')
};
}));

results = results.concat(Object.keys(data.flags).map(function(key) {
var flag = data.flags[key];
var alias = flag.alias;
if (!alias) return;

return {
name: '-' + flag.alias,
description: (flag.description || 'tabtab').replace(/'/g, ' ')
};
}).filter(function(item) {
return item;
}));

results = results.filter(function(res) {
return !(/Additionally/).test(res.name)
});
}

debug(results);
done(null, results);
});
});

tabtab.start();
12 changes: 12 additions & 0 deletions examples/bower-complete/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "bower-complete",
"version": "1.0.0",
"description": "tabtab completion for bower",
"bin": "index.js",
"scripts": {
"install": "tabtab install --name bower --completer bower-complete"
},
"dependencies": {
"parse-help": "^0.1.0"
}
}
11 changes: 9 additions & 2 deletions lib/complete.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,16 @@ class Complete extends EventEmitter {
}

completionItem(str) {
if (typeof str !== 'string') return str;

var parts = str.split(':');
var name = parts[0];
var desc = parts.slice(-1)[0];
debug('test:', parts, str);

return {
name: str,
description: 'description for ' + str
name: name,
description: desc || 'tabtab'
};
}

Expand Down
14 changes: 8 additions & 6 deletions scripts/fish.sh
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
###-begin-{pkgname}-completion-###
function _{pkgname}_completion
###-begin-bower-completion-###
function _bower_completion
set cmd (commandline -opc)
set cursor (commandline -C)
set completions (eval env DEBUG="tabtab*" COMP_CWORD="$cmd" COMP_LINE="$cmd" COMP_POINT="$cursor" {completer} completion --json -- $cmd)
echo $cmd > /tmp/debug.log
echo $cursor>> /tmp/debug.log
set completions (eval env DEBUG=\""tabtab*\"" COMP_CWORD=\""$cmd\"" COMP_LINE=\""$cmd\"" COMP_POINT=\""$cursor\"" bower-complete completion --json)

for completion in $completions
set cmd "node -pe \"'$completion'.split(':').join('\n')\""
set parts (eval $cmd)
complete -f -c {pkgname} -a "'$parts[1]'" -d "$parts[2]"
complete -f -c bower -a "'$parts[1]'" -d "$parts[2]"
echo $parts[1]
end
end

complete -d 'tabtab' -f -c {pkgname} -a "(eval _{pkgname}_completion)"
###-end-{pkgname}-completion-###
complete -d 'tabtab' -c bower -a "(eval _bower_completion)"
###-end-bower-completion-###

0 comments on commit 82de5ef

Please sign in to comment.