From d24cce48515c011ab9c6ba44fb7c05853cecb62b Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Tue, 25 Jan 2011 13:34:44 +0100 Subject: [PATCH] use narcissus in the worker to detect syntax errors --- lib/ace/mode/javascript.js | 6 +++++- lib/ace/mode/javascript_worker.js | 27 +++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/ace/mode/javascript.js b/lib/ace/mode/javascript.js index f18ec329..5aab3d37 100644 --- a/lib/ace/mode/javascript.js +++ b/lib/ace/mode/javascript.js @@ -144,7 +144,7 @@ oop.inherits(Mode, TextMode); row: error.line-1, column: error.character-1, text: error.reason, - type: "error", + type: "warning", lint: error }) } @@ -152,6 +152,10 @@ oop.inherits(Mode, TextMode); session.setAnnotations(errors) }); + worker.on("narcissus", function(e) { + session.setAnnotations([e.data]); + }); + worker.on("terminate", function() { session.clearAnnotations(); }); diff --git a/lib/ace/mode/javascript_worker.js b/lib/ace/mode/javascript_worker.js index 900f364c..cef00273 100644 --- a/lib/ace/mode/javascript_worker.js +++ b/lib/ace/mode/javascript_worker.js @@ -15,8 +15,31 @@ oop.inherits(JavaScriptWorker, Mirror); (function() { this.onUpdate = function() { - lint(this.doc.getValue(), {undef: false, onevar: false, passfail: false}); - this.sender.emit("jslint", lint.errors); + var value = this.doc.getValue(); + + var start = new Date(); + var parser = require("ace/narcissus/jsparse"); + try { + parser.parse(value); + } catch(e) { + console.log("narcissus") + console.log(e); + sender.emit("narcissus", { + row: e.lineno-1, + column: null, // TODO convert e.cursor + text: e.message, + type: "error" + }); + return; + } finally { + console.log("parse time: " + (new Date() - start)); + } + + var start = new Date(); + console.log("jslint") + lint(value, {undef: false, onevar: false, passfail: false}); + this.sender.emit("jslint", lint.errors); + console.log("lint time: " + (new Date() - start)); } }).call(JavaScriptWorker.prototype);