Skip to content

Commit b2502ca

Browse files
committed
perf(liner): use top-level match for no_obj_calls
1 parent d892e83 commit b2502ca

File tree

2 files changed

+26
-26
lines changed

2 files changed

+26
-26
lines changed

crates/oxc_linter/src/generated/rule_runner_impls.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,8 @@ impl RuleRunner for crate::rules::eslint::no_nonoctal_decimal_escape::NoNonoctal
428428
}
429429

430430
impl RuleRunner for crate::rules::eslint::no_obj_calls::NoObjCalls {
431-
const NODE_TYPES: Option<&AstTypesBitset> = None;
431+
const NODE_TYPES: Option<&AstTypesBitset> =
432+
Some(&AstTypesBitset::from_types(&[AstType::CallExpression, AstType::NewExpression]));
432433
}
433434

434435
impl RuleRunner for crate::rules::eslint::no_object_constructor::NoObjectConstructor {

crates/oxc_linter/src/rules/eslint/no_obj_calls.rs

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -126,35 +126,34 @@ fn resolve_global_binding<'a, 'b: 'a>(
126126

127127
impl Rule for NoObjCalls {
128128
fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) {
129-
let (callee, span) = match node.kind() {
130-
AstKind::NewExpression(expr) => (&expr.callee, expr.span),
131-
AstKind::CallExpression(expr) => (&expr.callee, expr.span),
132-
_ => return,
133-
};
134-
135-
match callee {
136-
Expression::Identifier(ident) => {
137-
// handle new Math(), Math(), etc
138-
if let Some(top_level_reference) =
139-
resolve_global_binding(ident, node.scope_id(), ctx)
140-
&& is_global_obj(top_level_reference)
141-
{
142-
ctx.diagnostic(no_obj_calls_diagnostic(ident.name.as_str(), span));
143-
}
144-
}
129+
match node.kind() {
130+
AstKind::NewExpression(expr) => check_callee(&expr.callee, expr.span, node, ctx),
131+
AstKind::CallExpression(expr) => check_callee(&expr.callee, expr.span, node, ctx),
132+
_ => {}
133+
}
134+
}
135+
}
145136

146-
match_member_expression!(Expression) => {
147-
// handle new globalThis.Math(), globalThis.Math(), etc
148-
if let Some(global_member) = global_this_member(callee.to_member_expression())
149-
&& is_global_obj(global_member)
150-
{
151-
ctx.diagnostic(no_obj_calls_diagnostic(global_member, span));
152-
}
137+
fn check_callee<'a>(callee: &'a Expression, span: Span, node: &AstNode<'a>, ctx: &LintContext<'a>) {
138+
match callee {
139+
Expression::Identifier(ident) => {
140+
// handle new Math(), Math(), etc
141+
if let Some(top_level_reference) = resolve_global_binding(ident, node.scope_id(), ctx)
142+
&& is_global_obj(top_level_reference)
143+
{
144+
ctx.diagnostic(no_obj_calls_diagnostic(ident.name.as_str(), span));
153145
}
154-
_ => {
155-
// noop
146+
}
147+
148+
match_member_expression!(Expression) => {
149+
// handle new globalThis.Math(), globalThis.Math(), etc
150+
if let Some(global_member) = global_this_member(callee.to_member_expression())
151+
&& is_global_obj(global_member)
152+
{
153+
ctx.diagnostic(no_obj_calls_diagnostic(global_member, span));
156154
}
157155
}
156+
_ => {}
158157
}
159158
}
160159

0 commit comments

Comments
 (0)