kopia lustrzana https://github.com/c9/core
102 wiersze
2.8 KiB
JavaScript
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));
|
|
});
|