From e14f5cfff04942f45a4af3b45152df9672b3458a Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 17 Jun 2021 13:13:12 +0200 Subject: Move out and rewrite UseTree completion tests --- crates/ide_completion/src/completions/keyword.rs | 35 ----- .../src/completions/qualified_path.rs | 157 --------------------- .../src/completions/unqualified_path.rs | 32 ----- 3 files changed, 224 deletions(-) (limited to 'crates/ide_completion/src/completions') diff --git a/crates/ide_completion/src/completions/keyword.rs b/crates/ide_completion/src/completions/keyword.rs index 73bbc4345..b6f06a44f 100644 --- a/crates/ide_completion/src/completions/keyword.rs +++ b/crates/ide_completion/src/completions/keyword.rs @@ -199,41 +199,6 @@ mod tests { expect.assert_eq(&actual) } - #[test] - fn test_keywords_in_use_stmt() { - check( - r"use $0", - expect![[r#" - kw crate:: - kw self - kw super:: - "#]], - ); - - // FIXME: `self` shouldn't be shown here and the check below - check( - r"use a::$0", - expect![[r#" - kw self - "#]], - ); - - check( - r"use super::$0", - expect![[r#" - kw self - kw super:: - "#]], - ); - - check( - r"use a::{b, $0}", - expect![[r#" - kw self - "#]], - ); - } - #[test] fn test_keywords_in_function() { check( diff --git a/crates/ide_completion/src/completions/qualified_path.rs b/crates/ide_completion/src/completions/qualified_path.rs index 9432caa22..5b49868e4 100644 --- a/crates/ide_completion/src/completions/qualified_path.rs +++ b/crates/ide_completion/src/completions/qualified_path.rs @@ -212,12 +212,6 @@ mod tests { expect.assert_eq(&actual); } - #[test] - fn dont_complete_current_use() { - cov_mark::check!(dont_complete_current_use); - check(r#"use self::foo$0;"#, expect![[""]]); - } - #[test] fn dont_complete_values_in_type_pos() { check( @@ -248,20 +242,6 @@ fn foo() { ); } - #[test] - fn dont_complete_current_use_in_braces_with_glob() { - check( - r#" -mod foo { pub struct S; } -use self::{foo::*, bar$0}; -"#, - expect![[r#" - st S - md foo - "#]], - ); - } - #[test] fn dont_complete_primitive_in_use() { check_builtin(r#"use self::$0;"#, expect![[""]]); @@ -298,108 +278,6 @@ use self::{foo::*, bar$0}; ); } - #[test] - fn completes_mod_with_same_name_as_function() { - check( - r#" -use self::my::$0; - -mod my { pub struct Bar; } -fn my() {} -"#, - expect![[r#" - st Bar - "#]], - ); - } - - #[test] - fn filters_visibility() { - check( - r#" -use self::my::$0; - -mod my { - struct Bar; - pub struct Foo; - pub use Bar as PublicBar; -} -"#, - expect![[r#" - st Foo - st PublicBar - "#]], - ); - } - - #[test] - fn completes_use_item_starting_with_self() { - check( - r#" -use self::m::$0; - -mod m { pub struct Bar; } -"#, - expect![[r#" - st Bar - "#]], - ); - } - - #[test] - fn completes_use_item_starting_with_crate() { - check( - r#" -//- /lib.rs -mod foo; -struct Spam; -//- /foo.rs -use crate::Sp$0 -"#, - expect![[r#" - md foo - st Spam - "#]], - ); - } - - #[test] - fn completes_nested_use_tree() { - check( - r#" -//- /lib.rs -mod foo; -struct Spam; -//- /foo.rs -use crate::{Sp$0}; -"#, - expect![[r#" - md foo - st Spam - "#]], - ); - } - - #[test] - fn completes_deeply_nested_use_tree() { - check( - r#" -//- /lib.rs -mod foo; -pub mod bar { - pub mod baz { - pub struct Spam; - } -} -//- /foo.rs -use crate::{bar::{baz::Sp$0}}; -"#, - expect![[r#" - st Spam - "#]], - ); - } - #[test] fn completes_enum_variant() { check( @@ -496,22 +374,6 @@ fn foo() { let _ = U::$0 } ); } - #[test] - fn completes_use_paths_across_crates() { - check( - r#" -//- /main.rs crate:main deps:foo -use foo::$0; - -//- /foo/lib.rs crate:foo -pub mod bar { pub struct S; } -"#, - expect![[r#" - md bar - "#]], - ); - } - #[test] fn completes_trait_associated_method_1() { check( @@ -713,25 +575,6 @@ impl MyStruct { ); } - #[test] - fn test_super_super_completion() { - check( - r#" -mod a { - const A: usize = 0; - mod b { - const B: usize = 0; - mod c { use super::super::$0 } - } -} -"#, - expect![[r#" - md b - ct A - "#]], - ); - } - #[test] fn completes_reexported_items_under_correct_name() { check( diff --git a/crates/ide_completion/src/completions/unqualified_path.rs b/crates/ide_completion/src/completions/unqualified_path.rs index 2868d9b18..83b9148b3 100644 --- a/crates/ide_completion/src/completions/unqualified_path.rs +++ b/crates/ide_completion/src/completions/unqualified_path.rs @@ -129,22 +129,6 @@ fn foo() { ); } - #[test] - fn only_completes_modules_in_import() { - cov_mark::check!(only_completes_modules_in_import); - check( - r#" -use f$0 - -struct Foo; -mod foo {} -"#, - expect![[r#" - md foo - "#]], - ); - } - #[test] fn bind_pat_and_path_ignore_at() { check( @@ -358,22 +342,6 @@ fn _alpha() {} ) } - #[test] - fn completes_extern_prelude() { - check( - r#" -//- /lib.rs crate:main deps:other_crate -use $0; - -//- /other_crate/lib.rs crate:other_crate -// nothing here -"#, - expect![[r#" - md other_crate - "#]], - ); - } - #[test] fn completes_module_items_in_nested_modules() { check( -- cgit v1.2.3 From 2225db2eb48bd8c8fdf399c50652d3f95c851ace Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 17 Jun 2021 13:56:55 +0200 Subject: Refine `self`, `super` and `crate` completion in use paths --- crates/ide_completion/src/completions/flyimport.rs | 2 +- crates/ide_completion/src/completions/keyword.rs | 29 ++++++++++++++-------- .../src/completions/qualified_path.rs | 2 +- .../src/completions/unqualified_path.rs | 2 +- 4 files changed, 21 insertions(+), 14 deletions(-) (limited to 'crates/ide_completion/src/completions') diff --git a/crates/ide_completion/src/completions/flyimport.rs b/crates/ide_completion/src/completions/flyimport.rs index 4604feb5d..814c15653 100644 --- a/crates/ide_completion/src/completions/flyimport.rs +++ b/crates/ide_completion/src/completions/flyimport.rs @@ -109,7 +109,7 @@ pub(crate) fn import_on_the_fly(acc: &mut Completions, ctx: &CompletionContext) if !ctx.config.enable_imports_on_the_fly { return None; } - if ctx.use_item_syntax.is_some() + if ctx.in_use_tree() || ctx.is_path_disallowed() || ctx.expects_item() || ctx.expects_assoc_item() diff --git a/crates/ide_completion/src/completions/keyword.rs b/crates/ide_completion/src/completions/keyword.rs index b6f06a44f..9754122a0 100644 --- a/crates/ide_completion/src/completions/keyword.rs +++ b/crates/ide_completion/src/completions/keyword.rs @@ -18,17 +18,24 @@ pub(crate) fn complete_use_tree_keyword(acc: &mut Completions, ctx: &CompletionC item }; - if ctx.use_item_syntax.is_some() { - let qual = ctx.path_qual(); - if qual.is_none() { - kw_completion("crate::").add_to(acc); - } - kw_completion("self").add_to(acc); - if iter::successors(qual.cloned(), |p| p.qualifier()) - .all(|p| p.segment().and_then(|s| s.super_token()).is_some()) - { - kw_completion("super::").add_to(acc); - } + if ctx.in_use_tree() { + match &ctx.path_context { + Some(PathCompletionContext { qualifier: Some(qual), use_tree_parent, .. }) => { + if iter::successors(Some(qual.clone()), |p| p.qualifier()) + .all(|p| p.segment().and_then(|s| s.super_token()).is_some()) + { + kw_completion("super::").add_to(acc); + } + if *use_tree_parent { + kw_completion("self").add_to(acc); + } + } + _ => { + kw_completion("crate::").add_to(acc); + kw_completion("self::").add_to(acc); + kw_completion("super::").add_to(acc); + } + }; } // Suggest .await syntax for types that implement Future trait diff --git a/crates/ide_completion/src/completions/qualified_path.rs b/crates/ide_completion/src/completions/qualified_path.rs index 5b49868e4..0597879ac 100644 --- a/crates/ide_completion/src/completions/qualified_path.rs +++ b/crates/ide_completion/src/completions/qualified_path.rs @@ -49,7 +49,7 @@ pub(crate) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon hir::PathResolution::Def(hir::ModuleDef::Module(module)) => { let module_scope = module.scope(ctx.db, context_module); for (name, def) in module_scope { - if ctx.use_item_syntax.is_some() { + if ctx.in_use_tree() { if let hir::ScopeDef::Unknown = def { if let Some(name_ref) = ctx.name_ref_syntax.as_ref() { if name_ref.syntax().text() == name.to_string().as_str() { diff --git a/crates/ide_completion/src/completions/unqualified_path.rs b/crates/ide_completion/src/completions/unqualified_path.rs index 83b9148b3..4bafc1bf8 100644 --- a/crates/ide_completion/src/completions/unqualified_path.rs +++ b/crates/ide_completion/src/completions/unqualified_path.rs @@ -25,7 +25,7 @@ pub(crate) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionC return; } - if ctx.expects_use_tree() { + if ctx.expects_new_use_tree() { // only show modules in a fresh UseTree cov_mark::hit!(only_completes_modules_in_import); ctx.scope.process_all_names(&mut |name, res| { -- cgit v1.2.3 From 9353f36516e5b4026ce3a181d578c3a63876a18f Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 17 Jun 2021 13:59:31 +0200 Subject: Fix incorrect completions in empty braced use statement --- crates/ide_completion/src/completions/unqualified_path.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crates/ide_completion/src/completions') diff --git a/crates/ide_completion/src/completions/unqualified_path.rs b/crates/ide_completion/src/completions/unqualified_path.rs index 4bafc1bf8..6f96eceb9 100644 --- a/crates/ide_completion/src/completions/unqualified_path.rs +++ b/crates/ide_completion/src/completions/unqualified_path.rs @@ -25,7 +25,7 @@ pub(crate) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionC return; } - if ctx.expects_new_use_tree() { + if ctx.in_use_tree() { // only show modules in a fresh UseTree cov_mark::hit!(only_completes_modules_in_import); ctx.scope.process_all_names(&mut |name, res| { -- cgit v1.2.3