Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/render.rs')
-rw-r--r--crates/ide-completion/src/render.rs24
1 files changed, 21 insertions, 3 deletions
diff --git a/crates/ide-completion/src/render.rs b/crates/ide-completion/src/render.rs
index ec3c2fe355..0f00ad45f9 100644
--- a/crates/ide-completion/src/render.rs
+++ b/crates/ide-completion/src/render.rs
@@ -281,8 +281,8 @@ 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
+ let local_name = get_import_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))
@@ -294,7 +294,7 @@ pub(crate) fn render_resolution_with_import_pat(
import_edit: LocatedImport,
) -> Option<Builder> {
let resolution = ScopeDef::from(import_edit.original_item);
- let local_name = scope_def_to_name(resolution, &ctx, &import_edit)?;
+ let local_name = get_import_name(resolution, &ctx, &import_edit)?;
Some(render_resolution_pat(ctx, pattern_ctx, local_name, Some(import_edit), resolution))
}
@@ -357,6 +357,24 @@ pub(crate) fn render_expr(
Some(item)
}
+fn get_import_name(
+ resolution: ScopeDef,
+ ctx: &RenderContext<'_>,
+ import_edit: &LocatedImport,
+) -> Option<hir::Name> {
+ // FIXME: Temporary workaround for handling aliased import.
+ // This should be removed after we have proper support for importing alias.
+ // <https://github.com/rust-lang/rust-analyzer/issues/14079>
+
+ // If `item_to_import` matches `original_item`, we are importing the item itself (not its parent module).
+ // In this case, we can use the last segment of `import_path`, as it accounts for the aliased name.
+ if import_edit.item_to_import == import_edit.original_item {
+ import_edit.import_path.segments().last().cloned()
+ } else {
+ scope_def_to_name(resolution, ctx, import_edit)
+ }
+}
+
fn scope_def_to_name(
resolution: ScopeDef,
ctx: &RenderContext<'_>,