Skip to content

Commit

Permalink
fix: parentheses issues
Browse files Browse the repository at this point in the history
  • Loading branch information
nopeless committed Jul 8, 2023
1 parent ce8d993 commit f27b58b
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 13 deletions.
24 changes: 14 additions & 10 deletions lib/rules/no-promise-executor-return.js
Expand Up @@ -78,28 +78,32 @@ function expressionIsVoid(node) {
*/
function voidPrependFixer(sourceCode, node, fixer) {

/*
* prepending `void ` will fail if the node has a lower precedence than void
*/
// prepending `void ` will fail if the node has a lower precedence than void
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 === ")")) {
if (!astUtils.isParenthesised(sourceCode, node)) {
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);
// avoid parentheses issues
const returnOrArrowToken = sourceCode.getTokenBefore(
node,
node.parent.type === "ArrowFunctionExpression"
? astUtils.isArrowToken

return fixer.insertTextBefore(firstToken, "void ");
}
// isReturnToken
: token => token.type === "Keyword" && token.value === "return"
);

// avoid spacing issue
const firstToken = sourceCode.getTokenAfter(returnOrArrowToken);

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

/**
Expand Down
25 changes: 22 additions & 3 deletions tests/lib/rules/no-promise-executor-return.js
Expand Up @@ -290,7 +290,7 @@ ruleTester.run("no-promise-executor-return", rule, {
"new Promise(r => {() => {}})"
]),

//
// primitives
suggestion({
code:
"new Promise(r => null)",
Expand All @@ -311,7 +311,7 @@ ruleTester.run("no-promise-executor-return", rule, {
"new Promise(r => {null})"
]),

//
// inline comments
suggestion({
code:
"new Promise(r => /*hi*/ ~0)",
Expand Down Expand Up @@ -350,7 +350,7 @@ ruleTester.run("no-promise-executor-return", rule, {
}]
}),


// multiple returns
suggestion({
code:
"new Promise(r => { if (foo) { return void 0 } return 0 })",
Expand All @@ -361,6 +361,25 @@ ruleTester.run("no-promise-executor-return", rule, {
"new Promise(r => { if (foo) { return void 0 } return void 0 })"
]),

// return assignment
suggestion({
code: "new Promise(resolve => { return (foo = resolve(1)); })",
options: [{
allowVoid: true
}]
}, [
"new Promise(resolve => { return void (foo = resolve(1)); })"
]),
suggestion({
code: "new Promise(resolve => r = resolve)",
options: [{
allowVoid: true
}]
}, [
"new Promise(resolve => void (r = resolve))",
"new Promise(resolve => {r = resolve})"
]),

// snapshot
suggestion({
code:
Expand Down

0 comments on commit f27b58b

Please sign in to comment.