Skip to content

Commit 3a244e0

Browse files
committed
Remove unwraps where possible
1 parent 6ee1c60 commit 3a244e0

File tree

1 file changed

+11
-22
lines changed

1 file changed

+11
-22
lines changed

crates/ra_assists/src/handlers/extract_struct_from_enum_variant.rs

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,16 @@ pub(crate) fn extract_struct_from_enum(acc: &mut Assists, ctx: &AssistContext) -
3939
_ => return None,
4040
};
4141
let variant_name = variant.name()?.to_string();
42-
let enum_ast = variant.parent_enum();
43-
let enum_name = enum_ast.name()?.to_string();
44-
let visibility = enum_ast.visibility();
4542
let variant_hir = ctx.sema.to_def(&variant)?;
46-
4743
if existing_struct_def(ctx.db, &variant_name, &variant_hir) {
4844
return None;
4945
}
50-
46+
let enum_ast = variant.parent_enum();
47+
let enum_name = enum_ast.name()?.to_string();
48+
let visibility = enum_ast.visibility();
49+
let current_module_def =
50+
ImportsLocator::new(ctx.db).find_imports(&enum_name).first()?.left()?;
51+
let current_module = current_module_def.module(ctx.db)?;
5152
let target = variant.syntax().text_range();
5253
return acc.add_in_multiple_files(
5354
AssistId("extract_struct_from_enum_variant"),
@@ -56,18 +57,17 @@ pub(crate) fn extract_struct_from_enum(acc: &mut Assists, ctx: &AssistContext) -
5657
|edit| {
5758
let definition = Definition::ModuleDef(ModuleDef::EnumVariant(variant_hir));
5859
let res = definition.find_usages(&ctx.db, None);
59-
let module_def = mod_def_for_target_module(ctx, &enum_name);
6060
let start_offset = variant.parent_enum().syntax().text_range().start();
6161
let mut visited_modules_set: FxHashSet<Module> = FxHashSet::default();
62-
visited_modules_set.insert(module_def.module(ctx.db).unwrap());
62+
visited_modules_set.insert(current_module);
6363
for reference in res {
6464
let source_file = ctx.sema.parse(reference.file_range.file_id);
6565
update_reference(
6666
ctx,
6767
edit,
6868
reference,
6969
&source_file,
70-
&module_def,
70+
&current_module_def,
7171
&mut visited_modules_set,
7272
);
7373
}
@@ -95,10 +95,6 @@ fn existing_struct_def(db: &RootDatabase, variant_name: &str, variant: &EnumVari
9595
.any(|(name, _)| name.to_string() == variant_name.to_string())
9696
}
9797

98-
fn mod_def_for_target_module(ctx: &AssistContext, enum_name: &str) -> ModuleDef {
99-
ImportsLocator::new(ctx.db).find_imports(enum_name).first().unwrap().left().unwrap()
100-
}
101-
10298
fn insert_import(
10399
ctx: &AssistContext,
104100
builder: &mut AssistBuilder,
@@ -186,23 +182,16 @@ fn update_reference(
186182
let call = path_expr.syntax().parent().and_then(ast::CallExpr::cast)?;
187183
let list = call.arg_list()?;
188184
let segment = path_expr.path()?.segment()?;
185+
let segment_name = segment.name_ref()?;
186+
let module = ctx.sema.scope(&path_expr.syntax()).module()?;
189187
let list_range = list.syntax().text_range();
190188
let inside_list_range = TextRange::new(
191189
list_range.start().checked_add(TextSize::from(1))?,
192190
list_range.end().checked_sub(TextSize::from(1))?,
193191
);
194192
edit.perform(reference.file_range.file_id, |builder| {
195-
let module = ctx.sema.scope(&path_expr.syntax()).module().unwrap();
196193
if !visited_modules_set.contains(&module) {
197-
if insert_import(
198-
ctx,
199-
builder,
200-
&path_expr,
201-
&module,
202-
module_def,
203-
segment.name_ref().unwrap(),
204-
)
205-
.is_some()
194+
if insert_import(ctx, builder, &path_expr, &module, module_def, segment_name).is_some()
206195
{
207196
visited_modules_set.insert(module);
208197
}

0 commit comments

Comments
 (0)