UNPKG

waft-css-lint

Version:

WAFT Standard shareable config for stylelint

63 lines (62 loc) 2.8 kB
"use strict"; const stylelint = require("stylelint"); const { report, ruleMessages, validateOptions } = stylelint.utils; const ruleName = "custom-rules-plugin/property-blacklist"; const checkValue = (allowValues, value) => { let passed = false; for (let i = 0; i < allowValues.length; i++) { const v = allowValues[i]; if (value.includes(v)) { passed = true; return passed; } } return passed; }; const messages = ruleMessages(ruleName, { expected: (decl, configProp, support) => { if (configProp.message) { return typeof configProp.message === 'function' ? configProp.message(decl) : configProp.message; } return support ? `${decl.value} property is not supported` : `${decl.prop} property is not supported`; }, }); module.exports = stylelint.createPlugin(ruleName, function (primaryOption, secondaryOptionObject) { return function (postcssRoot, postcssResult) { let map = {}; postcssRoot.walkDecls((decl) => { if (decl) { const reportProps = { ruleName, result: postcssResult, node: decl, word: decl.value, }; if (!map[decl.parent.source.start.offset] && primaryOption.selector && !primaryOption.selector.format(decl.parent.selector)) { map[decl.parent.source.start.offset] = `${decl.parent.source.start.offset}`; const { source } = decl.parent; decl.source = source; report(Object.assign(Object.assign({}, reportProps), { word: decl.parent.selector, message: messages.expected(decl, primaryOption.selector) })); } const configProp = primaryOption[decl.prop]; if (configProp) { if (!configProp.support) { report(Object.assign(Object.assign({}, reportProps), { message: messages.expected(decl, configProp, 0) })); } else { if (configProp.format && !configProp.format(decl)) { report(Object.assign(Object.assign({}, reportProps), { message: messages.expected(decl, configProp, 1) })); return; } if (configProp.values && !checkValue(configProp.values, decl.value)) { report(Object.assign(Object.assign({}, reportProps), { message: messages.expected(decl, configProp, 1) })); } } } } }); map = null; }; }); module.exports.ruleName = ruleName; module.exports.messages = messages;