Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-completion/src/render.rs10
-rw-r--r--crates/ide-completion/src/tests/flyimport.rs42
2 files changed, 50 insertions, 2 deletions
diff --git a/crates/ide-completion/src/render.rs b/crates/ide-completion/src/render.rs
index 4dd171142f..edaa82d88f 100644
--- a/crates/ide-completion/src/render.rs
+++ b/crates/ide-completion/src/render.rs
@@ -281,8 +281,14 @@ pub(crate) fn render_resolution_with_import(
import_edit: LocatedImport,
) -> Option<Builder> {
let resolution = ScopeDef::from(import_edit.original_item);
- let local_name = scope_def_to_name(resolution, &ctx, &import_edit)?;
- //this now just renders the alias text, but we need to find the aliases earlier and call this with the alias instead
+ // Use the last segment when `item_to_import` matches `original_item`,
+ // as it will take the aliased name into account.
+ let local_name = if import_edit.item_to_import == import_edit.original_item {
+ import_edit.import_path.segments().last()?.clone()
+ } else {
+ scope_def_to_name(resolution, &ctx, &import_edit)?
+ };
+ // This now just renders the alias text, but we need to find the aliases earlier and call this with the alias instead.
let doc_aliases = ctx.completion.doc_aliases_in_scope(resolution);
let ctx = ctx.doc_aliases(doc_aliases);
Some(render_resolution_path(ctx, path_ctx, local_name, Some(import_edit), resolution))
diff --git a/crates/ide-completion/src/tests/flyimport.rs b/crates/ide-completion/src/tests/flyimport.rs
index 0b532064fb..1ca0116c79 100644
--- a/crates/ide-completion/src/tests/flyimport.rs
+++ b/crates/ide-completion/src/tests/flyimport.rs
@@ -1669,3 +1669,45 @@ mod module {
"#]],
);
}
+
+#[test]
+fn re_export_aliased_function() {
+ check(
+ r#"
+//- /lib.rs crate:bar
+pub fn func(_: i32) -> i32 {}
+
+//- /lib.rs crate:foo deps:bar
+pub use bar::func as my_func;
+
+//- /main.rs crate:main deps:foo
+fn main() {
+ m$0
+}
+"#,
+ expect![[r#"
+ fn my_func(…) (use foo::my_func) fn(i32) -> i32
+ "#]],
+ );
+}
+
+#[test]
+fn re_export_aliased_module() {
+ check(
+ r#"
+//- /lib.rs crate:bar
+pub mod baz {}
+
+//- /lib.rs crate:foo deps:bar
+pub use bar::baz as my_baz;
+
+//- /main.rs crate:main deps:foo
+fn main() {
+ m$0
+}
+"#,
+ expect![[r#"
+ md my_baz (use foo::my_baz)
+ "#]],
+ );
+}