diff options
Diffstat (limited to 'assets/node_modules/stylelint/lib/rules/selector-class-pattern/index.js')
-rw-r--r-- | assets/node_modules/stylelint/lib/rules/selector-class-pattern/index.js | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/assets/node_modules/stylelint/lib/rules/selector-class-pattern/index.js b/assets/node_modules/stylelint/lib/rules/selector-class-pattern/index.js deleted file mode 100644 index b1c30a6..0000000 --- a/assets/node_modules/stylelint/lib/rules/selector-class-pattern/index.js +++ /dev/null @@ -1,119 +0,0 @@ -'use strict'; - -const _ = require('lodash'); -const isKeyframeSelector = require('../../utils/isKeyframeSelector'); -const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule'); -const isStandardSyntaxSelector = require('../../utils/isStandardSyntaxSelector'); -const parseSelector = require('../../utils/parseSelector'); -const report = require('../../utils/report'); -const resolveNestedSelector = require('postcss-resolve-nested-selector'); -const ruleMessages = require('../../utils/ruleMessages'); -const validateOptions = require('../../utils/validateOptions'); - -const ruleName = 'selector-class-pattern'; - -const messages = ruleMessages(ruleName, { - expected: (selectorValue) => - `Expected class selector ".${selectorValue}" to match specified pattern`, -}); - -function rule(pattern, options) { - return (root, result) => { - const validOptions = validateOptions( - result, - ruleName, - { - actual: pattern, - possible: [_.isRegExp, _.isString], - }, - { - actual: options, - possible: { - resolveNestedSelectors: _.isBoolean, - }, - optional: true, - }, - ); - - if (!validOptions) { - return; - } - - const shouldResolveNestedSelectors = _.get(options, 'resolveNestedSelectors'); - const normalizedPattern = _.isString(pattern) ? new RegExp(pattern) : pattern; - - root.walkRules((rule) => { - const selector = rule.selector; - const selectors = rule.selectors; - - if (!isStandardSyntaxRule(rule)) { - return; - } - - if (selectors.some((s) => isKeyframeSelector(s))) { - return; - } - - // Only bother resolving selectors that have an interpolating & - if (shouldResolveNestedSelectors && hasInterpolatingAmpersand(selector)) { - resolveNestedSelector(selector, rule).forEach((selector) => { - if (!isStandardSyntaxSelector(selector)) { - return; - } - - parseSelector(selector, result, rule, (s) => checkSelector(s, rule)); - }); - } else { - parseSelector(selector, result, rule, (s) => checkSelector(s, rule)); - } - }); - - function checkSelector(fullSelector, rule) { - fullSelector.walkClasses((classNode) => { - const value = classNode.value; - const sourceIndex = classNode.sourceIndex; - - if (normalizedPattern.test(value)) { - return; - } - - report({ - result, - ruleName, - message: messages.expected(value), - node: rule, - index: sourceIndex, - }); - }); - } - }; -} - -// An "interpolating ampersand" means an "&" used to interpolate -// within another simple selector, rather than an "&" that -// stands on its own as a simple selector -function hasInterpolatingAmpersand(selector) { - for (let i = 0, l = selector.length; i < l; i++) { - if (selector[i] !== '&') { - continue; - } - - if (selector[i - 1] !== undefined && !isCombinator(selector[i - 1])) { - return true; - } - - if (selector[i + 1] !== undefined && !isCombinator(selector[i + 1])) { - return true; - } - } - - return false; -} - -function isCombinator(x) { - return /[\s+>~]/.test(x); -} - -rule.ruleName = ruleName; -rule.messages = messages; -module.exports = rule; |