Permalink
Cannot retrieve contributors at this time
127 lines (111 sloc)
4.23 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/eslint/lib/rules/yield-star-spacing.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @fileoverview Rule to check the spacing around the * in yield* expressions. | |
* @author Bryan Smith | |
*/ | |
"use strict"; | |
//------------------------------------------------------------------------------ | |
// Rule Definition | |
//------------------------------------------------------------------------------ | |
/** @type {import('../shared/types').Rule} */ | |
module.exports = { | |
meta: { | |
type: "layout", | |
docs: { | |
description: "Require or disallow spacing around the `*` in `yield*` expressions", | |
recommended: false, | |
url: "https://eslint.org/docs/latest/rules/yield-star-spacing" | |
}, | |
fixable: "whitespace", | |
schema: [ | |
{ | |
oneOf: [ | |
{ | |
enum: ["before", "after", "both", "neither"] | |
}, | |
{ | |
type: "object", | |
properties: { | |
before: { type: "boolean" }, | |
after: { type: "boolean" } | |
}, | |
additionalProperties: false | |
} | |
] | |
} | |
], | |
messages: { | |
missingBefore: "Missing space before *.", | |
missingAfter: "Missing space after *.", | |
unexpectedBefore: "Unexpected space before *.", | |
unexpectedAfter: "Unexpected space after *." | |
} | |
}, | |
create(context) { | |
const sourceCode = context.sourceCode; | |
const mode = (function(option) { | |
if (!option || typeof option === "string") { | |
return { | |
before: { before: true, after: false }, | |
after: { before: false, after: true }, | |
both: { before: true, after: true }, | |
neither: { before: false, after: false } | |
}[option || "after"]; | |
} | |
return option; | |
}(context.options[0])); | |
/** | |
* Checks the spacing between two tokens before or after the star token. | |
* @param {string} side Either "before" or "after". | |
* @param {Token} leftToken `function` keyword token if side is "before", or | |
* star token if side is "after". | |
* @param {Token} rightToken Star token if side is "before", or identifier | |
* token if side is "after". | |
* @returns {void} | |
*/ | |
function checkSpacing(side, leftToken, rightToken) { | |
if (sourceCode.isSpaceBetweenTokens(leftToken, rightToken) !== mode[side]) { | |
const after = leftToken.value === "*"; | |
const spaceRequired = mode[side]; | |
const node = after ? leftToken : rightToken; | |
let messageId = ""; | |
if (spaceRequired) { | |
messageId = side === "before" ? "missingBefore" : "missingAfter"; | |
} else { | |
messageId = side === "before" ? "unexpectedBefore" : "unexpectedAfter"; | |
} | |
context.report({ | |
node, | |
messageId, | |
fix(fixer) { | |
if (spaceRequired) { | |
if (after) { | |
return fixer.insertTextAfter(node, " "); | |
} | |
return fixer.insertTextBefore(node, " "); | |
} | |
return fixer.removeRange([leftToken.range[1], rightToken.range[0]]); | |
} | |
}); | |
} | |
} | |
/** | |
* Enforces the spacing around the star if node is a yield* expression. | |
* @param {ASTNode} node A yield expression node. | |
* @returns {void} | |
*/ | |
function checkExpression(node) { | |
if (!node.delegate) { | |
return; | |
} | |
const tokens = sourceCode.getFirstTokens(node, 3); | |
const yieldToken = tokens[0]; | |
const starToken = tokens[1]; | |
const nextToken = tokens[2]; | |
checkSpacing("before", yieldToken, starToken); | |
checkSpacing("after", starToken, nextToken); | |
} | |
return { | |
YieldExpression: checkExpression | |
}; | |
} | |
}; |