From 4a16c228e7a3f69b7ac102be5c35ab6d3af9c827 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 9 Nov 2020 16:40:41 +0100 Subject: Fix panic when extracting struct --- crates/assists/src/assist_context.rs | 7 ++--- .../handlers/extract_struct_from_enum_variant.rs | 30 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/crates/assists/src/assist_context.rs b/crates/assists/src/assist_context.rs index a17e592b0..69499ea32 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 58aadcef7..84662d832 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; + "#, ) } -- cgit v1.2.3