From ed3ec6215cc1ae8aa9150a6b29bc0870c5a89650 Mon Sep 17 00:00:00 2001 From: eight Date: Fri, 31 Aug 2018 22:50:15 +0800 Subject: [PATCH] Add: getStylelintRules, getCsslintRules --- edit/editor-worker-body.js | 50 +++++++++++++++++++++++++++++++++++++- edit/editor-worker.js | 2 +- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/edit/editor-worker-body.js b/edit/editor-worker-body.js index 636d4609..630b065a 100644 --- a/edit/editor-worker-body.js +++ b/edit/editor-worker-body.js @@ -19,9 +19,57 @@ createAPI({ loadParserLib(); loadScript(['/js/moz-parser.js']); return parseMozFormat(data); - } + }, + getStylelintRules, + getCsslintRules }); +function getCsslintRules() { + loadScript(['/vendor-overwrites/csslint/csslint.js']); + return CSSLint.getRules().map(rule => { + delete rule.init; + return rule; + }); +} + +function getStylelintRules() { + loadScript(['/vendor/stylelint-bundle/stylelint-bundle.min.js']); + const stylelint = require('stylelint'); + const options = {}; + const rxPossible = /\bpossible:("(?:[^"]*?)"|\[(?:[^\]]*?)\]|\{(?:[^}]*?)\})/g; + const rxString = /"([-\w\s]{3,}?)"/g; + for (const id of Object.keys(stylelint.rules)) { + const ruleCode = String(stylelint.rules[id]); + const sets = []; + let m, mStr; + while ((m = rxPossible.exec(ruleCode))) { + const possible = m[1]; + const set = []; + while ((mStr = rxString.exec(possible))) { + const s = mStr[1]; + if (s.includes(' ')) { + set.push(...s.split(/\s+/)); + } else { + set.push(s); + } + } + if (possible.includes('ignoreAtRules')) { + set.push('ignoreAtRules'); + } + if (possible.includes('ignoreShorthands')) { + set.push('ignoreShorthands'); + } + if (set.length) { + sets.push(set); + } + } + if (sets.length) { + options[id] = sets; + } + } + return options; +} + function createLoadParserLib() { let loaded = false; return () => { diff --git a/edit/editor-worker.js b/edit/editor-worker.js index ecf746cd..7aca26e3 100644 --- a/edit/editor-worker.js +++ b/edit/editor-worker.js @@ -2,7 +2,7 @@ var editorWorker = (() => { // eslint-disable-line no-var let worker; - return createAPI(['csslint', 'stylelint', 'parseMozFormat']); + return createAPI(['csslint', 'stylelint', 'parseMozFormat', 'getStylelintRules', 'getCsslintRules']); function createAPI(keys) { const output = {};