Как проверить максимальное количество селекторов в stylelint? - PullRequest
0 голосов
/ 09 марта 2019

Мне нужно проверить, что в одном файле есть один корневой класс. Является ли это возможным?

// Error
.a { }
.b { }

Ожидаемое

// Success
.a {}

1 Ответ

0 голосов
/ 12 марта 2019

Это невозможно сделать с помощью правил , встроенных в stylelint .

Однако можно создать плагин stylelint для этого.

Плагин будет выглядеть примерно так:

// ./plugins/stylelint-root-max-rules/index.js

const isNumber = require("lodash/isNumber");
const {
  createPlugin,
  utils: { report, ruleMessages, validateOptions }
} = require("stylelint");

const ruleName = "plugin/root-max-rules";
const messages = ruleMessages(ruleName, {
  expected: max =>
    `Expected no more than ${max} ${max === 1 ? "rule" : "rules"}`
});

const rule = quantity => {
  return (root, result) => {
    const validOptions = validateOptions(result, ruleName, {
      actual: quantity,
      possible: isNumber
    });
    if (!validOptions) return;
    const { length } = root.nodes.filter(node => node.type === "rule");
    if (length <= quantity) return;
    report({
      message: messages.expected(quantity),
      node: root,
      result,
      ruleName
    });
  };
};

module.exports = createPlugin(ruleName, rule);
module.exports.ruleName = ruleName;
module.exports.messages = messages;

Затем вы бы использовали плагин так:

{
  "plugins": ["./plugins/stylelint-root-max-rules"],
  "rules": [
    "plugin/root-max-rules": 1
  ]
}
...