c9-core/plugins/c9.ide.language.python/python.js

124 wiersze
5.0 KiB
JavaScript

/**
* Cloud9 Python support
*
* @copyright 2015, Ajax.org B.V.
*/
define(function(require, exports, module) {
main.consumes = [
"Plugin", "language", "jsonalyzer", "settings",
"preferences", "c9"
];
main.provides = ["language.python"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var language = imports.language;
var jsonalyzer = imports["jsonalyzer"];
var prefs = imports.preferences;
var settings = imports.settings;
var c9 = imports.c9;
var plugin = new Plugin("Ajax.org", main.consumes);
var jediServer = require("text!./server/jedi_server.py")
.replace(/ {4}/g, " ").replace(/'/g, "'\\''");
var launchCommand = require("text!./server/launch_command.sh")
.replace(/ {2,}/g, " ");
plugin.on("load", function() {
jsonalyzer.registerWorkerHandler("plugins/c9.ide.language.python/worker/python_jsonalyzer");
prefs.add({
"Project": {
"Python Support": {
position: 1300,
"Enable Python code completion": {
position: 310,
type: "checkbox",
path: "project/python/@completion",
},
"Python Version": {
position: 320,
type: "dropdown",
path: "project/python/@version",
items: [
{ caption: "Python 2", value: "python2" },
{ caption: "Python 3", value: "python3" },
]
},
"Pylint command-line options": {
position: 330,
type: "textbox",
width: 300,
message: "-d all -e E -e F",
path: "project/python/@pylintFlags",
},
"PYTHONPATH": {
position: 340,
type: "textbox",
width: 300,
path: "project/python/@path",
},
"Format Code on Save": {
position: 350,
type: "checkbox",
path: "project/python/@formatOnSave",
},
"Custom Code Formatter": {
position: 360,
type: "textbox",
path: "project/python/@formatter",
}
}
}
}, plugin);
settings.on("read", function(e) {
settings.setDefaults("project/python", [
["version", "python2"],
["completion", true],
["path", options.pythonPath || "/usr/local/lib/python2.7/dist-packages:/usr/local/lib/python3.4/dist-packages"]
]);
}, plugin);
language.registerLanguageHandler("plugins/c9.ide.language.python/worker/python_linter", function(err, handler) {
if (err) return console.error(err);
setupHandler(handler);
});
language.registerLanguageHandler("plugins/c9.ide.language.python/worker/python_completer", function(err, handler) {
if (err) return console.error(err);
setupHandler(handler);
});
});
function setupHandler(handler) {
handler.emit("set_python_scripts", {
jediServer: jediServer,
launchCommand: launchCommand,
hosted: !options.testing && c9.hosted
});
settings.on("project/python", sendSettings.bind(null, handler), plugin);
sendSettings(handler);
}
function sendSettings(handler) {
handler.emit("set_python_config", {
pythonVersion: settings.get("project/python/@version"),
pythonPath: settings.get("project/python/@path"),
pylintFlags: settings.get("project/python/@pylintFlags"),
completion: settings.get("project/python/@completion"),
});
}
plugin.on("unload", function() {
jsonalyzer.unregisterWorkerHandler("plugins/c9.ide.language.python/worker/python_jsonalyzer");
language.unregisterLanguageHandler("plugins/c9.ide.language.python/worker/python_completer");
language.unregisterLanguageHandler("plugins/c9.ide.language.python/worker/python_linter");
});
/** @ignore */
register(null, {
"language.python": plugin
});
}
});