From 3619fdabf06195c57cf315476870bf8a2bdd84bd Mon Sep 17 00:00:00 2001 From: Jelle van der Waa Date: Mon, 8 Jul 2024 12:15:46 +0200 Subject: [PATCH] fix(eslint/radix): detect yield Number.parseInt variant The eslint rule perfer-numeric-literals has a test for the yield variant which the radix testsuite did not have. --- crates/oxc_linter/src/rules/eslint/radix.rs | 13 +++++++++++++ crates/oxc_linter/src/snapshots/radix.snap | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/crates/oxc_linter/src/rules/eslint/radix.rs b/crates/oxc_linter/src/rules/eslint/radix.rs index 08e3f9b6d087f..3777b5c8e0408 100644 --- a/crates/oxc_linter/src/rules/eslint/radix.rs +++ b/crates/oxc_linter/src/rules/eslint/radix.rs @@ -83,6 +83,17 @@ impl Rule for Radix { { Self::check_arguments(self, call_expr, ctx); } + } else if let Expression::ParenthesizedExpression(paren_expr) = + &member_expr.object + { + if let Expression::Identifier(ident) = &paren_expr.expression { + if ident.name == "Number" + && member_expr.property.name == "parseInt" + && ctx.symbols().get_symbol_id_from_name("Number").is_none() + { + Self::check_arguments(self, call_expr, ctx); + } + } } } Expression::ChainExpression(chain_expr) => { @@ -192,6 +203,7 @@ fn test() { ("var Number; Number.parseInt(foo, 10);", Some(json!(["as-needed"]))), // ("/* globals parseInt:off */ parseInt(foo);", Some(json!(["always"]))), // ("Number.parseInt(foo, 10);", Some(json!(["as-needed"]))), // { globals: { Number: "off" } } + (r#"function *f(){ yield(Number).parseInt("10", foo) }"#, None), // { "ecmaVersion": 6 }, ]; let fail = vec![ @@ -220,6 +232,7 @@ fn test() { (r#"Number.parseInt?.("10");"#, None), (r#"Number?.parseInt("10");"#, None), (r#"(Number?.parseInt)("10");"#, None), + ("function *f(){ yield(Number).parseInt() }", None), // { "ecmaVersion": 6 }, ]; Tester::new(Radix::NAME, pass, fail).test_and_snapshot(); diff --git a/crates/oxc_linter/src/snapshots/radix.snap b/crates/oxc_linter/src/snapshots/radix.snap index 0db0371c831ff..91c6e189ebc90 100644 --- a/crates/oxc_linter/src/snapshots/radix.snap +++ b/crates/oxc_linter/src/snapshots/radix.snap @@ -150,3 +150,9 @@ source: crates/oxc_linter/src/tester.rs 1 │ (Number?.parseInt)("10"); · ──────────────────────── ╰──── + + ⚠ eslint(radix): Missing parameters. + ╭─[radix.tsx:1:21] + 1 │ function *f(){ yield(Number).parseInt() } + · ─────────────────── + ╰────