Skip to content

Commit 8c8cfe8

Browse files
author
Mostafa Eweda
committed
Merge branch 'master' into fusm
Conflicts: README.md
2 parents 7f262db + 7f3d318 commit 8c8cfe8

File tree

34 files changed

+738
-1314
lines changed

34 files changed

+738
-1314
lines changed

bin/cloud9.sh

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#!/bin/sh
22

3-
CMD="$0"
4-
CMD_DIR=`dirname "$CMD"`
3+
CMD_DIR="$( cd "$( dirname "$0" )" && pwd )"
54
cd "$CMD_DIR/.."
65

76
make update

configs/default.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var vfsUrl = "/vfs";
2121

2222
var port = argv.p || process.env.PORT || 3131;
2323
var host = argv.l || process.env.IP || "localhost";
24+
var debugPort = argv.b || process.env.DEBUG_PORT || 5858;
2425

2526
var useAuth = argv.username && argv.password;
2627

@@ -182,7 +183,8 @@ var config = [
182183
},
183184
{
184185
packagePath: "./cloud9.run.node-debug",
185-
listenHint: "Important: in your scripts, use 'process.env.PORT' as port and '0.0.0.0' as host."
186+
listenHint: "Important: in your scripts, use 'process.env.PORT' as port and '0.0.0.0' as host.",
187+
debugPort: debugPort
186188
},
187189
"./cloud9.run.npm",
188190
"./cloud9.run.npmnode",

plugins-client/cloud9.core/www/core/util.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ var SupportedIcons = {
155155
"text/cpp": "page_white_cplusplus",
156156
"text/x-c": "page_white_c",
157157
"text/x-csharp": "page_white_csharp",
158-
"text/text/x-java-source": "page_white_cup",
158+
"text/x-java-source": "page_white_cup",
159159
"text/x-markdown": "page_white_text",
160160
"text/x-xquery": "page_white_code"
161161
};
@@ -185,6 +185,7 @@ var contentTypes = {
185185
"xhtml": "application/xhtml+xml",
186186
"coffee": "text/x-script.coffeescript",
187187
"py": "text/x-script.python",
188+
"java": "text/x-java-source",
188189

189190
"ru": "text/x-script.ruby",
190191
"gemspec": "text/x-script.ruby",
@@ -279,7 +280,7 @@ exports.pageHasChanged = function(page) {
279280
if (!page) {
280281
throw new Error("Page object parameter missing");
281282
}
282-
return page.changed === 1;
283+
return Number(page.$model.data.getAttribute("changed")) === 1;
283284
};
284285

285286
exports.pageIsCode = function(page) {

plugins-client/ext.code/code.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,8 @@ module.exports = ext.register("ext/code/code", {
292292
if (doc.isInited && doc.state)
293293
_self.setState(doc, doc.state);
294294

295-
doc.addEventListener("prop.value", function(e) {
295+
var onPropValue;
296+
doc.addEventListener("prop.value", onPropValue = function(e) {
296297
if (this.editor != _self)
297298
return;
298299

@@ -319,7 +320,8 @@ module.exports = ext.register("ext/code/code", {
319320
if (!isLazy)
320321
amlEditor.setProperty("value", doc.acesession || "");
321322

322-
doc.addEventListener("retrievevalue", function(e) {
323+
var onRetrieveValue;
324+
doc.addEventListener("retrievevalue", onRetrieveValue = function(e) {
323325
if (this.editor != _self || !doc)
324326
return;
325327

@@ -329,10 +331,15 @@ module.exports = ext.register("ext/code/code", {
329331
return doc.acesession.getValue();
330332
});
331333

332-
doc.addEventListener("close", function(e){
334+
var onClose;
335+
doc.addEventListener("close", onClose = function(e){
333336
if (this.editor != _self)
334337
return;
335338

339+
doc.removeEventListener("close", onClose);
340+
doc.removeEventListener("retrievevalue", onRetrieveValue);
341+
doc.removeEventListener("prop.value", onPropValue);
342+
336343
//??? destroy doc.acesession
337344
setTimeout(function() {
338345
if (doc.acedoc) {
@@ -910,7 +917,7 @@ module.exports = ext.register("ext/code/code", {
910917

911918
if (!bgMessage.parentNode)
912919
container.parentNode.appendChild(bgMessage);
913-
920+
914921
bgMessage.style.backgroundColor = theme ? theme.bg : "gray";
915922
loaderBg.style.width = loadingWidth + "px";
916923
loaderBg.style.left = padding + "px";

plugins-client/ext.console/console.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,14 @@ module.exports = ext.register("ext/console/console", {
9797
},
9898

9999
recreateLogStreamBlocks: function(serverProcs) {
100+
var runners = window.cloud9config.runners;
100101
for (var spi in serverProcs) {
101102
if (this.pidToTracerMap[spi])
102103
continue;
103104

104105
var proc = serverProcs[spi];
106+
if (runners.indexOf(proc.type) === -1)
107+
continue;
105108

106109
var original_line;
107110
var command_id;
@@ -435,6 +438,9 @@ module.exports = ext.register("ext/console/console", {
435438
extra = message.body.extra;
436439

437440
if (extra) {
441+
// leave its handling to linereport plugin
442+
if (extra.linereport_id)
443+
return;
438444
// If true, this client is receiving data about a command that did
439445
// not originate from it
440446
if (extra.command_id >= this.command_id_tracer)

plugins-client/ext.editors/editors.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,7 @@ module.exports = ext.register("ext/editors/editors", {
520520
: undefined;
521521
}
522522

523-
if (page.changed !== val) {
524-
page.changed = val;
523+
if (Number(model.queryValue("@changed")) !== Number(val)) {
525524
model.setQueryValue("@changed", (val ? "1" : "0"));
526525

527526
var node = page.$model.data;

plugins-client/ext.filesystem/filesystem.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ module.exports = ext.register("ext/filesystem/filesystem", {
2222
alone : true,
2323
deps : [],
2424
autodisable : ext.ONLINE | ext.LOCAL,
25-
25+
2626
createFileNodeFromPath : function (path, attributes) {
2727
var name = path.split("/").pop();
2828
var node = apf.n("<file />")
@@ -83,11 +83,11 @@ module.exports = ext.register("ext/filesystem/filesystem", {
8383
saveFile : function(path, data, callback) {
8484
if (!this.webdav)
8585
return;
86-
86+
8787
this.webdav.write(path, data, null, function(data, state, extra) {
8888
if ((state == apf.ERROR && extra.status == 400 && extra.retries < 3) || state == apf.TIMEOUT)
8989
return extra.tpModule.retry(extra.id);
90-
90+
9191
callback(data, state, extra);
9292
});
9393
},
@@ -323,7 +323,7 @@ module.exports = ext.register("ext/filesystem/filesystem", {
323323
beforeRename : function(node, name, newPath, isCopyAction, isReplaceAction) {
324324
var path = node.getAttribute("path");
325325
var page = tabEditors.getPage(path);
326-
326+
327327
if (name) {
328328
// Returning false from this function will cancel the rename. We do this
329329
// when the name to which the file is to be renamed contains invalid
@@ -332,7 +332,7 @@ module.exports = ext.register("ext/filesystem/filesystem", {
332332
if (!(match !== null && match[0] == name)) {
333333
return false;
334334
}
335-
335+
336336
newPath = path.replace(/^(.*\/)[^\/]+$/, "$1" + name);
337337
}
338338
else
@@ -367,7 +367,7 @@ module.exports = ext.register("ext/filesystem/filesystem", {
367367
replace: isReplaceAction,
368368
isFolder: node.getAttribute("type") === "folder"
369369
});
370-
370+
371371
// let us continue!
372372
return true;
373373
},
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
define(function(require, exports, module) {
2+
"use strict";
3+
4+
var markerResolution = require('ext/language/MarkerResolution').MarkerResolution;
5+
var Range = require("ace/range").Range;
6+
7+
var JSResolver = function(value, ast){
8+
this.addResolutions = function(markers){
9+
var _self = this;
10+
markers.forEach(function(curMarker) {
11+
curMarker.resolutions = _self.getResolutions(curMarker);
12+
});
13+
};
14+
15+
this.getResolutions = function(marker){
16+
var type = this.getType(marker);
17+
if (type){
18+
if (typeof this[type] === 'function'){
19+
return this[type](marker);
20+
}
21+
}
22+
return [];
23+
};
24+
25+
this.getType = function(marker){
26+
var msg = marker.message;
27+
if (msg.indexOf("Missing semicolon") !== -1){
28+
return "missingSemicolon";
29+
} else if (msg.indexOf("Unnecessary semicolon") !== -1){
30+
return "unnecessarySemicolon";
31+
}
32+
};
33+
34+
this.missingSemicolon = function(marker){
35+
console.log(marker.pos);
36+
var label = "Add semicolon";
37+
var image = "";
38+
var row = marker.pos.sl;
39+
var column = marker.pos.sc;
40+
41+
var lines = value.split("\n");
42+
var before = lines[row].substring(0, column);
43+
var after = lines[row].substring(column);
44+
var preview = "<b>Add semicolon</b><p>" + before + "<b>; </b>" + after + "</p>";
45+
46+
var insert = ";";
47+
if (after.length){
48+
insert += " ";
49+
}
50+
51+
var delta = {
52+
action: "insertText",
53+
range: new Range(row, column, row, column + insert.length),
54+
text: insert
55+
};
56+
57+
return [markerResolution(label, image, preview, [delta])];
58+
};
59+
60+
this.unnecessarySemicolon = function(marker){
61+
console.log(marker.pos);
62+
var label = "Remove semicolon";
63+
var image = "";
64+
var row = marker.pos.sl;
65+
var column = marker.pos.sc;
66+
67+
var lines = value.split("\n");
68+
var before = lines[row].substring(0, column);
69+
var after = lines[row].substring(column + 1);
70+
var preview = "<b>Remove semicolon</b><p>" + before + "<del>;</del>" + after + "</p>";
71+
72+
var delta = {
73+
action: "removeText",
74+
range: new Range(row, column, row, column + 1)
75+
};
76+
77+
return [markerResolution(label, image, preview, [delta])];
78+
};
79+
80+
};
81+
82+
exports.JSResolver = JSResolver;
83+
84+
});

plugins-client/ext.jslanguage/jshint.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ handler.analyzeSync = function(value, ast) {
7474
if(disabledJSHintWarnings[i].test(warning.reason))
7575
return;
7676
markers.push({
77-
pos: {
77+
pos: { // TODO quickfix framework needs el/ec in order to be able to select the issue in the editor
7878
sl: warning.line-1,
7979
sc: warning.character-1
8080
},
@@ -83,9 +83,11 @@ handler.analyzeSync = function(value, ast) {
8383
message: warning.reason
8484
});
8585
});
86+
8687
return markers;
8788
};
8889

90+
8991
/**
9092
* Gets an object like { foo: true } for JSHint global comments
9193
* like / * global foo: true * /

plugins-client/ext.jslanguage/scope_analyzer.js

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ var completeUtil = require("ext/codecomplete/complete_util");
1919
var handler = module.exports = Object.create(baseLanguageHandler);
2020
var outline = require("ext/jslanguage/outline");
2121
var jshint = require("ext/jslanguage/jshint");
22+
var JSResolver = require('ext/jslanguage/JSResolver').JSResolver;
23+
2224
require("treehugger/traverse"); // add traversal functions to trees
2325

2426
var CALLBACK_METHODS = ["forEach", "map", "reduce", "filter", "every", "some"];
@@ -260,6 +262,21 @@ handler.handlesLanguage = function(language) {
260262
return language === 'javascript';
261263
};
262264

265+
handler.getResolutions = function(value, ast, markers, callback){
266+
var resolver = new JSResolver(value, ast);
267+
resolver.addResolutions(markers);
268+
callback(markers);
269+
};
270+
271+
handler.hasResolution = function(value, ast, marker) {
272+
if (marker.resolutions && marker.resolutions.length){
273+
return true;
274+
}
275+
var resolver = new JSResolver(value, ast);
276+
return resolver.getType(marker);
277+
};
278+
279+
263280
var scopeId = 0;
264281

265282
var Variable = module.exports.Variable = function Variable(declaration) {
@@ -506,8 +523,12 @@ handler.analyze = function(value, ast, callback) {
506523
},
507524
'Function(x, fargs, body)', function(b, node) {
508525
if (inLoop && !inLoopAllowed) {
526+
var pos = this.getPos();
527+
// treehugger doesn't store info on the position of "function" token
528+
var line = handler.doc.getLine(pos.sl);
529+
var sc = line.substring(0, pos.sc).lastIndexOf("function");
509530
markers.push({
510-
pos: { sl: this.getPos().sl, el: this.getPos().sl, sc: this.getPos().sc, ec: this.getPos().sc + "function".length },
531+
pos: { sl: pos.sl, el: pos.sl, sc: sc, ec: sc + "function".length },
511532
level: 'warning',
512533
type: 'warning',
513534
message: "Function created in a loop."
@@ -618,7 +639,7 @@ handler.analyze = function(value, ast, callback) {
618639
return;
619640
markers.push({
620641
pos: decl.getPos(),
621-
type: 'unused',
642+
type: 'info',
622643
level: 'info',
623644
message: 'Unused variable.'
624645
});

0 commit comments

Comments
 (0)