|                                                                                                                   |  | /** * @fileoverview Require or disallow newline at the end of files * @author Nodeca Team <https://github.com/nodeca>
 * @deprecated in ESLint v8.53.0 */"use strict";
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
/** @type {import('../shared/types').Rule} */module.exports = {    meta: {        deprecated: true,        replacedBy: [],        type: "layout",
        docs: {            description: "Require or disallow newline at the end of files",            recommended: false,            url: "https://eslint.org/docs/latest/rules/eol-last"        },
        fixable: "whitespace",
        schema: [            {                enum: ["always", "never", "unix", "windows"]            }        ],
        messages: {            missing: "Newline required at end of file but not found.",            unexpected: "Newline not allowed at end of file."        }    },    create(context) {
        //--------------------------------------------------------------------------
        // Public
        //--------------------------------------------------------------------------
        return {            Program: function checkBadEOF(node) {                const sourceCode = context.sourceCode,                    src = sourceCode.getText(),                    lastLine = sourceCode.lines[sourceCode.lines.length - 1],                    location = {                        column: lastLine.length,                        line: sourceCode.lines.length                    },                    LF = "\n",                    CRLF = `\r${LF}`,                    endsWithNewline = src.endsWith(LF);
                /*                 * Empty source is always valid: No content in file so we don't                 * need to lint for a newline on the last line of content.                 */                if (!src.length) {                    return;                }
                let mode = context.options[0] || "always",                    appendCRLF = false;
                if (mode === "unix") {
                    // `"unix"` should behave exactly as `"always"`
                    mode = "always";                }                if (mode === "windows") {
                    // `"windows"` should behave exactly as `"always"`, but append CRLF in the fixer for backwards compatibility
                    mode = "always";                    appendCRLF = true;                }                if (mode === "always" && !endsWithNewline) {
                    // File is not newline-terminated, but should be
                    context.report({                        node,                        loc: location,                        messageId: "missing",                        fix(fixer) {                            return fixer.insertTextAfterRange([0, src.length], appendCRLF ? CRLF : LF);                        }                    });                } else if (mode === "never" && endsWithNewline) {
                    const secondLastLine = sourceCode.lines[sourceCode.lines.length - 2];
                    // File is newline-terminated, but shouldn't be
                    context.report({                        node,                        loc: {                            start: { line: sourceCode.lines.length - 1, column: secondLastLine.length },                            end: { line: sourceCode.lines.length, column: 0 }                        },                        messageId: "unexpected",                        fix(fixer) {                            const finalEOLs = /(?:\r?\n)+$/u,                                match = finalEOLs.exec(sourceCode.text),                                start = match.index,                                end = sourceCode.text.length;
                            return fixer.replaceTextRange([start, end], "");                        }                    });                }            }        };    }};
 |