diff options
author | Aleksey Kladov <[email protected]> | 2020-12-26 11:11:42 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-12-26 11:11:42 +0000 |
commit | 2f2267553769bd7c63ab49c85e4c67a7339355c3 (patch) | |
tree | 107c3baf8ac0d8b386f7b1441544011e23caf70b /crates/assists/src/tests.rs | |
parent | 44893bbcc58abc630e5263d3261236ca1cc21041 (diff) |
Simplify assists resolution API
Assist vs UnresolvedAssist split doesn't really pull its weight. This
is especially bad if we want to include `Assist` as a field of
diagnostics, where we'd have to make the thing generic.
Diffstat (limited to 'crates/assists/src/tests.rs')
-rw-r--r-- | crates/assists/src/tests.rs | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/crates/assists/src/tests.rs b/crates/assists/src/tests.rs index b41f4874a..21e448fb8 100644 --- a/crates/assists/src/tests.rs +++ b/crates/assists/src/tests.rs | |||
@@ -48,24 +48,25 @@ fn check_doc_test(assist_id: &str, before: &str, after: &str) { | |||
48 | let before = db.file_text(file_id).to_string(); | 48 | let before = db.file_text(file_id).to_string(); |
49 | let frange = FileRange { file_id, range: selection.into() }; | 49 | let frange = FileRange { file_id, range: selection.into() }; |
50 | 50 | ||
51 | let assist = Assist::resolved(&db, &AssistConfig::default(), frange) | 51 | let assist = Assist::get(&db, &AssistConfig::default(), true, frange) |
52 | .into_iter() | 52 | .into_iter() |
53 | .find(|assist| assist.assist.id.0 == assist_id) | 53 | .find(|assist| assist.id.0 == assist_id) |
54 | .unwrap_or_else(|| { | 54 | .unwrap_or_else(|| { |
55 | panic!( | 55 | panic!( |
56 | "\n\nAssist is not applicable: {}\nAvailable assists: {}", | 56 | "\n\nAssist is not applicable: {}\nAvailable assists: {}", |
57 | assist_id, | 57 | assist_id, |
58 | Assist::resolved(&db, &AssistConfig::default(), frange) | 58 | Assist::get(&db, &AssistConfig::default(), false, frange) |
59 | .into_iter() | 59 | .into_iter() |
60 | .map(|assist| assist.assist.id.0) | 60 | .map(|assist| assist.id.0) |
61 | .collect::<Vec<_>>() | 61 | .collect::<Vec<_>>() |
62 | .join(", ") | 62 | .join(", ") |
63 | ) | 63 | ) |
64 | }); | 64 | }); |
65 | 65 | ||
66 | let actual = { | 66 | let actual = { |
67 | let source_change = assist.source_change.unwrap(); | ||
67 | let mut actual = before; | 68 | let mut actual = before; |
68 | for source_file_edit in assist.source_change.source_file_edits { | 69 | for source_file_edit in source_change.source_file_edits { |
69 | if source_file_edit.file_id == file_id { | 70 | if source_file_edit.file_id == file_id { |
70 | source_file_edit.edit.apply(&mut actual) | 71 | source_file_edit.edit.apply(&mut actual) |
71 | } | 72 | } |
@@ -90,18 +91,18 @@ fn check(handler: Handler, before: &str, expected: ExpectedResult, assist_label: | |||
90 | let sema = Semantics::new(&db); | 91 | let sema = Semantics::new(&db); |
91 | let config = AssistConfig::default(); | 92 | let config = AssistConfig::default(); |
92 | let ctx = AssistContext::new(sema, &config, frange); | 93 | let ctx = AssistContext::new(sema, &config, frange); |
93 | let mut acc = Assists::new_resolved(&ctx); | 94 | let mut acc = Assists::new(&ctx, true); |
94 | handler(&mut acc, &ctx); | 95 | handler(&mut acc, &ctx); |
95 | let mut res = acc.finish_resolved(); | 96 | let mut res = acc.finish(); |
96 | 97 | ||
97 | let assist = match assist_label { | 98 | let assist = match assist_label { |
98 | Some(label) => res.into_iter().find(|resolved| resolved.assist.label == label), | 99 | Some(label) => res.into_iter().find(|resolved| resolved.label == label), |
99 | None => res.pop(), | 100 | None => res.pop(), |
100 | }; | 101 | }; |
101 | 102 | ||
102 | match (assist, expected) { | 103 | match (assist, expected) { |
103 | (Some(assist), ExpectedResult::After(after)) => { | 104 | (Some(assist), ExpectedResult::After(after)) => { |
104 | let mut source_change = assist.source_change; | 105 | let mut source_change = assist.source_change.unwrap(); |
105 | assert!(!source_change.source_file_edits.is_empty()); | 106 | assert!(!source_change.source_file_edits.is_empty()); |
106 | let skip_header = source_change.source_file_edits.len() == 1 | 107 | let skip_header = source_change.source_file_edits.len() == 1 |
107 | && source_change.file_system_edits.len() == 0; | 108 | && source_change.file_system_edits.len() == 0; |
@@ -138,7 +139,7 @@ fn check(handler: Handler, before: &str, expected: ExpectedResult, assist_label: | |||
138 | assert_eq_text!(after, &buf); | 139 | assert_eq_text!(after, &buf); |
139 | } | 140 | } |
140 | (Some(assist), ExpectedResult::Target(target)) => { | 141 | (Some(assist), ExpectedResult::Target(target)) => { |
141 | let range = assist.assist.target; | 142 | let range = assist.target; |
142 | assert_eq_text!(&text_without_caret[range], target); | 143 | assert_eq_text!(&text_without_caret[range], target); |
143 | } | 144 | } |
144 | (Some(_), ExpectedResult::NotApplicable) => panic!("assist should not be applicable!"), | 145 | (Some(_), ExpectedResult::NotApplicable) => panic!("assist should not be applicable!"), |
@@ -155,14 +156,11 @@ fn assist_order_field_struct() { | |||
155 | let (before_cursor_pos, before) = extract_offset(before); | 156 | let (before_cursor_pos, before) = extract_offset(before); |
156 | let (db, file_id) = with_single_file(&before); | 157 | let (db, file_id) = with_single_file(&before); |
157 | let frange = FileRange { file_id, range: TextRange::empty(before_cursor_pos) }; | 158 | let frange = FileRange { file_id, range: TextRange::empty(before_cursor_pos) }; |
158 | let assists = Assist::resolved(&db, &AssistConfig::default(), frange); | 159 | let assists = Assist::get(&db, &AssistConfig::default(), false, frange); |
159 | let mut assists = assists.iter(); | 160 | let mut assists = assists.iter(); |
160 | 161 | ||
161 | assert_eq!( | 162 | assert_eq!(assists.next().expect("expected assist").label, "Change visibility to pub(crate)"); |
162 | assists.next().expect("expected assist").assist.label, | 163 | assert_eq!(assists.next().expect("expected assist").label, "Add `#[derive]`"); |
163 | "Change visibility to pub(crate)" | ||
164 | ); | ||
165 | assert_eq!(assists.next().expect("expected assist").assist.label, "Add `#[derive]`"); | ||
166 | } | 164 | } |
167 | 165 | ||
168 | #[test] | 166 | #[test] |
@@ -178,11 +176,11 @@ fn assist_order_if_expr() { | |||
178 | let (range, before) = extract_range(before); | 176 | let (range, before) = extract_range(before); |
179 | let (db, file_id) = with_single_file(&before); | 177 | let (db, file_id) = with_single_file(&before); |
180 | let frange = FileRange { file_id, range }; | 178 | let frange = FileRange { file_id, range }; |
181 | let assists = Assist::resolved(&db, &AssistConfig::default(), frange); | 179 | let assists = Assist::get(&db, &AssistConfig::default(), false, frange); |
182 | let mut assists = assists.iter(); | 180 | let mut assists = assists.iter(); |
183 | 181 | ||
184 | assert_eq!(assists.next().expect("expected assist").assist.label, "Extract into variable"); | 182 | assert_eq!(assists.next().expect("expected assist").label, "Extract into variable"); |
185 | assert_eq!(assists.next().expect("expected assist").assist.label, "Replace with match"); | 183 | assert_eq!(assists.next().expect("expected assist").label, "Replace with match"); |
186 | } | 184 | } |
187 | 185 | ||
188 | #[test] | 186 | #[test] |
@@ -203,27 +201,27 @@ fn assist_filter_works() { | |||
203 | let mut cfg = AssistConfig::default(); | 201 | let mut cfg = AssistConfig::default(); |
204 | cfg.allowed = Some(vec![AssistKind::Refactor]); | 202 | cfg.allowed = Some(vec![AssistKind::Refactor]); |
205 | 203 | ||
206 | let assists = Assist::resolved(&db, &cfg, frange); | 204 | let assists = Assist::get(&db, &cfg, false, frange); |
207 | let mut assists = assists.iter(); | 205 | let mut assists = assists.iter(); |
208 | 206 | ||
209 | assert_eq!(assists.next().expect("expected assist").assist.label, "Extract into variable"); | 207 | assert_eq!(assists.next().expect("expected assist").label, "Extract into variable"); |
210 | assert_eq!(assists.next().expect("expected assist").assist.label, "Replace with match"); | 208 | assert_eq!(assists.next().expect("expected assist").label, "Replace with match"); |
211 | } | 209 | } |
212 | 210 | ||
213 | { | 211 | { |
214 | let mut cfg = AssistConfig::default(); | 212 | let mut cfg = AssistConfig::default(); |
215 | cfg.allowed = Some(vec![AssistKind::RefactorExtract]); | 213 | cfg.allowed = Some(vec![AssistKind::RefactorExtract]); |
216 | let assists = Assist::resolved(&db, &cfg, frange); | 214 | let assists = Assist::get(&db, &cfg, false, frange); |
217 | assert_eq!(assists.len(), 1); | 215 | assert_eq!(assists.len(), 1); |
218 | 216 | ||
219 | let mut assists = assists.iter(); | 217 | let mut assists = assists.iter(); |
220 | assert_eq!(assists.next().expect("expected assist").assist.label, "Extract into variable"); | 218 | assert_eq!(assists.next().expect("expected assist").label, "Extract into variable"); |
221 | } | 219 | } |
222 | 220 | ||
223 | { | 221 | { |
224 | let mut cfg = AssistConfig::default(); | 222 | let mut cfg = AssistConfig::default(); |
225 | cfg.allowed = Some(vec![AssistKind::QuickFix]); | 223 | cfg.allowed = Some(vec![AssistKind::QuickFix]); |
226 | let assists = Assist::resolved(&db, &cfg, frange); | 224 | let assists = Assist::get(&db, &cfg, false, frange); |
227 | assert!(assists.is_empty(), "All asserts but quickfixes should be filtered out"); | 225 | assert!(assists.is_empty(), "All asserts but quickfixes should be filtered out"); |
228 | } | 226 | } |
229 | } | 227 | } |