mirror of
https://github.com/thangisme/notes.git
synced 2024-11-01 10:17:42 -04:00
73 lines
1.8 KiB
JavaScript
73 lines
1.8 KiB
JavaScript
|
"use strict"
|
||
|
|
||
|
const isOnlyWhitespace = require("../../utils/isOnlyWhitespace")
|
||
|
const optionsMatches = require("../../utils/optionsMatches")
|
||
|
const report = require("../../utils/report")
|
||
|
const ruleMessages = require("../../utils/ruleMessages")
|
||
|
const validateOptions = require("../../utils/validateOptions")
|
||
|
const styleSearch = require("style-search")
|
||
|
|
||
|
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
|