.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / declaration-block-semicolon-newline-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-newline-before";
10
11 const messages = ruleMessages(ruleName, {
12   expectedBefore: () => 'Expected newline before ";"',
13   expectedBeforeMultiLine: () =>
14     'Expected newline before ";" in a multi-line declaration block',
15   rejectedBeforeMultiLine: () =>
16     'Unexpected whitespace before ";" in a multi-line declaration block'
17 });
18
19 const rule = function(expectation) {
20   const checker = whitespaceChecker("newline", expectation, messages);
21
22   return function(root, result) {
23     const validOptions = validateOptions(result, ruleName, {
24       actual: expectation,
25       possible: ["always", "always-multi-line", "never-multi-line"]
26     });
27     if (!validOptions) {
28       return;
29     }
30
31     root.walkDecls(function(decl) {
32       const parentRule = decl.parent;
33       if (!parentRule.raws.semicolon && parentRule.last === decl) {
34         return;
35       }
36
37       const declString = decl.toString();
38
39       checker.beforeAllowingIndentation({
40         source: declString,
41         index: declString.length,
42         lineCheckStr: blockString(parentRule),
43         err: m => {
44           report({
45             message: m,
46             node: decl,
47             index: decl.toString().length - 1,
48             result,
49             ruleName
50           });
51         }
52       });
53     });
54   };
55 };
56
57 rule.ruleName = ruleName;
58 rule.messages = messages;
59 module.exports = rule;