2 * @fileoverview Rule to check the spacing around the * in generator functions.
3 * @author Jamund Ferguson
4 * @copyright 2015 Brandon Mills. All rights reserved.
5 * @copyright 2014 Jamund Ferguson. All rights reserved.
10 //------------------------------------------------------------------------------
12 //------------------------------------------------------------------------------
14 module.exports = function(context) {
17 before: { before: true, after: false },
18 after: { before: false, after: true },
19 both: { before: true, after: true },
20 neither: { before: false, after: false }
21 }[context.options[0] || "before"];
24 * Checks the spacing between two tokens before or after the star token.
25 * @param {string} side Either "before" or "after".
26 * @param {Token} leftToken `function` keyword token if side is "before", or
27 * star token if side is "after".
28 * @param {Token} rightToken Star token if side is "before", or identifier
29 * token if side is "after".
32 function checkSpacing(side, leftToken, rightToken) {
33 if (!!(rightToken.range[0] - leftToken.range[1]) !== mode[side]) {
35 leftToken.value === "*" ? leftToken : rightToken,
36 "{{type}} space {{side}} *.",
38 type: mode[side] ? "Missing" : "Unexpected",
46 * Enforces the spacing around the star if node is a generator function.
47 * @param {ASTNode} node A function expression or declaration node.
50 function checkFunction(node) {
51 var isMethod, starToken, tokenBefore, tokenAfter;
53 if (!node.generator) {
57 isMethod = !!context.getAncestors().pop().method;
60 starToken = context.getTokenBefore(node, 1);
62 starToken = context.getFirstToken(node, 1);
65 // Only check before when preceded by `function` keyword
66 tokenBefore = context.getTokenBefore(starToken);
67 if (tokenBefore.value === "function") {
68 checkSpacing("before", tokenBefore, starToken);
71 // Only check after when followed by an identifier
72 tokenAfter = context.getTokenAfter(starToken);
73 if (tokenAfter.type === "Identifier") {
74 checkSpacing("after", starToken, tokenAfter);
79 "FunctionDeclaration": checkFunction,
80 "FunctionExpression": checkFunction