From 739ed7cd440f0350690d36c87a41205b6efc6d5c Mon Sep 17 00:00:00 2001 From: camc314 <18101008+camc314@users.noreply.github.com> Date: Sun, 28 Dec 2025 14:03:57 +0000 Subject: [PATCH] perf(semantic): inline `enter_kind` for `TSTypeParameter` (#17419) Ref https://github.com/oxc-project/backlog/issues/72 --- crates/oxc_semantic/src/builder.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/oxc_semantic/src/builder.rs b/crates/oxc_semantic/src/builder.rs index bc65ce971a8e5..359a25977a03d 100644 --- a/crates/oxc_semantic/src/builder.rs +++ b/crates/oxc_semantic/src/builder.rs @@ -2301,6 +2301,21 @@ impl<'a> Visit<'a> for SemanticBuilder<'a> { } self.leave_node(kind); } + + fn visit_ts_type_parameter(&mut self, param: &TSTypeParameter<'a>) { + let kind = AstKind::TSTypeParameter(self.alloc(param)); + self.enter_node(kind); + param.bind(self); + self.visit_span(¶m.span); + self.visit_binding_identifier(¶m.name); + if let Some(constraint) = ¶m.constraint { + self.visit_ts_type(constraint); + } + if let Some(default) = ¶m.default { + self.visit_ts_type(default); + } + self.leave_node(kind); + } } impl<'a> SemanticBuilder<'a> { @@ -2322,9 +2337,6 @@ impl<'a> SemanticBuilder<'a> { /* cfg */ match kind { - AstKind::TSTypeParameter(type_parameter) => { - type_parameter.bind(self); - } AstKind::TSPropertySignature(signature) => { if signature.key.is_expression() { // interface A { [prop]: string }