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