@@ -3058,9 +3058,22 @@ fn maybe_gen_tagged_tpl_with_external_formatter<'a>(node: &TaggedTpl<'a>, contex
3058
3058
items. push_signal ( Signal :: NewLine ) ;
3059
3059
items. push_signal ( Signal :: StartIndent ) ;
3060
3060
let mut index = 0 ;
3061
+ let mut current_indent_level = 0 ;
3062
+ let use_tabs = context. config . use_tabs ;
3063
+ let indent_width = if use_tabs { 1 } else { context. config . indent_width } ;
3064
+ let indent_char = if use_tabs { '\t' } else { ' ' } ;
3061
3065
for line in formatted_tpl. lines ( ) {
3062
- let mut pos = 0 ;
3063
- let mut parts = line. split ( placeholder_text) . enumerate ( ) . peekable ( ) ;
3066
+ // count indent characters
3067
+ let mut pos = line. chars ( ) . take_while ( |ch| * ch == indent_char) . count ( ) ;
3068
+ let indent_level = if indent_width == 0 { 0 } else { pos / indent_width as usize } ;
3069
+ if indent_level > current_indent_level {
3070
+ items. push_signal ( Signal :: StartIndent ) ;
3071
+ current_indent_level = indent_level;
3072
+ } else if indent_level < current_indent_level {
3073
+ items. push_signal ( Signal :: FinishIndent ) ;
3074
+ current_indent_level = indent_level;
3075
+ }
3076
+ let mut parts = line[ pos..] . split ( placeholder_text) . enumerate ( ) . peekable ( ) ;
3064
3077
while let Some ( ( i, part) ) = parts. next ( ) {
3065
3078
let end = pos + part. len ( ) ;
3066
3079
if i > 0 {
@@ -3080,6 +3093,10 @@ fn maybe_gen_tagged_tpl_with_external_formatter<'a>(node: &TaggedTpl<'a>, contex
3080
3093
}
3081
3094
items. push_signal ( Signal :: NewLine ) ;
3082
3095
}
3096
+ while current_indent_level > 0 {
3097
+ items. push_signal ( Signal :: FinishIndent ) ;
3098
+ current_indent_level -= 1 ;
3099
+ }
3083
3100
items. push_signal ( Signal :: FinishIndent ) ;
3084
3101
items. push_sc ( sc ! ( "`" ) ) ;
3085
3102
Some ( items)
0 commit comments