From 20611922fed268118bef5187d8bb3c8993225e8e Mon Sep 17 00:00:00 2001 From: azihsoyn Date: Sat, 2 Nov 2024 01:36:43 +0900 Subject: [PATCH 1/3] check is_reference_to_global_variable on no-array-constructor --- .../src/rules/eslint/no_array_constructor.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs b/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs index 540f8debe9242..b8cdd064152fd 100644 --- a/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs +++ b/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs @@ -1,3 +1,4 @@ +use oxc_ast::ast::Expression; use oxc_ast::AstKind; use oxc_diagnostics::OxcDiagnostic; use oxc_macros::declare_oxc_lint; @@ -62,10 +63,17 @@ impl Rule for NoArrayConstructor { &new_expr.type_parameters, false, ), - _ => return, + _ => { + return; + } }; - if callee.is_specific_id("Array") + let Expression::Identifier(ident) = &callee else { + return; + }; + + if ctx.semantic().is_reference_to_global_variable(ident) + && callee.is_specific_id("Array") && arguments.len() != 1 && type_parameters.is_none() && !optional @@ -104,6 +112,7 @@ fn test() { ("Array?.();", None), ("Array?.(0, 1, 2);", None), ("Array?.(x, y);", None), + ("var Array; new Array;", None), ]; let fail = vec![ From 90edd36d5d72932799b492fbb1f0aa30c1e56ac3 Mon Sep 17 00:00:00 2001 From: Naoya Yoshizawa Date: Sat, 2 Nov 2024 16:07:06 +0900 Subject: [PATCH 2/3] Update crates/oxc_linter/src/rules/eslint/no_array_constructor.rs Co-authored-by: Cam McHenry --- crates/oxc_linter/src/rules/eslint/no_array_constructor.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs b/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs index b8cdd064152fd..914eaa9c7452b 100644 --- a/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs +++ b/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs @@ -68,12 +68,7 @@ impl Rule for NoArrayConstructor { } }; - let Expression::Identifier(ident) = &callee else { - return; - }; - - if ctx.semantic().is_reference_to_global_variable(ident) - && callee.is_specific_id("Array") + if callee.is_global_reference_name("Array", ctx.symbols()) && arguments.len() != 1 && type_parameters.is_none() && !optional From ac35515d7c8a210919cb5720cc3cc3431a9b15a3 Mon Sep 17 00:00:00 2001 From: azihsoyn Date: Sat, 2 Nov 2024 22:50:04 +0900 Subject: [PATCH 3/3] fix reference --- crates/oxc_linter/src/rules/eslint/no_array_constructor.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs b/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs index 914eaa9c7452b..54c615ea9d1b0 100644 --- a/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs +++ b/crates/oxc_linter/src/rules/eslint/no_array_constructor.rs @@ -2,6 +2,7 @@ use oxc_ast::ast::Expression; use oxc_ast::AstKind; use oxc_diagnostics::OxcDiagnostic; use oxc_macros::declare_oxc_lint; +use oxc_semantic::IsGlobalReference; use oxc_span::Span; use crate::{context::LintContext, rule::Rule, AstNode}; @@ -68,7 +69,11 @@ impl Rule for NoArrayConstructor { } }; - if callee.is_global_reference_name("Array", ctx.symbols()) + let Expression::Identifier(ident) = &callee else { + return; + }; + + if ident.is_global_reference_name("Array", ctx.symbols()) && arguments.len() != 1 && type_parameters.is_none() && !optional