2fd531e253
* Add: implement new linter system * Refactor: pull out editor worker * Switch to new linter and worker * Enable eslint cache * Fix: undefined error * Windows compatibility * Fix: refresh linter if the editor.linter changes * Add: stylelint * Add: getStylelintRules, getCsslintRules * Fix: logic to get correct linter * WIP: linter-report * Fix: toggle hidden state * Add: matain the order of lint report for section editor * Add: unhook event * Add: gotoLintIssue * Fix: shouldn't delete rule.init * Add: linter-help-dialog * Drop linterConfig * Add: linter-config-dialog, cacheFn * Add: use cacheFn * Drop lint.js * Add: refresh. Fix report order * Fix: hide empty table * Add: updateCount. Fix table caption * Switch to new linter/worker * Fix: remove unneeded comment * Fix: cacheFn -> cacheFirstCall * Fix: use cacheFirstCall * Fix: cache metaIndex * Fix: i < trs.length * Fix: drop isEmpty * Fix: expose some simple states to global * Fix: return object code style * Fix: use proxy to reflect API * Fix: eslint-disable-line -> eslint-disable-next-line * Fix: requestId -> id * Fix: one-liner * Fix: one-liner * Fix: move dom event block to top * Fix: pending -> pendingResponse * Fix: onSuccess -> onUpdated * Fix: optimize row removing when i === 0 * Fix: hook/unhook -> enableForEditor/disableForEditor * Fix: linter.refresh -> linter.run * Fix: some shadowing * Fix: simplify getAnnotations * Fix: cacheFirstCall -> memoize * Fix: table.update -> table.updateCaption * Fix: unneeded reassign * Fix: callbacks -> listeners * Fix: don't compose but extend * Refactor: replace linter modules with linter-defaults and linter-engines * Fix: implement linter fallbacks * Fix: linter.onChange -> linter.onLintingUpdated * Fix: cms -> tables * Fix: parseMozFormat is not called correctly * Move csslint-loader to background * Fix: watch config changes * Fix: switch to LINTER_DEFAULTS * Fix: csslint-loader -> parserlib-loader
52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
/* global showHelp editorWorker memoize */
|
|
'use strict';
|
|
|
|
function createLinterHelpDialog(getIssues) {
|
|
let csslintRules;
|
|
const prepareCsslintRules = memoize(() =>
|
|
editorWorker.getCsslintRules()
|
|
.then(rules => {
|
|
csslintRules = rules;
|
|
})
|
|
);
|
|
return {show};
|
|
|
|
function show() {
|
|
// FIXME: implement a linterChooser?
|
|
const linter = $('#editor.linter').value;
|
|
const baseUrl = linter === 'stylelint'
|
|
? 'https://stylelint.io/user-guide/rules/'
|
|
// some CSSLint rules do not have a url
|
|
: 'https://github.com/CSSLint/csslint/issues/535';
|
|
let headerLink, template;
|
|
if (linter === 'csslint') {
|
|
headerLink = $createLink('https://github.com/CSSLint/csslint/wiki/Rules', 'CSSLint');
|
|
template = ({rule: ruleID}) => {
|
|
const rule = csslintRules.find(rule => rule.id === ruleID);
|
|
return rule &&
|
|
$create('li', [
|
|
$create('b', $createLink(rule.url || baseUrl, rule.name)),
|
|
$create('br'),
|
|
rule.desc,
|
|
]);
|
|
};
|
|
} else {
|
|
headerLink = $createLink(baseUrl, 'stylelint');
|
|
template = ({rule}) =>
|
|
$create('li',
|
|
rule === 'CssSyntaxError' ? rule : $createLink(baseUrl + rule, rule));
|
|
}
|
|
const header = t('linterIssuesHelp', '\x01').split('\x01');
|
|
const activeRules = getIssues();
|
|
Promise.resolve(linter === 'csslint' && prepareCsslintRules())
|
|
.then(() =>
|
|
showHelp(t('linterIssues'),
|
|
$create([
|
|
header[0], headerLink, header[1],
|
|
$create('ul.rules', [...activeRules.values()].map(template)),
|
|
])
|
|
)
|
|
);
|
|
}
|
|
}
|