This commit is contained in:
Lukas Wirth 2024-05-22 20:45:54 +02:00
parent 7a21dff517
commit f50f8fbcb9
3 changed files with 11 additions and 16 deletions

View File

@ -1,9 +1,6 @@
//! An algorithm to find a path to refer to a certain item.
use std::{
cmp::Ordering,
iter::{self, once},
};
use std::{cmp::Ordering, iter};
use hir_expand::{
name::{known, AsName, Name},
@ -85,7 +82,7 @@ struct FindPathCtx<'db> {
fn find_path_inner(ctx: FindPathCtx<'_>, item: ItemInNs, from: ModuleId) -> Option<ModPath> {
// - if the item is a builtin, it's in scope
if let ItemInNs::Types(ModuleDefId::BuiltinType(builtin)) = item {
return Some(ModPath::from_segments(PathKind::Plain, once(builtin.as_name())));
return Some(ModPath::from_segments(PathKind::Plain, iter::once(builtin.as_name())));
}
let def_map = from.def_map(ctx.db);
@ -124,7 +121,7 @@ fn find_path_inner(ctx: FindPathCtx<'_>, item: ItemInNs, from: ModuleId) -> Opti
// - if the item is already in scope, return the name under which it is
let scope_name = find_in_scope(ctx.db, &def_map, from, item, ctx.ignore_local_imports);
if let Some(scope_name) = scope_name {
return Some(ModPath::from_segments(prefix.path_kind(), Some(scope_name)));
return Some(ModPath::from_segments(prefix.path_kind(), iter::once(scope_name)));
}
}
@ -209,7 +206,7 @@ fn find_path_for_module(
} else {
PathKind::Plain
};
return Some((ModPath::from_segments(kind, once(name.clone())), Stable));
return Some((ModPath::from_segments(kind, iter::once(name.clone())), Stable));
}
}
let prefix = if module_id.is_within_block() { PrefixKind::Plain } else { ctx.prefix };
@ -227,7 +224,10 @@ fn find_path_for_module(
);
if let Some(scope_name) = scope_name {
// - if the item is already in scope, return the name under which it is
return Some((ModPath::from_segments(prefix.path_kind(), once(scope_name)), Stable));
return Some((
ModPath::from_segments(prefix.path_kind(), iter::once(scope_name)),
Stable,
));
}
}
@ -301,7 +301,7 @@ fn find_in_prelude(
});
if found_and_same_def.unwrap_or(true) {
Some(ModPath::from_segments(PathKind::Plain, once(name.clone())))
Some(ModPath::from_segments(PathKind::Plain, iter::once(name.clone())))
} else {
None
}

View File

@ -1001,7 +1001,7 @@ impl HirDisplay for Ty {
ItemInNs::Types((*def_id).into()),
module_id,
PrefixKind::Plain,
true,
false,
ImportPathConfig { prefer_no_std: false, prefer_prelude: true },
) {
write!(f, "{}", path.display(f.db.upcast()))?;

View File

@ -266,12 +266,7 @@ pub fn resolve_completion_edits(
);
let import = items_with_name
.filter_map(|candidate| {
current_module.find_use_path(
db,
candidate,
config.insert_use.prefix_kind,
cfg,
)
current_module.find_use_path(db, candidate, config.insert_use.prefix_kind, cfg)
})
.find(|mod_path| mod_path.display(db).to_string() == full_import_path);
if let Some(import_path) = import {