123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports["default"] = rule;
- exports.ruleName = exports.meta = exports.messages = void 0;
- var _stylelint = require("stylelint");
- var _optionsMatches = _interopRequireDefault(require("stylelint/lib/utils/optionsMatches"));
- var _utils = require("../../utils");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
- var ruleName = (0, _utils.namespace)("selector-no-redundant-nesting-selector");
- exports.ruleName = ruleName;
- var messages = _stylelint.utils.ruleMessages(ruleName, {
- rejected: "Unnecessary nesting selector (&)"
- });
- exports.messages = messages;
- var meta = {
- url: (0, _utils.ruleUrl)(ruleName)
- };
- exports.meta = meta;
- function rule(actual, options) {
- return function (root, result) {
- var validOptions = _stylelint.utils.validateOptions(result, ruleName, {
- actual: actual
- }, {
- actual: options,
- possible: {
- ignoreKeywords: [_utils.isString, _utils.isRegExp]
- },
- optional: true
- });
- if (!validOptions) {
- return;
- }
- root.walkRules(/&/, function (rule) {
- (0, _utils.parseSelector)(rule.selector, result, rule, function (fullSelector) {
- // "Ampersand followed by a combinator followed by non-combinator non-ampersand and not the selector end"
- fullSelector.walkNesting(function (node) {
- var prev = node.prev();
- if (prev || (0, _utils.hasNestedSibling)(node)) {
- return;
- }
- var next = node.next();
- if (!next && node.parent.parent.nodes.length > 1) {
- return;
- }
- if (next && next.type !== "combinator") {
- return;
- }
- var nextNext = next ? next.next() : null;
- if ((0, _utils.isType)(nextNext, "tag") && (0, _optionsMatches["default"])(options, "ignoreKeywords", nextNext.value.trim()) || (0, _utils.isType)(nextNext, "combinator")) {
- return;
- }
- _stylelint.utils.report({
- ruleName: ruleName,
- result: result,
- node: rule,
- message: messages.rejected,
- index: node.sourceIndex
- });
- });
- });
- });
- };
- }
- rule.ruleName = ruleName;
- rule.messages = messages;
- rule.meta = meta;
|