aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-02-09 14:49:02 +0000
committerGitHub <noreply@github.com>2021-02-09 14:49:02 +0000
commitfca93cfed339de88e1807e0633d24a2b3a7f01d5 (patch)
treee9cefdfa7b70209d547d40500b3409903252dcdd /crates/ide/src
parent876c4519e37db3cd134efb5dda604ac5a29c3853 (diff)
parent2dc67c85b94a8e858706568c4116b3123348941b (diff)
Merge #7610
7610: Cleanup test r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
Diffstat (limited to 'crates/ide/src')
-rw-r--r--crates/ide/src/join_lines.rs41
-rw-r--r--crates/ide/src/syntax_tree.rs366
2 files changed, 190 insertions, 217 deletions
diff --git a/crates/ide/src/join_lines.rs b/crates/ide/src/join_lines.rs
index 631bde0f1..e3f3985d1 100644
--- a/crates/ide/src/join_lines.rs
+++ b/crates/ide/src/join_lines.rs
@@ -270,27 +270,28 @@ fn foo() {
270 270
271 #[test] 271 #[test]
272 fn test_join_lines_diverging_block() { 272 fn test_join_lines_diverging_block() {
273 let before = r" 273 check_join_lines(
274 fn foo() { 274 r"
275 loop { 275fn foo() {
276 match x { 276 loop {
277 92 => $0{ 277 match x {
278 continue; 278 92 => $0{
279 } 279 continue;
280 }
281 }
282 }
283 ";
284 let after = r"
285 fn foo() {
286 loop {
287 match x {
288 92 => $0continue,
289 }
290 }
291 } 280 }
292 "; 281 }
293 check_join_lines(before, after); 282 }
283}
284 ",
285 r"
286fn foo() {
287 loop {
288 match x {
289 92 => $0continue,
290 }
291 }
292}
293 ",
294 );
294 } 295 }
295 296
296 #[test] 297 #[test]
diff --git a/crates/ide/src/syntax_tree.rs b/crates/ide/src/syntax_tree.rs
index 4c63d3023..f979ba434 100644
--- a/crates/ide/src/syntax_tree.rs
+++ b/crates/ide/src/syntax_tree.rs
@@ -100,147 +100,137 @@ fn syntax_tree_for_token(node: &SyntaxToken, text_range: TextRange) -> Option<St
100 100
101#[cfg(test)] 101#[cfg(test)]
102mod tests { 102mod tests {
103 use test_utils::assert_eq_text; 103 use expect_test::expect;
104 104
105 use crate::fixture; 105 use crate::fixture;
106 106
107 fn check(ra_fixture: &str, expect: expect_test::Expect) {
108 let (analysis, file_id) = fixture::file(ra_fixture);
109 let syn = analysis.syntax_tree(file_id, None).unwrap();
110 expect.assert_eq(&syn)
111 }
112 fn check_range(ra_fixture: &str, expect: expect_test::Expect) {
113 let (analysis, frange) = fixture::range(ra_fixture);
114 let syn = analysis.syntax_tree(frange.file_id, Some(frange.range)).unwrap();
115 expect.assert_eq(&syn)
116 }
117
107 #[test] 118 #[test]
108 fn test_syntax_tree_without_range() { 119 fn test_syntax_tree_without_range() {
109 // Basic syntax 120 // Basic syntax
110 let (analysis, file_id) = fixture::file(r#"fn foo() {}"#); 121 check(
111 let syn = analysis.syntax_tree(file_id, None).unwrap(); 122 r#"fn foo() {}"#,
112 123 expect![[r#"
113 assert_eq_text!( 124 SOURCE_FILE@0..11
114 r#" 125 FN@0..11
115SOURCE_FILE@0..11 126 FN_KW@0..2 "fn"
116 FN@0..11 127 WHITESPACE@2..3 " "
117 FN_KW@0..2 "fn" 128 NAME@3..6
118 WHITESPACE@2..3 " " 129 IDENT@3..6 "foo"
119 NAME@3..6 130 PARAM_LIST@6..8
120 IDENT@3..6 "foo" 131 L_PAREN@6..7 "("
121 PARAM_LIST@6..8 132 R_PAREN@7..8 ")"
122 L_PAREN@6..7 "(" 133 WHITESPACE@8..9 " "
123 R_PAREN@7..8 ")" 134 BLOCK_EXPR@9..11
124 WHITESPACE@8..9 " " 135 L_CURLY@9..10 "{"
125 BLOCK_EXPR@9..11 136 R_CURLY@10..11 "}"
126 L_CURLY@9..10 "{" 137 "#]],
127 R_CURLY@10..11 "}"
128"#
129 .trim(),
130 syn.trim()
131 ); 138 );
132 139
133 let (analysis, file_id) = fixture::file( 140 check(
134 r#" 141 r#"
135fn test() { 142fn test() {
136 assert!(" 143 assert!("
137 fn foo() { 144 fn foo() {
138 } 145 }
139 ", ""); 146 ", "");
140}"# 147}"#,
141 .trim(), 148 expect![[r#"
142 ); 149 SOURCE_FILE@0..60
143 let syn = analysis.syntax_tree(file_id, None).unwrap(); 150 FN@0..60
144 151 FN_KW@0..2 "fn"
145 assert_eq_text!( 152 WHITESPACE@2..3 " "
146 r#" 153 NAME@3..7
147SOURCE_FILE@0..60 154 IDENT@3..7 "test"
148 FN@0..60 155 PARAM_LIST@7..9
149 FN_KW@0..2 "fn" 156 L_PAREN@7..8 "("
150 WHITESPACE@2..3 " " 157 R_PAREN@8..9 ")"
151 NAME@3..7 158 WHITESPACE@9..10 " "
152 IDENT@3..7 "test" 159 BLOCK_EXPR@10..60
153 PARAM_LIST@7..9 160 L_CURLY@10..11 "{"
154 L_PAREN@7..8 "(" 161 WHITESPACE@11..16 "\n "
155 R_PAREN@8..9 ")" 162 EXPR_STMT@16..58
156 WHITESPACE@9..10 " " 163 MACRO_CALL@16..57
157 BLOCK_EXPR@10..60 164 PATH@16..22
158 L_CURLY@10..11 "{" 165 PATH_SEGMENT@16..22
159 WHITESPACE@11..16 "\n " 166 NAME_REF@16..22
160 EXPR_STMT@16..58 167 IDENT@16..22 "assert"
161 MACRO_CALL@16..57 168 BANG@22..23 "!"
162 PATH@16..22 169 TOKEN_TREE@23..57
163 PATH_SEGMENT@16..22 170 L_PAREN@23..24 "("
164 NAME_REF@16..22 171 STRING@24..52 "\"\n fn foo() {\n ..."
165 IDENT@16..22 "assert" 172 COMMA@52..53 ","
166 BANG@22..23 "!" 173 WHITESPACE@53..54 " "
167 TOKEN_TREE@23..57 174 STRING@54..56 "\"\""
168 L_PAREN@23..24 "(" 175 R_PAREN@56..57 ")"
169 STRING@24..52 "\"\n fn foo() {\n ..." 176 SEMICOLON@57..58 ";"
170 COMMA@52..53 "," 177 WHITESPACE@58..59 "\n"
171 WHITESPACE@53..54 " " 178 R_CURLY@59..60 "}"
172 STRING@54..56 "\"\"" 179 "#]],
173 R_PAREN@56..57 ")" 180 )
174 SEMICOLON@57..58 ";"
175 WHITESPACE@58..59 "\n"
176 R_CURLY@59..60 "}"
177"#
178 .trim(),
179 syn.trim()
180 );
181 } 181 }
182 182
183 #[test] 183 #[test]
184 fn test_syntax_tree_with_range() { 184 fn test_syntax_tree_with_range() {
185 let (analysis, range) = fixture::range(r#"$0fn foo() {}$0"#.trim()); 185 check_range(
186 let syn = analysis.syntax_tree(range.file_id, Some(range.range)).unwrap(); 186 r#"$0fn foo() {}$0"#,
187 187 expect![[r#"
188 assert_eq_text!( 188 FN@0..11
189 r#" 189 FN_KW@0..2 "fn"
190FN@0..11 190 WHITESPACE@2..3 " "
191 FN_KW@0..2 "fn" 191 NAME@3..6
192 WHITESPACE@2..3 " " 192 IDENT@3..6 "foo"
193 NAME@3..6 193 PARAM_LIST@6..8
194 IDENT@3..6 "foo" 194 L_PAREN@6..7 "("
195 PARAM_LIST@6..8 195 R_PAREN@7..8 ")"
196 L_PAREN@6..7 "(" 196 WHITESPACE@8..9 " "
197 R_PAREN@7..8 ")" 197 BLOCK_EXPR@9..11
198 WHITESPACE@8..9 " " 198 L_CURLY@9..10 "{"
199 BLOCK_EXPR@9..11 199 R_CURLY@10..11 "}"
200 L_CURLY@9..10 "{" 200 "#]],
201 R_CURLY@10..11 "}"
202"#
203 .trim(),
204 syn.trim()
205 ); 201 );
206 202
207 let (analysis, range) = fixture::range( 203 check_range(
208 r#"fn test() { 204 r#"
205fn test() {
209 $0assert!(" 206 $0assert!("
210 fn foo() { 207 fn foo() {
211 } 208 }
212 ", "");$0 209 ", "");$0
213}"# 210}"#,
214 .trim(), 211 expect![[r#"
215 ); 212 EXPR_STMT@16..58
216 let syn = analysis.syntax_tree(range.file_id, Some(range.range)).unwrap(); 213 MACRO_CALL@16..57
217 214 PATH@16..22
218 assert_eq_text!( 215 PATH_SEGMENT@16..22
219 r#" 216 NAME_REF@16..22
220EXPR_STMT@16..58 217 IDENT@16..22 "assert"
221 MACRO_CALL@16..57 218 BANG@22..23 "!"
222 PATH@16..22 219 TOKEN_TREE@23..57
223 PATH_SEGMENT@16..22 220 L_PAREN@23..24 "("
224 NAME_REF@16..22 221 STRING@24..52 "\"\n fn foo() {\n ..."
225 IDENT@16..22 "assert" 222 COMMA@52..53 ","
226 BANG@22..23 "!" 223 WHITESPACE@53..54 " "
227 TOKEN_TREE@23..57 224 STRING@54..56 "\"\""
228 L_PAREN@23..24 "(" 225 R_PAREN@56..57 ")"
229 STRING@24..52 "\"\n fn foo() {\n ..." 226 SEMICOLON@57..58 ";"
230 COMMA@52..53 "," 227 "#]],
231 WHITESPACE@53..54 " "
232 STRING@54..56 "\"\""
233 R_PAREN@56..57 ")"
234 SEMICOLON@57..58 ";"
235"#
236 .trim(),
237 syn.trim()
238 ); 228 );
239 } 229 }
240 230
241 #[test] 231 #[test]
242 fn test_syntax_tree_inside_string() { 232 fn test_syntax_tree_inside_string() {
243 let (analysis, range) = fixture::range( 233 check_range(
244 r#"fn test() { 234 r#"fn test() {
245 assert!(" 235 assert!("
246$0fn foo() { 236$0fn foo() {
@@ -248,33 +238,27 @@ $0fn foo() {
248fn bar() { 238fn bar() {
249} 239}
250 ", ""); 240 ", "");
251}"# 241}"#,
252 .trim(), 242 expect![[r#"
253 ); 243 SOURCE_FILE@0..12
254 let syn = analysis.syntax_tree(range.file_id, Some(range.range)).unwrap(); 244 FN@0..12
255 assert_eq_text!( 245 FN_KW@0..2 "fn"
256 r#" 246 WHITESPACE@2..3 " "
257SOURCE_FILE@0..12 247 NAME@3..6
258 FN@0..12 248 IDENT@3..6 "foo"
259 FN_KW@0..2 "fn" 249 PARAM_LIST@6..8
260 WHITESPACE@2..3 " " 250 L_PAREN@6..7 "("
261 NAME@3..6 251 R_PAREN@7..8 ")"
262 IDENT@3..6 "foo" 252 WHITESPACE@8..9 " "
263 PARAM_LIST@6..8 253 BLOCK_EXPR@9..12
264 L_PAREN@6..7 "(" 254 L_CURLY@9..10 "{"
265 R_PAREN@7..8 ")" 255 WHITESPACE@10..11 "\n"
266 WHITESPACE@8..9 " " 256 R_CURLY@11..12 "}"
267 BLOCK_EXPR@9..12 257 "#]],
268 L_CURLY@9..10 "{"
269 WHITESPACE@10..11 "\n"
270 R_CURLY@11..12 "}"
271"#
272 .trim(),
273 syn.trim()
274 ); 258 );
275 259
276 // With a raw string 260 // With a raw string
277 let (analysis, range) = fixture::range( 261 check_range(
278 r###"fn test() { 262 r###"fn test() {
279 assert!(r#" 263 assert!(r#"
280$0fn foo() { 264$0fn foo() {
@@ -282,76 +266,64 @@ $0fn foo() {
282fn bar() { 266fn bar() {
283} 267}
284 "#, ""); 268 "#, "");
285}"### 269}"###,
286 .trim(), 270 expect![[r#"
287 ); 271 SOURCE_FILE@0..12
288 let syn = analysis.syntax_tree(range.file_id, Some(range.range)).unwrap(); 272 FN@0..12
289 assert_eq_text!( 273 FN_KW@0..2 "fn"
290 r#" 274 WHITESPACE@2..3 " "
291SOURCE_FILE@0..12 275 NAME@3..6
292 FN@0..12 276 IDENT@3..6 "foo"
293 FN_KW@0..2 "fn" 277 PARAM_LIST@6..8
294 WHITESPACE@2..3 " " 278 L_PAREN@6..7 "("
295 NAME@3..6 279 R_PAREN@7..8 ")"
296 IDENT@3..6 "foo" 280 WHITESPACE@8..9 " "
297 PARAM_LIST@6..8 281 BLOCK_EXPR@9..12
298 L_PAREN@6..7 "(" 282 L_CURLY@9..10 "{"
299 R_PAREN@7..8 ")" 283 WHITESPACE@10..11 "\n"
300 WHITESPACE@8..9 " " 284 R_CURLY@11..12 "}"
301 BLOCK_EXPR@9..12 285 "#]],
302 L_CURLY@9..10 "{"
303 WHITESPACE@10..11 "\n"
304 R_CURLY@11..12 "}"
305"#
306 .trim(),
307 syn.trim()
308 ); 286 );
309 287
310 // With a raw string 288 // With a raw string
311 let (analysis, range) = fixture::range( 289 check_range(
312 r###"fn test() { 290 r###"fn test() {
313 assert!(r$0#" 291 assert!(r$0#"
314fn foo() { 292fn foo() {
315} 293}
316fn bar() { 294fn bar() {
317}"$0#, ""); 295}"$0#, "");
318}"### 296}"###,
319 .trim(), 297 expect![[r#"
320 ); 298 SOURCE_FILE@0..25
321 let syn = analysis.syntax_tree(range.file_id, Some(range.range)).unwrap(); 299 FN@0..12
322 assert_eq_text!( 300 FN_KW@0..2 "fn"
323 r#" 301 WHITESPACE@2..3 " "
324SOURCE_FILE@0..25 302 NAME@3..6
325 FN@0..12 303 IDENT@3..6 "foo"
326 FN_KW@0..2 "fn" 304 PARAM_LIST@6..8
327 WHITESPACE@2..3 " " 305 L_PAREN@6..7 "("
328 NAME@3..6 306 R_PAREN@7..8 ")"
329 IDENT@3..6 "foo" 307 WHITESPACE@8..9 " "
330 PARAM_LIST@6..8 308 BLOCK_EXPR@9..12
331 L_PAREN@6..7 "(" 309 L_CURLY@9..10 "{"
332 R_PAREN@7..8 ")" 310 WHITESPACE@10..11 "\n"
333 WHITESPACE@8..9 " " 311 R_CURLY@11..12 "}"
334 BLOCK_EXPR@9..12 312 WHITESPACE@12..13 "\n"
335 L_CURLY@9..10 "{" 313 FN@13..25
336 WHITESPACE@10..11 "\n" 314 FN_KW@13..15 "fn"
337 R_CURLY@11..12 "}" 315 WHITESPACE@15..16 " "
338 WHITESPACE@12..13 "\n" 316 NAME@16..19
339 FN@13..25 317 IDENT@16..19 "bar"
340 FN_KW@13..15 "fn" 318 PARAM_LIST@19..21
341 WHITESPACE@15..16 " " 319 L_PAREN@19..20 "("
342 NAME@16..19 320 R_PAREN@20..21 ")"
343 IDENT@16..19 "bar" 321 WHITESPACE@21..22 " "
344 PARAM_LIST@19..21 322 BLOCK_EXPR@22..25
345 L_PAREN@19..20 "(" 323 L_CURLY@22..23 "{"
346 R_PAREN@20..21 ")" 324 WHITESPACE@23..24 "\n"
347 WHITESPACE@21..22 " " 325 R_CURLY@24..25 "}"
348 BLOCK_EXPR@22..25 326 "#]],
349 L_CURLY@22..23 "{"
350 WHITESPACE@23..24 "\n"
351 R_CURLY@24..25 "}"
352"#
353 .trim(),
354 syn.trim()
355 ); 327 );
356 } 328 }
357} 329}