Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Meagher <evan.meagher@gmail.com>2010-11-28 09:10:05 +0300
committerisaacs <i@izs.me>2010-12-03 01:33:18 +0300
commit299a9a43091fb217a2f18d1ee4ecadb4bc0b8245 (patch)
tree0529214ccfeb6da4e6b27fd422cacc47f42a5475
parentc182cff972173a8b5e212bea5abe9445c1ff7c36 (diff)
Increase tab-completion coverage.
-rw-r--r--lib/activate.js5
-rw-r--r--lib/cache.js13
-rw-r--r--lib/completion.js41
-rw-r--r--lib/config.js14
-rw-r--r--lib/deactivate.js13
-rw-r--r--lib/deprecate.js5
-rw-r--r--lib/edit.js5
-rw-r--r--lib/help.js16
-rw-r--r--lib/install.js5
-rw-r--r--lib/outdated.js5
-rw-r--r--lib/owner.js15
-rw-r--r--lib/rebuild.js5
-rw-r--r--lib/restart.js5
-rw-r--r--lib/start.js6
-rw-r--r--lib/stop.js4
-rw-r--r--lib/tag.js5
-rw-r--r--lib/test.js4
-rw-r--r--lib/uninstall.js6
-rw-r--r--lib/unpublish.js5
-rw-r--r--lib/update.js5
-rw-r--r--lib/view.js29
21 files changed, 184 insertions, 27 deletions
diff --git a/lib/activate.js b/lib/activate.js
index ff175723d..2605f3e53 100644
--- a/lib/activate.js
+++ b/lib/activate.js
@@ -25,6 +25,11 @@ module.exports = activate
activate.usage =
"npm activate <name>@<version> [<name>@<version> ...]"
+activate.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, true, true, cb)
+}
+
function activate (args, cb) {
// make sure package and version exists.
// If there's already an active version, then deactivate it.
diff --git a/lib/cache.js b/lib/cache.js
index 6b0b574b2..9d40c51ec 100644
--- a/lib/cache.js
+++ b/lib/cache.js
@@ -55,6 +55,19 @@ cache.usage = "npm cache add <tarball file>"
+ "\nnpm cache ls [<path>]"
+ "\nnpm cache clean [<pkg>[@<version>]]"
+cache.completion = function(args, index, cb) {
+ var remotePkgs = require("./utils/completion/remote-packages")
+ , getCompletions = require("./utils/completion/get-completions")
+ , subcmdList = ["add", "clean", "ls"]
+ , subcmd = args[0] || ""
+
+ if (subcmdList.indexOf(subcmd) !== -1) {
+ if (subcmd === "add") {
+ remotePkgs(args.slice(1), index - 1, true, false, false, cb)
+ }
+ } else cb(null, getCompletions(subcmd, subcmdList))
+}
+
function cache (args, cb) {
var cmd = args.shift()
switch (cmd) {
diff --git a/lib/completion.js b/lib/completion.js
index 5bca58c91..2217a4304 100644
--- a/lib/completion.js
+++ b/lib/completion.js
@@ -2,31 +2,34 @@
module.exports = completion
completion.usage = "Not intended to be used directly.\n"
- + "See the npm-completion.sh script in the npm source directory"
+ + "See the npm-completion.sh script in the npm "
+ + "source directory"
var npm = require("../npm")
+ , getCompletions = require("./utils/completion/get-completions")
+ , containsSingleMatch = require("./utils/completion/contains-single-match")
, output = require("./utils/output")
+ , index = npm.config.get("comp-cword") || process.env.COMP_CWORD
function completion (args, cb_) {
- var index = npm.config.get("comp-cword") || process.env.COMP_CWORD || args.length - 1
- , c = args[index] || ""
- , p = args[index - 1]
- , outfd = npm.config.get("outfd")
- , m = []
+ var cmd = args[1] || ""
+ , complFullList = getCompletions(cmd, npm.fullList, true)
- // TODO: Need to have command-specific functions or something for completion.
- // so, if you do "npm install <TAB>", then it should show a list of the package
- // names in the registry, and "npm install foo<TAB>" should show all the install
- // targets for foo.
- // Especially, stuff like "npm config" that have sub-commands should get
- // completion love.
+ function cb (er, list) {
+ if (er) return cb_(er)
+ outputCompletions(list, cb_)
+ }
- npm.fullList.forEach(function (f) {
- // console.error(f)
- var a = npm.deref(f)
- if (m.indexOf(a) === -1 && f.indexOf(c) === 0) m.push(a)
- })
- function cb () { cb_(m.length ? null : "no match for "+JSON.stringify(c), m) }
- output.write(outfd, m, false, cb)
+ if (index > 1 || (complFullList.indexOf(cmd) !== -1 &&
+ containsSingleMatch(cmd, complFullList))) {
+ var subargs = args.slice(2)
+ // TODO: bundle
+ npm.commands[npm.deref(cmd)].completion(subargs, index, cb)
+ } else cb(null, complFullList)
}
+function outputCompletions (list, cb_) {
+ var outfd = npm.config.get("outfd")
+ function cb () { cb_(list.length ? null : "no match found", list) }
+ output.write(outfd, list, false, cb)
+}
diff --git a/lib/config.js b/lib/config.js
index c528697bc..8e47e017f 100644
--- a/lib/config.js
+++ b/lib/config.js
@@ -7,6 +7,20 @@ config.usage = "npm config set <key> <value>"
+ "\nnpm config list"
+ "\nnpm config edit"
+config.completion = function(args, index, cb) {
+ var getCompletions = require("./utils/completion/get-completions")
+ , subcmdList = ["set", "get", "ls", "delete", "edit"]
+ , takeKeys = ["set", "get", "delete"]
+ , subcmd = args[0] || ""
+ , key = args[1] || ""
+
+ if (subcmdList.indexOf(subcmd) !== -1) {
+ if (takeKeys.indexOf(subcmd) !== -1 && ini.keys.indexOf(key) === -1) {
+ cb(null, getCompletions(key, ini.keys))
+ }
+ } else cb(null, getCompletions(subcmd, subcmdList))
+}
+
var ini = require("./utils/ini")
, log = require("./utils/log")
, npm = require("../npm")
diff --git a/lib/deactivate.js b/lib/deactivate.js
index 6b9643f84..58efc1465 100644
--- a/lib/deactivate.js
+++ b/lib/deactivate.js
@@ -1,4 +1,13 @@
+module.exports = deactivate
+
+deactivate.usage = "npm deactivate <pkg>"
+
+deactivate.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, false, false, cb)
+}
+
var mkdir = require("./utils/mkdir-p")
, npm = require("../npm")
, fs = require("./utils/graceful-fs")
@@ -11,10 +20,6 @@ var mkdir = require("./utils/mkdir-p")
, asyncMap = require("./utils/async-map")
, loadPackageDefaults = require("./utils/load-package-defaults")
-module.exports = deactivate
-
-deactivate.usage = "npm deactivate <pkg>"
-
function deactivate (args, cb) {
var rb = npm.ROLLBACK
npm.ROLLBACK = true
diff --git a/lib/deprecate.js b/lib/deprecate.js
index b42d2c012..bceb95451 100644
--- a/lib/deprecate.js
+++ b/lib/deprecate.js
@@ -3,6 +3,11 @@ module.exports = deprecate
deprecate.usage = "npm deprecate <pkg>[@<version>] <message>"
+deprecate.completion = function (args, index, cb) {
+ var remotePkgs = require("./utils/completion/remote-packages")
+ remotePkgs(args, index, true, false, false, cb)
+}
+
var registry = require("./utils/registry")
, semver = require("./utils/semver")
, log = require("./utils/log")
diff --git a/lib/edit.js b/lib/edit.js
index 27b862c75..6c978d12f 100644
--- a/lib/edit.js
+++ b/lib/edit.js
@@ -4,6 +4,11 @@
module.exports = edit
edit.usage = "npm edit <pkg>[@<version>]"
+edit.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, true, false, cb)
+}
+
var npm = require("../npm")
, exec = require("./utils/exec")
, path = require("path")
diff --git a/lib/help.js b/lib/help.js
index db166b1b5..c554bed69 100644
--- a/lib/help.js
+++ b/lib/help.js
@@ -1,12 +1,24 @@
+module.exports = help
+
+help.completion = function (args, index, cb) {
+ if (index < 3) {
+ var getCompletions = require("./utils/completion/get-completions")
+ , section = args[0] || ""
+
+ getSections(function (er, sectionList) {
+ if (er) return cb(er)
+ cb(null, getCompletions(section, sectionList))
+ })
+ }
+}
+
var fs = require("./utils/graceful-fs")
, path = require("path")
, exec = require("./utils/exec")
, npm = require("../npm")
, output = require("./utils/output")
-module.exports = help
-
function help (args, cb) {
var section = args.shift()
if (section === "help") {
diff --git a/lib/install.js b/lib/install.js
index bed5dcce8..e803d8959 100644
--- a/lib/install.js
+++ b/lib/install.js
@@ -23,6 +23,11 @@ install.usage = "npm install <tarball file>"
+ "\n\nCan specify one or more: npm install ./foo.tgz bar@stable /some/folder"
+ "\nInstalls '.' if no argument supplied"
+install.completion = function (args, index, cb) {
+ var remotePkgs = require("./utils/completion/remote-packages")
+ remotePkgs(args, index, true, true, false, cb)
+}
+
var registry = require("./utils/registry")
, npm = require("../npm")
, readInstalled = require("./utils/read-installed")
diff --git a/lib/outdated.js b/lib/outdated.js
index 7d421ab63..dcf5b721a 100644
--- a/lib/outdated.js
+++ b/lib/outdated.js
@@ -15,6 +15,11 @@ module.exports = outdated
outdated.usage = "npm outdated [<pkg> [<pkg> ...]]"
+outdated.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, false, true, cb)
+}
+
var readInstalled = require("./utils/read-installed")
, chain = require("./utils/chain")
, log = require("./utils/log")
diff --git a/lib/owner.js b/lib/owner.js
index 2c73bb341..92939bc49 100644
--- a/lib/owner.js
+++ b/lib/owner.js
@@ -5,6 +5,21 @@ owner.usage = "npm owner add <username> <pkg>"
+ "\nnpm owner rm <username> <pkg>"
+ "\nnpm owner ls <pkg>"
+owner.completion = function(args, index, cb) {
+ var remotePkgs = require("./utils/completion/remote-packages")
+ , getCompletions = require("./utils/completion/get-completions")
+ , subcmdList = ["add", "ls", "rm"]
+ , subcmd = args[0] || ""
+
+ if (subcmdList.indexOf(subcmd) !== -1) {
+ if (subcmd === "ls") {
+ remotePkgs(args.slice(1), index - 1, false, false, false, cb)
+ } else if (index == 4 && (subcmd === "add" || subcmd === "rm")) {
+ remotePkgs(args.slice(2), index - 2, false, false, false, cb)
+ }
+ } else cb(null, getCompletions(subcmd, subcmdList))
+}
+
var registry = require("./utils/registry")
, get = registry.request.GET
, put = registry.request.PUT
diff --git a/lib/rebuild.js b/lib/rebuild.js
index 9e7a6e92d..a0d26d95d 100644
--- a/lib/rebuild.js
+++ b/lib/rebuild.js
@@ -14,6 +14,11 @@ var readInstalled = require("./utils/read-installed")
rebuild.usage = "npm rebuild [<name>[@<version>] [name[@<version>] ...]]"
+rebuild.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, true, true, cb)
+}
+
function rebuild (args, cb) {
log.verbose(args, "rebuild")
lookupArgs(args, function (er, args) {
diff --git a/lib/restart.js b/lib/restart.js
index 426e5789b..eec0cbc3c 100644
--- a/lib/restart.js
+++ b/lib/restart.js
@@ -9,6 +9,11 @@ var lifecycle = require("./utils/lifecycle")
restart.usage = "npm restart <name>[@<version>] [<name>[@<version>] ...]"
+restart.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, true, true, cb)
+}
+
function restart (args, cb) {
restartCmd(args, function (er) {
if (!er) return cb()
diff --git a/lib/start.js b/lib/start.js
index 070a1ad51..4ca56f411 100644
--- a/lib/start.js
+++ b/lib/start.js
@@ -1,4 +1,8 @@
module.exports = require("./utils/lifecycle").cmd("start")
-module.exports.usage = "npm start <name>[@<version>] [<name>[@<version>] ...]" \ No newline at end of file
+module.exports.usage = "npm start <name>[@<version>] [<name>[@<version>] ...]"
+module.exports.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, true, true, cb)
+} \ No newline at end of file
diff --git a/lib/stop.js b/lib/stop.js
index 2e3a42e4a..915b5b514 100644
--- a/lib/stop.js
+++ b/lib/stop.js
@@ -1,3 +1,7 @@
module.exports = require("./utils/lifecycle").cmd("stop")
module.exports.usage = "npm stop <name>[@<version>] [<name>[@<version>] ...]"
+module.exports.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, true, true, cb)
+} \ No newline at end of file
diff --git a/lib/tag.js b/lib/tag.js
index e50b97092..850760693 100644
--- a/lib/tag.js
+++ b/lib/tag.js
@@ -5,6 +5,11 @@
module.exports = tag
tag.usage = "npm tag <project>@<version> <tag>"
+tag.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, true, false, cb)
+}
+
function tag (args, cb) {
var thing = (args.shift() || "").split("@")
, project = thing.shift()
diff --git a/lib/test.js b/lib/test.js
index 20a0e6070..572196ffc 100644
--- a/lib/test.js
+++ b/lib/test.js
@@ -1,3 +1,7 @@
module.exports = require("./utils/lifecycle").cmd("test")
module.exports.usage = "npm test <name>[@<version>] [<name>[@<version>] ...]"
+module.exports.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, true, true, cb)
+} \ No newline at end of file
diff --git a/lib/uninstall.js b/lib/uninstall.js
index 9ac19670d..7fe64b961 100644
--- a/lib/uninstall.js
+++ b/lib/uninstall.js
@@ -8,6 +8,11 @@ module.exports = uninstall
uninstall.usage = "npm uninstall <name>[@<version> [<name>[@<version>] ...]"
+ "\nnpm rm <name>[@<version> [<name>[@<version>] ...]"
+uninstall.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, true, true, cb)
+}
+
var rm = require("./utils/rm-rf")
, fs = require("./utils/graceful-fs")
, log = require("./utils/log")
@@ -17,7 +22,6 @@ var rm = require("./utils/rm-rf")
, chain = require("./utils/chain")
, lifecycle = require("./utils/lifecycle")
, semver = require("./utils/semver")
- , readInstalled = require("./utils/read-installed")
, mkdir = require("./utils/mkdir-p")
, asyncMap = require("./utils/async-map")
, loadPackageDefaults = require("./utils/load-package-defaults")
diff --git a/lib/unpublish.js b/lib/unpublish.js
index 0ef916e21..aa7b025a7 100644
--- a/lib/unpublish.js
+++ b/lib/unpublish.js
@@ -7,6 +7,11 @@ var registry = require("./utils/registry")
unpublish.usage = "npm unpublish <project>[@<version>]"
+unpublish.completion = function (args, index, cb) {
+ var remotePkgs = require("./utils/completion/remote-packages")
+ remotePkgs(args, index, true, false, false, cb)
+}
+
function unpublish (args, cb) {
var thing = args.shift().split("@")
, project = thing.shift()
diff --git a/lib/update.js b/lib/update.js
index 6b7895f3a..f9102416f 100644
--- a/lib/update.js
+++ b/lib/update.js
@@ -35,6 +35,11 @@ module.exports = update
update.usage = "npm update [pkg]"
+update.completion = function (args, index, cb) {
+ var installedPkgs = require("./utils/completion/installed-packages")
+ installedPkgs(args, index, false, true, cb)
+}
+
var chain = require("./utils/chain")
, log = require("./utils/log")
, npm = require("../npm")
diff --git a/lib/view.js b/lib/view.js
index 3b3410834..1aabd0f90 100644
--- a/lib/view.js
+++ b/lib/view.js
@@ -3,6 +3,35 @@
module.exports = view
view.usage = "npm view pkg[@version] [<field>[.subfield]...]"
+view.completion = function (args, index, cb) {
+ var registry = require("./utils/registry")
+ , getCompletions = require("./utils/completion/get-completions")
+ , remotePkgs = require("./utils/completion/remote-packages")
+ , name = args[0] || ""
+ , key = args[1] || ""
+
+ if (index < 3) remotePkgs(args, index, true, false, false, cb)
+ else if (index == 3) {
+ var pieces = name.split("@")
+ registry.get(pieces[0], pieces[1], function (er, d) {
+ var cur = d.versions ? d.versions[d["dist-tags"].latest] : d
+ , path = key.split(".")
+ , options
+ if (path.length > 1) {
+ for (var i = 0; i < path.length; i++) {
+ if (!cur) return cb()
+ if (!cur[path[i]]) break
+ else cur = cur[path[i]]
+ }
+ options = Object.keys(cur).map(function (e) {
+ return path.slice(0, path.length - 1).join(".") + "." + e
+ })
+ } else options = Object.keys(cur).concat(["ctime","mtime","maintainers"])
+ cb(null, getCompletions(key, options))
+ })
+ }
+}
+
var registry = require("./utils/registry")
, ini = require("./utils/ini-parser")
, log = require("./utils/log")