aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/handlers/auto_import.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_assists/src/handlers/auto_import.rs')
-rw-r--r--crates/ra_assists/src/handlers/auto_import.rs53
1 files changed, 32 insertions, 21 deletions
diff --git a/crates/ra_assists/src/handlers/auto_import.rs b/crates/ra_assists/src/handlers/auto_import.rs
index 84b5474f9..e88c121eb 100644
--- a/crates/ra_assists/src/handlers/auto_import.rs
+++ b/crates/ra_assists/src/handlers/auto_import.rs
@@ -1,13 +1,9 @@
1use hir::ModPath;
2use ra_ide_db::imports_locator::ImportsLocator; 1use ra_ide_db::imports_locator::ImportsLocator;
3use ra_syntax::{ 2use ra_syntax::ast::{self, AstNode};
4 ast::{self, AstNode},
5 SyntaxNode,
6};
7 3
8use crate::{ 4use crate::{
9 assist_ctx::{ActionBuilder, Assist, AssistCtx}, 5 assist_ctx::{Assist, AssistCtx},
10 auto_import_text_edit, AssistId, 6 insert_use_statement, AssistId,
11}; 7};
12use std::collections::BTreeSet; 8use std::collections::BTreeSet;
13 9
@@ -67,24 +63,24 @@ pub(crate) fn auto_import(ctx: AssistCtx) -> Option<Assist> {
67 return None; 63 return None;
68 } 64 }
69 65
70 ctx.add_assist_group(AssistId("auto_import"), format!("Import {}", name_to_import), || { 66 let mut group = ctx.add_assist_group(format!("Import {}", name_to_import));
71 proposed_imports 67 for import in proposed_imports {
72 .into_iter() 68 group.add_assist(AssistId("auto_import"), format!("Import `{}`", &import), |edit| {
73 .map(|import| import_to_action(import, &position, &path_to_import_syntax)) 69 edit.target(path_to_import_syntax.text_range());
74 .collect() 70 insert_use_statement(
75 }) 71 &position,
76} 72 path_to_import_syntax,
77 73 &import,
78fn import_to_action(import: ModPath, position: &SyntaxNode, anchor: &SyntaxNode) -> ActionBuilder { 74 edit.text_edit_builder(),
79 let mut action_builder = ActionBuilder::default(); 75 );
80 action_builder.label(format!("Import `{}`", &import)); 76 });
81 auto_import_text_edit(position, anchor, &import, action_builder.text_edit_builder()); 77 }
82 action_builder 78 group.finish()
83} 79}
84 80
85#[cfg(test)] 81#[cfg(test)]
86mod tests { 82mod tests {
87 use crate::helpers::{check_assist, check_assist_not_applicable}; 83 use crate::helpers::{check_assist, check_assist_not_applicable, check_assist_target};
88 84
89 use super::*; 85 use super::*;
90 86
@@ -255,4 +251,19 @@ mod tests {
255 ", 251 ",
256 ); 252 );
257 } 253 }
254
255 #[test]
256 fn auto_import_target() {
257 check_assist_target(
258 auto_import,
259 r"
260 struct AssistInfo {
261 group_label: Option<<|>GroupLabel>,
262 }
263
264 mod m { pub struct GroupLabel; }
265 ",
266 "GroupLabel",
267 )
268 }
258} 269}