UNPKG

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