Skip to content

Commit 5dda995

Browse files
committed
Fix review comments
1 parent 74c3e7a commit 5dda995

File tree

2 files changed

+19
-33
lines changed

2 files changed

+19
-33
lines changed

crates/ra_assists/src/handlers/extract_struct_from_enum_variant.rs

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
use ra_ide_db::{
2-
defs::Definition, imports_locator::ImportsLocator, search::Reference, RootDatabase,
3-
};
1+
use ra_ide_db::{defs::Definition, search::Reference, RootDatabase};
42
use ra_syntax::{
53
algo::find_node_at_offset,
64
ast::{self, AstNode, NameOwner},
@@ -9,11 +7,11 @@ use ra_syntax::{
97

108
use crate::{
119
assist_context::{AssistBuilder, AssistDirector},
12-
utils::insert_use::insert_use_statement_with_string_path,
10+
utils::insert_use_statement,
1311
AssistContext, AssistId, Assists,
1412
};
1513
use ast::{ArgListOwner, VisibilityOwner};
16-
use hir::{EnumVariant, Module, ModuleDef};
14+
use hir::{EnumVariant, Module, ModuleDef, Name};
1715
use ra_db::FileId;
1816
use ra_fmt::leading_indent;
1917
use rustc_hash::FxHashSet;
@@ -46,11 +44,11 @@ pub(crate) fn extract_struct_from_enum_variant(
4644
return None;
4745
}
4846
let enum_ast = variant.parent_enum();
49-
let enum_name = enum_ast.name()?.to_string();
5047
let visibility = enum_ast.visibility();
51-
let current_module_def =
52-
ImportsLocator::new(ctx.db).find_imports(&enum_name).first()?.left()?;
53-
let current_module = current_module_def.module(ctx.db)?;
48+
let enum_hir = ctx.sema.to_def(&enum_ast)?;
49+
let variant_hir_name = variant_hir.name(ctx.db);
50+
let enum_module_def = ModuleDef::from(enum_hir);
51+
let current_module = enum_hir.module(ctx.db);
5452
let target = variant.syntax().text_range();
5553
acc.add_in_multiple_files(
5654
AssistId("extract_struct_from_enum_variant"),
@@ -69,7 +67,8 @@ pub(crate) fn extract_struct_from_enum_variant(
6967
edit,
7068
reference,
7169
&source_file,
72-
&current_module_def,
70+
&enum_module_def,
71+
&variant_hir_name,
7372
&mut visited_modules_set,
7473
);
7574
}
@@ -102,20 +101,15 @@ fn insert_import(
102101
builder: &mut AssistBuilder,
103102
path: &ast::PathExpr,
104103
module: &Module,
105-
module_def: &ModuleDef,
106-
path_segment: ast::NameRef,
104+
enum_module_def: &ModuleDef,
105+
variant_hir_name: &Name,
107106
) -> Option<()> {
108107
let db = ctx.db;
109-
let mod_path = module.find_use_path(db, module_def.clone());
108+
let mod_path = module.find_use_path(db, enum_module_def.clone());
110109
if let Some(mut mod_path) = mod_path {
111110
mod_path.segments.pop();
112-
let use_path = format!("{}::{}", mod_path.to_string(), path_segment.to_string());
113-
insert_use_statement_with_string_path(
114-
path.syntax(),
115-
&use_path,
116-
ctx,
117-
builder.text_edit_builder(),
118-
);
111+
mod_path.segments.push(variant_hir_name.clone());
112+
insert_use_statement(path.syntax(), &mod_path, ctx, builder.text_edit_builder());
119113
}
120114
Some(())
121115
}
@@ -175,7 +169,8 @@ fn update_reference(
175169
edit: &mut AssistDirector,
176170
reference: Reference,
177171
source_file: &SourceFile,
178-
module_def: &ModuleDef,
172+
enum_module_def: &ModuleDef,
173+
variant_hir_name: &Name,
179174
visited_modules_set: &mut FxHashSet<Module>,
180175
) -> Option<()> {
181176
let path_expr: ast::PathExpr = find_node_at_offset::<ast::PathExpr>(
@@ -185,7 +180,6 @@ fn update_reference(
185180
let call = path_expr.syntax().parent().and_then(ast::CallExpr::cast)?;
186181
let list = call.arg_list()?;
187182
let segment = path_expr.path()?.segment()?;
188-
let segment_name = segment.name_ref()?;
189183
let module = ctx.sema.scope(&path_expr.syntax()).module()?;
190184
let list_range = list.syntax().text_range();
191185
let inside_list_range = TextRange::new(
@@ -194,7 +188,8 @@ fn update_reference(
194188
);
195189
edit.perform(reference.file_range.file_id, |builder| {
196190
if !visited_modules_set.contains(&module) {
197-
if insert_import(ctx, builder, &path_expr, &module, module_def, segment_name).is_some()
191+
if insert_import(ctx, builder, &path_expr, &module, enum_module_def, variant_hir_name)
192+
.is_some()
198193
{
199194
visited_modules_set.insert(module);
200195
}

crates/ra_assists/src/utils/insert_use.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,7 @@ pub(crate) fn insert_use_statement(
2323
ctx: &AssistContext,
2424
builder: &mut TextEditBuilder,
2525
) {
26-
insert_use_statement_with_string_path(position, &path_to_import.to_string(), ctx, builder);
27-
}
28-
29-
pub(crate) fn insert_use_statement_with_string_path(
30-
position: &SyntaxNode,
31-
path_to_import: &str,
32-
ctx: &AssistContext,
33-
builder: &mut TextEditBuilder,
34-
) {
35-
let target = path_to_import.split("::").map(SmolStr::new).collect::<Vec<_>>();
26+
let target = path_to_import.to_string().split("::").map(SmolStr::new).collect::<Vec<_>>();
3627
let container = ctx.sema.ancestors_with_macros(position.clone()).find_map(|n| {
3728
if let Some(module) = ast::Module::cast(n.clone()) {
3829
return module.item_list().map(|it| it.syntax().clone());

0 commit comments

Comments
 (0)