UNPKG

@efficientcss/stylelint-config-ecss

Version:

Linting rules for EfficientCSS

48 lines (38 loc) 1.34 kB
import stylelint from 'stylelint'; import printUrl from '../lib/printUrl.js'; const { createPlugin, utils: { report, ruleMessages } } = stylelint; const ruleName = 'ecss/component-outside'; const messages = ruleMessages(ruleName, { expected: 'A component should not influence its external context. Its parent container takes care of the rhythm.', }); const meta = { url: printUrl('component-outside') } const ruleFunction = (primaryOption, secondaryOption, context) => { return (postcssRoot, postcssResult) => { const componentSelectorsRegex = /^(?!& )(?!.*__)([.]|\\[[a-z0-9-_]*="?)(?!.*(?:image|img|video|hr|picture|photo|icon|i$|shape|before$|after$|input|figure|hr$|svg|line|logo|frame|button|input|select|textarea))[a-zA-Z0-9-_]+("?\\])?$/; postcssRoot.walkRules((rule) => { const selectedNodes = rule.nodes.filter((node) => node.type === 'decl' && ['margin'].includes(node.prop) ); if (componentSelectorsRegex.test(rule.selector)) { selectedNodes.forEach(decl => { report({ message: messages.expected, messageArgs: [rule.selector, decl], node: decl, result: postcssResult, ruleName, }); }); } }); }; }; ruleFunction.ruleName = ruleName; ruleFunction.messages = messages; ruleFunction.meta = meta; export default createPlugin(ruleName, ruleFunction);