minor adjustment to readme
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / eslint / lib / rules / no-whitespace-before-property.js
1 /**
2  * @fileoverview Rule to disallow whitespace before properties
3  * @author Kai Cataldo
4  */
5 "use strict";
6
7 //------------------------------------------------------------------------------
8 // Requirements
9 //------------------------------------------------------------------------------
10
11 const astUtils = require("./utils/ast-utils");
12
13 //------------------------------------------------------------------------------
14 // Rule Definition
15 //------------------------------------------------------------------------------
16
17 module.exports = {
18     meta: {
19         type: "layout",
20
21         docs: {
22             description: "disallow whitespace before properties",
23             category: "Stylistic Issues",
24             recommended: false,
25             url: "https://eslint.org/docs/rules/no-whitespace-before-property"
26         },
27
28         fixable: "whitespace",
29         schema: []
30     },
31
32     create(context) {
33         const sourceCode = context.getSourceCode();
34
35         //--------------------------------------------------------------------------
36         // Helpers
37         //--------------------------------------------------------------------------
38
39         /**
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
44          * @returns {void}
45          * @private
46          */
47         function reportError(node, leftToken, rightToken) {
48             const replacementText = node.computed ? "" : ".";
49
50             context.report({
51                 node,
52                 message: "Unexpected whitespace before property {{propName}}.",
53                 data: {
54                     propName: sourceCode.getText(node.property)
55                 },
56                 fix(fixer) {
57                     if (!node.computed && astUtils.isDecimalInteger(node.object)) {
58
59                         /*
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.
62                          */
63                         return null;
64                     }
65                     return fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], replacementText);
66                 }
67             });
68         }
69
70         //--------------------------------------------------------------------------
71         // Public
72         //--------------------------------------------------------------------------
73
74         return {
75             MemberExpression(node) {
76                 let rightToken;
77                 let leftToken;
78
79                 if (!astUtils.isTokenOnSameLine(node.object, node.property)) {
80                     return;
81                 }
82
83                 if (node.computed) {
84                     rightToken = sourceCode.getTokenBefore(node.property, astUtils.isOpeningBracketToken);
85                     leftToken = sourceCode.getTokenBefore(rightToken);
86                 } else {
87                     rightToken = sourceCode.getFirstToken(node.property);
88                     leftToken = sourceCode.getTokenBefore(rightToken, 1);
89                 }
90
91                 if (sourceCode.isSpaceBetweenTokens(leftToken, rightToken)) {
92                     reportError(node, leftToken, rightToken);
93                 }
94             }
95         };
96     }
97 };