Merge pull request #352 from sharelatex/bg-syntax-validator-fixes

syntax validator fixes
This commit is contained in:
Brian Gough 2016-10-26 15:31:12 +01:00 committed by GitHub
commit 9389f97e41
3 changed files with 48 additions and 14 deletions

View file

@ -15,9 +15,13 @@ define [
# set the path for ace workers if using a CDN (from editor.jade)
if window.aceWorkerPath != ""
syntaxValidationEnabled = true
ace.config.set('workerPath', "#{window.aceWorkerPath}")
else
ace.config.setDefaultValue("session", "useWorker", false)
syntaxValidationEnabled = false
# By default, don't use workers - enable them per-session as required
ace.config.setDefaultValue("session", "useWorker", false)
# Ace loads its script itself, so we need to hook in to be able to clear
# the cache.
@ -202,8 +206,12 @@ define [
editor.setReadOnly !!value
scope.$watch "syntaxValidation", (value) ->
session = editor.getSession()
session.setOption("useWorker", value);
# ignore undefined settings here
# only instances of ace with an explicit value should set useWorker
# the history instance will have syntaxValidation undefined
if value? and syntaxValidationEnabled
session = editor.getSession()
session.setOption("useWorker", value);
editor.setOption("scrollPastEnd", true)
@ -227,10 +235,16 @@ define [
catch
mode = "ace/mode/text"
editor.setSession(new EditSession(lines, mode))
# create our new session
session = new EditSession(lines, mode)
session = editor.getSession()
session.setUseWrapMode(true)
# use syntax validation only when explicitly set
if scope.syntaxValidation? and syntaxValidationEnabled
session.setOption("useWorker", scope.syntaxValidation);
# now attach session to editor
editor.setSession(session)
doc = session.getDocument()
doc.on "change", onChange

View file

@ -214,18 +214,21 @@ var createLatexWorker = function (session) {
var suppressions = [];
var hints = [];
var changeHandler = null;
var docChangePending = false;
var firstPass = true;
var worker = new WorkerClient(["ace"], "ace/mode/latex_worker", "LatexWorker");
worker.attachToDocument(doc);
doc.on("change", function () {
var docChangeHandler = doc.on("change", function () {
docChangePending = true;
if(changeHandler) {
clearTimeout(changeHandler);
changeHandler = null;
}
});
selection.on("changeCursor", function () {
var cursorHandler = selection.on("changeCursor", function () {
if (docChangePending) { return; } ;
changeHandler = setTimeout(function () {
updateMarkers({cursorMoveOnly:true});
suppressions = [];
@ -307,11 +310,20 @@ var createLatexWorker = function (session) {
}
}
if (!cursorMoveOnly || suppressedChanges) {
session.setAnnotations(annotations);
if (firstPass) {
if (annotations.length > 0) {
var originalAnnotations = session.getAnnotations();
session.setAnnotations(originalAnnotations.concat(annotations));
};
firstPass = false;
} else {
session.setAnnotations(annotations);
}
};
};
worker.on("lint", function(results) {
if(docChangePending) { docChangePending = false; };
hints = results.data;
if (hints.length > 100) {
hints = hints.slice(0, 100); // limit to 100 errors
@ -319,14 +331,22 @@ var createLatexWorker = function (session) {
updateMarkers();
});
worker.on("terminate", function() {
if(changeHandler) {
clearTimeout(changeHandler);
changeHandler = null;
}
doc.off("change", docChangeHandler);
selection.off("changeCursor", cursorHandler);
for (var key in savedRange) {
var range = savedRange[key];
range.start.detach();
range.end.detach();
if (range.start !== cursorAnchor) { range.start.detach(); }
if (range.end !== cursorAnchor) { range.end.detach(); }
session.removeMarker(range.id);
delete savedRange[key];
}
savedRange = {};
hints = [];
suppressions = [];
session.clearAnnotations();
});
return worker;

View file

@ -1755,7 +1755,7 @@ var InterpretTokens = function (TokeniseResult, ErrorReporter) {
};
if (endToken) {
TokenErrorFromTo(token, endToken, "invalid environment command" + text.substring(token[2], endToken[3] || endToken[2]));
TokenErrorFromTo(token, endToken, "invalid environment command " + text.substring(token[2], endToken[3] || endToken[2]));
} else {
TokenError(token, "invalid environment command");
};