diff --git a/lib/ace/mode/coffee/lexer.js b/lib/ace/mode/coffee/lexer.js index 7c123a2f..ab15ec43 100644 --- a/lib/ace/mode/coffee/lexer.js +++ b/lib/ace/mode/coffee/lexer.js @@ -225,6 +225,7 @@ define(function(require, exports, module) { return 0; } if (match = HEREGEX.exec(this.chunk)) { + this.line += count(match[0], '\n'); return this.heregexToken(match); } prev = last(this.tokens); diff --git a/lib/ace/mode/coffee_worker.js b/lib/ace/mode/coffee_worker.js index 0953984c..5cf1010e 100644 --- a/lib/ace/mode/coffee_worker.js +++ b/lib/ace/mode/coffee_worker.js @@ -55,6 +55,7 @@ oop.inherits(Worker, Mirror); this.onUpdate = function() { var value = this.doc.getValue(); + try { coffee.parse(value); } catch(e) { @@ -66,6 +67,19 @@ oop.inherits(Worker, Mirror); text: m[2], type: "error" }); + return; + } + + if (e instanceof SyntaxError) { + var m = e.message.match(/ on line (\d+)/); + if (m) { + this.sender.emit("error", { + row: parseInt(m[1]) - 1, + column: null, + text: e.message.replace(m[0], ""), + type: "error" + }); + } } return; }