2 * @fileoverview Rule to disallow whitespace before properties
7 //------------------------------------------------------------------------------
9 //------------------------------------------------------------------------------
11 const astUtils = require("./utils/ast-utils");
13 //------------------------------------------------------------------------------
15 //------------------------------------------------------------------------------
22 description: "disallow whitespace before properties",
23 category: "Stylistic Issues",
25 url: "https://eslint.org/docs/rules/no-whitespace-before-property"
28 fixable: "whitespace",
33 const sourceCode = context.getSourceCode();
35 //--------------------------------------------------------------------------
37 //--------------------------------------------------------------------------
40 * Reports whitespace before property token
41 * @param {ASTNode} node the node to report in the event of an error
42 * @param {Token} leftToken the left token
43 * @param {Token} rightToken the right token
47 function reportError(node, leftToken, rightToken) {
48 const replacementText = node.computed ? "" : ".";
52 message: "Unexpected whitespace before property {{propName}}.",
54 propName: sourceCode.getText(node.property)
57 if (!node.computed && astUtils.isDecimalInteger(node.object)) {
60 * If the object is a number literal, fixing it to something like 5.toString() would cause a SyntaxError.
61 * Don't fix this case.
65 return fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], replacementText);
70 //--------------------------------------------------------------------------
72 //--------------------------------------------------------------------------
75 MemberExpression(node) {
79 if (!astUtils.isTokenOnSameLine(node.object, node.property)) {
84 rightToken = sourceCode.getTokenBefore(node.property, astUtils.isOpeningBracketToken);
85 leftToken = sourceCode.getTokenBefore(rightToken);
87 rightToken = sourceCode.getFirstToken(node.property);
88 leftToken = sourceCode.getTokenBefore(rightToken, 1);
91 if (sourceCode.isSpaceBetweenTokens(leftToken, rightToken)) {
92 reportError(node, leftToken, rightToken);