.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / declaration-block-semicolon-newline-after / index.js
1 "use strict";
2
3 const blockString = require("../../utils/blockString");
4 const nextNonCommentNode = require("../../utils/nextNonCommentNode");
5 const rawNodeString = require("../../utils/rawNodeString");
6 const report = require("../../utils/report");
7 const ruleMessages = require("../../utils/ruleMessages");
8 const validateOptions = require("../../utils/validateOptions");
9 const whitespaceChecker = require("../../utils/whitespaceChecker");
10
11 const ruleName = "declaration-block-semicolon-newline-after";
12
13 const messages = ruleMessages(ruleName, {
14   expectedAfter: () => 'Expected newline after ";"',
15   expectedAfterMultiLine: () =>
16     'Expected newline after ";" in a multi-line declaration block',
17   rejectedAfterMultiLine: () =>
18     'Unexpected newline after ";" in a multi-line declaration block'
19 });
20
21 const rule = function(expectation) {
22   const checker = whitespaceChecker("newline", expectation, messages);
23
24   return (root, result) => {
25     const validOptions = validateOptions(result, ruleName, {
26       actual: expectation,
27       possible: ["always", "always-multi-line", "never-multi-line"]
28     });
29     if (!validOptions) {
30       return;
31     }
32
33     root.walkDecls(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 nextNode = decl.next();
41       if (!nextNode) {
42         return;
43       }
44
45       // Allow end-of-line comment
46       const nodeToCheck = nextNonCommentNode(nextNode);
47       if (!nodeToCheck) {
48         return;
49       }
50
51       checker.afterOneOnly({
52         source: rawNodeString(nodeToCheck),
53         index: -1,
54         lineCheckStr: blockString(parentRule),
55         err: m => {
56           report({
57             message: m,
58             node: decl,
59             index: decl.toString().length + 1,
60             result,
61             ruleName
62           });
63         }
64       });
65     });
66   };
67 };
68
69 rule.ruleName = ruleName;
70 rule.messages = messages;
71 module.exports = rule;