diff options
Diffstat (limited to 'crates/ra_assists/src/handlers/auto_import.rs')
-rw-r--r-- | crates/ra_assists/src/handlers/auto_import.rs | 53 |
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 @@ | |||
1 | use hir::ModPath; | ||
2 | use ra_ide_db::imports_locator::ImportsLocator; | 1 | use ra_ide_db::imports_locator::ImportsLocator; |
3 | use ra_syntax::{ | 2 | use ra_syntax::ast::{self, AstNode}; |
4 | ast::{self, AstNode}, | ||
5 | SyntaxNode, | ||
6 | }; | ||
7 | 3 | ||
8 | use crate::{ | 4 | use 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 | }; |
12 | use std::collections::BTreeSet; | 8 | use 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, | |
78 | fn 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)] |
86 | mod tests { | 82 | mod 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 | } |