UNPKG

1.46 kBJavaScriptView Raw
1'use strict';
2
3const hasBlock = require('../../utils/hasBlock');
4const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule');
5const rawNodeString = require('../../utils/rawNodeString');
6const report = require('../../utils/report');
7const ruleMessages = require('../../utils/ruleMessages');
8const validateOptions = require('../../utils/validateOptions');
9const whitespaceChecker = require('../../utils/whitespaceChecker');
10
11const ruleName = 'at-rule-semicolon-space-before';
12
13const messages = ruleMessages(ruleName, {
14 expectedBefore: () => 'Expected single space before ";"',
15 rejectedBefore: () => 'Unexpected whitespace before ";"',
16});
17
18const rule = function(expectation) {
19 const checker = whitespaceChecker('space', expectation, messages);
20
21 return (root, result) => {
22 const validOptions = validateOptions(result, ruleName, {
23 actual: expectation,
24 possible: ['always', 'never'],
25 });
26
27 if (!validOptions) {
28 return;
29 }
30
31 root.walkAtRules((atRule) => {
32 if (hasBlock(atRule)) {
33 return;
34 }
35
36 if (!isStandardSyntaxAtRule(atRule)) {
37 return;
38 }
39
40 const nodeString = rawNodeString(atRule);
41
42 checker.before({
43 source: nodeString,
44 index: nodeString.length,
45 err: (m) => {
46 report({
47 message: m,
48 node: atRule,
49 index: nodeString.length - 1,
50 result,
51 ruleName,
52 });
53 },
54 });
55 });
56 };
57};
58
59rule.ruleName = ruleName;
60rule.messages = messages;
61module.exports = rule;