Unnamed repository; edit this file 'description' to name the repository.
fix: Fix vis restriction path completions always using the parent module
Lukas Wirth 2022-02-03
parent d6329f2 · commit 2310908
-rw-r--r--crates/ide_completion/src/completions/vis.rs3
-rw-r--r--crates/ide_completion/src/tests/visibility.rs15
2 files changed, 17 insertions, 1 deletions
diff --git a/crates/ide_completion/src/completions/vis.rs b/crates/ide_completion/src/completions/vis.rs
index 9cf9632658..c610dcd705 100644
--- a/crates/ide_completion/src/completions/vis.rs
+++ b/crates/ide_completion/src/completions/vis.rs
@@ -20,13 +20,14 @@ pub(crate) fn complete_vis(acc: &mut Completions, ctx: &CompletionContext) {
match qualifier {
Some(PathQualifierCtx { resolution, is_super_chain, .. }) => {
+ // Try completing next child module of the path that is still a parent of the current module
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)
.into_iter()
.take_while(|it| it != module)
- .next();
+ .last();
if let Some(next) = next_towards_current {
if let Some(name) = next.name(ctx.db) {
cov_mark::hit!(visibility_qualified);
diff --git a/crates/ide_completion/src/tests/visibility.rs b/crates/ide_completion/src/tests/visibility.rs
index 2fd16235dc..970eb70719 100644
--- a/crates/ide_completion/src/tests/visibility.rs
+++ b/crates/ide_completion/src/tests/visibility.rs
@@ -57,6 +57,21 @@ mod bar {}
r#"
mod qux {
mod foo {
+ pub(in crate::$0)
+ }
+ mod baz {}
+}
+
+mod bar {}
+"#,
+ expect![[r#"
+ md qux
+ "#]],
+ );
+ check(
+ r#"
+mod qux {
+ mod foo {
pub(in crate::qux::$0)
}
mod baz {}