From 5d914834a948fd8a154904d171834edd9050205c Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 24 Dec 2020 19:36:13 +0300 Subject: Simplify more --- crates/ide/src/diagnostics.rs | 65 +++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 43 deletions(-) (limited to 'crates/ide/src') diff --git a/crates/ide/src/diagnostics.rs b/crates/ide/src/diagnostics.rs index 7e53ed361..038273750 100644 --- a/crates/ide/src/diagnostics.rs +++ b/crates/ide/src/diagnostics.rs @@ -258,10 +258,12 @@ mod tests { .pop() .unwrap(); let fix = diagnostic.fix.unwrap(); - let target_file_contents = analysis.file_text(file_position.file_id).unwrap(); let actual = { - let mut actual = target_file_contents.to_string(); + let file_id = fix.source_change.source_file_edits.first().unwrap().file_id; + let mut actual = analysis.file_text(file_id).unwrap().to_string(); + // Go from the last one to the first one, so that ranges won't be affected by previous edits. + // FIXME: https://github.com/rust-analyzer/rust-analyzer/issues/4901#issuecomment-644675309 for edit in fix.source_change.source_file_edits.iter().rev() { edit.edit.apply(&mut actual); } @@ -277,29 +279,6 @@ mod tests { ); } - /// Checks that a diagnostic applies to the file containing the `<|>` cursor marker - /// which has a fix that can apply to other files. - fn check_apply_diagnostic_fix_in_other_file(ra_fixture_before: &str, ra_fixture_after: &str) { - let ra_fixture_after = &trim_indent(ra_fixture_after); - let (analysis, file_pos) = fixture::position(ra_fixture_before); - let current_file_id = file_pos.file_id; - let diagnostic = analysis - .diagnostics(&DiagnosticsConfig::default(), current_file_id) - .unwrap() - .pop() - .unwrap(); - let mut fix = diagnostic.fix.unwrap(); - let edit = fix.source_change.source_file_edits.pop().unwrap(); - let changed_file_id = edit.file_id; - let before = analysis.file_text(changed_file_id).unwrap(); - let actual = { - let mut actual = before.to_string(); - edit.edit.apply(&mut actual); - actual - }; - assert_eq_text!(ra_fixture_after, &actual); - } - /// Takes a multi-file input fixture with annotated cursor position and checks that no diagnostics /// apply to the file containing the cursor. pub(crate) fn check_no_diagnostics(ra_fixture: &str) { @@ -736,25 +715,25 @@ struct Foo { #[test] fn test_add_field_in_other_file_from_usage() { - check_apply_diagnostic_fix_in_other_file( - r" - //- /main.rs - mod foo; + check_fix( + r#" +//- /main.rs +mod foo; - fn main() { - <|>foo::Foo { bar: 3, baz: false}; - } - //- /foo.rs - struct Foo { - bar: i32 - } - ", - r" - struct Foo { - bar: i32, - pub(crate) baz: bool - } - ", +fn main() { + foo::Foo { bar: 3, <|>baz: false}; +} +//- /foo.rs +struct Foo { + bar: i32 +} +"#, + r#" +struct Foo { + bar: i32, + pub(crate) baz: bool +} +"#, ) } -- cgit v1.2.3