Skip to content

Commit

Permalink
fix: refactors
Browse files Browse the repository at this point in the history
  • Loading branch information
nopeless committed Jun 27, 2023
1 parent a5fa6f5 commit ce8d993
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 13 deletions.
32 changes: 21 additions & 11 deletions lib/rules/no-promise-executor-return.js
Expand Up @@ -71,22 +71,32 @@ function expressionIsVoid(node) {

/**
* Fixes the linting error by prepending "void " to the given node
* @param {Object} sourceCode context given by context.sourceCode
* @param {ASTNode} node The node to fix.
* @param {Object} fixer The fixer object provided by ESLint.
* @returns {Array<Object>|Object} - An array of fix objects or fix to apply to the node.
*/
function voidPrependFixer(node, fixer) {
function voidPrependFixer(sourceCode, node, fixer) {

/*
* prepending `void ` will fail if
* the expression is () => void () => {}
* therefore, check if the expression is a function
* prepending `void ` will fail if the node has a lower precedence than void
*/
if (node.type === "ArrowFunctionExpression") {
return [
fixer.insertTextBefore(node, "void ("),
fixer.insertTextAfter(node, ")")
];
if (astUtils.getPrecedence(node) < astUtils.getPrecedence({ type: "UnaryExpression", operator: "void" })) {

// check if there are parentheses around the node to avoid redundant parentheses
if (!(sourceCode.getTokenBefore(node).value === "(" && sourceCode.getTokenAfter(node).value === ")")) {
return [
fixer.insertTextBefore(node, "void ("),
fixer.insertTextAfter(node, ")")
];
}
}

if (node.parent.type === "ArrowFunctionExpression") {
const arrowToken = sourceCode.getTokenBefore(node, astUtils.isArrowToken);
const firstToken = sourceCode.getTokenAfter(arrowToken);

return fixer.insertTextBefore(firstToken, "void ");
}

return fixer.insertTextBefore(node, "void ");
Expand Down Expand Up @@ -183,7 +193,7 @@ module.exports = {
suggest.push({
messageId: "prependVoid",
fix(fixer) {
return voidPrependFixer(node.body, fixer);
return voidPrependFixer(sourceCode, node.body, fixer);
}
});
}
Expand Down Expand Up @@ -229,7 +239,7 @@ module.exports = {
suggest: [{
messageId: "prependVoid",
fix(fixer) {
return voidPrependFixer(node.argument, fixer);
return voidPrependFixer(sourceCode, node.argument, fixer);
}
}]
});
Expand Down
22 changes: 20 additions & 2 deletions tests/lib/rules/no-promise-executor-return.js
Expand Up @@ -251,14 +251,32 @@ ruleTester.run("no-promise-executor-return", rule, {
"new Promise(r => void 1)",
"new Promise(r => {1})"
]),
suggestion({
code: "new Promise(r => 1 ? 2 : 3)",
options: [{
allowVoid: true
}]
}, [
"new Promise(r => void (1 ? 2 : 3))",
"new Promise(r => {1 ? 2 : 3})"
]),
suggestion({
code: "new Promise(r => (1 ? 2 : 3))",
options: [{
allowVoid: true
}]
}, [
"new Promise(r => void (1 ? 2 : 3))",
"new Promise(r => {(1 ? 2 : 3)})"
]),
suggestion({
code:
"new Promise(r => (1))",
options: [{
allowVoid: true
}]
}, [
"new Promise(r => (void 1))",
"new Promise(r => void (1))",
"new Promise(r => {(1)})"
]),
suggestion({
Expand Down Expand Up @@ -351,7 +369,7 @@ ruleTester.run("no-promise-executor-return", rule, {
allowVoid: true
}]
}, [
"new Promise(r => ((void 1)))",
"new Promise(r => void ((1)))",
"new Promise(r => {((1))})"
]),

Expand Down

0 comments on commit ce8d993

Please sign in to comment.