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 messageId: "expectedWhitespace",
88 return fixer.replaceTextRange([operator.range[1], nextToken.range[0]], " ");
91 } else if (!alwaysSpace && hasWhitespace) {
95 start: operator.loc.end,
96 end: nextToken.loc.start
98 messageId: "unexpectedWhitespace",
103 return fixer.removeRange([operator.range[1], nextToken.range[0]]);
109 //--------------------------------------------------------------------------
111 //--------------------------------------------------------------------------
114 SpreadElement: checkWhiteSpace,
115 RestElement: checkWhiteSpace,
116 ExperimentalSpreadProperty: checkWhiteSpace,
117 ExperimentalRestProperty: checkWhiteSpace