| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 
							- /**
 
-  * @fileoverview Rule to define spacing before/after arrow function's arrow.
 
-  * @author Jxck
 
-  */
 
- "use strict";
 
- //------------------------------------------------------------------------------
 
- // Requirements
 
- //------------------------------------------------------------------------------
 
- const astUtils = require("./utils/ast-utils");
 
- //------------------------------------------------------------------------------
 
- // Rule Definition
 
- //------------------------------------------------------------------------------
 
- module.exports = {
 
-     meta: {
 
-         type: "layout",
 
-         docs: {
 
-             description: "enforce consistent spacing before and after the arrow in arrow functions",
 
-             category: "ECMAScript 6",
 
-             recommended: false,
 
-             url: "https://eslint.org/docs/rules/arrow-spacing"
 
-         },
 
-         fixable: "whitespace",
 
-         schema: [
 
-             {
 
-                 type: "object",
 
-                 properties: {
 
-                     before: {
 
-                         type: "boolean",
 
-                         default: true
 
-                     },
 
-                     after: {
 
-                         type: "boolean",
 
-                         default: true
 
-                     }
 
-                 },
 
-                 additionalProperties: false
 
-             }
 
-         ],
 
-         messages: {
 
-             expectedBefore: "Missing space before =>.",
 
-             unexpectedBefore: "Unexpected space before =>.",
 
-             expectedAfter: "Missing space after =>.",
 
-             unexpectedAfter: "Unexpected space after =>."
 
-         }
 
-     },
 
-     create(context) {
 
-         // merge rules with default
 
-         const rule = Object.assign({}, context.options[0]);
 
-         rule.before = rule.before !== false;
 
-         rule.after = rule.after !== false;
 
-         const sourceCode = context.getSourceCode();
 
-         /**
 
-          * Get tokens of arrow(`=>`) and before/after arrow.
 
-          * @param {ASTNode} node The arrow function node.
 
-          * @returns {Object} Tokens of arrow and before/after arrow.
 
-          */
 
-         function getTokens(node) {
 
-             const arrow = sourceCode.getTokenBefore(node.body, astUtils.isArrowToken);
 
-             return {
 
-                 before: sourceCode.getTokenBefore(arrow),
 
-                 arrow,
 
-                 after: sourceCode.getTokenAfter(arrow)
 
-             };
 
-         }
 
-         /**
 
-          * Count spaces before/after arrow(`=>`) token.
 
-          * @param {Object} tokens Tokens before/after arrow.
 
-          * @returns {Object} count of space before/after arrow.
 
-          */
 
-         function countSpaces(tokens) {
 
-             const before = tokens.arrow.range[0] - tokens.before.range[1];
 
-             const after = tokens.after.range[0] - tokens.arrow.range[1];
 
-             return { before, after };
 
-         }
 
-         /**
 
-          * Determines whether space(s) before after arrow(`=>`) is satisfy rule.
 
-          * if before/after value is `true`, there should be space(s).
 
-          * if before/after value is `false`, there should be no space.
 
-          * @param {ASTNode} node The arrow function node.
 
-          * @returns {void}
 
-          */
 
-         function spaces(node) {
 
-             const tokens = getTokens(node);
 
-             const countSpace = countSpaces(tokens);
 
-             if (rule.before) {
 
-                 // should be space(s) before arrow
 
-                 if (countSpace.before === 0) {
 
-                     context.report({
 
-                         node: tokens.before,
 
-                         messageId: "expectedBefore",
 
-                         fix(fixer) {
 
-                             return fixer.insertTextBefore(tokens.arrow, " ");
 
-                         }
 
-                     });
 
-                 }
 
-             } else {
 
-                 // should be no space before arrow
 
-                 if (countSpace.before > 0) {
 
-                     context.report({
 
-                         node: tokens.before,
 
-                         messageId: "unexpectedBefore",
 
-                         fix(fixer) {
 
-                             return fixer.removeRange([tokens.before.range[1], tokens.arrow.range[0]]);
 
-                         }
 
-                     });
 
-                 }
 
-             }
 
-             if (rule.after) {
 
-                 // should be space(s) after arrow
 
-                 if (countSpace.after === 0) {
 
-                     context.report({
 
-                         node: tokens.after,
 
-                         messageId: "expectedAfter",
 
-                         fix(fixer) {
 
-                             return fixer.insertTextAfter(tokens.arrow, " ");
 
-                         }
 
-                     });
 
-                 }
 
-             } else {
 
-                 // should be no space after arrow
 
-                 if (countSpace.after > 0) {
 
-                     context.report({
 
-                         node: tokens.after,
 
-                         messageId: "unexpectedAfter",
 
-                         fix(fixer) {
 
-                             return fixer.removeRange([tokens.arrow.range[1], tokens.after.range[0]]);
 
-                         }
 
-                     });
 
-                 }
 
-             }
 
-         }
 
-         return {
 
-             ArrowFunctionExpression: spaces
 
-         };
 
-     }
 
- };
 
 
  |