aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/assists
diff options
context:
space:
mode:
authorKirill Bulatov <[email protected]>2020-02-02 12:06:51 +0000
committerKirill Bulatov <[email protected]>2020-02-02 12:06:51 +0000
commit6dae5cbb1190cde6a20aa1758c7d87e84933378e (patch)
treea2ff09d550a6c8e057d4340d63b5c957fa134590 /crates/ra_assists/src/assists
parenta9669a5505939c28fd97e53e1bbb1571c2408cf1 (diff)
Require ModPath for importing
Diffstat (limited to 'crates/ra_assists/src/assists')
-rw-r--r--crates/ra_assists/src/assists/add_import.rs9
-rw-r--r--crates/ra_assists/src/assists/auto_import.rs9
2 files changed, 8 insertions, 10 deletions
diff --git a/crates/ra_assists/src/assists/add_import.rs b/crates/ra_assists/src/assists/add_import.rs
index bf6cfe865..96a494c93 100644
--- a/crates/ra_assists/src/assists/add_import.rs
+++ b/crates/ra_assists/src/assists/add_import.rs
@@ -1,4 +1,4 @@
1use hir::{self, db::HirDatabase}; 1use hir::{self, db::HirDatabase, ModPath};
2use ra_syntax::{ 2use ra_syntax::{
3 ast::{self, NameOwner}, 3 ast::{self, NameOwner},
4 AstNode, Direction, SmolStr, 4 AstNode, Direction, SmolStr,
@@ -21,9 +21,10 @@ pub fn auto_import_text_edit(
21 // The statement to use as anchor (last resort) 21 // The statement to use as anchor (last resort)
22 anchor: &SyntaxNode, 22 anchor: &SyntaxNode,
23 // The path to import as a sequence of strings 23 // The path to import as a sequence of strings
24 target: &[SmolStr], 24 path_to_import: &ModPath,
25 edit: &mut TextEditBuilder, 25 edit: &mut TextEditBuilder,
26) { 26) {
27 let target = path_to_import.to_string().split("::").map(SmolStr::new).collect::<Vec<_>>();
27 let container = position.ancestors().find_map(|n| { 28 let container = position.ancestors().find_map(|n| {
28 if let Some(module) = ast::Module::cast(n.clone()) { 29 if let Some(module) = ast::Module::cast(n.clone()) {
29 return module.item_list().map(|it| it.syntax().clone()); 30 return module.item_list().map(|it| it.syntax().clone());
@@ -32,8 +33,8 @@ pub fn auto_import_text_edit(
32 }); 33 });
33 34
34 if let Some(container) = container { 35 if let Some(container) = container {
35 let action = best_action_for_target(container, anchor.clone(), target); 36 let action = best_action_for_target(container, anchor.clone(), &target);
36 make_assist(&action, target, edit); 37 make_assist(&action, &target, edit);
37 } 38 }
38} 39}
39 40
diff --git a/crates/ra_assists/src/assists/auto_import.rs b/crates/ra_assists/src/assists/auto_import.rs
index 0d15adb87..9e874aebb 100644
--- a/crates/ra_assists/src/assists/auto_import.rs
+++ b/crates/ra_assists/src/assists/auto_import.rs
@@ -1,7 +1,6 @@
1use hir::db::HirDatabase; 1use hir::{db::HirDatabase, ModPath};
2use ra_syntax::{ 2use ra_syntax::{
3 ast::{self, AstNode}, 3 ast::{self, AstNode},
4 SmolStr,
5 SyntaxKind::USE_ITEM, 4 SyntaxKind::USE_ITEM,
6 SyntaxNode, 5 SyntaxNode,
7}; 6};
@@ -58,7 +57,6 @@ pub(crate) fn auto_import<F: ImportsLocator>(
58 .filter_map(|module_def| module_with_name_to_import.find_use_path(ctx.db, module_def)) 57 .filter_map(|module_def| module_with_name_to_import.find_use_path(ctx.db, module_def))
59 .filter(|use_path| !use_path.segments.is_empty()) 58 .filter(|use_path| !use_path.segments.is_empty())
60 .take(20) 59 .take(20)
61 .map(|import| import.to_string())
62 .collect::<std::collections::BTreeSet<_>>(); 60 .collect::<std::collections::BTreeSet<_>>();
63 if proposed_imports.is_empty() { 61 if proposed_imports.is_empty() {
64 return None; 62 return None;
@@ -76,11 +74,10 @@ pub(crate) fn auto_import<F: ImportsLocator>(
76 ) 74 )
77} 75}
78 76
79fn import_to_action(import: String, position: &SyntaxNode, anchor: &SyntaxNode) -> ActionBuilder { 77fn import_to_action(import: ModPath, position: &SyntaxNode, anchor: &SyntaxNode) -> ActionBuilder {
80 let mut action_builder = ActionBuilder::default(); 78 let mut action_builder = ActionBuilder::default();
81 action_builder.label(format!("Import `{}`", &import)); 79 action_builder.label(format!("Import `{}`", &import));
82 let import_segments = import.split("::").map(SmolStr::new).collect::<Vec<_>>(); 80 auto_import_text_edit(position, anchor, &import, action_builder.text_edit_builder());
83 auto_import_text_edit(position, anchor, &import_segments, action_builder.text_edit_builder());
84 action_builder 81 action_builder
85} 82}
86 83