Fix move_format_string_arg being tokentree unaware
This commit is contained in:
parent
39eaf7864c
commit
3ad0334718
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
use stdx::format_to;
|
||||||
use syntax::{ast, AstNode, AstToken, NodeOrToken, SyntaxKind::COMMA, TextRange};
|
use syntax::{ast, AstNode, AstToken, NodeOrToken, SyntaxKind::COMMA, TextRange};
|
||||||
|
|
||||||
// Assist: move_format_string_arg
|
// Assist: move_format_string_arg
|
||||||
@ -78,20 +79,26 @@ pub(crate) fn move_format_string_arg(acc: &mut Assists, ctx: &AssistContext<'_>)
|
|||||||
|
|
||||||
// Extract existing arguments in macro
|
// Extract existing arguments in macro
|
||||||
let tokens =
|
let tokens =
|
||||||
tt.token_trees_and_tokens().filter_map(NodeOrToken::into_token).collect_vec();
|
tt.token_trees_and_tokens().collect_vec();
|
||||||
|
|
||||||
let mut existing_args: Vec<String> = vec![];
|
let mut existing_args: Vec<String> = vec![];
|
||||||
|
|
||||||
let mut current_arg = String::new();
|
let mut current_arg = String::new();
|
||||||
if let [_opening_bracket, format_string, _args_start_comma, tokens @ .., end_bracket] =
|
if let [_opening_bracket, NodeOrToken::Token(format_string), _args_start_comma, tokens @ .., NodeOrToken::Token(end_bracket)] =
|
||||||
tokens.as_slice()
|
tokens.as_slice()
|
||||||
{
|
{
|
||||||
for t in tokens {
|
for t in tokens {
|
||||||
if t.kind() == COMMA {
|
match t {
|
||||||
|
NodeOrToken::Node(n) => {
|
||||||
|
format_to!(current_arg, "{n}");
|
||||||
|
},
|
||||||
|
NodeOrToken::Token(t) if t.kind() == COMMA=> {
|
||||||
existing_args.push(current_arg.trim().into());
|
existing_args.push(current_arg.trim().into());
|
||||||
current_arg.clear();
|
current_arg.clear();
|
||||||
} else {
|
},
|
||||||
|
NodeOrToken::Token(t) => {
|
||||||
current_arg.push_str(t.text());
|
current_arg.push_str(t.text());
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
existing_args.push(current_arg.trim().into());
|
existing_args.push(current_arg.trim().into());
|
||||||
@ -261,6 +268,27 @@ fn main() {
|
|||||||
fn main() {
|
fn main() {
|
||||||
print!("{} {:b} {}"$0, 1, x + 1, Struct(1, 2));
|
print!("{} {:b} {}"$0, 1, x + 1, Struct(1, 2));
|
||||||
}
|
}
|
||||||
|
"#,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn nested_tt() {
|
||||||
|
check_assist(
|
||||||
|
move_format_string_arg,
|
||||||
|
&add_macro_decl(
|
||||||
|
r#"
|
||||||
|
fn main() {
|
||||||
|
print!("My name is {} {x$0 + x}", stringify!(Paperino))
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
),
|
||||||
|
&add_macro_decl(
|
||||||
|
r#"
|
||||||
|
fn main() {
|
||||||
|
print!("My name is {} {}"$0, stringify!(Paperino), x + x)
|
||||||
|
}
|
||||||
"#,
|
"#,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user