From 2c1dab6ba4b6db0fa7fdcc3f3e29696b5a1c6ba2 Mon Sep 17 00:00:00 2001 From: camc314 <18101008+camc314@users.noreply.github.com> Date: Tue, 5 Aug 2025 12:48:15 +0000 Subject: [PATCH] fix(linter/no-unassigned-vars): false positive with variables in for loop (#12833) --- .../oxc_linter/src/rules/eslint/no_unassigned_vars.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/crates/oxc_linter/src/rules/eslint/no_unassigned_vars.rs b/crates/oxc_linter/src/rules/eslint/no_unassigned_vars.rs index 52c32fb76c66d..c0a9d115ac831 100644 --- a/crates/oxc_linter/src/rules/eslint/no_unassigned_vars.rs +++ b/crates/oxc_linter/src/rules/eslint/no_unassigned_vars.rs @@ -60,12 +60,20 @@ impl Rule for NoUnassignedVars { if declarator.init.is_some() || declarator.kind.is_const() { return; } - let AstKind::VariableDeclaration(parent) = ctx.nodes().parent_kind(node.id()) else { + let parent_node = ctx.nodes().parent_node(node.id()); + let AstKind::VariableDeclaration(parent) = parent_node.kind() else { return; }; if parent.declare { return; } + let grand_parent = ctx.nodes().parent_node(parent_node.id()); + if matches!( + grand_parent.kind(), + AstKind::ForStatement(_) | AstKind::ForInStatement(_) | AstKind::ForOfStatement(_) + ) { + return; + } if ctx .nodes() .ancestors(node.id()) @@ -123,6 +131,7 @@ fn test() { export = x; } ", + "for (let p of pathToRemove) { p.remove() }", ]; let fail = vec![