|                                                                                                                           |  | /** * @fileoverview Enforce spacing between rest and spread operators and their expressions. * @author Kai Cataldo * @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: "Enforce spacing between rest and spread operators and their expressions",            recommended: false,            url: "https://eslint.org/docs/latest/rules/rest-spread-spacing"        },
        fixable: "whitespace",
        schema: [            {                enum: ["always", "never"]            }        ],
        messages: {            unexpectedWhitespace: "Unexpected whitespace after {{type}} operator.",            expectedWhitespace: "Expected whitespace after {{type}} operator."        }    },
    create(context) {        const sourceCode = context.sourceCode,            alwaysSpace = context.options[0] === "always";
        //--------------------------------------------------------------------------
        // Helpers
        //--------------------------------------------------------------------------
        /**         * Checks whitespace between rest/spread operators and their expressions         * @param {ASTNode} node The node to check         * @returns {void}         */        function checkWhiteSpace(node) {            const operator = sourceCode.getFirstToken(node),                nextToken = sourceCode.getTokenAfter(operator),                hasWhitespace = sourceCode.isSpaceBetweenTokens(operator, nextToken);            let type;
            switch (node.type) {                case "SpreadElement":                    type = "spread";                    if (node.parent.type === "ObjectExpression") {                        type += " property";                    }                    break;                case "RestElement":                    type = "rest";                    if (node.parent.type === "ObjectPattern") {                        type += " property";                    }                    break;                case "ExperimentalSpreadProperty":                    type = "spread property";                    break;                case "ExperimentalRestProperty":                    type = "rest property";                    break;                default:                    return;            }
            if (alwaysSpace && !hasWhitespace) {                context.report({                    node,                    loc: operator.loc,                    messageId: "expectedWhitespace",                    data: {                        type                    },                    fix(fixer) {                        return fixer.replaceTextRange([operator.range[1], nextToken.range[0]], " ");                    }                });            } else if (!alwaysSpace && hasWhitespace) {                context.report({                    node,                    loc: {                        start: operator.loc.end,                        end: nextToken.loc.start                    },                    messageId: "unexpectedWhitespace",                    data: {                        type                    },                    fix(fixer) {                        return fixer.removeRange([operator.range[1], nextToken.range[0]]);                    }                });            }        }
        //--------------------------------------------------------------------------
        // Public
        //--------------------------------------------------------------------------
        return {            SpreadElement: checkWhiteSpace,            RestElement: checkWhiteSpace,            ExperimentalSpreadProperty: checkWhiteSpace,            ExperimentalRestProperty: checkWhiteSpace        };    }};
 |