diff --git a/crates/assists/src/assist_context.rs b/crates/assists/src/assist_context.rs index a17e592b0e61..69499ea326c5 100644 --- a/crates/assists/src/assist_context.rs +++ b/crates/assists/src/assist_context.rs @@ -277,9 +277,10 @@ impl AssistBuilder { algo::diff(old.syntax(), new.syntax()).into_text_edit(&mut self.edit) } pub(crate) fn rewrite(&mut self, rewriter: SyntaxRewriter) { - let node = rewriter.rewrite_root().unwrap(); - let new = rewriter.rewrite(&node); - algo::diff(&node, &new).into_text_edit(&mut self.edit); + if let Some(node) = rewriter.rewrite_root() { + let new = rewriter.rewrite(&node); + algo::diff(&node, &new).into_text_edit(&mut self.edit); + } } fn finish(mut self) -> SourceChange { diff --git a/crates/assists/src/handlers/extract_struct_from_enum_variant.rs b/crates/assists/src/handlers/extract_struct_from_enum_variant.rs index 58aadcef73dd..84662d832dfb 100644 --- a/crates/assists/src/handlers/extract_struct_from_enum_variant.rs +++ b/crates/assists/src/handlers/extract_struct_from_enum_variant.rs @@ -378,6 +378,36 @@ use crate::E; fn f() { let e = E::V(V(9, 2)); } +"#, + ) + } + + #[test] + fn test_several_files_record() { + // FIXME: this should fix the usage as well! + check_assist( + extract_struct_from_enum_variant, + r#" +//- /main.rs +enum E { + <|>V { i: i32, j: i32 } +} +mod foo; + +//- /foo.rs +use crate::E; +fn f() { + let e = E::V { i: 9, j: 2 }; +} +"#, + r#" +struct V{ pub i: i32, pub j: i32 } + +enum E { + V(V) +} +mod foo; + "#, ) }