3 const _ = require("lodash");
4 const keywordSets = require("../../reference/keywordSets");
5 const optionsMatches = require("../../utils/optionsMatches");
6 const postcss = require("postcss");
7 const report = require("../../utils/report");
8 const ruleMessages = require("../../utils/ruleMessages");
9 const validateOptions = require("../../utils/validateOptions");
11 const ruleName = "at-rule-no-unknown";
13 const messages = ruleMessages(ruleName, {
14 rejected: atRule => `Unexpected unknown at-rule "${atRule}"`
17 const rule = function(actual, options) {
18 return (root, result) => {
19 const validOptions = validateOptions(
26 ignoreAtRules: [_.isString]
36 root.walkAtRules(atRule => {
37 const name = atRule.name;
39 // Return early if at-rule is to be ignored
40 if (optionsMatches(options, "ignoreAtRules", atRule.name)) {
45 postcss.vendor.prefix(name) ||
46 keywordSets.atRules.has(name.toLowerCase())
52 message: messages.rejected(`@${name}`),
61 rule.ruleName = ruleName;
62 rule.messages = messages;
63 module.exports = rule;