2 * @fileoverview Enforce spacing between rest and spread operators and their expressions.
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
17 description: "enforce spacing between rest and spread operators and their expressions",
18 category: "ECMAScript 6",
20 url: "https://eslint.org/docs/rules/rest-spread-spacing"
23 fixable: "whitespace",
27 enum: ["always", "never"]
33 const sourceCode = context.getSourceCode(),
34 alwaysSpace = context.options[0] === "always";
36 //--------------------------------------------------------------------------
38 //--------------------------------------------------------------------------
41 * Checks whitespace between rest/spread operators and their expressions
42 * @param {ASTNode} node The node to check
45 function checkWhiteSpace(node) {
46 const operator = sourceCode.getFirstToken(node),
47 nextToken = sourceCode.getTokenAfter(operator),
48 hasWhitespace = sourceCode.isSpaceBetweenTokens(operator, nextToken);
54 if (node.parent.type === "ObjectExpression") {
60 if (node.parent.type === "ObjectPattern") {
64 case "ExperimentalSpreadProperty":
65 type = "spread property";
67 case "ExperimentalRestProperty":
68 type = "rest property";
74 if (alwaysSpace && !hasWhitespace) {
78 line: operator.loc.end.line,
79 column: operator.loc.end.column
81 message: "Expected whitespace after {{type}} operator.",
86 return fixer.replaceTextRange([operator.range[1], nextToken.range[0]], " ");
89 } else if (!alwaysSpace && hasWhitespace) {
93 line: operator.loc.end.line,
94 column: operator.loc.end.column
96 message: "Unexpected whitespace after {{type}} operator.",
101 return fixer.removeRange([operator.range[1], nextToken.range[0]]);
107 //--------------------------------------------------------------------------
109 //--------------------------------------------------------------------------
112 SpreadElement: checkWhiteSpace,
113 RestElement: checkWhiteSpace,
114 ExperimentalSpreadProperty: checkWhiteSpace,
115 ExperimentalRestProperty: checkWhiteSpace