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; + } + } ` ],