aboutsummaryrefslogtreecommitdiff
path: root/crates/assists/src/handlers/auto_import.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/assists/src/handlers/auto_import.rs')
-rw-r--r--crates/assists/src/handlers/auto_import.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/crates/assists/src/handlers/auto_import.rs b/crates/assists/src/handlers/auto_import.rs
index c4770f336..f3b4c5708 100644
--- a/crates/assists/src/handlers/auto_import.rs
+++ b/crates/assists/src/handlers/auto_import.rs
@@ -13,8 +13,11 @@ use syntax::{
13}; 13};
14 14
15use crate::{ 15use crate::{
16 utils::insert_use_statement, AssistContext, AssistId, AssistKind, Assists, GroupLabel, 16 utils::{insert_use, MergeBehaviour},
17 AssistContext, AssistId, AssistKind, Assists, GroupLabel,
17}; 18};
19use ast::make;
20use insert_use::find_insert_use_container;
18 21
19// Assist: auto_import 22// Assist: auto_import
20// 23//
@@ -44,6 +47,8 @@ pub(crate) fn auto_import(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
44 47
45 let range = ctx.sema.original_range(&auto_import_assets.syntax_under_caret).range; 48 let range = ctx.sema.original_range(&auto_import_assets.syntax_under_caret).range;
46 let group = auto_import_assets.get_import_group_message(); 49 let group = auto_import_assets.get_import_group_message();
50 let container = find_insert_use_container(&auto_import_assets.syntax_under_caret, ctx)?;
51 let syntax = container.either(|l| l.syntax().clone(), |r| r.syntax().clone());
47 for import in proposed_imports { 52 for import in proposed_imports {
48 acc.add_group( 53 acc.add_group(
49 &group, 54 &group,
@@ -51,12 +56,12 @@ pub(crate) fn auto_import(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
51 format!("Import `{}`", &import), 56 format!("Import `{}`", &import),
52 range, 57 range,
53 |builder| { 58 |builder| {
54 insert_use_statement( 59 let new_syntax = insert_use(
55 &auto_import_assets.syntax_under_caret, 60 &syntax,
56 &import.to_string(), 61 make::path_from_text(&import.to_string()),
57 ctx, 62 Some(MergeBehaviour::Full),
58 builder.text_edit_builder(),
59 ); 63 );
64 builder.replace(syntax.text_range(), new_syntax.to_string())
60 }, 65 },
61 ); 66 );
62 } 67 }
@@ -358,7 +363,7 @@ mod tests {
358 } 363 }
359 ", 364 ",
360 r" 365 r"
361 use PubMod::{PubStruct2, PubStruct1}; 366 use PubMod::{PubStruct1, PubStruct2};
362 367
363 struct Test { 368 struct Test {
364 test: PubStruct2<u8>, 369 test: PubStruct2<u8>,