aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/completion/complete_postfix.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide/src/completion/complete_postfix.rs')
-rw-r--r--crates/ide/src/completion/complete_postfix.rs56
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};
7use text_edit::TextEdit; 7use text_edit::TextEdit;
8 8
9use self::format_like::add_format_like_completions;
9use crate::{ 10use 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
19mod format_like;
20
18pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) { 21pub(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
212fn get_receiver_text(receiver: &ast::Expr, receiver_is_ambiguous_float_literal: bool) -> String { 219fn 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}