UNPKG

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