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"]
32 unexpectedWhitespace
: "Unexpected whitespace after {{type}} operator.",
33 expectedWhitespace
: "Expected whitespace after {{type}} operator."
38 const sourceCode
= context
.getSourceCode(),
39 alwaysSpace
= context
.options
[0] === "always";
41 //--------------------------------------------------------------------------
43 //--------------------------------------------------------------------------
46 * Checks whitespace between rest/spread operators and their expressions
47 * @param {ASTNode} node The node to check
50 function checkWhiteSpace(node
) {
51 const operator
= sourceCode
.getFirstToken(node
),
52 nextToken
= sourceCode
.getTokenAfter(operator
),
53 hasWhitespace
= sourceCode
.isSpaceBetweenTokens(operator
, nextToken
);
59 if (node
.parent
.type
=== "ObjectExpression") {
65 if (node
.parent
.type
=== "ObjectPattern") {
69 case "ExperimentalSpreadProperty":
70 type
= "spread property";
72 case "ExperimentalRestProperty":
73 type
= "rest property";
79 if (alwaysSpace
&& !hasWhitespace
) {
83 line
: operator
.loc
.end
.line
,
84 column
: operator
.loc
.end
.column
86 messageId
: "expectedWhitespace",
91 return fixer
.replaceTextRange([operator
.range
[1], nextToken
.range
[0]], " ");
94 } else if (!alwaysSpace
&& hasWhitespace
) {
98 line
: operator
.loc
.end
.line
,
99 column
: operator
.loc
.end
.column
101 messageId
: "unexpectedWhitespace",
106 return fixer
.removeRange([operator
.range
[1], nextToken
.range
[0]]);
112 //--------------------------------------------------------------------------
114 //--------------------------------------------------------------------------
117 SpreadElement
: checkWhiteSpace
,
118 RestElement
: checkWhiteSpace
,
119 ExperimentalSpreadProperty
: checkWhiteSpace
,
120 ExperimentalRestProperty
: checkWhiteSpace