From 3a57f700d883de83a97cd28d803d12ce26647bfa Mon Sep 17 00:00:00 2001 From: Wang Ruochen Date: Thu, 6 Jan 2022 11:45:09 -0800 Subject: [PATCH] Correct has_ref detection --- crates/ide_completion/src/context.rs | 16 +++++++++++++++- crates/ide_completion/src/render.rs | 16 ++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/crates/ide_completion/src/context.rs b/crates/ide_completion/src/context.rs index c6af285e86c..a21de23d1d7 100644 --- a/crates/ide_completion/src/context.rs +++ b/crates/ide_completion/src/context.rs @@ -876,7 +876,7 @@ fn path_or_use_tree_qualifier(path: &ast::Path) -> Option<(ast::Path, bool)> { fn has_ref(token: &SyntaxToken) -> bool { let mut token = token.clone(); - for skip in [WHITESPACE, IDENT, T![mut]] { + for skip in [IDENT, WHITESPACE, T![mut]] { if token.kind() == skip { token = match token.prev_token() { Some(it) => it, @@ -992,6 +992,20 @@ fn bar(x: &u32) {} r#" fn foo() { bar(&mut $0); } fn bar(x: &mut u32) {} +"#, + expect![[r#"ty: u32, name: x"#]], + ); + check_expected_type_and_name( + r#" +fn foo() { bar(& c$0); } +fn bar(x: &u32) {} + "#, + expect![[r#"ty: u32, name: x"#]], + ); + check_expected_type_and_name( + r#" +fn foo() { bar(&mut c$0); } +fn bar(x: &mut u32) {} "#, expect![[r#"ty: u32, name: x"#]], ); diff --git a/crates/ide_completion/src/render.rs b/crates/ide_completion/src/render.rs index 4b4fbb3ed9e..d7184e406eb 100644 --- a/crates/ide_completion/src/render.rs +++ b/crates/ide_completion/src/render.rs @@ -1156,6 +1156,22 @@ fn main() { fn foo(…) [] "#]], ); + check_relevance( + r#" +struct S; +fn foo(s: &mut S) {} +fn main() { + let mut ssss = S; + foo(&mut s$0); +} + "#, + expect![[r#" + lc ssss [type+local] + st S [] + fn main() [] + fn foo(…) [] + "#]], + ); } #[test]