+++ /dev/null
-"use strict";
-
-const isOnlyWhitespace = require("../../utils/isOnlyWhitespace");
-const optionsMatches = require("../../utils/optionsMatches");
-const report = require("../../utils/report");
-const ruleMessages = require("../../utils/ruleMessages");
-const styleSearch = require("style-search");
-const validateOptions = require("../../utils/validateOptions");
-
-const ruleName = "no-eol-whitespace";
-
-const messages = ruleMessages(ruleName, {
- rejected: "Unexpected whitespace at end of line"
-});
-
-const whitespacesToReject = new Set([" ", "\t"]);
-
-const rule = function(on, options) {
- return (root, result) => {
- const validOptions = validateOptions(
- result,
- ruleName,
- {
- actual: on
- },
- {
- optional: true,
- actual: options,
- possible: {
- ignore: ["empty-lines"]
- }
- }
- );
- if (!validOptions) {
- return;
- }
-
- const rootString = root.toString();
- styleSearch(
- {
- source: rootString,
- target: ["\n", "\r"],
- comments: "check"
- },
- match => {
- // If the character before newline is not whitespace, ignore
- if (!whitespacesToReject.has(rootString[match.startIndex - 1])) {
- return;
- }
-
- if (optionsMatches(options, "ignore", "empty-lines")) {
- // If there is only whitespace between the previous newline and
- // this newline, ignore
- const lineBefore = rootString.substring(
- match.startIndex + 1,
- rootString.lastIndexOf("\n", match.startIndex - 1)
- );
- if (isOnlyWhitespace(lineBefore)) {
- return;
- }
- }
-
- report({
- message: messages.rejected,
- node: root,
- index: match.startIndex - 1,
- result,
- ruleName
- });
- }
- );
- };
-};
-
-rule.ruleName = ruleName;
-rule.messages = messages;
-module.exports = rule;