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.rs22
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");