diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-05-22 13:26:40 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2021-05-22 13:26:40 +0100 |
commit | 7d81e40e36a7b5451785e224a2f16822834f29a3 (patch) | |
tree | ed5ab1b896294963128bc3f34589634c83d812b6 /crates/ide_assists/src/tests.rs | |
parent | 3cfe2d0a5d663d29c3d196f9d16e91964780792a (diff) | |
parent | d5c96672aac6fd4ac25474814879af2c04bd798b (diff) |
Merge #8901
8901: fix: `fill_match_arms` hangs on a tuple of large enums r=matklad a=iDawer
+ Lazy computation of missing arms.
+ Convenience function to test lazy computation: `ide_assists::tests::check_assist_unresolved`.
Fixes #8835
Co-authored-by: Dawer <[email protected]>
Diffstat (limited to 'crates/ide_assists/src/tests.rs')
-rw-r--r-- | crates/ide_assists/src/tests.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/crates/ide_assists/src/tests.rs b/crates/ide_assists/src/tests.rs index 1739302bf..6a9231e07 100644 --- a/crates/ide_assists/src/tests.rs +++ b/crates/ide_assists/src/tests.rs | |||
@@ -65,6 +65,12 @@ pub(crate) fn check_assist_not_applicable(assist: Handler, ra_fixture: &str) { | |||
65 | check(assist, ra_fixture, ExpectedResult::NotApplicable, None); | 65 | check(assist, ra_fixture, ExpectedResult::NotApplicable, None); |
66 | } | 66 | } |
67 | 67 | ||
68 | /// Check assist in unresolved state. Useful to check assists for lazy computation. | ||
69 | #[track_caller] | ||
70 | pub(crate) fn check_assist_unresolved(assist: Handler, ra_fixture: &str) { | ||
71 | check(assist, ra_fixture, ExpectedResult::Unresolved, None); | ||
72 | } | ||
73 | |||
68 | #[track_caller] | 74 | #[track_caller] |
69 | fn check_doc_test(assist_id: &str, before: &str, after: &str) { | 75 | fn check_doc_test(assist_id: &str, before: &str, after: &str) { |
70 | let after = trim_indent(after); | 76 | let after = trim_indent(after); |
@@ -101,6 +107,7 @@ fn check_doc_test(assist_id: &str, before: &str, after: &str) { | |||
101 | 107 | ||
102 | enum ExpectedResult<'a> { | 108 | enum ExpectedResult<'a> { |
103 | NotApplicable, | 109 | NotApplicable, |
110 | Unresolved, | ||
104 | After(&'a str), | 111 | After(&'a str), |
105 | Target(&'a str), | 112 | Target(&'a str), |
106 | } | 113 | } |
@@ -115,7 +122,11 @@ fn check(handler: Handler, before: &str, expected: ExpectedResult, assist_label: | |||
115 | let sema = Semantics::new(&db); | 122 | let sema = Semantics::new(&db); |
116 | let config = TEST_CONFIG; | 123 | let config = TEST_CONFIG; |
117 | let ctx = AssistContext::new(sema, &config, frange); | 124 | let ctx = AssistContext::new(sema, &config, frange); |
118 | let mut acc = Assists::new(&ctx, AssistResolveStrategy::All); | 125 | let resolve = match expected { |
126 | ExpectedResult::Unresolved => AssistResolveStrategy::None, | ||
127 | _ => AssistResolveStrategy::All, | ||
128 | }; | ||
129 | let mut acc = Assists::new(&ctx, resolve); | ||
119 | handler(&mut acc, &ctx); | 130 | handler(&mut acc, &ctx); |
120 | let mut res = acc.finish(); | 131 | let mut res = acc.finish(); |
121 | 132 | ||
@@ -163,8 +174,14 @@ fn check(handler: Handler, before: &str, expected: ExpectedResult, assist_label: | |||
163 | let range = assist.target; | 174 | let range = assist.target; |
164 | assert_eq_text!(&text_without_caret[range], target); | 175 | assert_eq_text!(&text_without_caret[range], target); |
165 | } | 176 | } |
177 | (Some(assist), ExpectedResult::Unresolved) => assert!( | ||
178 | assist.source_change.is_none(), | ||
179 | "unresolved assist should not contain source changes" | ||
180 | ), | ||
166 | (Some(_), ExpectedResult::NotApplicable) => panic!("assist should not be applicable!"), | 181 | (Some(_), ExpectedResult::NotApplicable) => panic!("assist should not be applicable!"), |
167 | (None, ExpectedResult::After(_)) | (None, ExpectedResult::Target(_)) => { | 182 | (None, ExpectedResult::After(_)) |
183 | | (None, ExpectedResult::Target(_)) | ||
184 | | (None, ExpectedResult::Unresolved) => { | ||
168 | panic!("code action is not applicable") | 185 | panic!("code action is not applicable") |
169 | } | 186 | } |
170 | (None, ExpectedResult::NotApplicable) => (), | 187 | (None, ExpectedResult::NotApplicable) => (), |