aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_assists/src/handlers/auto_import.rs1
-rw-r--r--crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs16
-rw-r--r--crates/ra_assists/src/utils/insert_use.rs9
3 files changed, 3 insertions, 23 deletions
diff --git a/crates/ra_assists/src/handlers/auto_import.rs b/crates/ra_assists/src/handlers/auto_import.rs
index 46fbdb525..c8bf181f9 100644
--- a/crates/ra_assists/src/handlers/auto_import.rs
+++ b/crates/ra_assists/src/handlers/auto_import.rs
@@ -53,7 +53,6 @@ pub(crate) fn auto_import(ctx: AssistCtx) -> Option<Assist> {
53 edit.target(auto_import_assets.syntax_under_caret.text_range()); 53 edit.target(auto_import_assets.syntax_under_caret.text_range());
54 insert_use_statement( 54 insert_use_statement(
55 &auto_import_assets.syntax_under_caret, 55 &auto_import_assets.syntax_under_caret,
56 &auto_import_assets.syntax_under_caret,
57 &import, 56 &import,
58 edit.text_edit_builder(), 57 edit.text_edit_builder(),
59 ); 58 );
diff --git a/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs b/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs
index 44f3f5e7f..94f5d6c50 100644
--- a/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs
+++ b/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs
@@ -33,26 +33,12 @@ pub(crate) fn replace_qualified_name_with_use(ctx: AssistCtx) -> Option<Assist>
33 return None; 33 return None;
34 } 34 }
35 35
36 let module = path.syntax().ancestors().find_map(ast::Module::cast);
37 let position = match module.and_then(|it| it.item_list()) {
38 Some(item_list) => item_list.syntax().clone(),
39 None => {
40 let current_file = path.syntax().ancestors().find_map(ast::SourceFile::cast)?;
41 current_file.syntax().clone()
42 }
43 };
44
45 ctx.add_assist( 36 ctx.add_assist(
46 AssistId("replace_qualified_name_with_use"), 37 AssistId("replace_qualified_name_with_use"),
47 "Replace qualified path with use", 38 "Replace qualified path with use",
48 |edit| { 39 |edit| {
49 let path_to_import = hir_path.mod_path().clone(); 40 let path_to_import = hir_path.mod_path().clone();
50 insert_use_statement( 41 insert_use_statement(path.syntax(), &path_to_import, edit.text_edit_builder());
51 &position,
52 &path.syntax(),
53 &path_to_import,
54 edit.text_edit_builder(),
55 );
56 42
57 if let Some(last) = path.segment() { 43 if let Some(last) = path.segment() {
58 // Here we are assuming the assist will provide a correct use statement 44 // Here we are assuming the assist will provide a correct use statement
diff --git a/crates/ra_assists/src/utils/insert_use.rs b/crates/ra_assists/src/utils/insert_use.rs
index 7ae3440ca..36fd2fc0b 100644
--- a/crates/ra_assists/src/utils/insert_use.rs
+++ b/crates/ra_assists/src/utils/insert_use.rs
@@ -15,8 +15,6 @@ use ra_text_edit::TextEditBuilder;
15pub fn insert_use_statement( 15pub fn insert_use_statement(
16 // Ideally the position of the cursor, used to 16 // Ideally the position of the cursor, used to
17 position: &SyntaxNode, 17 position: &SyntaxNode,
18 // The statement to use as anchor (last resort)
19 anchor: &SyntaxNode,
20 path_to_import: &ModPath, 18 path_to_import: &ModPath,
21 edit: &mut TextEditBuilder, 19 edit: &mut TextEditBuilder,
22) { 20) {
@@ -29,7 +27,7 @@ pub fn insert_use_statement(
29 }); 27 });
30 28
31 if let Some(container) = container { 29 if let Some(container) = container {
32 let action = best_action_for_target(container, anchor.clone(), &target); 30 let action = best_action_for_target(container, position.clone(), &target);
33 make_assist(&action, &target, edit); 31 make_assist(&action, &target, edit);
34 } 32 }
35} 33}
@@ -379,10 +377,7 @@ fn best_action_for_target(
379 // another item and we use it as anchor. 377 // another item and we use it as anchor.
380 // If there are no items above, we choose the target path itself as anchor. 378 // If there are no items above, we choose the target path itself as anchor.
381 // todo: we should include even whitespace blocks as anchor candidates 379 // todo: we should include even whitespace blocks as anchor candidates
382 let anchor = container 380 let anchor = container.children().next().or_else(|| Some(anchor));
383 .children()
384 .find(|n| n.text_range().start() < anchor.text_range().start())
385 .or_else(|| Some(anchor));
386 381
387 let add_after_anchor = anchor 382 let add_after_anchor = anchor
388 .clone() 383 .clone()