3 const isOnlyWhitespace = require("../../utils/isOnlyWhitespace");
4 const optionsMatches = require("../../utils/optionsMatches");
5 const report = require("../../utils/report");
6 const ruleMessages = require("../../utils/ruleMessages");
7 const styleSearch = require("style-search");
8 const validateOptions = require("../../utils/validateOptions");
10 const ruleName = "no-eol-whitespace";
12 const messages = ruleMessages(ruleName, {
13 rejected: "Unexpected whitespace at end of line"
16 const whitespacesToReject = new Set([" ", "\t"]);
18 const rule = function(on, options) {
19 return (root, result) => {
20 const validOptions = validateOptions(
30 ignore: ["empty-lines"]
38 const rootString = root.toString();
46 // If the character before newline is not whitespace, ignore
47 if (!whitespacesToReject.has(rootString[match.startIndex - 1])) {
51 if (optionsMatches(options, "ignore", "empty-lines")) {
52 // If there is only whitespace between the previous newline and
53 // this newline, ignore
54 const lineBefore = rootString.substring(
56 rootString.lastIndexOf("\n", match.startIndex - 1)
58 if (isOnlyWhitespace(lineBefore)) {
64 message: messages.rejected,
66 index: match.startIndex - 1,
75 rule.ruleName = ruleName;
76 rule.messages = messages;
77 module.exports = rule;