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.rs21
1 files changed, 12 insertions, 9 deletions
diff --git a/crates/assists/src/handlers/auto_import.rs b/crates/assists/src/handlers/auto_import.rs
index c4770f336..b5eb2c722 100644
--- a/crates/assists/src/handlers/auto_import.rs
+++ b/crates/assists/src/handlers/auto_import.rs
@@ -1,20 +1,20 @@
1use std::collections::BTreeSet; 1use std::collections::BTreeSet;
2 2
3use ast::make;
3use either::Either; 4use either::Either;
4use hir::{ 5use hir::{
5 AsAssocItem, AssocItemContainer, ModPath, Module, ModuleDef, PathResolution, Semantics, Trait, 6 AsAssocItem, AssocItemContainer, ModPath, Module, ModuleDef, PathResolution, Semantics, Trait,
6 Type, 7 Type,
7}; 8};
8use ide_db::{imports_locator, RootDatabase}; 9use ide_db::{imports_locator, RootDatabase};
10use insert_use::ImportScope;
9use rustc_hash::FxHashSet; 11use rustc_hash::FxHashSet;
10use syntax::{ 12use syntax::{
11 ast::{self, AstNode}, 13 ast::{self, AstNode},
12 SyntaxNode, 14 SyntaxNode,
13}; 15};
14 16
15use crate::{ 17use crate::{utils::insert_use, AssistContext, AssistId, AssistKind, Assists, GroupLabel};
16 utils::insert_use_statement, AssistContext, AssistId, AssistKind, Assists, GroupLabel,
17};
18 18
19// Assist: auto_import 19// Assist: auto_import
20// 20//
@@ -44,6 +44,9 @@ pub(crate) fn auto_import(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
44 44
45 let range = ctx.sema.original_range(&auto_import_assets.syntax_under_caret).range; 45 let range = ctx.sema.original_range(&auto_import_assets.syntax_under_caret).range;
46 let group = auto_import_assets.get_import_group_message(); 46 let group = auto_import_assets.get_import_group_message();
47 let scope =
48 ImportScope::find_insert_use_container(&auto_import_assets.syntax_under_caret, ctx)?;
49 let syntax = scope.as_syntax_node();
47 for import in proposed_imports { 50 for import in proposed_imports {
48 acc.add_group( 51 acc.add_group(
49 &group, 52 &group,
@@ -51,12 +54,12 @@ pub(crate) fn auto_import(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
51 format!("Import `{}`", &import), 54 format!("Import `{}`", &import),
52 range, 55 range,
53 |builder| { 56 |builder| {
54 insert_use_statement( 57 let new_syntax = insert_use(
55 &auto_import_assets.syntax_under_caret, 58 &scope,
56 &import.to_string(), 59 make::path_from_text(&import.to_string()),
57 ctx, 60 ctx.config.insert_use.merge,
58 builder.text_edit_builder(),
59 ); 61 );
62 builder.replace(syntax.text_range(), new_syntax.to_string())
60 }, 63 },
61 ); 64 );
62 } 65 }
@@ -358,7 +361,7 @@ mod tests {
358 } 361 }
359 ", 362 ",
360 r" 363 r"
361 use PubMod::{PubStruct2, PubStruct1}; 364 use PubMod::{PubStruct1, PubStruct2};
362 365
363 struct Test { 366 struct Test {
364 test: PubStruct2<u8>, 367 test: PubStruct2<u8>,