c9-core/node_modules/tern/bin/condense

102 wiersze
2.8 KiB
JavaScript

#!/usr/bin/env node
var tern = require("../lib/tern"), condense = require("../lib/condense");
var path = require("path"), fs = require("fs");
require("../plugin/doc_comment");
var localDir = process.cwd(), ourDir = path.resolve(__dirname, "..");
var spans = true;
function usage(exit) {
console.error("usage: " + process.argv[1] + " [--name name] [--plugin name]* [--def name]* [+extrafile.js]* [file.js]+");
if (exit != null) process.exit(exit);
}
function findFile(file, where, ext) {
if (file.slice(file.length - ext.length) != ext) file += ext;
var local = path.resolve(localDir, file);
if (fs.existsSync(local)) return local;
var our = path.resolve(path.resolve(ourDir, where), file);
if (fs.existsSync(our)) return our;
}
var defs = [], plugins = {doc_comment: {}}, files = [], name;
function loadDef(name) {
var found = findFile(name, "defs", ".json");
if (!found) {
console.error("Could not find def file " + name);
process.exit(1);
}
defs.push(JSON.parse(fs.readFileSync(found, "utf8")));
}
loadDef("ecma5");
function loadPlugin(name, val) {
var found = findFile(name, "plugin", ".js");
if (!found) {
try {
found = require.resolve("tern-" + name);
} catch (e) {
console.error("Could not find plugin " + name);
process.exit(1);
}
}
var mod = require(found);
if (mod.hasOwnProperty("initialize")) mod.initialize(ourDir);
plugins[path.basename(name, ".js")] = val;
}
for (var i = 2, len = process.argv.length; i < len; ++i) {
var cur = process.argv[i];
if (cur == "--plugin" && i < len - 1) {
var plugin = process.argv[++i], eq = plugin.indexOf("=");
if (eq > -1)
loadPlugin(plugin.slice(0, eq), JSON.parse(plugin.slice(eq + 1)));
else
loadPlugin(plugin, {});
} else if (cur == "--def" && i < len - 1) {
loadDef(process.argv[++i]);
} else if (cur == "--name" && i < len - 1) {
name = process.argv[++i];
} else if (cur == "--no-spans") {
spans = false;
} else if (cur.charAt(0) == "-") {
usage(1);
} else {
files.push(cur);
}
}
var server = new tern.Server({
getFile: function(file) { return fs.readFileSync(path.resolve(localDir, file), "utf8"); },
defs: defs,
plugins: plugins,
debug: true,
projectDir: localDir
});
var origins = [];
for (var i = 0; i < files.length; ++i) {
var file = files[i];
if (file.charAt(0) == "+") {
file = file.slice(1);
} else {
origins.push(file);
if (!name) name = file;
}
if (!fs.existsSync(file)) {
console.error("File " + file + " does not exist");
process.exit(1);
}
server.addFile(file, fs.readFileSync(file, "utf8"));
}
if (!origins.length) usage(1);
server.flush(function(err) {
if (err) throw err;
console.log(JSON.stringify(condense.condense(origins, name, {spans: spans}), null, 2));
});