Skip to content

Commit 014a071

Browse files
committed
Merge pull request #2441 from ajaxorg/python-linting
[Liskov] Python linting integration (using pylint)
2 parents d4e4d1f + d050ea0 commit 014a071

File tree

8 files changed

+105
-1
lines changed

8 files changed

+105
-1
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ plugins-client/lib.ace/www/worker/worker-language.js plugins-client/lib.ace/www/
7777
ln -s `pwd`/plugins-client/ext.htmllanguage /tmp/c9_worker_build/ext/htmllanguage
7878
ln -s `pwd`/plugins-client/ext.linereport /tmp/c9_worker_build/ext/linereport
7979
ln -s `pwd`/plugins-client/ext.linereport_php /tmp/c9_worker_build/ext/linereport_php
80+
ln -s `pwd`/plugins-client/ext.linereport_python /tmp/c9_worker_build/ext/linereport_python
8081
node Makefile.dryice.js worker
8182
cp node_modules/ace/build/src/worker* plugins-client/lib.ace/www/worker
8283

Makefile.dryice.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ function worker(project) {
7474
'ext/codecomplete/mode_completer',
7575
'ext/linereport/linereport_base',
7676
'ext/linereport_php/linereport_php_worker',
77+
'ext/linereport_python/linereport_python_worker',
7778
]
7879
})
7980
],

configs/default.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ var config = [
9898
"ext/help/help",
9999
"ext/linereport/linereport",
100100
"ext/linereport_php/linereport_php",
101+
"ext/linereport_python/linereport_python",
101102
//"ext/ftp/ftp",
102103
"ext/code/code",
103104
"ext/statusbar/statusbar",

plugins-client/ext.linereport/linereport_base.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ worker.parseOutput = function(output, processLine) {
120120
var line = lines[i];
121121
if (processLine)
122122
line = processLine(line);
123-
var result = line.charAt ? this.$parseOutputLine(line) : line;
123+
var result = (line && line.charAt) ? this.$parseOutputLine(line) : line;
124124
if (result)
125125
results.push(result);
126126
}

plugins-client/ext.linereport_php/linereport_php_worker.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ var baseLanguageHandler = require("ext/linereport/linereport_base");
1010
var handler = module.exports = Object.create(baseLanguageHandler);
1111

1212
handler.disabled = false;
13+
handler.$isInited = false;
1314

1415
handler.$isInited = false;
1516

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* PHP linter
3+
*
4+
* @copyright 2011, Ajax.org B.V.
5+
* @license GPLv3 <http://www.gnu.org/licenses/gpl.txt>
6+
*/
7+
define(function(require, exports, module) {
8+
9+
var ext = require("core/ext");
10+
var editors = require("ext/editors/editors");
11+
var language = require("ext/language/language");
12+
var linereport = require("ext/linereport/linereport");
13+
14+
module.exports = ext.register("ext/linereport_python/linereport_python", {
15+
name : "Python Line Reporting Support",
16+
dev : "Ajax.org",
17+
type : ext.GENERAL,
18+
deps : [editors, language, linereport],
19+
nodes : [],
20+
alone : true,
21+
22+
init : function() {
23+
language.registerLanguageHandler(
24+
'ext/linereport_python/linereport_python_worker',
25+
language.isWorkerEnabled()
26+
);
27+
},
28+
29+
enable : function() {
30+
},
31+
32+
disable : function() {
33+
},
34+
35+
destroy : function() {
36+
}
37+
});
38+
39+
});
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* PHP linter worker.
3+
*
4+
* @copyright 2011, Ajax.org B.V.
5+
* @license GPLv3 <http://www.gnu.org/licenses/gpl.txt>
6+
*/
7+
define("ext/linereport_python/linereport_python_worker", ["require", "exports", "module"], function(require, exports, module) {
8+
9+
var baseLanguageHandler = require("ext/linereport/linereport_base");
10+
var handler = module.exports = Object.create(baseLanguageHandler);
11+
12+
handler.disabled = false;
13+
handler.$isInited = false;
14+
15+
handler.handlesLanguage = function(language) {
16+
return language === 'python';
17+
};
18+
19+
handler.init = function(callback) {
20+
handler.initReporter("pylint --version", "exit 1 # pylint isn't installed", function(err, output) {
21+
if (err) {
22+
console.log("Unable to lint Python\n" + output);
23+
handler.disabled = true;
24+
}
25+
callback();
26+
});
27+
};
28+
29+
handler.analyze = function(doc, fullAst, callback) {
30+
if (handler.disabled)
31+
return callback();
32+
handler.invokeReporter("pylint -i y -E " + handler.workspaceDir + "/" + handler.path,
33+
this.$postProcess, callback);
34+
};
35+
36+
/**
37+
* Postprocess Python output to match the expected format
38+
* line:column: error message.
39+
*/
40+
handler.$postProcess = function(line) {
41+
var pylintRegex = /^E\d{4}:\s*(\d+),(\d+):(.*)$/;
42+
return pylintRegex.test(line) && line.replace(pylintRegex, "$1:$2: $3/");
43+
};
44+
45+
});
46+
47+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "ext.linereport_python",
3+
"version": "0.0.1",
4+
"main": "linereport-python-ext.js",
5+
"private": true,
6+
"plugin": {
7+
"provides": [
8+
"ext.linereport_python"
9+
],
10+
"consumes": [
11+
"client-plugins"
12+
]
13+
}
14+
}

0 commit comments

Comments
 (0)