UNPKG

stylelint

Version:
77 lines (67 loc) 2.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.messages = exports.ruleName = undefined; exports.default = function (max) { return function (root, result) { var validOptions = (0, _utils.validateOptions)(result, ruleName, { actual: max, possible: [function (max) { // Check that the max specificity is in the form "a,b,c" var pattern = new RegExp("^\\d+,\\d+,\\d+$"); return pattern.test(max); }] }); if (!validOptions) { return; } var maxSpecificityArray = ("0," + max).split(",").map(parseFloat); root.walkRules(function (rule) { if (!(0, _utils.isStandardSyntaxRule)(rule)) { return; } if (!(0, _utils.isStandardSyntaxSelector)(rule.selector)) { return; } // Using rule.selectors gets us each selector in the eventuality we have a comma separated set rule.selectors.forEach(function (selector) { (0, _postcssResolveNestedSelector2.default)(selector, rule).forEach(function (resolvedSelector) { // Return early if selector contains a not pseudo-class if (selector.indexOf(":not(") !== -1) { return; } // Return early if selector contains a matches if (selector.indexOf(":matches(") !== -1) { return; } // Check if the selector specificity exceeds the allowed maximum try { if ((0, _specificity.compare)(resolvedSelector, maxSpecificityArray) === 1) { (0, _utils.report)({ ruleName: ruleName, result: result, node: rule, message: messages.expected(resolvedSelector, max), word: selector }); } } catch (e) { result.warn("Cannot parse selector", { node: rule }); } }); }); }); }; }; var _utils = require("../../utils"); var _specificity = require("specificity"); var _postcssResolveNestedSelector = require("postcss-resolve-nested-selector"); var _postcssResolveNestedSelector2 = _interopRequireDefault(_postcssResolveNestedSelector); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ruleName = exports.ruleName = "selector-max-specificity"; var messages = exports.messages = (0, _utils.ruleMessages)(ruleName, { expected: function expected(selector, specificity) { return "Expected \"" + selector + "\" to have a specificity no more than \"" + specificity + "\""; } });