@@ -6,7 +6,7 @@ use crate::ast::*;
66use oxc_ast_macros:: ast_meta;
77use oxc_estree:: {
88 CompactFixesJSSerializer , CompactFixesTSSerializer , CompactJSSerializer , CompactTSSerializer ,
9- Concat2 , ESTree , FlatStructSerializer , JsonSafeString , LoneSurrogatesString ,
9+ Concat2 , ConcatElement , ESTree , FlatStructSerializer , JsonSafeString , LoneSurrogatesString ,
1010 PrettyFixesJSSerializer , PrettyFixesTSSerializer , PrettyJSSerializer , PrettyTSSerializer ,
1111 SequenceSerializer , Serializer , StructSerializer ,
1212} ;
@@ -627,15 +627,17 @@ pub struct FormalParametersConverter<'a, 'b>(pub &'b FormalParameters<'a>);
627627impl ESTree for FormalParametersConverter < ' _ , ' _ > {
628628 fn serialize < S : Serializer > ( & self , serializer : S ) {
629629 let mut seq = serializer. serialize_sequence ( ) ;
630- for item in & self . 0 . items {
631- seq. serialize_element ( item) ;
632- }
630+ self . 0 . push_to_sequence ( & mut seq) ;
631+ seq. end ( ) ;
632+ }
633+ }
633634
634- if let Some ( rest) = & self . 0 . rest {
635+ impl ConcatElement for FormalParameters < ' _ > {
636+ fn push_to_sequence < S : SequenceSerializer > ( & self , seq : & mut S ) {
637+ self . items . push_to_sequence ( seq) ;
638+ if let Some ( rest) = & self . rest {
635639 seq. serialize_element ( & FormalParametersRest ( rest) ) ;
636640 }
637-
638- seq. end ( ) ;
639641 }
640642}
641643
@@ -750,23 +752,12 @@ pub struct FunctionParams<'a, 'b>(pub &'b Function<'a>);
750752
751753impl ESTree for FunctionParams < ' _ , ' _ > {
752754 fn serialize < S : Serializer > ( & self , serializer : S ) {
753- let mut seq = serializer. serialize_sequence ( ) ;
754-
755+ let func = self . 0 ;
755756 if S :: INCLUDE_TS_FIELDS {
756- if let Some ( this_param) = & self . 0 . this_param {
757- seq. serialize_element ( this_param) ;
758- }
759- }
760-
761- for item in & self . 0 . params . items {
762- seq. serialize_element ( item) ;
763- }
764-
765- if let Some ( rest) = & self . 0 . params . rest {
766- seq. serialize_element ( & FormalParametersRest ( rest) ) ;
757+ Concat2 ( & func. this_param , func. params . as_ref ( ) ) . serialize ( serializer) ;
758+ } else {
759+ func. params . serialize ( serializer) ;
767760 }
768-
769- seq. end ( ) ;
770761 }
771762}
772763
@@ -1473,8 +1464,8 @@ pub struct TSCallSignatureDeclarationParams<'a, 'b>(pub &'b TSCallSignatureDecla
14731464
14741465impl ESTree for TSCallSignatureDeclarationParams < ' _ , ' _ > {
14751466 fn serialize < S : Serializer > ( & self , serializer : S ) {
1476- let v = self . 0 ;
1477- serialize_formal_params_with_this_param ( v . this_param . as_deref ( ) , & v . params , serializer) ;
1467+ let decl = self . 0 ;
1468+ Concat2 ( & decl . this_param , decl . params . as_ref ( ) ) . serialize ( serializer) ;
14781469 }
14791470}
14801471
@@ -1495,8 +1486,8 @@ pub struct TSMethodSignatureParams<'a, 'b>(pub &'b TSMethodSignature<'a>);
14951486
14961487impl ESTree for TSMethodSignatureParams < ' _ , ' _ > {
14971488 fn serialize < S : Serializer > ( & self , serializer : S ) {
1498- let v = self . 0 ;
1499- serialize_formal_params_with_this_param ( v . this_param . as_deref ( ) , & v . params , serializer) ;
1489+ let sig = self . 0 ;
1490+ Concat2 ( & sig . this_param , sig . params . as_ref ( ) ) . serialize ( serializer) ;
15001491 }
15011492}
15021493
@@ -1517,37 +1508,11 @@ pub struct TSFunctionTypeParams<'a, 'b>(pub &'b TSFunctionType<'a>);
15171508
15181509impl ESTree for TSFunctionTypeParams < ' _ , ' _ > {
15191510 fn serialize < S : Serializer > ( & self , serializer : S ) {
1520- let v = self . 0 ;
1521- serialize_formal_params_with_this_param ( v . this_param . as_deref ( ) , & v . params , serializer) ;
1511+ let fn_type = self . 0 ;
1512+ Concat2 ( & fn_type . this_param , fn_type . params . as_ref ( ) ) . serialize ( serializer) ;
15221513 }
15231514}
15241515
1525- /// Shared serialization logic used by:
1526- /// - `TSCallSignatureDeclarationParams`
1527- /// - `TSMethodSignatureParams`
1528- /// - `TSFunctionTypeParams`
1529- fn serialize_formal_params_with_this_param < ' a , S : Serializer > (
1530- this_param : Option < & TSThisParameter < ' a > > ,
1531- params : & FormalParameters < ' a > ,
1532- serializer : S ,
1533- ) {
1534- let mut seq = serializer. serialize_sequence ( ) ;
1535-
1536- if let Some ( this_param) = this_param {
1537- seq. serialize_element ( this_param) ;
1538- }
1539-
1540- for item in & params. items {
1541- seq. serialize_element ( item) ;
1542- }
1543-
1544- if let Some ( rest) = & params. rest {
1545- seq. serialize_element ( & FormalParametersRest ( rest) ) ;
1546- }
1547-
1548- seq. end ( ) ;
1549- }
1550-
15511516// --------------------
15521517// Comments
15531518// --------------------
0 commit comments