@@ -7,6 +7,7 @@ use ide_db::{
77 } ,
88} ;
99use itertools:: Itertools ;
10+ use stdx:: format_to;
1011use syntax:: { ast, AstNode , AstToken , NodeOrToken , SyntaxKind :: COMMA , TextRange } ;
1112
1213// Assist: move_format_string_arg
@@ -78,20 +79,26 @@ pub(crate) fn move_format_string_arg(acc: &mut Assists, ctx: &AssistContext<'_>)
7879
7980 // Extract existing arguments in macro
8081 let tokens =
81- tt. token_trees_and_tokens ( ) . filter_map ( NodeOrToken :: into_token ) . collect_vec ( ) ;
82+ tt. token_trees_and_tokens ( ) . collect_vec ( ) ;
8283
8384 let mut existing_args: Vec < String > = vec ! [ ] ;
8485
8586 let mut current_arg = String :: new ( ) ;
86- if let [ _opening_bracket, format_string, _args_start_comma, tokens @ .., end_bracket] =
87+ if let [ _opening_bracket, NodeOrToken :: Token ( format_string) , _args_start_comma, tokens @ .., NodeOrToken :: Token ( end_bracket) ] =
8788 tokens. as_slice ( )
8889 {
8990 for t in tokens {
90- if t. kind ( ) == COMMA {
91- existing_args. push ( current_arg. trim ( ) . into ( ) ) ;
92- current_arg. clear ( ) ;
93- } else {
94- current_arg. push_str ( t. text ( ) ) ;
91+ match t {
92+ NodeOrToken :: Node ( n) => {
93+ format_to ! ( current_arg, "{n}" ) ;
94+ } ,
95+ NodeOrToken :: Token ( t) if t. kind ( ) == COMMA => {
96+ existing_args. push ( current_arg. trim ( ) . into ( ) ) ;
97+ current_arg. clear ( ) ;
98+ } ,
99+ NodeOrToken :: Token ( t) => {
100+ current_arg. push_str ( t. text ( ) ) ;
101+ } ,
95102 }
96103 }
97104 existing_args. push ( current_arg. trim ( ) . into ( ) ) ;
@@ -261,6 +268,27 @@ fn main() {
261268fn main() {
262269 print!("{} {:b} {}"$0, 1, x + 1, Struct(1, 2));
263270}
271+ "# ,
272+ ) ,
273+ ) ;
274+ }
275+
276+ #[ test]
277+ fn nested_tt ( ) {
278+ check_assist (
279+ move_format_string_arg,
280+ & add_macro_decl (
281+ r#"
282+ fn main() {
283+ print!("My name is {} {x$0 + x}", stringify!(Paperino))
284+ }
285+ "# ,
286+ ) ,
287+ & add_macro_decl (
288+ r#"
289+ fn main() {
290+ print!("My name is {} {}"$0, stringify!(Paperino), x + x)
291+ }
264292"# ,
265293 ) ,
266294 ) ;
0 commit comments