From f5b4d6a809dde136af4e168801adad49a6ef48c5 Mon Sep 17 00:00:00 2001 From: Patrick Ahmetovic Date: Wed, 31 Mar 2021 18:37:43 +0200 Subject: [PATCH] Fix: require-atomic-updates false positives in loops (fixes #14208) --- lib/rules/require-atomic-updates.js | 7 +++++-- tests/lib/rules/require-atomic-updates.js | 24 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/rules/require-atomic-updates.js b/lib/rules/require-atomic-updates.js index c552f1bd8258..a77b01c11642 100644 --- a/lib/rules/require-atomic-updates.js +++ b/lib/rules/require-atomic-updates.js @@ -224,13 +224,16 @@ module.exports = { segmentInfo.markAsRead(codePath.currentSegments, name); } + const isVariableDeclaration = isLocalVariableWithoutEscape(variable, isMemberAccess) || + node.parent.type === "VariableDeclarator"; + /* * Register the variable to verify after ESLint traversed the `writeExpr` node * if this reference is an assignment to a variable which is referred from other closure. */ if (writeExpr && - writeExpr.parent.right === writeExpr && // ← exclude variable declarations. - !isLocalVariableWithoutEscape(variable, isMemberAccess) + writeExpr.parent.right === writeExpr && + !isVariableDeclaration ) { let refs = assignmentReferences.get(writeExpr); diff --git a/tests/lib/rules/require-atomic-updates.js b/tests/lib/rules/require-atomic-updates.js index cd51e38ffbdb..4fd6bc268935 100644 --- a/tests/lib/rules/require-atomic-updates.js +++ b/tests/lib/rules/require-atomic-updates.js @@ -162,6 +162,30 @@ ruleTester.run("require-atomic-updates", rule, { count -= 1 return } + `, + + // https://github.com/eslint/eslint/issues/14208 + ` + async function foo(e) { + } + + async function run() { + const input = []; + const props = []; + + for(const entry of input) { + const prop = props.find(a => a.id === entry.id) || null; + await foo(entry); + } + + for(const entry of input) { + const prop = props.find(a => a.id === entry.id) || null; + } + + for(const entry2 of input) { + const prop = props.find(a => a.id === entry2.id) || null; + } + } ` ],