Skip to content

Commit e74c55b

Browse files
Refactor the import location
1 parent 89d410c commit e74c55b

File tree

3 files changed

+126
-162
lines changed

3 files changed

+126
-162
lines changed

crates/hir/src/lib.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,6 +1115,7 @@ pub enum AssocItem {
11151115
Const(Const),
11161116
TypeAlias(TypeAlias),
11171117
}
1118+
#[derive(Debug)]
11181119
pub enum AssocItemContainer {
11191120
Trait(Trait),
11201121
Impl(Impl),
@@ -2148,6 +2149,16 @@ impl ScopeDef {
21482149
}
21492150
}
21502151

2152+
impl From<ItemInNs> for ScopeDef {
2153+
fn from(item: ItemInNs) -> Self {
2154+
match item {
2155+
ItemInNs::Types(id) => ScopeDef::ModuleDef(id.into()),
2156+
ItemInNs::Values(id) => ScopeDef::ModuleDef(id.into()),
2157+
ItemInNs::Macros(id) => ScopeDef::MacroDef(id.into()),
2158+
}
2159+
}
2160+
}
2161+
21512162
pub trait HasVisibility {
21522163
fn visibility(&self, db: &dyn HirDatabase) -> Visibility;
21532164
fn is_visible_from(&self, db: &dyn HirDatabase, module: Module) -> bool {

crates/ide_completion/src/completions/flyimport.rs

Lines changed: 5 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -95,20 +95,20 @@ pub(crate) fn import_on_the_fly(acc: &mut Completions, ctx: &CompletionContext)
9595
.search_for_imports(&ctx.sema, ctx.config.insert_use.prefix_kind)
9696
.into_iter()
9797
.map(|import| {
98-
let proposed_def = match import.item_to_display() {
98+
let def_to_display = match import.item_to_display() {
9999
ItemInNs::Types(id) => ScopeDef::ModuleDef(id.into()),
100100
ItemInNs::Values(id) => ScopeDef::ModuleDef(id.into()),
101101
ItemInNs::Macros(id) => ScopeDef::MacroDef(id.into()),
102102
};
103-
(import, proposed_def)
103+
(import, def_to_display)
104104
})
105105
.collect::<Vec<_>>();
106106
all_mod_paths.sort_by_cached_key(|(import, _)| {
107107
compute_fuzzy_completion_order_key(import.display_path(), &user_input_lowercased)
108108
});
109109

110-
acc.add_all(all_mod_paths.into_iter().filter_map(|(import, definition)| {
111-
let import_for_trait_assoc_item = match definition {
110+
acc.add_all(all_mod_paths.into_iter().filter_map(|(import, def_to_display)| {
111+
let import_for_trait_assoc_item = match def_to_display {
112112
ScopeDef::ModuleDef(module_def) => module_def
113113
.as_assoc_item(ctx.db)
114114
.and_then(|assoc| assoc.containing_trait(ctx.db))
@@ -117,7 +117,7 @@ pub(crate) fn import_on_the_fly(acc: &mut Completions, ctx: &CompletionContext)
117117
};
118118
let import_edit =
119119
ImportEdit { import, import_scope: import_scope.clone(), import_for_trait_assoc_item };
120-
render_resolution_with_import(RenderContext::new(ctx), import_edit, &definition)
120+
render_resolution_with_import(RenderContext::new(ctx), import_edit, &def_to_display)
121121
}));
122122
Some(())
123123
}
@@ -867,61 +867,6 @@ mod foo {
867867
fn main() {
868868
bar::Item::TEST_ASSOC
869869
}
870-
"#,
871-
);
872-
}
873-
874-
#[test]
875-
fn unresolved_assoc_item_container_and_trait_with_path() {
876-
check_edit(
877-
"TEST_ASSOC",
878-
r#"
879-
mod foo {
880-
pub mod bar {
881-
pub trait SomeTrait {
882-
const TEST_ASSOC: usize;
883-
}
884-
}
885-
886-
pub mod baz {
887-
use super::bar::SomeTrait;
888-
889-
pub struct Item;
890-
891-
impl SomeTrait for Item {
892-
const TEST_ASSOC: usize = 3;
893-
}
894-
}
895-
}
896-
897-
fn main() {
898-
baz::Item::TEST_A$0
899-
}
900-
"#,
901-
r#"
902-
use foo::{bar::SomeTrait, baz};
903-
904-
mod foo {
905-
pub mod bar {
906-
pub trait SomeTrait {
907-
const TEST_ASSOC: usize;
908-
}
909-
}
910-
911-
pub mod baz {
912-
use super::bar::SomeTrait;
913-
914-
pub struct Item;
915-
916-
impl SomeTrait for Item {
917-
const TEST_ASSOC: usize = 3;
918-
}
919-
}
920-
}
921-
922-
fn main() {
923-
baz::Item::TEST_ASSOC
924-
}
925870
"#,
926871
);
927872
}

0 commit comments

Comments
 (0)