From 35439f1572e1a8888f7feb6c5e51a15b5582495d Mon Sep 17 00:00:00 2001 From: Francesco Trotta Date: Sat, 31 Dec 2022 05:21:53 +0100 Subject: [PATCH] fix: correct syntax error in `prefer-arrow-callback` autofix (#16722) Fixes #16718 --- lib/rules/prefer-arrow-callback.js | 3 +- tests/lib/rules/prefer-arrow-callback.js | 40 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/rules/prefer-arrow-callback.js b/lib/rules/prefer-arrow-callback.js index 8af7161a0f9..340e5e35a11 100644 --- a/lib/rules/prefer-arrow-callback.js +++ b/lib/rules/prefer-arrow-callback.js @@ -335,6 +335,7 @@ module.exports = { // Convert the function expression to an arrow function. const functionToken = sourceCode.getFirstToken(node, node.async ? 1 : 0); const leftParenToken = sourceCode.getTokenAfter(functionToken, astUtils.isOpeningParenToken); + const tokenBeforeBody = sourceCode.getTokenBefore(node.body); if (sourceCode.commentsExistBetween(functionToken, leftParenToken)) { @@ -348,7 +349,7 @@ module.exports = { // Remove extra tokens and spaces. yield fixer.removeRange([functionToken.range[0], leftParenToken.range[0]]); } - yield fixer.insertTextBefore(node.body, "=> "); + yield fixer.insertTextAfter(tokenBeforeBody, " =>"); // Get the node that will become the new arrow function. let replacedNode = callbackInfo.isLexicalThis ? node.parent.parent : node; diff --git a/tests/lib/rules/prefer-arrow-callback.js b/tests/lib/rules/prefer-arrow-callback.js index cb46c4a5021..eba8c051140 100644 --- a/tests/lib/rules/prefer-arrow-callback.js +++ b/tests/lib/rules/prefer-arrow-callback.js @@ -205,6 +205,46 @@ ruleTester.run("prefer-arrow-callback", rule, { code: "foo((function() { return this; }?.bind)(this));", output: null, errors + }, + + // https://github.com/eslint/eslint/issues/16718 + { + code: ` + test( + function () + { } + ); + `, + output: ` + test( + () => + { } + ); + `, + errors + }, + { + code: ` + test( + function ( + ...args + ) /* Lorem ipsum + dolor sit amet. */ { + return args; + } + ); + `, + output: ` + test( + ( + ...args + ) => /* Lorem ipsum + dolor sit amet. */ { + return args; + } + ); + `, + errors } ] });