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");
9 const ruleName = "declaration-block-semicolon-newline-before";
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'
19 const rule = function(expectation) {
20 const checker = whitespaceChecker("newline", expectation, messages);
22 return function(root, result) {
23 const validOptions = validateOptions(result, ruleName, {
25 possible: ["always", "always-multi-line", "never-multi-line"]
31 root.walkDecls(function(decl) {
32 const parentRule = decl.parent;
33 if (!parentRule.raws.semicolon && parentRule.last === decl) {
37 const declString = decl.toString();
39 checker.beforeAllowingIndentation({
41 index: declString.length,
42 lineCheckStr: blockString(parentRule),
47 index: decl.toString().length - 1,
57 rule.ruleName = ruleName;
58 rule.messages = messages;
59 module.exports = rule;