Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_completion/src/completions/vis.rs')
| -rw-r--r-- | crates/ide_completion/src/completions/vis.rs | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/crates/ide_completion/src/completions/vis.rs b/crates/ide_completion/src/completions/vis.rs index 0ac1393b53..9cf9632658 100644 --- a/crates/ide_completion/src/completions/vis.rs +++ b/crates/ide_completion/src/completions/vis.rs @@ -1,28 +1,26 @@ //! Completion for visibility specifiers. -use std::iter; - use hir::ScopeDef; use crate::{ - context::{CompletionContext, PathCompletionContext, PathKind}, + context::{CompletionContext, PathCompletionCtx, PathKind, PathQualifierCtx}, Completions, }; pub(crate) fn complete_vis(acc: &mut Completions, ctx: &CompletionContext) { - let (is_trivial_path, qualifier, has_in_token) = match ctx.path_context { - Some(PathCompletionContext { + let (is_absolute_path, qualifier, has_in_token) = match ctx.path_context { + Some(PathCompletionCtx { kind: Some(PathKind::Vis { has_in_token }), - is_trivial_path, + is_absolute_path, ref qualifier, .. - }) => (is_trivial_path, qualifier, has_in_token), + }) => (is_absolute_path, qualifier, has_in_token), _ => return, }; match qualifier { - Some((path, qualifier)) => { - if let Some(hir::PathResolution::Def(hir::ModuleDef::Module(module))) = qualifier { + Some(PathQualifierCtx { resolution, is_super_chain, .. }) => { + if let Some(hir::PathResolution::Def(hir::ModuleDef::Module(module))) = resolution { if let Some(current_module) = ctx.module { let next_towards_current = current_module .path_to_root(ctx.db) @@ -38,13 +36,11 @@ pub(crate) fn complete_vis(acc: &mut Completions, ctx: &CompletionContext) { } } - let is_super_chain = iter::successors(Some(path.clone()), |p| p.qualifier()) - .all(|p| p.segment().and_then(|s| s.super_token()).is_some()); - if is_super_chain { + if *is_super_chain { acc.add_keyword(ctx, "super::"); } } - None if is_trivial_path => { + None if !is_absolute_path => { if !has_in_token { cov_mark::hit!(kw_completion_in); acc.add_keyword(ctx, "in"); |