@@ -270,6 +270,7 @@ fn parse_node_with_inner_parse<'a>(node: Node<'a>, context: &mut Context<'a>, in
270
270
Node :: TsParenthesizedType ( node) => parse_parenthesized_type ( node, context) ,
271
271
Node :: TsRestType ( node) => parse_rest_type ( node, context) ,
272
272
Node :: TsThisType ( _) => "this" . into ( ) ,
273
+ Node :: TsTplLitType ( node) => parse_tpl_lit_type ( node, context) ,
273
274
Node :: TsTupleType ( node) => parse_tuple_type ( node, context) ,
274
275
Node :: TsTupleElement ( node) => parse_tuple_element ( node, context) ,
275
276
Node :: TsTypeAnn ( node) => parse_type_ann ( node, context) ,
@@ -2062,19 +2063,27 @@ fn parse_tagged_tpl<'a>(node: &'a TaggedTpl, context: &mut Context<'a>) -> Print
2062
2063
if use_space { " " . into ( ) } else { PrintItems :: new ( ) }
2063
2064
) ) ;
2064
2065
2065
- items. push_condition ( conditions:: indent_if_start_of_line ( parse_template_literal ( & node. quasis , & node. exprs . iter ( ) . map ( |x| & * * x) . collect ( ) , context) ) ) ;
2066
+ items. push_condition ( conditions:: indent_if_start_of_line ( parse_template_literal (
2067
+ node. quasis . iter ( ) . map ( |n| n. into ( ) ) . collect ( ) ,
2068
+ node. exprs . iter ( ) . map ( |x| ( & * * x) . into ( ) ) . collect ( ) ,
2069
+ context,
2070
+ ) ) ) ;
2066
2071
items
2067
2072
}
2068
2073
2069
2074
fn parse_tpl < ' a > ( node : & ' a Tpl , context : & mut Context < ' a > ) -> PrintItems {
2070
- parse_template_literal ( & node. quasis , & node. exprs . iter ( ) . map ( |x| & * * x) . collect ( ) , context)
2075
+ parse_template_literal (
2076
+ node. quasis . iter ( ) . map ( |n| n. into ( ) ) . collect ( ) ,
2077
+ node. exprs . iter ( ) . map ( |x| ( & * * x) . into ( ) ) . collect ( ) ,
2078
+ context,
2079
+ )
2071
2080
}
2072
2081
2073
2082
fn parse_tpl_element < ' a > ( node : & ' a TplElement , context : & mut Context < ' a > ) -> PrintItems {
2074
2083
parse_raw_string ( node. text ( context) . into ( ) )
2075
2084
}
2076
2085
2077
- fn parse_template_literal < ' a > ( quasis : & ' a Vec < TplElement > , exprs : & Vec < & ' a Expr > , context : & mut Context < ' a > ) -> PrintItems {
2086
+ fn parse_template_literal < ' a > ( quasis : Vec < Node < ' a > > , exprs : Vec < Node < ' a > > , context : & mut Context < ' a > ) -> PrintItems {
2078
2087
let mut items = PrintItems :: new ( ) ;
2079
2088
items. push_str ( "`" ) ;
2080
2089
items. push_signal ( Signal :: StartIgnoringIndent ) ;
@@ -2104,16 +2113,18 @@ fn parse_template_literal<'a>(quasis: &'a Vec<TplElement>, exprs: &Vec<&'a Expr>
2104
2113
items. push_signal ( Signal :: FinishIgnoringIndent ) ;
2105
2114
return items;
2106
2115
2107
- fn get_nodes < ' a > ( quasis : & ' a Vec < TplElement > , exprs : & Vec < & ' a Expr > ) -> Vec < Node < ' a > > {
2108
- let quasis = quasis;
2109
- let exprs = exprs;
2116
+ fn get_nodes < ' a > ( quasis : Vec < Node < ' a > > , exprs : Vec < Node < ' a > > ) -> Vec < Node < ' a > > {
2117
+ let mut quasis = quasis;
2118
+ let mut exprs = exprs;
2110
2119
let mut nodes = Vec :: new ( ) ;
2111
- let mut quasis_index = 0 ;
2112
- let mut exprs_index = 0 ;
2113
2120
2114
- while quasis_index < quasis. len ( ) || exprs_index < exprs. len ( ) {
2115
- let current_quasis = quasis. get ( quasis_index) ;
2116
- let current_expr = exprs. get ( exprs_index) ;
2121
+ // reverse the vectors and iterate from the back
2122
+ quasis. reverse ( ) ;
2123
+ exprs. reverse ( ) ;
2124
+
2125
+ while !quasis. is_empty ( ) || !exprs. is_empty ( ) {
2126
+ let current_quasis = quasis. last ( ) ;
2127
+ let current_expr = exprs. last ( ) ;
2117
2128
2118
2129
let is_quasis = if let Some ( current_quasis) = current_quasis {
2119
2130
if let Some ( current_expr) = current_expr {
@@ -2130,11 +2141,9 @@ fn parse_template_literal<'a>(quasis: &'a Vec<TplElement>, exprs: &Vec<&'a Expr>
2130
2141
} ;
2131
2142
2132
2143
if is_quasis {
2133
- nodes. push ( ( & quasis[ quasis_index] ) . into ( ) ) ;
2134
- quasis_index += 1 ;
2144
+ nodes. push ( quasis. pop ( ) . unwrap ( ) ) ;
2135
2145
} else {
2136
- nodes. push ( exprs[ exprs_index] . into ( ) ) ;
2137
- exprs_index += 1 ;
2146
+ nodes. push ( exprs. pop ( ) . unwrap ( ) ) ;
2138
2147
}
2139
2148
}
2140
2149
@@ -4124,6 +4133,14 @@ fn parse_rest_type<'a>(node: &'a TsRestType, context: &mut Context<'a>) -> Print
4124
4133
return items;
4125
4134
}
4126
4135
4136
+ fn parse_tpl_lit_type < ' a > ( node : & ' a TsTplLitType , context : & mut Context < ' a > ) -> PrintItems {
4137
+ parse_template_literal (
4138
+ node. quasis . iter ( ) . map ( |x| x. into ( ) ) . collect ( ) ,
4139
+ node. types . iter ( ) . map ( |x| ( & * * x) . into ( ) ) . collect ( ) ,
4140
+ context,
4141
+ )
4142
+ }
4143
+
4127
4144
fn parse_tuple_type < ' a > ( node : & ' a TsTupleType , context : & mut Context < ' a > ) -> PrintItems {
4128
4145
parse_array_like_nodes ( ParseArrayLikeNodesOptions {
4129
4146
parent_span_data : node. span ,
0 commit comments