.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / declaration-block-semicolon-space-before / index.js
1 "use strict";
2
3 const blockString = require("../../utils/blockString");
4 const report = require("../../utils/report");
5 const ruleMessages = require("../../utils/ruleMessages");
6 const validateOptions = require("../../utils/validateOptions");
7 const whitespaceChecker = require("../../utils/whitespaceChecker");
8
9 const ruleName = "declaration-block-semicolon-space-before";
10
11 const messages = ruleMessages(ruleName, {
12   expectedBefore: () => 'Expected single space before ";"',
13   rejectedBefore: () => 'Unexpected whitespace before ";"',
14   expectedBeforeSingleLine: () =>
15     'Expected single space before ";" in a single-line declaration block',
16   rejectedBeforeSingleLine: () =>
17     'Unexpected whitespace before ";" in a single-line declaration block'
18 });
19
20 const rule = function(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", "always-single-line", "never-single-line"]
27     });
28     if (!validOptions) {
29       return;
30     }
31
32     root.walkDecls(decl => {
33       // Ignore last declaration if there's no trailing semicolon
34       const parentRule = decl.parent;
35       if (!parentRule.raws.semicolon && parentRule.last === decl) {
36         return;
37       }
38
39       const declString = decl.toString();
40
41       checker.before({
42         source: declString,
43         index: declString.length,
44         lineCheckStr: blockString(parentRule),
45         err: m => {
46           report({
47             message: m,
48             node: decl,
49             index: decl.toString().length - 1,
50             result,
51             ruleName
52           });
53         }
54       });
55     });
56   };
57 };
58
59 rule.ruleName = ruleName;
60 rule.messages = messages;
61 module.exports = rule;