diff --git a/crates/oxc_linter/src/rules/eslint/no_unused_vars/tests/oxc.rs b/crates/oxc_linter/src/rules/eslint/no_unused_vars/tests/oxc.rs index 7e54e753f50a6..2cae8b7bed9e5 100644 --- a/crates/oxc_linter/src/rules/eslint/no_unused_vars/tests/oxc.rs +++ b/crates/oxc_linter/src/rules/eslint/no_unused_vars/tests/oxc.rs @@ -37,6 +37,13 @@ fn test_vars_simple() { ", None, ), + ( + " + const a = 0 + obj[a]++; + ", + None, + ), ]; let fail = vec![ ("let a = 1", None), diff --git a/crates/oxc_linter/src/rules/eslint/no_unused_vars/usage.rs b/crates/oxc_linter/src/rules/eslint/no_unused_vars/usage.rs index 898a26b34a95c..61b08ef0d0b30 100644 --- a/crates/oxc_linter/src/rules/eslint/no_unused_vars/usage.rs +++ b/crates/oxc_linter/src/rules/eslint/no_unused_vars/usage.rs @@ -412,6 +412,13 @@ impl<'s, 'a> Symbol<'s, 'a> { // a = yield a // <- still considered used b/c it's propagated to the caller // } AstKind::YieldExpression(_) => return false, + AstKind::MemberExpression(MemberExpression::ComputedMemberExpression(computed)) => { + // obj[a]++; + // ^ the reference is used as property + if computed.expression.span().contains_inclusive(ref_span) { + return false; + } + } _ => { /* continue up tree */ } } }