diff --git a/crates/oxc_semantic/src/checker/javascript.rs b/crates/oxc_semantic/src/checker/javascript.rs index 7c94e4c48cd2f..f083938641765 100644 --- a/crates/oxc_semantic/src/checker/javascript.rs +++ b/crates/oxc_semantic/src/checker/javascript.rs @@ -116,6 +116,7 @@ pub fn check_binding_identifier(ident: &BindingIdentifier, ctx: &SemanticBuilder // declare function f(eval: number, arguments: number): number; // OK // declare function f(...eval): number; // OK // declare function f(...arguments): number; // OK + // type K = (arguments: any[]) => void; // OK // declare function g({eval, arguments}: {eval: number, arguments: number}): number; // Error // declare function h([eval, arguments]: [number, number]): number; // Error let is_declare_function = |kind: &AstKind| { @@ -126,7 +127,14 @@ pub fn check_binding_identifier(ident: &BindingIdentifier, ctx: &SemanticBuilder let parent = ctx.nodes.parent_node(ctx.current_node_id); let is_ok = match parent.kind() { AstKind::Function(func) => matches!(func.r#type, FunctionType::TSDeclareFunction), - AstKind::FormalParameter(_) => is_declare_function(&ctx.nodes.parent_kind(parent.id())), + AstKind::FormalParameter(_) => { + is_declare_function(&ctx.nodes.parent_kind(parent.id())) + || ctx + .nodes + .ancestor_kinds(parent.id()) + .nth(1) + .is_some_and(|node| matches!(node, AstKind::TSFunctionType(_))) + } AstKind::BindingRestElement(_) => { let grand_parent = ctx.nodes.parent_node(parent.id()); matches!(grand_parent.kind(), AstKind::FormalParameters(_)) diff --git a/tasks/coverage/misc/pass/arguments-eval.d.ts b/tasks/coverage/misc/pass/arguments-eval.d.ts new file mode 100644 index 0000000000000..59eb0446e0806 --- /dev/null +++ b/tasks/coverage/misc/pass/arguments-eval.d.ts @@ -0,0 +1 @@ +type K = (arguments: any[]) => void; diff --git a/tasks/coverage/snapshots/codegen_misc.snap b/tasks/coverage/snapshots/codegen_misc.snap index 55548c7f8a090..986ba350ab3a0 100644 --- a/tasks/coverage/snapshots/codegen_misc.snap +++ b/tasks/coverage/snapshots/codegen_misc.snap @@ -1,3 +1,3 @@ codegen_misc Summary: -AST Parsed : 43/43 (100.00%) -Positive Passed: 43/43 (100.00%) +AST Parsed : 44/44 (100.00%) +Positive Passed: 44/44 (100.00%) diff --git a/tasks/coverage/snapshots/parser_misc.snap b/tasks/coverage/snapshots/parser_misc.snap index c204e5dbb1078..6efee216eec50 100644 --- a/tasks/coverage/snapshots/parser_misc.snap +++ b/tasks/coverage/snapshots/parser_misc.snap @@ -1,6 +1,6 @@ parser_misc Summary: -AST Parsed : 43/43 (100.00%) -Positive Passed: 43/43 (100.00%) +AST Parsed : 44/44 (100.00%) +Positive Passed: 44/44 (100.00%) Negative Passed: 47/47 (100.00%) × Identifier `b` has already been declared diff --git a/tasks/coverage/snapshots/semantic_misc.snap b/tasks/coverage/snapshots/semantic_misc.snap index e3faa3cda1953..e792ca734c29a 100644 --- a/tasks/coverage/snapshots/semantic_misc.snap +++ b/tasks/coverage/snapshots/semantic_misc.snap @@ -1,6 +1,6 @@ semantic_misc Summary: -AST Parsed : 43/43 (100.00%) -Positive Passed: 27/43 (62.79%) +AST Parsed : 44/44 (100.00%) +Positive Passed: 28/44 (63.64%) semantic Error: tasks/coverage/misc/pass/oxc-11593.ts Scope children mismatch: after transform: ScopeId(0): [ScopeId(1)] diff --git a/tasks/coverage/snapshots/transformer_misc.snap b/tasks/coverage/snapshots/transformer_misc.snap index 093e4120134fd..3010faecdee21 100644 --- a/tasks/coverage/snapshots/transformer_misc.snap +++ b/tasks/coverage/snapshots/transformer_misc.snap @@ -1,3 +1,3 @@ transformer_misc Summary: -AST Parsed : 43/43 (100.00%) -Positive Passed: 43/43 (100.00%) +AST Parsed : 44/44 (100.00%) +Positive Passed: 44/44 (100.00%)