c9-core/plugins/c9.ide.language.javascript..../architect_resolver.js

63 wiersze
2.0 KiB
JavaScript

/**
* Architect module resolver for Cloud9 source code,
* using runtime information from the running Cloud9.
* It's not perfect but it's simple, avoids scanning all modules,
* and doesn't need any configuration. A full resolver
* requires significant server-side analysis and infrastructure
* work.
* @ignore
*/
define(function(require, exports, module) {
"use strict";
main.consumes = [
"Plugin", "language"
];
main.provides = ["language.tern.architect_resolver"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var language = imports.language;
var assert = require("c9/assert");
/***** Initialization *****/
var plugin = new Plugin("Ajax.org", main.consumes);
var loaded = false;
function load() {
if (loaded) return false;
loaded = true;
assert(window.plugins && window.plugins.length > 10, "Architect plugins must be in window.plugins");
var knownPlugins = {};
window.plugins.forEach(function(plugin) {
if (!plugin || !plugin.provides)
return;
plugin.provides.forEach(function(provide) {
knownPlugins["_" + provide] = plugin.packagePath;
});
});
language.getWorker(function(err, worker) {
if (err) return console.error(err);
worker.on("architectPlugins", function() {
worker.emit("architectPluginsResult", { data: knownPlugins });
});
});
language.registerLanguageHandler("plugins/c9.ide.language.javascript.tern/worker/architect_resolver_worker");
}
plugin.on("load", function() {
load();
});
plugin.freezePublicAPI({});
register(null, { "language.tern.architect_resolver": plugin });
}
});