UNPKG

1.21 kBJavaScriptView Raw
1'use strict';
2
3const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule');
4const report = require('../../utils/report');
5const ruleMessages = require('../../utils/ruleMessages');
6const validateOptions = require('../../utils/validateOptions');
7
8const ruleName = 'at-rule-name-case';
9
10const messages = ruleMessages(ruleName, {
11 expected: (actual, expected) => `Expected "${actual}" to be "${expected}"`,
12});
13
14const rule = function(expectation, options, context) {
15 return (root, result) => {
16 const validOptions = validateOptions(result, ruleName, {
17 actual: expectation,
18 possible: ['lower', 'upper'],
19 });
20
21 if (!validOptions) {
22 return;
23 }
24
25 root.walkAtRules((atRule) => {
26 if (!isStandardSyntaxAtRule(atRule)) {
27 return;
28 }
29
30 const name = atRule.name;
31
32 const expectedName = expectation === 'lower' ? name.toLowerCase() : name.toUpperCase();
33
34 if (name === expectedName) {
35 return;
36 }
37
38 if (context.fix) {
39 atRule.name = expectedName;
40
41 return;
42 }
43
44 report({
45 message: messages.expected(name, expectedName),
46 node: atRule,
47 ruleName,
48 result,
49 });
50 });
51 };
52};
53
54rule.ruleName = ruleName;
55rule.messages = messages;
56module.exports = rule;