diff options
author | Igor Aleksanov <[email protected]> | 2020-09-12 15:14:17 +0100 |
---|---|---|
committer | Igor Aleksanov <[email protected]> | 2020-10-02 10:42:39 +0100 |
commit | ea320141c6f87383880878b91182355c9ad7dc7b (patch) | |
tree | 50e1ee50690c1ecea60caa01d6c6f7fbee983bfc /crates/ide/src/completion/complete_postfix.rs | |
parent | c01cd6e3ed0763f8e773c34dc76db0e39396133d (diff) |
Add postfix completion for format-like string literals
Diffstat (limited to 'crates/ide/src/completion/complete_postfix.rs')
-rw-r--r-- | crates/ide/src/completion/complete_postfix.rs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/crates/ide/src/completion/complete_postfix.rs b/crates/ide/src/completion/complete_postfix.rs index 26a5af5b9..73a5f1439 100644 --- a/crates/ide/src/completion/complete_postfix.rs +++ b/crates/ide/src/completion/complete_postfix.rs | |||
@@ -6,6 +6,7 @@ use syntax::{ | |||
6 | }; | 6 | }; |
7 | use text_edit::TextEdit; | 7 | use text_edit::TextEdit; |
8 | 8 | ||
9 | use self::format_like::add_format_like_completions; | ||
9 | use crate::{ | 10 | use crate::{ |
10 | completion::{ | 11 | completion::{ |
11 | completion_config::SnippetCap, | 12 | completion_config::SnippetCap, |
@@ -15,6 +16,8 @@ use crate::{ | |||
15 | CompletionItem, CompletionItemKind, | 16 | CompletionItem, CompletionItemKind, |
16 | }; | 17 | }; |
17 | 18 | ||
19 | mod format_like; | ||
20 | |||
18 | pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) { | 21 | pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) { |
19 | if !ctx.config.enable_postfix_completions { | 22 | if !ctx.config.enable_postfix_completions { |
20 | return; | 23 | return; |
@@ -207,6 +210,10 @@ pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) { | |||
207 | &format!("${{1}}({})", receiver_text), | 210 | &format!("${{1}}({})", receiver_text), |
208 | ) | 211 | ) |
209 | .add_to(acc); | 212 | .add_to(acc); |
213 | |||
214 | if ctx.is_string_literal { | ||
215 | add_format_like_completions(acc, ctx, &dot_receiver, cap, &receiver_text); | ||
216 | } | ||
210 | } | 217 | } |
211 | 218 | ||
212 | fn get_receiver_text(receiver: &ast::Expr, receiver_is_ambiguous_float_literal: bool) -> String { | 219 | fn get_receiver_text(receiver: &ast::Expr, receiver_is_ambiguous_float_literal: bool) -> String { |
@@ -392,4 +399,53 @@ fn main() { | |||
392 | check_edit("dbg", r#"fn main() { &&42.<|> }"#, r#"fn main() { dbg!(&&42) }"#); | 399 | check_edit("dbg", r#"fn main() { &&42.<|> }"#, r#"fn main() { dbg!(&&42) }"#); |
393 | check_edit("refm", r#"fn main() { &&42.<|> }"#, r#"fn main() { &&&mut 42 }"#); | 400 | check_edit("refm", r#"fn main() { &&42.<|> }"#, r#"fn main() { &&&mut 42 }"#); |
394 | } | 401 | } |
402 | |||
403 | #[test] | ||
404 | fn postfix_completion_for_format_like_strings() { | ||
405 | check_edit( | ||
406 | "fmt", | ||
407 | r#"fn main() { "{some_var:?}".<|> }"#, | ||
408 | r#"fn main() { format!("{:?}", some_var) }"#, | ||
409 | ); | ||
410 | check_edit( | ||
411 | "panic", | ||
412 | r#"fn main() { "Panic with {a}".<|> }"#, | ||
413 | r#"fn main() { panic!("Panic with {}", a) }"#, | ||
414 | ); | ||
415 | check_edit( | ||
416 | "println", | ||
417 | r#"fn main() { "{ 2+2 } { SomeStruct { val: 1, other: 32 } :?}".<|> }"#, | ||
418 | r#"fn main() { println!("{} {:?}", 2+2, SomeStruct { val: 1, other: 32 }) }"#, | ||
419 | ); | ||
420 | check_edit( | ||
421 | "loge", | ||
422 | r#"fn main() { "{2+2}".<|> }"#, | ||
423 | r#"fn main() { log::error!("{}", 2+2) }"#, | ||
424 | ); | ||
425 | check_edit( | ||
426 | "logt", | ||
427 | r#"fn main() { "{2+2}".<|> }"#, | ||
428 | r#"fn main() { log::trace!("{}", 2+2) }"#, | ||
429 | ); | ||
430 | check_edit( | ||
431 | "logd", | ||
432 | r#"fn main() { "{2+2}".<|> }"#, | ||
433 | r#"fn main() { log::debug!("{}", 2+2) }"#, | ||
434 | ); | ||
435 | check_edit( | ||
436 | "logi", | ||
437 | r#"fn main() { "{2+2}".<|> }"#, | ||
438 | r#"fn main() { log::info!("{}", 2+2) }"#, | ||
439 | ); | ||
440 | check_edit( | ||
441 | "logw", | ||
442 | r#"fn main() { "{2+2}".<|> }"#, | ||
443 | r#"fn main() { log::warn!("{}", 2+2) }"#, | ||
444 | ); | ||
445 | check_edit( | ||
446 | "loge", | ||
447 | r#"fn main() { "{2+2}".<|> }"#, | ||
448 | r#"fn main() { log::error!("{}", 2+2) }"#, | ||
449 | ); | ||
450 | } | ||
395 | } | 451 | } |