diff options
author | Lukas Wirth <[email protected]> | 2021-06-17 12:56:55 +0100 |
---|---|---|
committer | Lukas Wirth <[email protected]> | 2021-06-17 12:56:55 +0100 |
commit | 2225db2eb48bd8c8fdf399c50652d3f95c851ace (patch) | |
tree | 31a419449dff7bb0112ae328de2e4fdec755326d /crates/ide_completion/src/completions | |
parent | e14f5cfff04942f45a4af3b45152df9672b3458a (diff) |
Refine `self`, `super` and `crate` completion in use paths
Diffstat (limited to 'crates/ide_completion/src/completions')
4 files changed, 21 insertions, 14 deletions
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) | |||
109 | if !ctx.config.enable_imports_on_the_fly { | 109 | if !ctx.config.enable_imports_on_the_fly { |
110 | return None; | 110 | return None; |
111 | } | 111 | } |
112 | if ctx.use_item_syntax.is_some() | 112 | if ctx.in_use_tree() |
113 | || ctx.is_path_disallowed() | 113 | || ctx.is_path_disallowed() |
114 | || ctx.expects_item() | 114 | || ctx.expects_item() |
115 | || ctx.expects_assoc_item() | 115 | || 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 | |||
18 | item | 18 | item |
19 | }; | 19 | }; |
20 | 20 | ||
21 | if ctx.use_item_syntax.is_some() { | 21 | if ctx.in_use_tree() { |
22 | let qual = ctx.path_qual(); | 22 | match &ctx.path_context { |
23 | if qual.is_none() { | 23 | Some(PathCompletionContext { qualifier: Some(qual), use_tree_parent, .. }) => { |
24 | kw_completion("crate::").add_to(acc); | 24 | if iter::successors(Some(qual.clone()), |p| p.qualifier()) |
25 | } | 25 | .all(|p| p.segment().and_then(|s| s.super_token()).is_some()) |
26 | kw_completion("self").add_to(acc); | 26 | { |
27 | if iter::successors(qual.cloned(), |p| p.qualifier()) | 27 | kw_completion("super::").add_to(acc); |
28 | .all(|p| p.segment().and_then(|s| s.super_token()).is_some()) | 28 | } |
29 | { | 29 | if *use_tree_parent { |
30 | kw_completion("super::").add_to(acc); | 30 | kw_completion("self").add_to(acc); |
31 | } | 31 | } |
32 | } | ||
33 | _ => { | ||
34 | kw_completion("crate::").add_to(acc); | ||
35 | kw_completion("self::").add_to(acc); | ||
36 | kw_completion("super::").add_to(acc); | ||
37 | } | ||
38 | }; | ||
32 | } | 39 | } |
33 | 40 | ||
34 | // Suggest .await syntax for types that implement Future trait | 41 | // 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 | |||
49 | hir::PathResolution::Def(hir::ModuleDef::Module(module)) => { | 49 | hir::PathResolution::Def(hir::ModuleDef::Module(module)) => { |
50 | let module_scope = module.scope(ctx.db, context_module); | 50 | let module_scope = module.scope(ctx.db, context_module); |
51 | for (name, def) in module_scope { | 51 | for (name, def) in module_scope { |
52 | if ctx.use_item_syntax.is_some() { | 52 | if ctx.in_use_tree() { |
53 | if let hir::ScopeDef::Unknown = def { | 53 | if let hir::ScopeDef::Unknown = def { |
54 | if let Some(name_ref) = ctx.name_ref_syntax.as_ref() { | 54 | if let Some(name_ref) = ctx.name_ref_syntax.as_ref() { |
55 | if name_ref.syntax().text() == name.to_string().as_str() { | 55 | 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 | |||
25 | return; | 25 | return; |
26 | } | 26 | } |
27 | 27 | ||
28 | if ctx.expects_use_tree() { | 28 | if ctx.expects_new_use_tree() { |
29 | // only show modules in a fresh UseTree | 29 | // only show modules in a fresh UseTree |
30 | cov_mark::hit!(only_completes_modules_in_import); | 30 | cov_mark::hit!(only_completes_modules_in_import); |
31 | ctx.scope.process_all_names(&mut |name, res| { | 31 | ctx.scope.process_all_names(&mut |name, res| { |