diff --git a/edit/edit.js b/edit/edit.js index 791dee65..67cebbad 100644 --- a/edit/edit.js +++ b/edit/edit.js @@ -470,7 +470,7 @@ function indicateCodeChange(cm, change) { cm.stylusChanges = cm.stylusChanges || []; cm.stylusChanges.push(change); } - updateLintReportIfEnabled(cm); + updateLintReport(cm); } function getSectionForChild(e) { @@ -597,7 +597,7 @@ window.onbeforeunload = () => { if (isCleanGlobal()) { return; } - updateLintReportIfEnabled(null, 0); + updateLintReport(null, 0); // neither confirm() nor custom messages work in modern browsers but just in case return t('styleChangesNotSaved'); }; @@ -1275,21 +1275,9 @@ function initWithStyle({style, codeIsUpdated}) { function add() { const sectionDiv = addSection(null, queue.shift()); - maximizeCodeHeight(sectionDiv, !queue.length); - const cm = sectionDiv.CodeMirror; - if (prefs.get('editor.linter')) { - setTimeout(() => { - cm.setOption('lint', linterConfig.getForCodeMirror()); - updateLintReport(cm, 100); - if (!queue.length) { - setTimeout(() => { - const state = cm.state.lint || {}; - clearTimeout(state.renderTimeout); - renderLintReport(); - }, 100); - } - }); - } + const isLast = !queue.length; + maximizeCodeHeight(sectionDiv, isLast); + updateLintReport(sectionDiv.CodeMirror, !isLast && 100); } } @@ -1427,14 +1415,8 @@ function validate() { return null; } -function updateLintReportIfEnabled(cm, time) { - if (CodeMirror.lint) { - updateLintReport(cm, time); - } -} - function save() { - updateLintReportIfEnabled(null, 0); + updateLintReport(null, 0); // save the contents of the CodeMirror editors back into the textareas for (let i = 0; i < editors.length; i++) { diff --git a/edit/lint.js b/edit/lint.js index b91e56d5..e3419cc0 100644 --- a/edit/lint.js +++ b/edit/lint.js @@ -191,7 +191,24 @@ function updateLinter({immediately} = {}) { } function updateLintReport(cm, delay) { - const state = cm && cm.state.lint || {}; + if (!CodeMirror.defaults.lint) { + return; + } + if (cm && !cm.options.lint) { + setTimeout(() => { + if (cm.options.lint) { + return; + } + cm.setOption('lint', linterConfig.getForCodeMirror()); + if (!delay) { + setTimeout(() => { + clearTimeout((cm.state.lint || {}).renderTimeout); + renderLintReport(); + }, 100); + } + }); + } + const state = cm && cm.state && cm.state.lint || {}; if (delay === 0) { // immediately show pending csslint/stylelint messages in onbeforeunload and save clearTimeout(state.lintTimeout); @@ -213,9 +230,6 @@ function updateLintReport(cm, delay) { }, delay, cm); return; } - if (!state) { - return; - } // user is editing right now: postpone updating the report for the new issues (default: 500ms lint + 4500ms) // or update it as soon as possible (default: 500ms lint + 100ms) in case an existing issue was just fixed clearTimeout(state.reportTimeout);