diff options
212 files changed, 10656 insertions, 10935 deletions
diff --git a/crates/ra_assists/src/doc_tests/generated.rs b/crates/ra_assists/src/doc_tests/generated.rs index e4fa9ee36..d6a34b609 100644 --- a/crates/ra_assists/src/doc_tests/generated.rs +++ b/crates/ra_assists/src/doc_tests/generated.rs | |||
@@ -180,7 +180,9 @@ trait Trait<T> { | |||
180 | } | 180 | } |
181 | 181 | ||
182 | impl Trait<u32> for () { | 182 | impl Trait<u32> for () { |
183 | fn foo(&self) -> u32 { todo!() } | 183 | fn foo(&self) -> u32 { |
184 | todo!() | ||
185 | } | ||
184 | 186 | ||
185 | } | 187 | } |
186 | "#####, | 188 | "#####, |
diff --git a/crates/ra_assists/src/handlers/add_missing_impl_members.rs b/crates/ra_assists/src/handlers/add_missing_impl_members.rs index 2d6d44980..e466c9a86 100644 --- a/crates/ra_assists/src/handlers/add_missing_impl_members.rs +++ b/crates/ra_assists/src/handlers/add_missing_impl_members.rs | |||
@@ -1,6 +1,10 @@ | |||
1 | use hir::HasSource; | 1 | use hir::HasSource; |
2 | use ra_syntax::{ | 2 | use ra_syntax::{ |
3 | ast::{self, edit, make, AstNode, NameOwner}, | 3 | ast::{ |
4 | self, | ||
5 | edit::{self, IndentLevel}, | ||
6 | make, AstNode, NameOwner, | ||
7 | }, | ||
4 | SmolStr, | 8 | SmolStr, |
5 | }; | 9 | }; |
6 | 10 | ||
@@ -40,7 +44,9 @@ enum AddMissingImplMembersMode { | |||
40 | // } | 44 | // } |
41 | // | 45 | // |
42 | // impl Trait<u32> for () { | 46 | // impl Trait<u32> for () { |
43 | // fn foo(&self) -> u32 { todo!() } | 47 | // fn foo(&self) -> u32 { |
48 | // todo!() | ||
49 | // } | ||
44 | // | 50 | // |
45 | // } | 51 | // } |
46 | // ``` | 52 | // ``` |
@@ -165,7 +171,9 @@ fn add_missing_impl_members_inner( | |||
165 | 171 | ||
166 | fn add_body(fn_def: ast::FnDef) -> ast::FnDef { | 172 | fn add_body(fn_def: ast::FnDef) -> ast::FnDef { |
167 | if fn_def.body().is_none() { | 173 | if fn_def.body().is_none() { |
168 | fn_def.with_body(make::block_from_expr(make::expr_todo())) | 174 | let body = make::block_expr(None, Some(make::expr_todo())); |
175 | let body = IndentLevel(1).increase_indent(body); | ||
176 | fn_def.with_body(body) | ||
169 | } else { | 177 | } else { |
170 | fn_def | 178 | fn_def |
171 | } | 179 | } |
@@ -181,7 +189,7 @@ mod tests { | |||
181 | fn test_add_missing_impl_members() { | 189 | fn test_add_missing_impl_members() { |
182 | check_assist( | 190 | check_assist( |
183 | add_missing_impl_members, | 191 | add_missing_impl_members, |
184 | " | 192 | r#" |
185 | trait Foo { | 193 | trait Foo { |
186 | type Output; | 194 | type Output; |
187 | 195 | ||
@@ -197,8 +205,8 @@ struct S; | |||
197 | impl Foo for S { | 205 | impl Foo for S { |
198 | fn bar(&self) {} | 206 | fn bar(&self) {} |
199 | <|> | 207 | <|> |
200 | }", | 208 | }"#, |
201 | " | 209 | r#" |
202 | trait Foo { | 210 | trait Foo { |
203 | type Output; | 211 | type Output; |
204 | 212 | ||
@@ -215,10 +223,14 @@ impl Foo for S { | |||
215 | fn bar(&self) {} | 223 | fn bar(&self) {} |
216 | <|>type Output; | 224 | <|>type Output; |
217 | const CONST: usize = 42; | 225 | const CONST: usize = 42; |
218 | fn foo(&self) { todo!() } | 226 | fn foo(&self) { |
219 | fn baz(&self) { todo!() } | 227 | todo!() |
228 | } | ||
229 | fn baz(&self) { | ||
230 | todo!() | ||
231 | } | ||
220 | 232 | ||
221 | }", | 233 | }"#, |
222 | ); | 234 | ); |
223 | } | 235 | } |
224 | 236 | ||
@@ -226,7 +238,7 @@ impl Foo for S { | |||
226 | fn test_copied_overriden_members() { | 238 | fn test_copied_overriden_members() { |
227 | check_assist( | 239 | check_assist( |
228 | add_missing_impl_members, | 240 | add_missing_impl_members, |
229 | " | 241 | r#" |
230 | trait Foo { | 242 | trait Foo { |
231 | fn foo(&self); | 243 | fn foo(&self); |
232 | fn bar(&self) -> bool { true } | 244 | fn bar(&self) -> bool { true } |
@@ -238,8 +250,8 @@ struct S; | |||
238 | impl Foo for S { | 250 | impl Foo for S { |
239 | fn bar(&self) {} | 251 | fn bar(&self) {} |
240 | <|> | 252 | <|> |
241 | }", | 253 | }"#, |
242 | " | 254 | r#" |
243 | trait Foo { | 255 | trait Foo { |
244 | fn foo(&self); | 256 | fn foo(&self); |
245 | fn bar(&self) -> bool { true } | 257 | fn bar(&self) -> bool { true } |
@@ -250,9 +262,11 @@ struct S; | |||
250 | 262 | ||
251 | impl Foo for S { | 263 | impl Foo for S { |
252 | fn bar(&self) {} | 264 | fn bar(&self) {} |
253 | <|>fn foo(&self) { todo!() } | 265 | <|>fn foo(&self) { |
266 | todo!() | ||
267 | } | ||
254 | 268 | ||
255 | }", | 269 | }"#, |
256 | ); | 270 | ); |
257 | } | 271 | } |
258 | 272 | ||
@@ -260,16 +274,18 @@ impl Foo for S { | |||
260 | fn test_empty_impl_def() { | 274 | fn test_empty_impl_def() { |
261 | check_assist( | 275 | check_assist( |
262 | add_missing_impl_members, | 276 | add_missing_impl_members, |
263 | " | 277 | r#" |
264 | trait Foo { fn foo(&self); } | 278 | trait Foo { fn foo(&self); } |
265 | struct S; | 279 | struct S; |
266 | impl Foo for S { <|> }", | 280 | impl Foo for S { <|> }"#, |
267 | " | 281 | r#" |
268 | trait Foo { fn foo(&self); } | 282 | trait Foo { fn foo(&self); } |
269 | struct S; | 283 | struct S; |
270 | impl Foo for S { | 284 | impl Foo for S { |
271 | <|>fn foo(&self) { todo!() } | 285 | <|>fn foo(&self) { |
272 | }", | 286 | todo!() |
287 | } | ||
288 | }"#, | ||
273 | ); | 289 | ); |
274 | } | 290 | } |
275 | 291 | ||
@@ -277,16 +293,18 @@ impl Foo for S { | |||
277 | fn fill_in_type_params_1() { | 293 | fn fill_in_type_params_1() { |
278 | check_assist( | 294 | check_assist( |
279 | add_missing_impl_members, | 295 | add_missing_impl_members, |
280 | " | 296 | r#" |
281 | trait Foo<T> { fn foo(&self, t: T) -> &T; } | 297 | trait Foo<T> { fn foo(&self, t: T) -> &T; } |
282 | struct S; | 298 | struct S; |
283 | impl Foo<u32> for S { <|> }", | 299 | impl Foo<u32> for S { <|> }"#, |
284 | " | 300 | r#" |
285 | trait Foo<T> { fn foo(&self, t: T) -> &T; } | 301 | trait Foo<T> { fn foo(&self, t: T) -> &T; } |
286 | struct S; | 302 | struct S; |
287 | impl Foo<u32> for S { | 303 | impl Foo<u32> for S { |
288 | <|>fn foo(&self, t: u32) -> &u32 { todo!() } | 304 | <|>fn foo(&self, t: u32) -> &u32 { |
289 | }", | 305 | todo!() |
306 | } | ||
307 | }"#, | ||
290 | ); | 308 | ); |
291 | } | 309 | } |
292 | 310 | ||
@@ -294,16 +312,18 @@ impl Foo<u32> for S { | |||
294 | fn fill_in_type_params_2() { | 312 | fn fill_in_type_params_2() { |
295 | check_assist( | 313 | check_assist( |
296 | add_missing_impl_members, | 314 | add_missing_impl_members, |
297 | " | 315 | r#" |
298 | trait Foo<T> { fn foo(&self, t: T) -> &T; } | 316 | trait Foo<T> { fn foo(&self, t: T) -> &T; } |
299 | struct S; | 317 | struct S; |
300 | impl<U> Foo<U> for S { <|> }", | 318 | impl<U> Foo<U> for S { <|> }"#, |
301 | " | 319 | r#" |
302 | trait Foo<T> { fn foo(&self, t: T) -> &T; } | 320 | trait Foo<T> { fn foo(&self, t: T) -> &T; } |
303 | struct S; | 321 | struct S; |
304 | impl<U> Foo<U> for S { | 322 | impl<U> Foo<U> for S { |
305 | <|>fn foo(&self, t: U) -> &U { todo!() } | 323 | <|>fn foo(&self, t: U) -> &U { |
306 | }", | 324 | todo!() |
325 | } | ||
326 | }"#, | ||
307 | ); | 327 | ); |
308 | } | 328 | } |
309 | 329 | ||
@@ -311,16 +331,18 @@ impl<U> Foo<U> for S { | |||
311 | fn test_cursor_after_empty_impl_def() { | 331 | fn test_cursor_after_empty_impl_def() { |
312 | check_assist( | 332 | check_assist( |
313 | add_missing_impl_members, | 333 | add_missing_impl_members, |
314 | " | 334 | r#" |
315 | trait Foo { fn foo(&self); } | 335 | trait Foo { fn foo(&self); } |
316 | struct S; | 336 | struct S; |
317 | impl Foo for S {}<|>", | 337 | impl Foo for S {}<|>"#, |
318 | " | 338 | r#" |
319 | trait Foo { fn foo(&self); } | 339 | trait Foo { fn foo(&self); } |
320 | struct S; | 340 | struct S; |
321 | impl Foo for S { | 341 | impl Foo for S { |
322 | <|>fn foo(&self) { todo!() } | 342 | <|>fn foo(&self) { |
323 | }", | 343 | todo!() |
344 | } | ||
345 | }"#, | ||
324 | ) | 346 | ) |
325 | } | 347 | } |
326 | 348 | ||
@@ -328,22 +350,24 @@ impl Foo for S { | |||
328 | fn test_qualify_path_1() { | 350 | fn test_qualify_path_1() { |
329 | check_assist( | 351 | check_assist( |
330 | add_missing_impl_members, | 352 | add_missing_impl_members, |
331 | " | 353 | r#" |
332 | mod foo { | 354 | mod foo { |
333 | pub struct Bar; | 355 | pub struct Bar; |
334 | trait Foo { fn foo(&self, bar: Bar); } | 356 | trait Foo { fn foo(&self, bar: Bar); } |
335 | } | 357 | } |
336 | struct S; | 358 | struct S; |
337 | impl foo::Foo for S { <|> }", | 359 | impl foo::Foo for S { <|> }"#, |
338 | " | 360 | r#" |
339 | mod foo { | 361 | mod foo { |
340 | pub struct Bar; | 362 | pub struct Bar; |
341 | trait Foo { fn foo(&self, bar: Bar); } | 363 | trait Foo { fn foo(&self, bar: Bar); } |
342 | } | 364 | } |
343 | struct S; | 365 | struct S; |
344 | impl foo::Foo for S { | 366 | impl foo::Foo for S { |
345 | <|>fn foo(&self, bar: foo::Bar) { todo!() } | 367 | <|>fn foo(&self, bar: foo::Bar) { |
346 | }", | 368 | todo!() |
369 | } | ||
370 | }"#, | ||
347 | ); | 371 | ); |
348 | } | 372 | } |
349 | 373 | ||
@@ -351,22 +375,24 @@ impl foo::Foo for S { | |||
351 | fn test_qualify_path_generic() { | 375 | fn test_qualify_path_generic() { |
352 | check_assist( | 376 | check_assist( |
353 | add_missing_impl_members, | 377 | add_missing_impl_members, |
354 | " | 378 | r#" |
355 | mod foo { | 379 | mod foo { |
356 | pub struct Bar<T>; | 380 | pub struct Bar<T>; |
357 | trait Foo { fn foo(&self, bar: Bar<u32>); } | 381 | trait Foo { fn foo(&self, bar: Bar<u32>); } |
358 | } | 382 | } |
359 | struct S; | 383 | struct S; |
360 | impl foo::Foo for S { <|> }", | 384 | impl foo::Foo for S { <|> }"#, |
361 | " | 385 | r#" |
362 | mod foo { | 386 | mod foo { |
363 | pub struct Bar<T>; | 387 | pub struct Bar<T>; |
364 | trait Foo { fn foo(&self, bar: Bar<u32>); } | 388 | trait Foo { fn foo(&self, bar: Bar<u32>); } |
365 | } | 389 | } |
366 | struct S; | 390 | struct S; |
367 | impl foo::Foo for S { | 391 | impl foo::Foo for S { |
368 | <|>fn foo(&self, bar: foo::Bar<u32>) { todo!() } | 392 | <|>fn foo(&self, bar: foo::Bar<u32>) { |
369 | }", | 393 | todo!() |
394 | } | ||
395 | }"#, | ||
370 | ); | 396 | ); |
371 | } | 397 | } |
372 | 398 | ||
@@ -374,22 +400,24 @@ impl foo::Foo for S { | |||
374 | fn test_qualify_path_and_substitute_param() { | 400 | fn test_qualify_path_and_substitute_param() { |
375 | check_assist( | 401 | check_assist( |
376 | add_missing_impl_members, | 402 | add_missing_impl_members, |
377 | " | 403 | r#" |
378 | mod foo { | 404 | mod foo { |
379 | pub struct Bar<T>; | 405 | pub struct Bar<T>; |
380 | trait Foo<T> { fn foo(&self, bar: Bar<T>); } | 406 | trait Foo<T> { fn foo(&self, bar: Bar<T>); } |
381 | } | 407 | } |
382 | struct S; | 408 | struct S; |
383 | impl foo::Foo<u32> for S { <|> }", | 409 | impl foo::Foo<u32> for S { <|> }"#, |
384 | " | 410 | r#" |
385 | mod foo { | 411 | mod foo { |
386 | pub struct Bar<T>; | 412 | pub struct Bar<T>; |
387 | trait Foo<T> { fn foo(&self, bar: Bar<T>); } | 413 | trait Foo<T> { fn foo(&self, bar: Bar<T>); } |
388 | } | 414 | } |
389 | struct S; | 415 | struct S; |
390 | impl foo::Foo<u32> for S { | 416 | impl foo::Foo<u32> for S { |
391 | <|>fn foo(&self, bar: foo::Bar<u32>) { todo!() } | 417 | <|>fn foo(&self, bar: foo::Bar<u32>) { |
392 | }", | 418 | todo!() |
419 | } | ||
420 | }"#, | ||
393 | ); | 421 | ); |
394 | } | 422 | } |
395 | 423 | ||
@@ -398,15 +426,15 @@ impl foo::Foo<u32> for S { | |||
398 | // when substituting params, the substituted param should not be qualified! | 426 | // when substituting params, the substituted param should not be qualified! |
399 | check_assist( | 427 | check_assist( |
400 | add_missing_impl_members, | 428 | add_missing_impl_members, |
401 | " | 429 | r#" |
402 | mod foo { | 430 | mod foo { |
403 | trait Foo<T> { fn foo(&self, bar: T); } | 431 | trait Foo<T> { fn foo(&self, bar: T); } |
404 | pub struct Param; | 432 | pub struct Param; |
405 | } | 433 | } |
406 | struct Param; | 434 | struct Param; |
407 | struct S; | 435 | struct S; |
408 | impl foo::Foo<Param> for S { <|> }", | 436 | impl foo::Foo<Param> for S { <|> }"#, |
409 | " | 437 | r#" |
410 | mod foo { | 438 | mod foo { |
411 | trait Foo<T> { fn foo(&self, bar: T); } | 439 | trait Foo<T> { fn foo(&self, bar: T); } |
412 | pub struct Param; | 440 | pub struct Param; |
@@ -414,8 +442,10 @@ mod foo { | |||
414 | struct Param; | 442 | struct Param; |
415 | struct S; | 443 | struct S; |
416 | impl foo::Foo<Param> for S { | 444 | impl foo::Foo<Param> for S { |
417 | <|>fn foo(&self, bar: Param) { todo!() } | 445 | <|>fn foo(&self, bar: Param) { |
418 | }", | 446 | todo!() |
447 | } | ||
448 | }"#, | ||
419 | ); | 449 | ); |
420 | } | 450 | } |
421 | 451 | ||
@@ -423,15 +453,15 @@ impl foo::Foo<Param> for S { | |||
423 | fn test_qualify_path_associated_item() { | 453 | fn test_qualify_path_associated_item() { |
424 | check_assist( | 454 | check_assist( |
425 | add_missing_impl_members, | 455 | add_missing_impl_members, |
426 | " | 456 | r#" |
427 | mod foo { | 457 | mod foo { |
428 | pub struct Bar<T>; | 458 | pub struct Bar<T>; |
429 | impl Bar<T> { type Assoc = u32; } | 459 | impl Bar<T> { type Assoc = u32; } |
430 | trait Foo { fn foo(&self, bar: Bar<u32>::Assoc); } | 460 | trait Foo { fn foo(&self, bar: Bar<u32>::Assoc); } |
431 | } | 461 | } |
432 | struct S; | 462 | struct S; |
433 | impl foo::Foo for S { <|> }", | 463 | impl foo::Foo for S { <|> }"#, |
434 | " | 464 | r#" |
435 | mod foo { | 465 | mod foo { |
436 | pub struct Bar<T>; | 466 | pub struct Bar<T>; |
437 | impl Bar<T> { type Assoc = u32; } | 467 | impl Bar<T> { type Assoc = u32; } |
@@ -439,8 +469,10 @@ mod foo { | |||
439 | } | 469 | } |
440 | struct S; | 470 | struct S; |
441 | impl foo::Foo for S { | 471 | impl foo::Foo for S { |
442 | <|>fn foo(&self, bar: foo::Bar<u32>::Assoc) { todo!() } | 472 | <|>fn foo(&self, bar: foo::Bar<u32>::Assoc) { |
443 | }", | 473 | todo!() |
474 | } | ||
475 | }"#, | ||
444 | ); | 476 | ); |
445 | } | 477 | } |
446 | 478 | ||
@@ -448,15 +480,15 @@ impl foo::Foo for S { | |||
448 | fn test_qualify_path_nested() { | 480 | fn test_qualify_path_nested() { |
449 | check_assist( | 481 | check_assist( |
450 | add_missing_impl_members, | 482 | add_missing_impl_members, |
451 | " | 483 | r#" |
452 | mod foo { | 484 | mod foo { |
453 | pub struct Bar<T>; | 485 | pub struct Bar<T>; |
454 | pub struct Baz; | 486 | pub struct Baz; |
455 | trait Foo { fn foo(&self, bar: Bar<Baz>); } | 487 | trait Foo { fn foo(&self, bar: Bar<Baz>); } |
456 | } | 488 | } |
457 | struct S; | 489 | struct S; |
458 | impl foo::Foo for S { <|> }", | 490 | impl foo::Foo for S { <|> }"#, |
459 | " | 491 | r#" |
460 | mod foo { | 492 | mod foo { |
461 | pub struct Bar<T>; | 493 | pub struct Bar<T>; |
462 | pub struct Baz; | 494 | pub struct Baz; |
@@ -464,8 +496,10 @@ mod foo { | |||
464 | } | 496 | } |
465 | struct S; | 497 | struct S; |
466 | impl foo::Foo for S { | 498 | impl foo::Foo for S { |
467 | <|>fn foo(&self, bar: foo::Bar<foo::Baz>) { todo!() } | 499 | <|>fn foo(&self, bar: foo::Bar<foo::Baz>) { |
468 | }", | 500 | todo!() |
501 | } | ||
502 | }"#, | ||
469 | ); | 503 | ); |
470 | } | 504 | } |
471 | 505 | ||
@@ -473,22 +507,24 @@ impl foo::Foo for S { | |||
473 | fn test_qualify_path_fn_trait_notation() { | 507 | fn test_qualify_path_fn_trait_notation() { |
474 | check_assist( | 508 | check_assist( |
475 | add_missing_impl_members, | 509 | add_missing_impl_members, |
476 | " | 510 | r#" |
477 | mod foo { | 511 | mod foo { |
478 | pub trait Fn<Args> { type Output; } | 512 | pub trait Fn<Args> { type Output; } |
479 | trait Foo { fn foo(&self, bar: dyn Fn(u32) -> i32); } | 513 | trait Foo { fn foo(&self, bar: dyn Fn(u32) -> i32); } |
480 | } | 514 | } |
481 | struct S; | 515 | struct S; |
482 | impl foo::Foo for S { <|> }", | 516 | impl foo::Foo for S { <|> }"#, |
483 | " | 517 | r#" |
484 | mod foo { | 518 | mod foo { |
485 | pub trait Fn<Args> { type Output; } | 519 | pub trait Fn<Args> { type Output; } |
486 | trait Foo { fn foo(&self, bar: dyn Fn(u32) -> i32); } | 520 | trait Foo { fn foo(&self, bar: dyn Fn(u32) -> i32); } |
487 | } | 521 | } |
488 | struct S; | 522 | struct S; |
489 | impl foo::Foo for S { | 523 | impl foo::Foo for S { |
490 | <|>fn foo(&self, bar: dyn Fn(u32) -> i32) { todo!() } | 524 | <|>fn foo(&self, bar: dyn Fn(u32) -> i32) { |
491 | }", | 525 | todo!() |
526 | } | ||
527 | }"#, | ||
492 | ); | 528 | ); |
493 | } | 529 | } |
494 | 530 | ||
@@ -496,10 +532,10 @@ impl foo::Foo for S { | |||
496 | fn test_empty_trait() { | 532 | fn test_empty_trait() { |
497 | check_assist_not_applicable( | 533 | check_assist_not_applicable( |
498 | add_missing_impl_members, | 534 | add_missing_impl_members, |
499 | " | 535 | r#" |
500 | trait Foo; | 536 | trait Foo; |
501 | struct S; | 537 | struct S; |
502 | impl Foo for S { <|> }", | 538 | impl Foo for S { <|> }"#, |
503 | ) | 539 | ) |
504 | } | 540 | } |
505 | 541 | ||
@@ -507,13 +543,13 @@ impl Foo for S { <|> }", | |||
507 | fn test_ignore_unnamed_trait_members_and_default_methods() { | 543 | fn test_ignore_unnamed_trait_members_and_default_methods() { |
508 | check_assist_not_applicable( | 544 | check_assist_not_applicable( |
509 | add_missing_impl_members, | 545 | add_missing_impl_members, |
510 | " | 546 | r#" |
511 | trait Foo { | 547 | trait Foo { |
512 | fn (arg: u32); | 548 | fn (arg: u32); |
513 | fn valid(some: u32) -> bool { false } | 549 | fn valid(some: u32) -> bool { false } |
514 | } | 550 | } |
515 | struct S; | 551 | struct S; |
516 | impl Foo for S { <|> }", | 552 | impl Foo for S { <|> }"#, |
517 | ) | 553 | ) |
518 | } | 554 | } |
519 | 555 | ||
@@ -544,7 +580,9 @@ trait Foo { | |||
544 | struct S; | 580 | struct S; |
545 | impl Foo for S { | 581 | impl Foo for S { |
546 | <|>type Output; | 582 | <|>type Output; |
547 | fn foo(&self) { todo!() } | 583 | fn foo(&self) { |
584 | todo!() | ||
585 | } | ||
548 | }"#, | 586 | }"#, |
549 | ) | 587 | ) |
550 | } | 588 | } |
@@ -553,7 +591,7 @@ impl Foo for S { | |||
553 | fn test_default_methods() { | 591 | fn test_default_methods() { |
554 | check_assist( | 592 | check_assist( |
555 | add_missing_default_members, | 593 | add_missing_default_members, |
556 | " | 594 | r#" |
557 | trait Foo { | 595 | trait Foo { |
558 | type Output; | 596 | type Output; |
559 | 597 | ||
@@ -563,8 +601,8 @@ trait Foo { | |||
563 | fn foo(some: u32) -> bool; | 601 | fn foo(some: u32) -> bool; |
564 | } | 602 | } |
565 | struct S; | 603 | struct S; |
566 | impl Foo for S { <|> }", | 604 | impl Foo for S { <|> }"#, |
567 | " | 605 | r#" |
568 | trait Foo { | 606 | trait Foo { |
569 | type Output; | 607 | type Output; |
570 | 608 | ||
@@ -576,7 +614,7 @@ trait Foo { | |||
576 | struct S; | 614 | struct S; |
577 | impl Foo for S { | 615 | impl Foo for S { |
578 | <|>fn valid(some: u32) -> bool { false } | 616 | <|>fn valid(some: u32) -> bool { false } |
579 | }", | 617 | }"#, |
580 | ) | 618 | ) |
581 | } | 619 | } |
582 | } | 620 | } |
diff --git a/crates/ra_assists/src/handlers/early_return.rs b/crates/ra_assists/src/handlers/early_return.rs index ea6c56f8c..eede2fe91 100644 --- a/crates/ra_assists/src/handlers/early_return.rs +++ b/crates/ra_assists/src/handlers/early_return.rs | |||
@@ -2,7 +2,7 @@ use std::{iter::once, ops::RangeInclusive}; | |||
2 | 2 | ||
3 | use ra_syntax::{ | 3 | use ra_syntax::{ |
4 | algo::replace_children, | 4 | algo::replace_children, |
5 | ast::{self, edit::IndentLevel, make, Block, Pat::TupleStructPat}, | 5 | ast::{self, edit::IndentLevel, make}, |
6 | AstNode, | 6 | AstNode, |
7 | SyntaxKind::{FN_DEF, LOOP_EXPR, L_CURLY, R_CURLY, WHILE_EXPR, WHITESPACE}, | 7 | SyntaxKind::{FN_DEF, LOOP_EXPR, L_CURLY, R_CURLY, WHILE_EXPR, WHITESPACE}, |
8 | SyntaxNode, | 8 | SyntaxNode, |
@@ -47,7 +47,7 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> { | |||
47 | // Check if there is an IfLet that we can handle. | 47 | // Check if there is an IfLet that we can handle. |
48 | let if_let_pat = match cond.pat() { | 48 | let if_let_pat = match cond.pat() { |
49 | None => None, // No IfLet, supported. | 49 | None => None, // No IfLet, supported. |
50 | Some(TupleStructPat(pat)) if pat.args().count() == 1 => { | 50 | Some(ast::Pat::TupleStructPat(pat)) if pat.args().count() == 1 => { |
51 | let path = pat.path()?; | 51 | let path = pat.path()?; |
52 | match path.qualifier() { | 52 | match path.qualifier() { |
53 | None => { | 53 | None => { |
@@ -61,9 +61,9 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> { | |||
61 | }; | 61 | }; |
62 | 62 | ||
63 | let cond_expr = cond.expr()?; | 63 | let cond_expr = cond.expr()?; |
64 | let then_block = if_expr.then_branch()?.block()?; | 64 | let then_block = if_expr.then_branch()?; |
65 | 65 | ||
66 | let parent_block = if_expr.syntax().parent()?.ancestors().find_map(ast::Block::cast)?; | 66 | let parent_block = if_expr.syntax().parent()?.ancestors().find_map(ast::BlockExpr::cast)?; |
67 | 67 | ||
68 | if parent_block.expr()? != if_expr.clone().into() { | 68 | if parent_block.expr()? != if_expr.clone().into() { |
69 | return None; | 69 | return None; |
@@ -80,7 +80,7 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> { | |||
80 | return None; | 80 | return None; |
81 | } | 81 | } |
82 | 82 | ||
83 | let parent_container = parent_block.syntax().parent()?.parent()?; | 83 | let parent_container = parent_block.syntax().parent()?; |
84 | 84 | ||
85 | let early_expression: ast::Expr = match parent_container.kind() { | 85 | let early_expression: ast::Expr = match parent_container.kind() { |
86 | WHILE_EXPR | LOOP_EXPR => make::expr_continue(), | 86 | WHILE_EXPR | LOOP_EXPR => make::expr_continue(), |
@@ -144,13 +144,13 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> { | |||
144 | } | 144 | } |
145 | }; | 145 | }; |
146 | edit.target(if_expr.syntax().text_range()); | 146 | edit.target(if_expr.syntax().text_range()); |
147 | edit.replace_ast(parent_block, ast::Block::cast(new_block).unwrap()); | 147 | edit.replace_ast(parent_block, ast::BlockExpr::cast(new_block).unwrap()); |
148 | edit.set_cursor(cursor_position); | 148 | edit.set_cursor(cursor_position); |
149 | 149 | ||
150 | fn replace( | 150 | fn replace( |
151 | new_expr: &SyntaxNode, | 151 | new_expr: &SyntaxNode, |
152 | then_block: &Block, | 152 | then_block: &ast::BlockExpr, |
153 | parent_block: &Block, | 153 | parent_block: &ast::BlockExpr, |
154 | if_expr: &ast::IfExpr, | 154 | if_expr: &ast::IfExpr, |
155 | ) -> SyntaxNode { | 155 | ) -> SyntaxNode { |
156 | let then_block_items = IndentLevel::from(1).decrease_indent(then_block.clone()); | 156 | let then_block_items = IndentLevel::from(1).decrease_indent(then_block.clone()); |
diff --git a/crates/ra_assists/src/handlers/inline_local_variable.rs b/crates/ra_assists/src/handlers/inline_local_variable.rs index f5702f6e0..60ec536a7 100644 --- a/crates/ra_assists/src/handlers/inline_local_variable.rs +++ b/crates/ra_assists/src/handlers/inline_local_variable.rs | |||
@@ -89,6 +89,7 @@ pub(crate) fn inline_local_variable(ctx: AssistCtx) -> Option<Assist> { | |||
89 | | (ast::Expr::ParenExpr(_), _) | 89 | | (ast::Expr::ParenExpr(_), _) |
90 | | (ast::Expr::PathExpr(_), _) | 90 | | (ast::Expr::PathExpr(_), _) |
91 | | (ast::Expr::BlockExpr(_), _) | 91 | | (ast::Expr::BlockExpr(_), _) |
92 | | (ast::Expr::EffectExpr(_), _) | ||
92 | | (_, ast::Expr::CallExpr(_)) | 93 | | (_, ast::Expr::CallExpr(_)) |
93 | | (_, ast::Expr::TupleExpr(_)) | 94 | | (_, ast::Expr::TupleExpr(_)) |
94 | | (_, ast::Expr::ArrayExpr(_)) | 95 | | (_, ast::Expr::ArrayExpr(_)) |
diff --git a/crates/ra_assists/src/handlers/introduce_variable.rs b/crates/ra_assists/src/handlers/introduce_variable.rs index eda9ac296..39c656305 100644 --- a/crates/ra_assists/src/handlers/introduce_variable.rs +++ b/crates/ra_assists/src/handlers/introduce_variable.rs | |||
@@ -111,7 +111,7 @@ fn valid_target_expr(node: SyntaxNode) -> Option<ast::Expr> { | |||
111 | /// expression like a lambda or match arm. | 111 | /// expression like a lambda or match arm. |
112 | fn anchor_stmt(expr: ast::Expr) -> Option<(SyntaxNode, bool)> { | 112 | fn anchor_stmt(expr: ast::Expr) -> Option<(SyntaxNode, bool)> { |
113 | expr.syntax().ancestors().find_map(|node| { | 113 | expr.syntax().ancestors().find_map(|node| { |
114 | if let Some(expr) = node.parent().and_then(ast::Block::cast).and_then(|it| it.expr()) { | 114 | if let Some(expr) = node.parent().and_then(ast::BlockExpr::cast).and_then(|it| it.expr()) { |
115 | if expr.syntax() == &node { | 115 | if expr.syntax() == &node { |
116 | tested_by!(test_introduce_var_last_expr); | 116 | tested_by!(test_introduce_var_last_expr); |
117 | return Some((node, false)); | 117 | return Some((node, false)); |
diff --git a/crates/ra_assists/src/handlers/move_guard.rs b/crates/ra_assists/src/handlers/move_guard.rs index d5ccdd91c..b084dd9ee 100644 --- a/crates/ra_assists/src/handlers/move_guard.rs +++ b/crates/ra_assists/src/handlers/move_guard.rs | |||
@@ -113,9 +113,9 @@ pub(crate) fn move_arm_cond_to_match_guard(ctx: AssistCtx) -> Option<Assist> { | |||
113 | "Move condition to match guard", | 113 | "Move condition to match guard", |
114 | |edit| { | 114 | |edit| { |
115 | edit.target(if_expr.syntax().text_range()); | 115 | edit.target(if_expr.syntax().text_range()); |
116 | let then_only_expr = then_block.block().and_then(|it| it.statements().next()).is_none(); | 116 | let then_only_expr = then_block.statements().next().is_none(); |
117 | 117 | ||
118 | match &then_block.block().and_then(|it| it.expr()) { | 118 | match &then_block.expr() { |
119 | Some(then_expr) if then_only_expr => { | 119 | Some(then_expr) if then_only_expr => { |
120 | edit.replace(if_expr.syntax().text_range(), then_expr.syntax().text()) | 120 | edit.replace(if_expr.syntax().text_range(), then_expr.syntax().text()) |
121 | } | 121 | } |
diff --git a/crates/ra_fmt/src/lib.rs b/crates/ra_fmt/src/lib.rs index 1a30b2b3a..f910ded9d 100644 --- a/crates/ra_fmt/src/lib.rs +++ b/crates/ra_fmt/src/lib.rs | |||
@@ -42,7 +42,6 @@ pub fn unwrap_trivial_block(block: ast::BlockExpr) -> ast::Expr { | |||
42 | } | 42 | } |
43 | 43 | ||
44 | pub fn extract_trivial_expression(block: &ast::BlockExpr) -> Option<ast::Expr> { | 44 | pub fn extract_trivial_expression(block: &ast::BlockExpr) -> Option<ast::Expr> { |
45 | let block = block.block()?; | ||
46 | let has_anything_else = |thing: &SyntaxNode| -> bool { | 45 | let has_anything_else = |thing: &SyntaxNode| -> bool { |
47 | let mut non_trivial_children = | 46 | let mut non_trivial_children = |
48 | block.syntax().children_with_tokens().filter(|it| match it.kind() { | 47 | block.syntax().children_with_tokens().filter(|it| match it.kind() { |
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs index f06cc115b..58b3d10d8 100644 --- a/crates/ra_hir_def/src/body/lower.rs +++ b/crates/ra_hir_def/src/body/lower.rs | |||
@@ -203,10 +203,16 @@ impl ExprCollector<'_> { | |||
203 | 203 | ||
204 | self.alloc_expr(Expr::If { condition, then_branch, else_branch }, syntax_ptr) | 204 | self.alloc_expr(Expr::If { condition, then_branch, else_branch }, syntax_ptr) |
205 | } | 205 | } |
206 | ast::Expr::TryBlockExpr(e) => { | 206 | ast::Expr::EffectExpr(e) => match e.effect() { |
207 | let body = self.collect_block_opt(e.body()); | 207 | ast::Effect::Try(_) => { |
208 | self.alloc_expr(Expr::TryBlock { body }, syntax_ptr) | 208 | let body = self.collect_block_opt(e.block_expr()); |
209 | } | 209 | self.alloc_expr(Expr::TryBlock { body }, syntax_ptr) |
210 | } | ||
211 | // FIXME: we need to record these effects somewhere... | ||
212 | ast::Effect::Async(_) | ast::Effect::Label(_) | ast::Effect::Unsafe(_) => { | ||
213 | self.collect_block_opt(e.block_expr()) | ||
214 | } | ||
215 | }, | ||
210 | ast::Expr::BlockExpr(e) => self.collect_block(e), | 216 | ast::Expr::BlockExpr(e) => self.collect_block(e), |
211 | ast::Expr::LoopExpr(e) => { | 217 | ast::Expr::LoopExpr(e) => { |
212 | let body = self.collect_block_opt(e.loop_body()); | 218 | let body = self.collect_block_opt(e.loop_body()); |
@@ -494,12 +500,8 @@ impl ExprCollector<'_> { | |||
494 | } | 500 | } |
495 | } | 501 | } |
496 | 502 | ||
497 | fn collect_block(&mut self, expr: ast::BlockExpr) -> ExprId { | 503 | fn collect_block(&mut self, block: ast::BlockExpr) -> ExprId { |
498 | let syntax_node_ptr = AstPtr::new(&expr.clone().into()); | 504 | let syntax_node_ptr = AstPtr::new(&block.clone().into()); |
499 | let block = match expr.block() { | ||
500 | Some(block) => block, | ||
501 | None => return self.alloc_expr(Expr::Missing, syntax_node_ptr), | ||
502 | }; | ||
503 | self.collect_block_items(&block); | 505 | self.collect_block_items(&block); |
504 | let statements = block | 506 | let statements = block |
505 | .statements() | 507 | .statements() |
@@ -517,7 +519,7 @@ impl ExprCollector<'_> { | |||
517 | self.alloc_expr(Expr::Block { statements, tail }, syntax_node_ptr) | 519 | self.alloc_expr(Expr::Block { statements, tail }, syntax_node_ptr) |
518 | } | 520 | } |
519 | 521 | ||
520 | fn collect_block_items(&mut self, block: &ast::Block) { | 522 | fn collect_block_items(&mut self, block: &ast::BlockExpr) { |
521 | let container = ContainerId::DefWithBodyId(self.def); | 523 | let container = ContainerId::DefWithBodyId(self.def); |
522 | for item in block.items() { | 524 | for item in block.items() { |
523 | let (def, name): (ModuleDefId, Option<ast::Name>) = match item { | 525 | let (def, name): (ModuleDefId, Option<ast::Name>) = match item { |
diff --git a/crates/ra_hir_expand/src/db.rs b/crates/ra_hir_expand/src/db.rs index 047452306..4c12d0a15 100644 --- a/crates/ra_hir_expand/src/db.rs +++ b/crates/ra_hir_expand/src/db.rs | |||
@@ -330,7 +330,7 @@ fn to_fragment_kind(db: &dyn AstDatabase, id: MacroCallId) -> FragmentKind { | |||
330 | FragmentKind::Expr | 330 | FragmentKind::Expr |
331 | } | 331 | } |
332 | // FIXME: Expand to statements in appropriate positions; HIR lowering needs to handle that | 332 | // FIXME: Expand to statements in appropriate positions; HIR lowering needs to handle that |
333 | EXPR_STMT | BLOCK => FragmentKind::Expr, | 333 | EXPR_STMT | BLOCK_EXPR => FragmentKind::Expr, |
334 | ARG_LIST => FragmentKind::Expr, | 334 | ARG_LIST => FragmentKind::Expr, |
335 | TRY_EXPR => FragmentKind::Expr, | 335 | TRY_EXPR => FragmentKind::Expr, |
336 | TUPLE_EXPR => FragmentKind::Expr, | 336 | TUPLE_EXPR => FragmentKind::Expr, |
@@ -342,7 +342,6 @@ fn to_fragment_kind(db: &dyn AstDatabase, id: MacroCallId) -> FragmentKind { | |||
342 | CONDITION => FragmentKind::Expr, | 342 | CONDITION => FragmentKind::Expr, |
343 | BREAK_EXPR => FragmentKind::Expr, | 343 | BREAK_EXPR => FragmentKind::Expr, |
344 | RETURN_EXPR => FragmentKind::Expr, | 344 | RETURN_EXPR => FragmentKind::Expr, |
345 | BLOCK_EXPR => FragmentKind::Expr, | ||
346 | MATCH_EXPR => FragmentKind::Expr, | 345 | MATCH_EXPR => FragmentKind::Expr, |
347 | MATCH_ARM => FragmentKind::Expr, | 346 | MATCH_ARM => FragmentKind::Expr, |
348 | MATCH_GUARD => FragmentKind::Expr, | 347 | MATCH_GUARD => FragmentKind::Expr, |
diff --git a/crates/ra_hir_ty/src/tests/simple.rs b/crates/ra_hir_ty/src/tests/simple.rs index 56abc65b8..3d3088965 100644 --- a/crates/ra_hir_ty/src/tests/simple.rs +++ b/crates/ra_hir_ty/src/tests/simple.rs | |||
@@ -1755,3 +1755,35 @@ fn main() { | |||
1755 | "### | 1755 | "### |
1756 | ); | 1756 | ); |
1757 | } | 1757 | } |
1758 | |||
1759 | #[test] | ||
1760 | fn effects_smoke_test() { | ||
1761 | assert_snapshot!( | ||
1762 | infer(r#" | ||
1763 | fn main() { | ||
1764 | let x = unsafe { 92 }; | ||
1765 | let y = async { async { () }.await }; | ||
1766 | let z = try { () }; | ||
1767 | let t = 'a: { 92 }; | ||
1768 | } | ||
1769 | "#), | ||
1770 | @r###" | ||
1771 | 11..131 '{ ...2 }; }': () | ||
1772 | 21..22 'x': i32 | ||
1773 | 32..38 '{ 92 }': i32 | ||
1774 | 34..36 '92': i32 | ||
1775 | 48..49 'y': {unknown} | ||
1776 | 58..80 '{ asyn...wait }': {unknown} | ||
1777 | 60..78 'async ....await': {unknown} | ||
1778 | 66..72 '{ () }': () | ||
1779 | 68..70 '()': () | ||
1780 | 90..91 'z': {unknown} | ||
1781 | 94..104 'try { () }': {unknown} | ||
1782 | 98..104 '{ () }': () | ||
1783 | 100..102 '()': () | ||
1784 | 114..115 't': i32 | ||
1785 | 122..128 '{ 92 }': i32 | ||
1786 | 124..126 '92': i32 | ||
1787 | "### | ||
1788 | ) | ||
1789 | } | ||
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs index 118fceb2e..c529752d4 100644 --- a/crates/ra_ide/src/completion/completion_context.rs +++ b/crates/ra_ide/src/completion/completion_context.rs | |||
@@ -344,7 +344,7 @@ impl<'a> CompletionContext<'a> { | |||
344 | stmt.syntax().text_range() == name_ref.syntax().text_range(), | 344 | stmt.syntax().text_range() == name_ref.syntax().text_range(), |
345 | ); | 345 | ); |
346 | } | 346 | } |
347 | if let Some(block) = ast::Block::cast(node) { | 347 | if let Some(block) = ast::BlockExpr::cast(node) { |
348 | return Some( | 348 | return Some( |
349 | block.expr().map(|e| e.syntax().text_range()) | 349 | block.expr().map(|e| e.syntax().text_range()) |
350 | == Some(name_ref.syntax().text_range()), | 350 | == Some(name_ref.syntax().text_range()), |
diff --git a/crates/ra_ide/src/folding_ranges.rs b/crates/ra_ide/src/folding_ranges.rs index 4379005aa..8657377de 100644 --- a/crates/ra_ide/src/folding_ranges.rs +++ b/crates/ra_ide/src/folding_ranges.rs | |||
@@ -88,7 +88,7 @@ fn fold_kind(kind: SyntaxKind) -> Option<FoldKind> { | |||
88 | | ITEM_LIST | 88 | | ITEM_LIST |
89 | | EXTERN_ITEM_LIST | 89 | | EXTERN_ITEM_LIST |
90 | | USE_TREE_LIST | 90 | | USE_TREE_LIST |
91 | | BLOCK | 91 | | BLOCK_EXPR |
92 | | MATCH_ARM_LIST | 92 | | MATCH_ARM_LIST |
93 | | ENUM_VARIANT_LIST | 93 | | ENUM_VARIANT_LIST |
94 | | TOKEN_TREE => Some(FoldKind::Block), | 94 | | TOKEN_TREE => Some(FoldKind::Block), |
diff --git a/crates/ra_ide/src/join_lines.rs b/crates/ra_ide/src/join_lines.rs index d0def7eaa..63fd6b3e4 100644 --- a/crates/ra_ide/src/join_lines.rs +++ b/crates/ra_ide/src/join_lines.rs | |||
@@ -129,8 +129,7 @@ fn has_comma_after(node: &SyntaxNode) -> bool { | |||
129 | } | 129 | } |
130 | 130 | ||
131 | fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> { | 131 | fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> { |
132 | let block = ast::Block::cast(token.parent())?; | 132 | let block_expr = ast::BlockExpr::cast(token.parent())?; |
133 | let block_expr = ast::BlockExpr::cast(block.syntax().parent()?)?; | ||
134 | if !block_expr.is_standalone() { | 133 | if !block_expr.is_standalone() { |
135 | return None; | 134 | return None; |
136 | } | 135 | } |
diff --git a/crates/ra_ide/src/syntax_tree.rs b/crates/ra_ide/src/syntax_tree.rs index bf97f8c56..86c70ff83 100644 --- a/crates/ra_ide/src/syntax_tree.rs +++ b/crates/ra_ide/src/syntax_tree.rs | |||
@@ -120,9 +120,8 @@ [email protected] | |||
120 | [email protected] ")" | 120 | [email protected] ")" |
121 | [email protected] " " | 121 | [email protected] " " |
122 | [email protected] | 122 | [email protected] |
123 | [email protected] | 123 | [email protected] "{" |
124 | [email protected] "{" | 124 | [email protected] "}" |
125 | [email protected] "}" | ||
126 | "# | 125 | "# |
127 | .trim() | 126 | .trim() |
128 | ); | 127 | ); |
@@ -153,26 +152,25 @@ [email protected] | |||
153 | [email protected] ")" | 152 | [email protected] ")" |
154 | [email protected] " " | 153 | [email protected] " " |
155 | [email protected] | 154 | [email protected] |
156 | [email protected] | 155 | [email protected] "{" |
157 | [email protected] "{" | 156 | [email protected] "\n " |
158 | [email protected] "\n " | 157 | [email protected] |
159 | [email protected] | 158 | [email protected] |
160 | [email protected] | 159 | [email protected] |
161 | [email protected] | 160 | [email protected] |
162 | [email protected] | 161 | [email protected] |
163 | [email protected] | 162 | [email protected] "assert" |
164 | [email protected] "assert" | 163 | [email protected] "!" |
165 | [email protected] "!" | 164 | [email protected] |
166 | [email protected] | 165 | [email protected] "(" |
167 | [email protected] "(" | 166 | [email protected] "\"\n fn foo() {\n ..." |
168 | [email protected] "\"\n fn foo() {\n ..." | 167 | [email protected] "," |
169 | [email protected] "," | 168 | [email protected] " " |
170 | [email protected] " " | 169 | [email protected] "\"\"" |
171 | [email protected] "\"\"" | 170 | [email protected] ")" |
172 | [email protected] ")" | 171 | [email protected] ";" |
173 | [email protected] ";" | 172 | [email protected] "\n" |
174 | [email protected] "\n" | 173 | [email protected] "}" |
175 | [email protected] "}" | ||
176 | "# | 174 | "# |
177 | .trim() | 175 | .trim() |
178 | ); | 176 | ); |
@@ -196,9 +194,8 @@ [email protected] | |||
196 | [email protected] ")" | 194 | [email protected] ")" |
197 | [email protected] " " | 195 | [email protected] " " |
198 | [email protected] | 196 | [email protected] |
199 | [email protected] | 197 | [email protected] "{" |
200 | [email protected] "{" | 198 | [email protected] "}" |
201 | [email protected] "}" | ||
202 | "# | 199 | "# |
203 | .trim() | 200 | .trim() |
204 | ); | 201 | ); |
@@ -265,10 +262,9 @@ [email protected] | |||
265 | [email protected] ")" | 262 | [email protected] ")" |
266 | [email protected] " " | 263 | [email protected] " " |
267 | [email protected] | 264 | [email protected] |
268 | [email protected] | 265 | [email protected] "{" |
269 | [email protected] "{" | 266 | [email protected] "\n" |
270 | [email protected] "\n" | 267 | [email protected] "}" |
271 | [email protected] "}" | ||
272 | "# | 268 | "# |
273 | .trim() | 269 | .trim() |
274 | ); | 270 | ); |
@@ -300,10 +296,9 @@ [email protected] | |||
300 | [email protected] ")" | 296 | [email protected] ")" |
301 | [email protected] " " | 297 | [email protected] " " |
302 | [email protected] | 298 | [email protected] |
303 | [email protected] | 299 | [email protected] "{" |
304 | [email protected] "{" | 300 | [email protected] "\n" |
305 | [email protected] "\n" | 301 | [email protected] "}" |
306 | [email protected] "}" | ||
307 | "# | 302 | "# |
308 | .trim() | 303 | .trim() |
309 | ); | 304 | ); |
@@ -334,10 +329,9 @@ [email protected] | |||
334 | [email protected] ")" | 329 | [email protected] ")" |
335 | [email protected] " " | 330 | [email protected] " " |
336 | [email protected] | 331 | [email protected] |
337 | [email protected] | 332 | [email protected] "{" |
338 | [email protected] "{" | 333 | [email protected] "\n" |
339 | [email protected] "\n" | 334 | [email protected] "}" |
340 | [email protected] "}" | ||
341 | [email protected] "\n" | 335 | [email protected] "\n" |
342 | [email protected] | 336 | [email protected] |
343 | [email protected] "fn" | 337 | [email protected] "fn" |
@@ -349,10 +343,9 @@ [email protected] | |||
349 | [email protected] ")" | 343 | [email protected] ")" |
350 | [email protected] " " | 344 | [email protected] " " |
351 | [email protected] | 345 | [email protected] |
352 | [email protected] | 346 | [email protected] "{" |
353 | [email protected] "{" | 347 | [email protected] "\n" |
354 | [email protected] "\n" | 348 | [email protected] "}" |
355 | [email protected] "}" | ||
356 | "# | 349 | "# |
357 | .trim() | 350 | .trim() |
358 | ); | 351 | ); |
diff --git a/crates/ra_mbe/src/tests.rs b/crates/ra_mbe/src/tests.rs index 0d924ce58..c43003fd6 100644 --- a/crates/ra_mbe/src/tests.rs +++ b/crates/ra_mbe/src/tests.rs | |||
@@ -266,21 +266,20 @@ fn test_expr_order() { | |||
266 | [email protected] "(" | 266 | [email protected] "(" |
267 | [email protected] ")" | 267 | [email protected] ")" |
268 | [email protected] | 268 | [email protected] |
269 | [email protected] | 269 | [email protected] "{" |
270 | [email protected] "{" | 270 | [email protected] |
271 | [email protected] | 271 | [email protected] |
272 | [email protected] | 272 | [email protected] |
273 | [email protected] | 273 | [email protected] |
274 | [email protected] | 274 | [email protected] "1" |
275 | [email protected] "1" | 275 | [email protected] "+" |
276 | [email protected] "+" | 276 | [email protected] |
277 | [email protected] | 277 | [email protected] "1" |
278 | [email protected] "1" | 278 | [email protected] "*" |
279 | [email protected] "*" | 279 | [email protected] |
280 | [email protected] | 280 | [email protected] "2" |
281 | [email protected] "2" | 281 | [email protected] ";" |
282 | [email protected] ";" | 282 | [email protected] "}""#, |
283 | [email protected] "}""#, | ||
284 | ); | 283 | ); |
285 | } | 284 | } |
286 | 285 | ||
@@ -1114,68 +1113,67 @@ fn test_vec() { | |||
1114 | assert_eq!( | 1113 | assert_eq!( |
1115 | format!("{:#?}", tree).trim(), | 1114 | format!("{:#?}", tree).trim(), |
1116 | r#"[email protected] | 1115 | r#"[email protected] |
1117 | [email protected] | 1116 | [email protected] "{" |
1118 | [email protected] "{" | 1117 | [email protected] |
1119 | [email protected] | 1118 | [email protected] "let" |
1120 | [email protected] "let" | 1119 | [email protected] |
1121 | [email protected] | 1120 | [email protected] "mut" |
1122 | [email protected] "mut" | 1121 | [email protected] |
1123 | [email protected] | 1122 | [email protected] "v" |
1124 | [email protected] "v" | 1123 | [email protected] "=" |
1125 | [email protected] "=" | 1124 | [email protected] |
1126 | [email protected] | 1125 | [email protected] |
1127 | [email protected] | 1126 | [email protected] |
1128 | [email protected] | 1127 | [email protected] |
1129 | [email protected] | 1128 | [email protected] |
1130 | [email protected] | 1129 | [email protected] |
1131 | [email protected] | 1130 | [email protected] "Vec" |
1132 | [email protected] "Vec" | 1131 | [email protected] "::" |
1133 | [email protected] "::" | 1132 | [email protected] |
1134 | [email protected] | 1133 | [email protected] |
1135 | [email protected] | 1134 | [email protected] "new" |
1136 | [email protected] "new" | 1135 | [email protected] |
1137 | [email protected] | 1136 | [email protected] "(" |
1138 | [email protected] "(" | 1137 | [email protected] ")" |
1139 | [email protected] ")" | 1138 | [email protected] ";" |
1140 | [email protected] ";" | 1139 | [email protected] |
1141 | [email protected] | 1140 | [email protected] |
1142 | [email protected] | 1141 | [email protected] |
1143 | [email protected] | 1142 | [email protected] |
1144 | [email protected] | 1143 | [email protected] |
1145 | [email protected] | 1144 | [email protected] |
1146 | [email protected] | 1145 | [email protected] "v" |
1147 | [email protected] "v" | 1146 | [email protected] "." |
1148 | [email protected] "." | 1147 | [email protected] |
1149 | [email protected] | 1148 | [email protected] "push" |
1150 | [email protected] "push" | 1149 | [email protected] |
1151 | [email protected] | 1150 | [email protected] "(" |
1152 | [email protected] "(" | 1151 | [email protected] |
1153 | [email protected] | 1152 | [email protected] "1u32" |
1154 | [email protected] "1u32" | 1153 | [email protected] ")" |
1155 | [email protected] ")" | 1154 | [email protected] ";" |
1156 | [email protected] ";" | 1155 | [email protected] |
1157 | [email protected] | 1156 | [email protected] |
1158 | [email protected] | 1157 | [email protected] |
1159 | [email protected] | 1158 | [email protected] |
1160 | [email protected] | 1159 | [email protected] |
1161 | [email protected] | 1160 | [email protected] |
1162 | [email protected] | 1161 | [email protected] "v" |
1163 | [email protected] "v" | 1162 | [email protected] "." |
1164 | [email protected] "." | 1163 | [email protected] |
1165 | [email protected] | 1164 | [email protected] "push" |
1166 | [email protected] "push" | 1165 | [email protected] |
1167 | [email protected] | 1166 | [email protected] "(" |
1168 | [email protected] "(" | 1167 | [email protected] |
1169 | [email protected] | 1168 | [email protected] "2" |
1170 | [email protected] "2" | 1169 | [email protected] ")" |
1171 | [email protected] ")" | 1170 | [email protected] ";" |
1172 | [email protected] ";" | 1171 | [email protected] |
1173 | [email protected] | 1172 | [email protected] |
1174 | [email protected] | 1173 | [email protected] |
1175 | [email protected] | 1174 | [email protected] |
1176 | [email protected] | 1175 | [email protected] "v" |
1177 | [email protected] "v" | 1176 | [email protected] "}""# |
1178 | [email protected] "}""# | ||
1179 | ); | 1177 | ); |
1180 | } | 1178 | } |
1181 | 1179 | ||
diff --git a/crates/ra_parser/src/grammar.rs b/crates/ra_parser/src/grammar.rs index c2a6e82e9..d9824ff9b 100644 --- a/crates/ra_parser/src/grammar.rs +++ b/crates/ra_parser/src/grammar.rs | |||
@@ -143,7 +143,7 @@ pub(crate) fn reparser( | |||
143 | parent: Option<SyntaxKind>, | 143 | parent: Option<SyntaxKind>, |
144 | ) -> Option<fn(&mut Parser)> { | 144 | ) -> Option<fn(&mut Parser)> { |
145 | let res = match node { | 145 | let res = match node { |
146 | BLOCK => expressions::naked_block, | 146 | BLOCK_EXPR => expressions::block, |
147 | RECORD_FIELD_DEF_LIST => items::record_field_def_list, | 147 | RECORD_FIELD_DEF_LIST => items::record_field_def_list, |
148 | RECORD_FIELD_LIST => items::record_field_list, | 148 | RECORD_FIELD_LIST => items::record_field_list, |
149 | ENUM_VARIANT_LIST => items::enum_variant_list, | 149 | ENUM_VARIANT_LIST => items::enum_variant_list, |
diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs index cb30b25a8..a23dbcacf 100644 --- a/crates/ra_parser/src/grammar/expressions.rs +++ b/crates/ra_parser/src/grammar/expressions.rs | |||
@@ -59,16 +59,7 @@ pub(crate) fn block(p: &mut Parser) { | |||
59 | p.error("expected a block"); | 59 | p.error("expected a block"); |
60 | return; | 60 | return; |
61 | } | 61 | } |
62 | atom::block_expr(p, None); | 62 | atom::block_expr(p); |
63 | } | ||
64 | |||
65 | pub(crate) fn naked_block(p: &mut Parser) { | ||
66 | assert!(p.at(T!['{'])); | ||
67 | let m = p.start(); | ||
68 | p.bump(T!['{']); | ||
69 | expr_block_contents(p); | ||
70 | p.expect(T!['}']); | ||
71 | m.complete(p, BLOCK); | ||
72 | } | 63 | } |
73 | 64 | ||
74 | fn is_expr_stmt_attr_allowed(kind: SyntaxKind) -> bool { | 65 | fn is_expr_stmt_attr_allowed(kind: SyntaxKind) -> bool { |
@@ -197,7 +188,7 @@ pub(super) fn stmt(p: &mut Parser, with_semi: StmtWithSemi) { | |||
197 | } | 188 | } |
198 | } | 189 | } |
199 | 190 | ||
200 | pub(crate) fn expr_block_contents(p: &mut Parser) { | 191 | pub(super) fn expr_block_contents(p: &mut Parser) { |
201 | // This is checked by a validator | 192 | // This is checked by a validator |
202 | attributes::inner_attributes(p); | 193 | attributes::inner_attributes(p); |
203 | 194 | ||
diff --git a/crates/ra_parser/src/grammar/expressions/atom.rs b/crates/ra_parser/src/grammar/expressions/atom.rs index 166dfc472..efb424dae 100644 --- a/crates/ra_parser/src/grammar/expressions/atom.rs +++ b/crates/ra_parser/src/grammar/expressions/atom.rs | |||
@@ -92,7 +92,12 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar | |||
92 | T![loop] => loop_expr(p, Some(m)), | 92 | T![loop] => loop_expr(p, Some(m)), |
93 | T![for] => for_expr(p, Some(m)), | 93 | T![for] => for_expr(p, Some(m)), |
94 | T![while] => while_expr(p, Some(m)), | 94 | T![while] => while_expr(p, Some(m)), |
95 | T!['{'] => block_expr(p, Some(m)), | 95 | // test labeled_block |
96 | // fn f() { 'label: {}; } | ||
97 | T!['{'] => { | ||
98 | block_expr(p); | ||
99 | m.complete(p, EFFECT_EXPR) | ||
100 | } | ||
96 | _ => { | 101 | _ => { |
97 | // test_err misplaced_label_err | 102 | // test_err misplaced_label_err |
98 | // fn main() { | 103 | // fn main() { |
@@ -108,13 +113,17 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar | |||
108 | let m = p.start(); | 113 | let m = p.start(); |
109 | p.bump(T![async]); | 114 | p.bump(T![async]); |
110 | p.eat(T![move]); | 115 | p.eat(T![move]); |
111 | block_expr(p, Some(m)) | 116 | block_expr(p); |
117 | m.complete(p, EFFECT_EXPR) | ||
112 | } | 118 | } |
113 | T![match] => match_expr(p), | 119 | T![match] => match_expr(p), |
120 | // test unsafe_block | ||
121 | // fn f() { unsafe { } } | ||
114 | T![unsafe] if la == T!['{'] => { | 122 | T![unsafe] if la == T!['{'] => { |
115 | let m = p.start(); | 123 | let m = p.start(); |
116 | p.bump(T![unsafe]); | 124 | p.bump(T![unsafe]); |
117 | block_expr(p, Some(m)) | 125 | block_expr(p); |
126 | m.complete(p, EFFECT_EXPR) | ||
118 | } | 127 | } |
119 | T!['{'] => { | 128 | T!['{'] => { |
120 | // test for_range_from | 129 | // test for_range_from |
@@ -123,7 +132,7 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar | |||
123 | // break; | 132 | // break; |
124 | // } | 133 | // } |
125 | // } | 134 | // } |
126 | block_expr(p, None) | 135 | block_expr(p) |
127 | } | 136 | } |
128 | T![return] => return_expr(p), | 137 | T![return] => return_expr(p), |
129 | T![continue] => continue_expr(p), | 138 | T![continue] => continue_expr(p), |
@@ -134,7 +143,7 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar | |||
134 | } | 143 | } |
135 | }; | 144 | }; |
136 | let blocklike = match done.kind() { | 145 | let blocklike = match done.kind() { |
137 | IF_EXPR | WHILE_EXPR | FOR_EXPR | LOOP_EXPR | MATCH_EXPR | BLOCK_EXPR | TRY_BLOCK_EXPR => { | 146 | IF_EXPR | WHILE_EXPR | FOR_EXPR | LOOP_EXPR | MATCH_EXPR | BLOCK_EXPR | EFFECT_EXPR => { |
138 | BlockLike::Block | 147 | BlockLike::Block |
139 | } | 148 | } |
140 | _ => BlockLike::NotBlock, | 149 | _ => BlockLike::NotBlock, |
@@ -234,7 +243,7 @@ fn lambda_expr(p: &mut Parser) -> CompletedMarker { | |||
234 | if p.at(T!['{']) { | 243 | if p.at(T!['{']) { |
235 | // test lambda_ret_block | 244 | // test lambda_ret_block |
236 | // fn main() { || -> i32 { 92 }(); } | 245 | // fn main() { || -> i32 { 92 }(); } |
237 | block_expr(p, None); | 246 | block_expr(p); |
238 | } else { | 247 | } else { |
239 | p.error("expected `{`"); | 248 | p.error("expected `{`"); |
240 | } | 249 | } |
@@ -461,13 +470,13 @@ fn match_guard(p: &mut Parser) -> CompletedMarker { | |||
461 | // test block_expr | 470 | // test block_expr |
462 | // fn foo() { | 471 | // fn foo() { |
463 | // {}; | 472 | // {}; |
464 | // unsafe {}; | ||
465 | // 'label: {}; | ||
466 | // } | 473 | // } |
467 | pub(super) fn block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker { | 474 | pub(super) fn block_expr(p: &mut Parser) -> CompletedMarker { |
468 | assert!(p.at(T!['{'])); | 475 | assert!(p.at(T!['{'])); |
469 | let m = m.unwrap_or_else(|| p.start()); | 476 | let m = p.start(); |
470 | naked_block(p); | 477 | p.bump(T!['{']); |
478 | expr_block_contents(p); | ||
479 | p.expect(T!['}']); | ||
471 | m.complete(p, BLOCK_EXPR) | 480 | m.complete(p, BLOCK_EXPR) |
472 | } | 481 | } |
473 | 482 | ||
@@ -552,8 +561,8 @@ fn try_block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker { | |||
552 | } | 561 | } |
553 | 562 | ||
554 | p.bump(T![try]); | 563 | p.bump(T![try]); |
555 | block(p); | 564 | block_expr(p); |
556 | m.complete(p, TRY_EXPR) | 565 | m.complete(p, EFFECT_EXPR) |
557 | } | 566 | } |
558 | 567 | ||
559 | // test box_expr | 568 | // test box_expr |
diff --git a/crates/ra_parser/src/syntax_kind/generated.rs b/crates/ra_parser/src/syntax_kind/generated.rs index 524e7d784..e7404492a 100644 --- a/crates/ra_parser/src/syntax_kind/generated.rs +++ b/crates/ra_parser/src/syntax_kind/generated.rs | |||
@@ -191,7 +191,7 @@ pub enum SyntaxKind { | |||
191 | RECORD_LIT, | 191 | RECORD_LIT, |
192 | RECORD_FIELD_LIST, | 192 | RECORD_FIELD_LIST, |
193 | RECORD_FIELD, | 193 | RECORD_FIELD, |
194 | TRY_BLOCK_EXPR, | 194 | EFFECT_EXPR, |
195 | BOX_EXPR, | 195 | BOX_EXPR, |
196 | CALL_EXPR, | 196 | CALL_EXPR, |
197 | INDEX_EXPR, | 197 | INDEX_EXPR, |
@@ -204,7 +204,6 @@ pub enum SyntaxKind { | |||
204 | PREFIX_EXPR, | 204 | PREFIX_EXPR, |
205 | RANGE_EXPR, | 205 | RANGE_EXPR, |
206 | BIN_EXPR, | 206 | BIN_EXPR, |
207 | BLOCK, | ||
208 | EXTERN_BLOCK, | 207 | EXTERN_BLOCK, |
209 | EXTERN_ITEM_LIST, | 208 | EXTERN_ITEM_LIST, |
210 | ENUM_VARIANT, | 209 | ENUM_VARIANT, |
diff --git a/crates/ra_syntax/src/ast.rs b/crates/ra_syntax/src/ast.rs index a716e525b..1876afe95 100644 --- a/crates/ra_syntax/src/ast.rs +++ b/crates/ra_syntax/src/ast.rs | |||
@@ -16,7 +16,7 @@ use crate::{ | |||
16 | }; | 16 | }; |
17 | 17 | ||
18 | pub use self::{ | 18 | pub use self::{ |
19 | expr_extensions::{ArrayExprKind, BinOp, ElseBranch, LiteralKind, PrefixOp, RangeOp}, | 19 | expr_extensions::{ArrayExprKind, BinOp, Effect, ElseBranch, LiteralKind, PrefixOp, RangeOp}, |
20 | extensions::{ | 20 | extensions::{ |
21 | AttrKind, FieldKind, NameOrNameRef, PathSegmentKind, SelfParamKind, SlicePatComponents, | 21 | AttrKind, FieldKind, NameOrNameRef, PathSegmentKind, SelfParamKind, SlicePatComponents, |
22 | StructKind, TypeBoundKind, VisibilityKind, | 22 | StructKind, TypeBoundKind, VisibilityKind, |
diff --git a/crates/ra_syntax/src/ast/edit.rs b/crates/ra_syntax/src/ast/edit.rs index 26e4576ff..c507dc683 100644 --- a/crates/ra_syntax/src/ast/edit.rs +++ b/crates/ra_syntax/src/ast/edit.rs | |||
@@ -28,7 +28,7 @@ impl ast::BinExpr { | |||
28 | 28 | ||
29 | impl ast::FnDef { | 29 | impl ast::FnDef { |
30 | #[must_use] | 30 | #[must_use] |
31 | pub fn with_body(&self, body: ast::Block) -> ast::FnDef { | 31 | pub fn with_body(&self, body: ast::BlockExpr) -> ast::FnDef { |
32 | let mut to_insert: ArrayVec<[SyntaxElement; 2]> = ArrayVec::new(); | 32 | let mut to_insert: ArrayVec<[SyntaxElement; 2]> = ArrayVec::new(); |
33 | let old_body_or_semi: SyntaxElement = if let Some(old_body) = self.body() { | 33 | let old_body_or_semi: SyntaxElement = if let Some(old_body) = self.body() { |
34 | old_body.syntax().clone().into() | 34 | old_body.syntax().clone().into() |
diff --git a/crates/ra_syntax/src/ast/expr_extensions.rs b/crates/ra_syntax/src/ast/expr_extensions.rs index ecf74fd36..7ee36e60c 100644 --- a/crates/ra_syntax/src/ast/expr_extensions.rs +++ b/crates/ra_syntax/src/ast/expr_extensions.rs | |||
@@ -16,7 +16,7 @@ impl ast::Expr { | |||
16 | | ast::Expr::WhileExpr(_) | 16 | | ast::Expr::WhileExpr(_) |
17 | | ast::Expr::BlockExpr(_) | 17 | | ast::Expr::BlockExpr(_) |
18 | | ast::Expr::MatchExpr(_) | 18 | | ast::Expr::MatchExpr(_) |
19 | | ast::Expr::TryBlockExpr(_) => true, | 19 | | ast::Expr::EffectExpr(_) => true, |
20 | _ => false, | 20 | _ => false, |
21 | } | 21 | } |
22 | } | 22 | } |
@@ -359,6 +359,33 @@ impl ast::Literal { | |||
359 | } | 359 | } |
360 | } | 360 | } |
361 | 361 | ||
362 | #[derive(Debug, Clone, PartialEq, Eq)] | ||
363 | pub enum Effect { | ||
364 | Async(SyntaxToken), | ||
365 | Unsafe(SyntaxToken), | ||
366 | Try(SyntaxToken), | ||
367 | // Very much not an effect, but we stuff it into this node anyway | ||
368 | Label(ast::Label), | ||
369 | } | ||
370 | |||
371 | impl ast::EffectExpr { | ||
372 | pub fn effect(&self) -> Effect { | ||
373 | if let Some(token) = self.async_token() { | ||
374 | return Effect::Async(token); | ||
375 | } | ||
376 | if let Some(token) = self.unsafe_token() { | ||
377 | return Effect::Unsafe(token); | ||
378 | } | ||
379 | if let Some(token) = self.try_token() { | ||
380 | return Effect::Try(token); | ||
381 | } | ||
382 | if let Some(label) = self.label() { | ||
383 | return Effect::Label(label); | ||
384 | } | ||
385 | unreachable!("ast::EffectExpr without Effect") | ||
386 | } | ||
387 | } | ||
388 | |||
362 | impl ast::BlockExpr { | 389 | impl ast::BlockExpr { |
363 | /// false if the block is an intrinsic part of the syntax and can't be | 390 | /// false if the block is an intrinsic part of the syntax and can't be |
364 | /// replaced with arbitrary expression. | 391 | /// replaced with arbitrary expression. |
@@ -368,15 +395,12 @@ impl ast::BlockExpr { | |||
368 | /// const FOO: () = { stand_alone }; | 395 | /// const FOO: () = { stand_alone }; |
369 | /// ``` | 396 | /// ``` |
370 | pub fn is_standalone(&self) -> bool { | 397 | pub fn is_standalone(&self) -> bool { |
371 | if self.unsafe_token().is_some() || self.async_token().is_some() { | 398 | let parent = match self.syntax().parent() { |
372 | return false; | 399 | Some(it) => it, |
373 | } | ||
374 | let kind = match self.syntax().parent() { | ||
375 | None => return true, | 400 | None => return true, |
376 | Some(it) => it.kind(), | ||
377 | }; | 401 | }; |
378 | match kind { | 402 | match parent.kind() { |
379 | FN_DEF | IF_EXPR | WHILE_EXPR | LOOP_EXPR | TRY_BLOCK_EXPR => false, | 403 | FN_DEF | IF_EXPR | WHILE_EXPR | LOOP_EXPR | EFFECT_EXPR => false, |
380 | _ => true, | 404 | _ => true, |
381 | } | 405 | } |
382 | } | 406 | } |
diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index 2096f12f1..5e844d5ae 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs | |||
@@ -476,13 +476,16 @@ impl LoopExpr { | |||
476 | } | 476 | } |
477 | 477 | ||
478 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 478 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
479 | pub struct TryBlockExpr { | 479 | pub struct EffectExpr { |
480 | pub(crate) syntax: SyntaxNode, | 480 | pub(crate) syntax: SyntaxNode, |
481 | } | 481 | } |
482 | impl ast::AttrsOwner for TryBlockExpr {} | 482 | impl ast::AttrsOwner for EffectExpr {} |
483 | impl TryBlockExpr { | 483 | impl EffectExpr { |
484 | pub fn label(&self) -> Option<Label> { support::child(&self.syntax) } | ||
484 | pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) } | 485 | pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) } |
485 | pub fn body(&self) -> Option<BlockExpr> { support::child(&self.syntax) } | 486 | pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) } |
487 | pub fn async_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![async]) } | ||
488 | pub fn block_expr(&self) -> Option<BlockExpr> { support::child(&self.syntax) } | ||
486 | } | 489 | } |
487 | 490 | ||
488 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 491 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
@@ -551,11 +554,12 @@ pub struct BlockExpr { | |||
551 | pub(crate) syntax: SyntaxNode, | 554 | pub(crate) syntax: SyntaxNode, |
552 | } | 555 | } |
553 | impl ast::AttrsOwner for BlockExpr {} | 556 | impl ast::AttrsOwner for BlockExpr {} |
557 | impl ast::ModuleItemOwner for BlockExpr {} | ||
554 | impl BlockExpr { | 558 | impl BlockExpr { |
555 | pub fn label(&self) -> Option<Label> { support::child(&self.syntax) } | 559 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } |
556 | pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) } | 560 | pub fn statements(&self) -> AstChildren<Stmt> { support::children(&self.syntax) } |
557 | pub fn async_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![async]) } | 561 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } |
558 | pub fn block(&self) -> Option<Block> { support::child(&self.syntax) } | 562 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } |
559 | } | 563 | } |
560 | 564 | ||
561 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 565 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
@@ -627,8 +631,8 @@ pub struct TryExpr { | |||
627 | } | 631 | } |
628 | impl ast::AttrsOwner for TryExpr {} | 632 | impl ast::AttrsOwner for TryExpr {} |
629 | impl TryExpr { | 633 | impl TryExpr { |
630 | pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) } | ||
631 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | 634 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } |
635 | pub fn question_mark_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![?]) } | ||
632 | } | 636 | } |
633 | 637 | ||
634 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 638 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
@@ -1122,19 +1126,6 @@ impl Condition { | |||
1122 | } | 1126 | } |
1123 | 1127 | ||
1124 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 1128 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
1125 | pub struct Block { | ||
1126 | pub(crate) syntax: SyntaxNode, | ||
1127 | } | ||
1128 | impl ast::AttrsOwner for Block {} | ||
1129 | impl ast::ModuleItemOwner for Block {} | ||
1130 | impl Block { | ||
1131 | pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) } | ||
1132 | pub fn statements(&self) -> AstChildren<Stmt> { support::children(&self.syntax) } | ||
1133 | pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) } | ||
1134 | pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) } | ||
1135 | } | ||
1136 | |||
1137 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
1138 | pub struct ParamList { | 1129 | pub struct ParamList { |
1139 | pub(crate) syntax: SyntaxNode, | 1130 | pub(crate) syntax: SyntaxNode, |
1140 | } | 1131 | } |
@@ -1477,7 +1468,7 @@ pub enum Expr { | |||
1477 | FieldExpr(FieldExpr), | 1468 | FieldExpr(FieldExpr), |
1478 | AwaitExpr(AwaitExpr), | 1469 | AwaitExpr(AwaitExpr), |
1479 | TryExpr(TryExpr), | 1470 | TryExpr(TryExpr), |
1480 | TryBlockExpr(TryBlockExpr), | 1471 | EffectExpr(EffectExpr), |
1481 | CastExpr(CastExpr), | 1472 | CastExpr(CastExpr), |
1482 | RefExpr(RefExpr), | 1473 | RefExpr(RefExpr), |
1483 | PrefixExpr(PrefixExpr), | 1474 | PrefixExpr(PrefixExpr), |
@@ -1960,8 +1951,8 @@ impl AstNode for LoopExpr { | |||
1960 | } | 1951 | } |
1961 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 1952 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
1962 | } | 1953 | } |
1963 | impl AstNode for TryBlockExpr { | 1954 | impl AstNode for EffectExpr { |
1964 | fn can_cast(kind: SyntaxKind) -> bool { kind == TRY_BLOCK_EXPR } | 1955 | fn can_cast(kind: SyntaxKind) -> bool { kind == EFFECT_EXPR } |
1965 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 1956 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
1966 | if Self::can_cast(syntax.kind()) { | 1957 | if Self::can_cast(syntax.kind()) { |
1967 | Some(Self { syntax }) | 1958 | Some(Self { syntax }) |
@@ -2653,17 +2644,6 @@ impl AstNode for Condition { | |||
2653 | } | 2644 | } |
2654 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2645 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
2655 | } | 2646 | } |
2656 | impl AstNode for Block { | ||
2657 | fn can_cast(kind: SyntaxKind) -> bool { kind == BLOCK } | ||
2658 | fn cast(syntax: SyntaxNode) -> Option<Self> { | ||
2659 | if Self::can_cast(syntax.kind()) { | ||
2660 | Some(Self { syntax }) | ||
2661 | } else { | ||
2662 | None | ||
2663 | } | ||
2664 | } | ||
2665 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | ||
2666 | } | ||
2667 | impl AstNode for ParamList { | 2647 | impl AstNode for ParamList { |
2668 | fn can_cast(kind: SyntaxKind) -> bool { kind == PARAM_LIST } | 2648 | fn can_cast(kind: SyntaxKind) -> bool { kind == PARAM_LIST } |
2669 | fn cast(syntax: SyntaxNode) -> Option<Self> { | 2649 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
@@ -3312,8 +3292,8 @@ impl From<AwaitExpr> for Expr { | |||
3312 | impl From<TryExpr> for Expr { | 3292 | impl From<TryExpr> for Expr { |
3313 | fn from(node: TryExpr) -> Expr { Expr::TryExpr(node) } | 3293 | fn from(node: TryExpr) -> Expr { Expr::TryExpr(node) } |
3314 | } | 3294 | } |
3315 | impl From<TryBlockExpr> for Expr { | 3295 | impl From<EffectExpr> for Expr { |
3316 | fn from(node: TryBlockExpr) -> Expr { Expr::TryBlockExpr(node) } | 3296 | fn from(node: EffectExpr) -> Expr { Expr::EffectExpr(node) } |
3317 | } | 3297 | } |
3318 | impl From<CastExpr> for Expr { | 3298 | impl From<CastExpr> for Expr { |
3319 | fn from(node: CastExpr) -> Expr { Expr::CastExpr(node) } | 3299 | fn from(node: CastExpr) -> Expr { Expr::CastExpr(node) } |
@@ -3345,9 +3325,10 @@ impl AstNode for Expr { | |||
3345 | TUPLE_EXPR | ARRAY_EXPR | PAREN_EXPR | PATH_EXPR | LAMBDA_EXPR | IF_EXPR | 3325 | TUPLE_EXPR | ARRAY_EXPR | PAREN_EXPR | PATH_EXPR | LAMBDA_EXPR | IF_EXPR |
3346 | | LOOP_EXPR | FOR_EXPR | WHILE_EXPR | CONTINUE_EXPR | BREAK_EXPR | LABEL | 3326 | | LOOP_EXPR | FOR_EXPR | WHILE_EXPR | CONTINUE_EXPR | BREAK_EXPR | LABEL |
3347 | | BLOCK_EXPR | RETURN_EXPR | MATCH_EXPR | RECORD_LIT | CALL_EXPR | INDEX_EXPR | 3327 | | BLOCK_EXPR | RETURN_EXPR | MATCH_EXPR | RECORD_LIT | CALL_EXPR | INDEX_EXPR |
3348 | | METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | TRY_BLOCK_EXPR | 3328 | | METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | EFFECT_EXPR | CAST_EXPR |
3349 | | CAST_EXPR | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL | 3329 | | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL | BOX_EXPR => { |
3350 | | BOX_EXPR => true, | 3330 | true |
3331 | } | ||
3351 | _ => false, | 3332 | _ => false, |
3352 | } | 3333 | } |
3353 | } | 3334 | } |
@@ -3375,7 +3356,7 @@ impl AstNode for Expr { | |||
3375 | FIELD_EXPR => Expr::FieldExpr(FieldExpr { syntax }), | 3356 | FIELD_EXPR => Expr::FieldExpr(FieldExpr { syntax }), |
3376 | AWAIT_EXPR => Expr::AwaitExpr(AwaitExpr { syntax }), | 3357 | AWAIT_EXPR => Expr::AwaitExpr(AwaitExpr { syntax }), |
3377 | TRY_EXPR => Expr::TryExpr(TryExpr { syntax }), | 3358 | TRY_EXPR => Expr::TryExpr(TryExpr { syntax }), |
3378 | TRY_BLOCK_EXPR => Expr::TryBlockExpr(TryBlockExpr { syntax }), | 3359 | EFFECT_EXPR => Expr::EffectExpr(EffectExpr { syntax }), |
3379 | CAST_EXPR => Expr::CastExpr(CastExpr { syntax }), | 3360 | CAST_EXPR => Expr::CastExpr(CastExpr { syntax }), |
3380 | REF_EXPR => Expr::RefExpr(RefExpr { syntax }), | 3361 | REF_EXPR => Expr::RefExpr(RefExpr { syntax }), |
3381 | PREFIX_EXPR => Expr::PrefixExpr(PrefixExpr { syntax }), | 3362 | PREFIX_EXPR => Expr::PrefixExpr(PrefixExpr { syntax }), |
@@ -3412,7 +3393,7 @@ impl AstNode for Expr { | |||
3412 | Expr::FieldExpr(it) => &it.syntax, | 3393 | Expr::FieldExpr(it) => &it.syntax, |
3413 | Expr::AwaitExpr(it) => &it.syntax, | 3394 | Expr::AwaitExpr(it) => &it.syntax, |
3414 | Expr::TryExpr(it) => &it.syntax, | 3395 | Expr::TryExpr(it) => &it.syntax, |
3415 | Expr::TryBlockExpr(it) => &it.syntax, | 3396 | Expr::EffectExpr(it) => &it.syntax, |
3416 | Expr::CastExpr(it) => &it.syntax, | 3397 | Expr::CastExpr(it) => &it.syntax, |
3417 | Expr::RefExpr(it) => &it.syntax, | 3398 | Expr::RefExpr(it) => &it.syntax, |
3418 | Expr::PrefixExpr(it) => &it.syntax, | 3399 | Expr::PrefixExpr(it) => &it.syntax, |
@@ -3893,7 +3874,7 @@ impl std::fmt::Display for LoopExpr { | |||
3893 | std::fmt::Display::fmt(self.syntax(), f) | 3874 | std::fmt::Display::fmt(self.syntax(), f) |
3894 | } | 3875 | } |
3895 | } | 3876 | } |
3896 | impl std::fmt::Display for TryBlockExpr { | 3877 | impl std::fmt::Display for EffectExpr { |
3897 | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { | 3878 | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { |
3898 | std::fmt::Display::fmt(self.syntax(), f) | 3879 | std::fmt::Display::fmt(self.syntax(), f) |
3899 | } | 3880 | } |
@@ -4208,11 +4189,6 @@ impl std::fmt::Display for Condition { | |||
4208 | std::fmt::Display::fmt(self.syntax(), f) | 4189 | std::fmt::Display::fmt(self.syntax(), f) |
4209 | } | 4190 | } |
4210 | } | 4191 | } |
4211 | impl std::fmt::Display for Block { | ||
4212 | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { | ||
4213 | std::fmt::Display::fmt(self.syntax(), f) | ||
4214 | } | ||
4215 | } | ||
4216 | impl std::fmt::Display for ParamList { | 4192 | impl std::fmt::Display for ParamList { |
4217 | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { | 4193 | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { |
4218 | std::fmt::Display::fmt(self.syntax(), f) | 4194 | std::fmt::Display::fmt(self.syntax(), f) |
diff --git a/crates/ra_syntax/src/ast/make.rs b/crates/ra_syntax/src/ast/make.rs index 492088353..7b17fef49 100644 --- a/crates/ra_syntax/src/ast/make.rs +++ b/crates/ra_syntax/src/ast/make.rs | |||
@@ -82,14 +82,6 @@ pub fn block_expr( | |||
82 | ast_from_text(&format!("fn f() {}", buf)) | 82 | ast_from_text(&format!("fn f() {}", buf)) |
83 | } | 83 | } |
84 | 84 | ||
85 | pub fn block_from_expr(e: ast::Expr) -> ast::Block { | ||
86 | return from_text(&format!("{{ {} }}", e)); | ||
87 | |||
88 | fn from_text(text: &str) -> ast::Block { | ||
89 | ast_from_text(&format!("fn f() {}", text)) | ||
90 | } | ||
91 | } | ||
92 | |||
93 | pub fn expr_unit() -> ast::Expr { | 85 | pub fn expr_unit() -> ast::Expr { |
94 | expr_from_text("()") | 86 | expr_from_text("()") |
95 | } | 87 | } |
diff --git a/crates/ra_syntax/src/lib.rs b/crates/ra_syntax/src/lib.rs index ceeb2bde9..d0234cada 100644 --- a/crates/ra_syntax/src/lib.rs +++ b/crates/ra_syntax/src/lib.rs | |||
@@ -237,8 +237,7 @@ fn api_walkthrough() { | |||
237 | 237 | ||
238 | // Let's get the `1 + 1` expression! | 238 | // Let's get the `1 + 1` expression! |
239 | let body: ast::BlockExpr = func.body().unwrap(); | 239 | let body: ast::BlockExpr = func.body().unwrap(); |
240 | let block = body.block().unwrap(); | 240 | let expr: ast::Expr = body.expr().unwrap(); |
241 | let expr: ast::Expr = block.expr().unwrap(); | ||
242 | 241 | ||
243 | // Enums are used to group related ast nodes together, and can be used for | 242 | // Enums are used to group related ast nodes together, and can be used for |
244 | // matching. However, because there are no public fields, it's possible to | 243 | // matching. However, because there are no public fields, it's possible to |
@@ -274,8 +273,8 @@ fn api_walkthrough() { | |||
274 | assert_eq!(text.to_string(), "1 + 1"); | 273 | assert_eq!(text.to_string(), "1 + 1"); |
275 | 274 | ||
276 | // There's a bunch of traversal methods on `SyntaxNode`: | 275 | // There's a bunch of traversal methods on `SyntaxNode`: |
277 | assert_eq!(expr_syntax.parent().as_ref(), Some(block.syntax())); | 276 | assert_eq!(expr_syntax.parent().as_ref(), Some(body.syntax())); |
278 | assert_eq!(block.syntax().first_child_or_token().map(|it| it.kind()), Some(T!['{'])); | 277 | assert_eq!(body.syntax().first_child_or_token().map(|it| it.kind()), Some(T!['{'])); |
279 | assert_eq!( | 278 | assert_eq!( |
280 | expr_syntax.next_sibling_or_token().map(|it| it.kind()), | 279 | expr_syntax.next_sibling_or_token().map(|it| it.kind()), |
281 | Some(SyntaxKind::WHITESPACE) | 280 | Some(SyntaxKind::WHITESPACE) |
diff --git a/crates/ra_syntax/src/validation/block.rs b/crates/ra_syntax/src/validation/block.rs index 8e962ab5b..2c08f7e6e 100644 --- a/crates/ra_syntax/src/validation/block.rs +++ b/crates/ra_syntax/src/validation/block.rs | |||
@@ -6,19 +6,17 @@ use crate::{ | |||
6 | SyntaxKind::*, | 6 | SyntaxKind::*, |
7 | }; | 7 | }; |
8 | 8 | ||
9 | pub(crate) fn validate_block_expr(expr: ast::BlockExpr, errors: &mut Vec<SyntaxError>) { | 9 | pub(crate) fn validate_block_expr(block: ast::BlockExpr, errors: &mut Vec<SyntaxError>) { |
10 | if let Some(parent) = expr.syntax().parent() { | 10 | if let Some(parent) = block.syntax().parent() { |
11 | match parent.kind() { | 11 | match parent.kind() { |
12 | FN_DEF | EXPR_STMT | BLOCK => return, | 12 | FN_DEF | EXPR_STMT | BLOCK_EXPR => return, |
13 | _ => {} | 13 | _ => {} |
14 | } | 14 | } |
15 | } | 15 | } |
16 | if let Some(block) = expr.block() { | 16 | errors.extend(block.attrs().map(|attr| { |
17 | errors.extend(block.attrs().map(|attr| { | 17 | SyntaxError::new( |
18 | SyntaxError::new( | 18 | "A block in this position cannot accept inner attributes", |
19 | "A block in this position cannot accept inner attributes", | 19 | attr.syntax().text_range(), |
20 | attr.syntax().text_range(), | 20 | ) |
21 | ) | 21 | })) |
22 | })) | ||
23 | } | ||
24 | } | 22 | } |
diff --git a/crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast b/crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast index 95cc83caa..375ed45e0 100644 --- a/crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast +++ b/crates/ra_syntax/test_data/parser/err/0005_attribute_recover.rast | |||
@@ -28,10 +28,9 @@ [email protected] | |||
28 | [email protected] ")" | 28 | [email protected] ")" |
29 | [email protected] " " | 29 | [email protected] " " |
30 | [email protected] | 30 | [email protected] |
31 | [email protected] | 31 | [email protected] "{" |
32 | [email protected] "{" | 32 | [email protected] "\n" |
33 | [email protected] "\n" | 33 | [email protected] "}" |
34 | [email protected] "}" | ||
35 | [email protected] "\n\n\n" | 34 | [email protected] "\n\n\n" |
36 | [email protected] | 35 | [email protected] |
37 | [email protected] "#" | 36 | [email protected] "#" |
diff --git a/crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast b/crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast index dc3e12091..b72c92c33 100644 --- a/crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast +++ b/crates/ra_syntax/test_data/parser/err/0007_stray_curly_in_file.rast | |||
@@ -21,9 +21,8 @@ [email protected] | |||
21 | [email protected] "(" | 21 | [email protected] "(" |
22 | [email protected] ")" | 22 | [email protected] ")" |
23 | [email protected] | 23 | [email protected] |
24 | [email protected] | 24 | [email protected] "{" |
25 | [email protected] "{" | 25 | [email protected] "}" |
26 | [email protected] "}" | ||
27 | [email protected] "\n\n" | 26 | [email protected] "\n\n" |
28 | [email protected] | 27 | [email protected] |
29 | [email protected] "}" | 28 | [email protected] "}" |
diff --git a/crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast b/crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast index 97539fcf2..33953d8d7 100644 --- a/crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast +++ b/crates/ra_syntax/test_data/parser/err/0008_item_block_recovery.rast | |||
@@ -9,10 +9,9 @@ [email protected] | |||
9 | [email protected] ")" | 9 | [email protected] ")" |
10 | [email protected] " " | 10 | [email protected] " " |
11 | [email protected] | 11 | [email protected] |
12 | [email protected] | 12 | [email protected] "{" |
13 | [email protected] "{" | 13 | [email protected] "\n" |
14 | [email protected] "\n" | 14 | [email protected] "}" |
15 | [email protected] "}" | ||
16 | [email protected] "\n\n" | 15 | [email protected] "\n\n" |
17 | [email protected] | 16 | [email protected] |
18 | [email protected] | 17 | [email protected] |
@@ -34,30 +33,28 @@ [email protected] | |||
34 | [email protected] "true" | 33 | [email protected] "true" |
35 | [email protected] " " | 34 | [email protected] " " |
36 | [email protected] | 35 | [email protected] |
37 | [email protected] | 36 | [email protected] "{" |
38 | [email protected] "{" | 37 | [email protected] "\n " |
39 | [email protected] "\n " | 38 | [email protected] |
40 | [email protected] | 39 | [email protected] "1" |
41 | [email protected] "1" | 40 | [email protected] "\n " |
42 | [email protected] "\n " | 41 | [email protected] "}" |
43 | [email protected] "}" | ||
44 | [email protected] " " | 42 | [email protected] " " |
45 | [email protected] "else" | 43 | [email protected] "else" |
46 | [email protected] " " | 44 | [email protected] " " |
47 | [email protected] | 45 | [email protected] |
48 | [email protected] | 46 | [email protected] "{" |
49 | [email protected] "{" | 47 | [email protected] "\n " |
50 | [email protected] "\n " | 48 | [email protected] |
51 | [email protected] | 49 | [email protected] |
52 | [email protected] | 50 | [email protected] "2" |
53 | [email protected] "2" | 51 | [email protected] " " |
54 | [email protected] " " | 52 | [email protected] "+" |
55 | [email protected] "+" | 53 | [email protected] " " |
56 | [email protected] " " | 54 | [email protected] |
57 | [email protected] | 55 | [email protected] "3" |
58 | [email protected] "3" | 56 | [email protected] "\n " |
59 | [email protected] "\n " | 57 | [email protected] "}" |
60 | [email protected] "}" | ||
61 | [email protected] "\n" | 58 | [email protected] "\n" |
62 | [email protected] "}" | 59 | [email protected] "}" |
63 | [email protected] "\n\n" | 60 | [email protected] "\n\n" |
@@ -71,10 +68,9 @@ [email protected] | |||
71 | [email protected] ")" | 68 | [email protected] ")" |
72 | [email protected] " " | 69 | [email protected] " " |
73 | [email protected] | 70 | [email protected] |
74 | [email protected] | 71 | [email protected] "{" |
75 | [email protected] "{" | 72 | [email protected] "\n" |
76 | [email protected] "\n" | 73 | [email protected] "}" |
77 | [email protected] "}" | ||
78 | [email protected] "\n" | 74 | [email protected] "\n" |
79 | error 17..17: expected BANG | 75 | error 17..17: expected BANG |
80 | error 19..19: expected SEMICOLON | 76 | error 19..19: expected SEMICOLON |
diff --git a/crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast b/crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast index e10bb8174..06a326d26 100644 --- a/crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast +++ b/crates/ra_syntax/test_data/parser/err/0010_unsafe_lambda_block.rast | |||
@@ -9,37 +9,36 @@ [email protected] | |||
9 | [email protected] ")" | 9 | [email protected] ")" |
10 | [email protected] " " | 10 | [email protected] " " |
11 | [email protected] | 11 | [email protected] |
12 | [email protected] | 12 | [email protected] "{" |
13 | [email protected] "{" | 13 | [email protected] "\n " |
14 | [email protected] "\n " | 14 | [email protected] |
15 | [email protected] | 15 | [email protected] |
16 | [email protected] | 16 | [email protected] |
17 | [email protected] | 17 | [email protected] "|" |
18 | [email protected] "|" | 18 | [email protected] "|" |
19 | [email protected] "|" | 19 | [email protected] " " |
20 | [email protected] " " | 20 | [email protected] |
21 | [email protected] | 21 | [email protected] "->" |
22 | [email protected] "->" | 22 | [email protected] " " |
23 | [email protected] " " | 23 | [email protected] |
24 | [email protected] | 24 | [email protected] "(" |
25 | [email protected] "(" | 25 | [email protected] ")" |
26 | [email protected] ")" | 26 | [email protected] " " |
27 | [email protected] " " | 27 | [email protected] |
28 | [email protected] | 28 | [email protected] |
29 | [email protected] | 29 | [email protected] "unsafe" |
30 | [email protected] "unsafe" | 30 | [email protected] " " |
31 | [email protected] " " | 31 | [email protected] |
32 | [email protected] | 32 | [email protected] "{" |
33 | [email protected] "{" | 33 | [email protected] " " |
34 | [email protected] " " | 34 | [email protected] |
35 | [email protected] | 35 | [email protected] "(" |
36 | [email protected] "(" | 36 | [email protected] ")" |
37 | [email protected] ")" | 37 | [email protected] " " |
38 | [email protected] " " | 38 | [email protected] "}" |
39 | [email protected] "}" | 39 | [email protected] ";" |
40 | [email protected] ";" | 40 | [email protected] "\n" |
41 | [email protected] "\n" | 41 | [email protected] "}" |
42 | [email protected] "}" | ||
43 | [email protected] "\n" | 42 | [email protected] "\n" |
44 | error 24..24: expected `{` | 43 | error 24..24: expected `{` |
45 | error 24..24: expected SEMICOLON | 44 | error 24..24: expected SEMICOLON |
diff --git a/crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast b/crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast index 61c361833..9323b7890 100644 --- a/crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast +++ b/crates/ra_syntax/test_data/parser/err/0014_where_no_bounds.rast | |||
@@ -25,8 +25,7 @@ [email protected] | |||
25 | [email protected] "T" | 25 | [email protected] "T" |
26 | [email protected] " " | 26 | [email protected] " " |
27 | [email protected] | 27 | [email protected] |
28 | [email protected] | 28 | [email protected] "{" |
29 | [email protected] "{" | 29 | [email protected] "}" |
30 | [email protected] "}" | ||
31 | [email protected] "\n" | 30 | [email protected] "\n" |
32 | error 19..19: expected colon | 31 | error 19..19: expected colon |
diff --git a/crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast b/crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast index 92bb47316..93434f34f 100644 --- a/crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast +++ b/crates/ra_syntax/test_data/parser/err/0016_missing_semi.rast | |||
@@ -9,36 +9,35 @@ [email protected] | |||
9 | [email protected] ")" | 9 | [email protected] ")" |
10 | [email protected] " " | 10 | [email protected] " " |
11 | [email protected] | 11 | [email protected] |
12 | [email protected] | 12 | [email protected] "{" |
13 | [email protected] "{" | 13 | [email protected] "\n " |
14 | [email protected] "\n " | 14 | [email protected] |
15 | [email protected] | 15 | [email protected] |
16 | [email protected] | 16 | [email protected] |
17 | [email protected] | 17 | [email protected] |
18 | [email protected] | 18 | [email protected] |
19 | [email protected] | 19 | [email protected] |
20 | [email protected] | 20 | [email protected] "foo" |
21 | [email protected] "foo" | 21 | [email protected] |
22 | [email protected] | 22 | [email protected] "(" |
23 | [email protected] "(" | 23 | [email protected] "\n " |
24 | [email protected] "\n " | 24 | [email protected] |
25 | [email protected] | 25 | [email protected] "1" |
26 | [email protected] "1" | 26 | [email protected] "," |
27 | [email protected] "," | 27 | [email protected] " " |
28 | [email protected] " " | 28 | [email protected] |
29 | [email protected] | 29 | [email protected] "2" |
30 | [email protected] "2" | 30 | [email protected] "\n " |
31 | [email protected] "\n " | 31 | [email protected] ")" |
32 | [email protected] ")" | 32 | [email protected] "\n " |
33 | [email protected] "\n " | 33 | [email protected] |
34 | [email protected] | 34 | [email protected] |
35 | [email protected] | 35 | [email protected] "return" |
36 | [email protected] "return" | 36 | [email protected] " " |
37 | [email protected] " " | 37 | [email protected] |
38 | [email protected] | 38 | [email protected] "92" |
39 | [email protected] "92" | 39 | [email protected] ";" |
40 | [email protected] ";" | 40 | [email protected] "\n" |
41 | [email protected] "\n" | 41 | [email protected] "}" |
42 | [email protected] "}" | ||
43 | [email protected] "\n" | 42 | [email protected] "\n" |
44 | error 38..38: expected SEMICOLON | 43 | error 38..38: expected SEMICOLON |
diff --git a/crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast b/crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast index 7bc718302..628315c78 100644 --- a/crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast +++ b/crates/ra_syntax/test_data/parser/err/0017_incomplete_binexpr.rast | |||
@@ -20,28 +20,27 @@ [email protected] | |||
20 | [email protected] ")" | 20 | [email protected] ")" |
21 | [email protected] " " | 21 | [email protected] " " |
22 | [email protected] | 22 | [email protected] |
23 | [email protected] | 23 | [email protected] "{" |
24 | [email protected] "{" | 24 | [email protected] "\n " |
25 | [email protected] "\n " | 25 | [email protected] |
26 | [email protected] | 26 | [email protected] "let" |
27 | [email protected] "let" | 27 | [email protected] " " |
28 | [email protected] " " | 28 | [email protected] |
29 | [email protected] | 29 | [email protected] |
30 | [email protected] | 30 | [email protected] "bar" |
31 | [email protected] "bar" | 31 | [email protected] " " |
32 | [email protected] " " | 32 | [email protected] "=" |
33 | [email protected] "=" | 33 | [email protected] " " |
34 | [email protected] " " | 34 | [email protected] |
35 | [email protected] | 35 | [email protected] "92" |
36 | [email protected] "92" | 36 | [email protected] ";" |
37 | [email protected] ";" | 37 | [email protected] "\n " |
38 | [email protected] "\n " | 38 | [email protected] |
39 | [email protected] | 39 | [email protected] |
40 | [email protected] | 40 | [email protected] "1" |
41 | [email protected] "1" | 41 | [email protected] " " |
42 | [email protected] " " | 42 | [email protected] "+" |
43 | [email protected] "+" | 43 | [email protected] "\n" |
44 | [email protected] "\n" | 44 | [email protected] "}" |
45 | [email protected] "}" | ||
46 | [email protected] "\n" | 45 | [email protected] "\n" |
47 | error 44..44: expected expression | 46 | error 44..44: expected expression |
diff --git a/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast b/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast index 63194f974..31cc4e551 100644 --- a/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast +++ b/crates/ra_syntax/test_data/parser/err/0018_incomplete_fn.rast | |||
@@ -33,89 +33,88 @@ [email protected] | |||
33 | [email protected] "ScopeId" | 33 | [email protected] "ScopeId" |
34 | [email protected] " " | 34 | [email protected] " " |
35 | [email protected] | 35 | [email protected] |
36 | [email protected] | 36 | [email protected] "{" |
37 | [email protected] "{" | 37 | [email protected] "\n " |
38 | [email protected] "\n " | 38 | [email protected] |
39 | [email protected] | 39 | [email protected] "let" |
40 | [email protected] "let" | 40 | [email protected] " " |
41 | [email protected] " " | 41 | [email protected] |
42 | [email protected] | 42 | [email protected] |
43 | [email protected] | 43 | [email protected] "res" |
44 | [email protected] "res" | 44 | [email protected] " " |
45 | [email protected] " " | 45 | [email protected] "=" |
46 | [email protected] "=" | 46 | [email protected] " " |
47 | [email protected] " " | 47 | [email protected] |
48 | [email protected] | 48 | [email protected] |
49 | [email protected] | 49 | [email protected] |
50 | [email protected] | 50 | [email protected] |
51 | [email protected] | 51 | [email protected] |
52 | [email protected] | 52 | [email protected] "self" |
53 | [email protected] "self" | 53 | [email protected] "." |
54 | [email protected] "." | 54 | [email protected] |
55 | [email protected] | 55 | [email protected] "scopes" |
56 | [email protected] "scopes" | 56 | [email protected] "." |
57 | [email protected] "." | 57 | [email protected] |
58 | [email protected] | 58 | [email protected] "len" |
59 | [email protected] "len" | 59 | [email protected] |
60 | [email protected] | 60 | [email protected] "(" |
61 | [email protected] "(" | 61 | [email protected] ")" |
62 | [email protected] ")" | 62 | [email protected] ";" |
63 | [email protected] ";" | 63 | [email protected] "\n " |
64 | [email protected] "\n " | 64 | [email protected] |
65 | [email protected] | 65 | [email protected] |
66 | [email protected] | 66 | [email protected] |
67 | [email protected] | 67 | [email protected] |
68 | [email protected] | 68 | [email protected] |
69 | [email protected] | 69 | [email protected] "self" |
70 | [email protected] "self" | 70 | [email protected] "." |
71 | [email protected] "." | 71 | [email protected] |
72 | [email protected] | 72 | [email protected] "scopes" |
73 | [email protected] "scopes" | 73 | [email protected] "." |
74 | [email protected] "." | 74 | [email protected] |
75 | [email protected] | 75 | [email protected] "push" |
76 | [email protected] "push" | 76 | [email protected] |
77 | [email protected] | 77 | [email protected] "(" |
78 | [email protected] "(" | 78 | [email protected] |
79 | [email protected] | 79 | [email protected] |
80 | [email protected] | 80 | [email protected] |
81 | [email protected] | 81 | [email protected] |
82 | [email protected] | 82 | [email protected] "ScopeData" |
83 | [email protected] "ScopeData" | 83 | [email protected] " " |
84 | [email protected] " " | 84 | [email protected] |
85 | [email protected] | 85 | [email protected] "{" |
86 | [email protected] "{" | 86 | [email protected] " " |
87 | [email protected] " " | 87 | [email protected] |
88 | [email protected] | 88 | [email protected] |
89 | [email protected] | 89 | [email protected] "parent" |
90 | [email protected] "parent" | 90 | [email protected] ":" |
91 | [email protected] ":" | 91 | [email protected] " " |
92 | [email protected] " " | 92 | [email protected] |
93 | [email protected] | 93 | [email protected] |
94 | [email protected] | 94 | [email protected] |
95 | [email protected] | 95 | [email protected] |
96 | [email protected] | 96 | [email protected] "None" |
97 | [email protected] "None" | 97 | [email protected] "," |
98 | [email protected] "," | 98 | [email protected] " " |
99 | [email protected] " " | 99 | [email protected] |
100 | [email protected] | 100 | [email protected] |
101 | [email protected] | 101 | [email protected] "entries" |
102 | [email protected] "entries" | 102 | [email protected] ":" |
103 | [email protected] ":" | 103 | [email protected] " " |
104 | [email protected] " " | 104 | [email protected] |
105 | [email protected] | 105 | [email protected] |
106 | [email protected] | 106 | [email protected] |
107 | [email protected] | 107 | [email protected] |
108 | [email protected] | 108 | [email protected] "vec" |
109 | [email protected] "vec" | 109 | [email protected] "!" |
110 | [email protected] "!" | 110 | [email protected] |
111 | [email protected] | 111 | [email protected] "[" |
112 | [email protected] "[" | 112 | [email protected] "]" |
113 | [email protected] "]" | 113 | [email protected] " " |
114 | [email protected] " " | 114 | [email protected] "}" |
115 | [email protected] "}" | 115 | [email protected] ")" |
116 | [email protected] ")" | 116 | [email protected] "\n " |
117 | [email protected] "\n " | 117 | [email protected] "}" |
118 | [email protected] "}" | ||
119 | [email protected] "\n\n " | 118 | [email protected] "\n\n " |
120 | [email protected] | 119 | [email protected] |
121 | [email protected] "fn" | 120 | [email protected] "fn" |
diff --git a/crates/ra_syntax/test_data/parser/err/0019_let_recover.rast b/crates/ra_syntax/test_data/parser/err/0019_let_recover.rast index d20bb60f1..4ff27f5c8 100644 --- a/crates/ra_syntax/test_data/parser/err/0019_let_recover.rast +++ b/crates/ra_syntax/test_data/parser/err/0019_let_recover.rast | |||
@@ -9,91 +9,87 @@ [email protected] | |||
9 | [email protected] ")" | 9 | [email protected] ")" |
10 | [email protected] " " | 10 | [email protected] " " |
11 | [email protected] | 11 | [email protected] |
12 | [email protected] | 12 | [email protected] "{" |
13 | [email protected] "{" | 13 | [email protected] "\n " |
14 | [email protected] "\n " | 14 | [email protected] |
15 | [email protected] | 15 | [email protected] "let" |
16 | [email protected] "let" | 16 | [email protected] " " |
17 | [email protected] " " | 17 | [email protected] |
18 | [email protected] | 18 | [email protected] |
19 | [email protected] | 19 | [email protected] "foo" |
20 | [email protected] "foo" | 20 | [email protected] " " |
21 | [email protected] " " | 21 | [email protected] "=" |
22 | [email protected] "=" | 22 | [email protected] "\n " |
23 | [email protected] "\n " | 23 | [email protected] |
24 | [email protected] | 24 | [email protected] "let" |
25 | [email protected] "let" | 25 | [email protected] " " |
26 | [email protected] " " | 26 | [email protected] |
27 | [email protected] | 27 | [email protected] |
28 | [email protected] | 28 | [email protected] "bar" |
29 | [email protected] "bar" | 29 | [email protected] " " |
30 | [email protected] " " | 30 | [email protected] "=" |
31 | [email protected] "=" | 31 | [email protected] " " |
32 | [email protected] " " | 32 | [email protected] |
33 | [email protected] | 33 | [email protected] "1" |
34 | [email protected] "1" | 34 | [email protected] ";" |
35 | [email protected] ";" | 35 | [email protected] "\n " |
36 | [email protected] "\n " | 36 | [email protected] |
37 | [email protected] | 37 | [email protected] "let" |
38 | [email protected] "let" | 38 | [email protected] "\n " |
39 | [email protected] "\n " | 39 | [email protected] |
40 | [email protected] | 40 | [email protected] "let" |
41 | [email protected] "let" | 41 | [email protected] " " |
42 | [email protected] " " | 42 | [email protected] |
43 | [email protected] | 43 | [email protected] |
44 | [email protected] | 44 | [email protected] "baz" |
45 | [email protected] "baz" | 45 | [email protected] " " |
46 | [email protected] " " | 46 | [email protected] "=" |
47 | [email protected] "=" | 47 | [email protected] " " |
48 | [email protected] " " | 48 | [email protected] |
49 | [email protected] | 49 | [email protected] "92" |
50 | [email protected] "92" | 50 | [email protected] ";" |
51 | [email protected] ";" | 51 | [email protected] "\n " |
52 | [email protected] "\n " | 52 | [email protected] |
53 | [email protected] | 53 | [email protected] "let" |
54 | [email protected] "let" | 54 | [email protected] "\n " |
55 | [email protected] "\n " | 55 | [email protected] |
56 | [email protected] | 56 | [email protected] |
57 | [email protected] | 57 | [email protected] "if" |
58 | [email protected] "if" | 58 | [email protected] " " |
59 | [email protected] " " | 59 | [email protected] |
60 | [email protected] | 60 | [email protected] |
61 | [email protected] | 61 | [email protected] "true" |
62 | [email protected] "true" | 62 | [email protected] " " |
63 | [email protected] " " | 63 | [email protected] |
64 | [email protected] | 64 | [email protected] "{" |
65 | [email protected] | 65 | [email protected] "}" |
66 | [email protected] "{" | 66 | [email protected] "\n " |
67 | [email protected] "}" | 67 | [email protected] |
68 | [email protected] "\n " | 68 | [email protected] "let" |
69 | [email protected] | 69 | [email protected] "\n " |
70 | [email protected] "let" | 70 | [email protected] |
71 | [email protected] "\n " | 71 | [email protected] |
72 | [email protected] | 72 | [email protected] "while" |
73 | [email protected] | 73 | [email protected] " " |
74 | [email protected] "while" | 74 | [email protected] |
75 | [email protected] " " | 75 | [email protected] |
76 | [email protected] | 76 | [email protected] "true" |
77 | [email protected] | 77 | [email protected] " " |
78 | [email protected] "true" | 78 | [email protected] |
79 | [email protected] " " | 79 | [email protected] "{" |
80 | [email protected] | 80 | [email protected] "}" |
81 | [email protected] | 81 | [email protected] "\n " |
82 | [email protected] "{" | 82 | [email protected] |
83 | [email protected] "}" | 83 | [email protected] "let" |
84 | [email protected] "\n " | 84 | [email protected] "\n " |
85 | [email protected] | 85 | [email protected] |
86 | [email protected] "let" | 86 | [email protected] "loop" |
87 | [email protected] "\n " | 87 | [email protected] " " |
88 | [email protected] | 88 | [email protected] |
89 | [email protected] "loop" | 89 | [email protected] "{" |
90 | [email protected] " " | 90 | [email protected] "}" |
91 | [email protected] | 91 | [email protected] "\n" |
92 | [email protected] | 92 | [email protected] "}" |
93 | [email protected] "{" | ||
94 | [email protected] "}" | ||
95 | [email protected] "\n" | ||
96 | [email protected] "}" | ||
97 | [email protected] "\n" | 93 | [email protected] "\n" |
98 | error 24..24: expected expression | 94 | error 24..24: expected expression |
99 | error 24..24: expected SEMICOLON | 95 | error 24..24: expected SEMICOLON |
diff --git a/crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast b/crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast index 1185f44f9..5f3a31473 100644 --- a/crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast +++ b/crates/ra_syntax/test_data/parser/err/0020_fn_recover.rast | |||
@@ -12,9 +12,8 @@ [email protected] | |||
12 | [email protected] ")" | 12 | [email protected] ")" |
13 | [email protected] " " | 13 | [email protected] " " |
14 | [email protected] | 14 | [email protected] |
15 | [email protected] | 15 | [email protected] "{" |
16 | [email protected] "{" | 16 | [email protected] "}" |
17 | [email protected] "}" | ||
18 | [email protected] "\n" | 17 | [email protected] "\n" |
19 | error 2..2: expected a name | 18 | error 2..2: expected a name |
20 | error 2..2: expected function arguments | 19 | error 2..2: expected function arguments |
diff --git a/crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast b/crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast index c7bf4caa0..1746bd3c1 100644 --- a/crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast +++ b/crates/ra_syntax/test_data/parser/err/0021_incomplete_param.rast | |||
@@ -26,10 +26,9 @@ [email protected] | |||
26 | [email protected] ")" | 26 | [email protected] ")" |
27 | [email protected] " " | 27 | [email protected] " " |
28 | [email protected] | 28 | [email protected] |
29 | [email protected] | 29 | [email protected] "{" |
30 | [email protected] "{" | 30 | [email protected] "\n" |
31 | [email protected] "\n" | 31 | [email protected] "}" |
32 | [email protected] "}" | ||
33 | [email protected] "\n" | 32 | [email protected] "\n" |
34 | error 16..16: expected COLON | 33 | error 16..16: expected COLON |
35 | error 16..16: expected type | 34 | error 16..16: expected type |
diff --git a/crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast b/crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast index cc0d75cc8..28146f44e 100644 --- a/crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast +++ b/crates/ra_syntax/test_data/parser/err/0022_bad_exprs.rast | |||
@@ -9,37 +9,36 @@ [email protected] | |||
9 | [email protected] ")" | 9 | [email protected] ")" |
10 | [email protected] " " | 10 | [email protected] " " |
11 | [email protected] | 11 | [email protected] |
12 | [email protected] | 12 | [email protected] "{" |
13 | [email protected] "{" | 13 | [email protected] " " |
14 | [email protected] " " | 14 | [email protected] |
15 | [email protected] | 15 | [email protected] |
16 | [email protected] | 16 | [email protected] "[" |
17 | [email protected] "[" | 17 | [email protected] |
18 | [email protected] | 18 | [email protected] "1" |
19 | [email protected] "1" | 19 | [email protected] "," |
20 | [email protected] "," | 20 | [email protected] " " |
21 | [email protected] " " | 21 | [email protected] |
22 | [email protected] | 22 | [email protected] "2" |
23 | [email protected] "2" | 23 | [email protected] "," |
24 | [email protected] "," | 24 | [email protected] " " |
25 | [email protected] " " | 25 | [email protected] |
26 | [email protected] | 26 | [email protected] "@" |
27 | [email protected] "@" | 27 | [email protected] |
28 | [email protected] | 28 | [email protected] |
29 | [email protected] | 29 | [email protected] "," |
30 | [email protected] "," | 30 | [email protected] " " |
31 | [email protected] " " | 31 | [email protected] |
32 | [email protected] | 32 | [email protected] "struct" |
33 | [email protected] "struct" | 33 | [email protected] |
34 | [email protected] | 34 | [email protected] "," |
35 | [email protected] "," | 35 | [email protected] " " |
36 | [email protected] " " | 36 | [email protected] |
37 | [email protected] | 37 | [email protected] "let" |
38 | [email protected] "let" | 38 | [email protected] |
39 | [email protected] | 39 | [email protected] "]" |
40 | [email protected] "]" | 40 | [email protected] " " |
41 | [email protected] " " | 41 | [email protected] "}" |
42 | [email protected] "}" | ||
43 | [email protected] "\n" | 42 | [email protected] "\n" |
44 | [email protected] | 43 | [email protected] |
45 | [email protected] "fn" | 44 | [email protected] "fn" |
@@ -51,44 +50,43 @@ [email protected] | |||
51 | [email protected] ")" | 50 | [email protected] ")" |
52 | [email protected] " " | 51 | [email protected] " " |
53 | [email protected] | 52 | [email protected] |
54 | [email protected] | 53 | [email protected] "{" |
55 | [email protected] "{" | 54 | [email protected] " " |
56 | [email protected] " " | 55 | [email protected] |
57 | [email protected] | 56 | [email protected] |
58 | [email protected] | 57 | [email protected] |
59 | [email protected] | 58 | [email protected] |
60 | [email protected] | 59 | [email protected] |
61 | [email protected] | 60 | [email protected] |
62 | [email protected] | 61 | [email protected] "foo" |
63 | [email protected] "foo" | 62 | [email protected] |
64 | [email protected] | 63 | [email protected] "(" |
65 | [email protected] "(" | 64 | [email protected] |
66 | [email protected] | 65 | [email protected] "1" |
67 | [email protected] "1" | 66 | [email protected] "," |
68 | [email protected] "," | 67 | [email protected] " " |
69 | [email protected] " " | 68 | [email protected] |
70 | [email protected] | 69 | [email protected] "2" |
71 | [email protected] "2" | 70 | [email protected] "," |
72 | [email protected] "," | 71 | [email protected] " " |
73 | [email protected] " " | 72 | [email protected] |
74 | [email protected] | 73 | [email protected] "@" |
75 | [email protected] "@" | 74 | [email protected] |
76 | [email protected] | 75 | [email protected] |
77 | [email protected] | 76 | [email protected] "," |
78 | [email protected] "," | 77 | [email protected] " " |
79 | [email protected] " " | 78 | [email protected] |
80 | [email protected] | 79 | [email protected] "impl" |
81 | [email protected] "impl" | 80 | [email protected] |
82 | [email protected] | 81 | [email protected] |
83 | [email protected] | 82 | [email protected] "," |
84 | [email protected] "," | 83 | [email protected] " " |
85 | [email protected] " " | 84 | [email protected] |
86 | [email protected] | 85 | [email protected] "let" |
87 | [email protected] "let" | 86 | [email protected] |
88 | [email protected] | 87 | [email protected] ")" |
89 | [email protected] ")" | 88 | [email protected] " " |
90 | [email protected] " " | 89 | [email protected] "}" |
91 | [email protected] "}" | ||
92 | [email protected] "\n" | 90 | [email protected] "\n" |
93 | [email protected] | 91 | [email protected] |
94 | [email protected] "fn" | 92 | [email protected] "fn" |
@@ -100,53 +98,52 @@ [email protected] | |||
100 | [email protected] ")" | 98 | [email protected] ")" |
101 | [email protected] " " | 99 | [email protected] " " |
102 | [email protected] | 100 | [email protected] |
103 | [email protected] | 101 | [email protected] "{" |
104 | [email protected] "{" | 102 | [email protected] " " |
105 | [email protected] " " | 103 | [email protected] |
106 | [email protected] | 104 | [email protected] |
107 | [email protected] | 105 | [email protected] |
108 | [email protected] | 106 | [email protected] |
109 | [email protected] | 107 | [email protected] |
110 | [email protected] | 108 | [email protected] |
111 | [email protected] | 109 | [email protected] "foo" |
112 | [email protected] "foo" | 110 | [email protected] "." |
113 | [email protected] "." | 111 | [email protected] |
114 | [email protected] | 112 | [email protected] "bar" |
115 | [email protected] "bar" | 113 | [email protected] |
116 | [email protected] | 114 | [email protected] "(" |
117 | [email protected] "(" | 115 | [email protected] |
118 | [email protected] | 116 | [email protected] "1" |
119 | [email protected] "1" | 117 | [email protected] "," |
120 | [email protected] "," | 118 | [email protected] " " |
121 | [email protected] " " | 119 | [email protected] |
122 | [email protected] | 120 | [email protected] "2" |
123 | [email protected] "2" | 121 | [email protected] "," |
124 | [email protected] "," | 122 | [email protected] " " |
125 | [email protected] " " | 123 | [email protected] |
126 | [email protected] | 124 | [email protected] "@" |
127 | [email protected] "@" | 125 | [email protected] |
128 | [email protected] | 126 | [email protected] |
129 | [email protected] | 127 | [email protected] "," |
130 | [email protected] "," | 128 | [email protected] " " |
131 | [email protected] " " | 129 | [email protected] |
132 | [email protected] | 130 | [email protected] |
133 | [email protected] | 131 | [email protected] "]" |
134 | [email protected] "]" | 132 | [email protected] |
135 | [email protected] | 133 | [email protected] |
136 | [email protected] | 134 | [email protected] "," |
137 | [email protected] "," | 135 | [email protected] " " |
138 | [email protected] " " | 136 | [email protected] |
139 | [email protected] | 137 | [email protected] "trait" |
140 | [email protected] "trait" | 138 | [email protected] |
141 | [email protected] | 139 | [email protected] "," |
142 | [email protected] "," | 140 | [email protected] " " |
143 | [email protected] " " | 141 | [email protected] |
144 | [email protected] | 142 | [email protected] "let" |
145 | [email protected] "let" | 143 | [email protected] |
146 | [email protected] | 144 | [email protected] ")" |
147 | [email protected] ")" | 145 | [email protected] " " |
148 | [email protected] " " | 146 | [email protected] "}" |
149 | [email protected] "}" | ||
150 | [email protected] "\n" | 147 | [email protected] "\n" |
151 | error 16..16: expected expression | 148 | error 16..16: expected expression |
152 | error 17..17: expected R_BRACK | 149 | error 17..17: expected R_BRACK |
diff --git a/crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast b/crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast index c37594146..9ea9d715e 100644 --- a/crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast +++ b/crates/ra_syntax/test_data/parser/err/0023_mismatched_paren.rast | |||
@@ -9,31 +9,30 @@ [email protected] | |||
9 | [email protected] ")" | 9 | [email protected] ")" |
10 | [email protected] " " | 10 | [email protected] " " |
11 | [email protected] | 11 | [email protected] |
12 | [email protected] | 12 | [email protected] "{" |
13 | [email protected] "{" | 13 | [email protected] "\n " |
14 | [email protected] "\n " | 14 | [email protected] |
15 | [email protected] | 15 | [email protected] |
16 | [email protected] | 16 | [email protected] |
17 | [email protected] | 17 | [email protected] |
18 | [email protected] | 18 | [email protected] "foo" |
19 | [email protected] "foo" | 19 | [email protected] "!" |
20 | [email protected] "!" | 20 | [email protected] " " |
21 | [email protected] " " | 21 | [email protected] |
22 | [email protected] | 22 | [email protected] "(" |
23 | [email protected] "(" | 23 | [email protected] "\n " |
24 | [email protected] "\n " | 24 | [email protected] "bar" |
25 | [email protected] "bar" | 25 | [email protected] "," |
26 | [email protected] "," | 26 | [email protected] " " |
27 | [email protected] " " | 27 | [email protected] "\"baz\"" |
28 | [email protected] "\"baz\"" | 28 | [email protected] "," |
29 | [email protected] "," | 29 | [email protected] " " |
30 | [email protected] " " | 30 | [email protected] "1" |
31 | [email protected] "1" | 31 | [email protected] "," |
32 | [email protected] "," | 32 | [email protected] " " |
33 | [email protected] " " | 33 | [email protected] "2.0" |
34 | [email protected] "2.0" | 34 | [email protected] "\n " |
35 | [email protected] "\n " | 35 | [email protected] "}" |
36 | [email protected] "}" | ||
37 | [email protected] " " | 36 | [email protected] " " |
38 | [email protected] "//~ ERROR incorrect c ..." | 37 | [email protected] "//~ ERROR incorrect c ..." |
39 | [email protected] "\n" | 38 | [email protected] "\n" |
diff --git a/crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast b/crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast index 4296355f2..7c957fdde 100644 --- a/crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast +++ b/crates/ra_syntax/test_data/parser/err/0024_many_type_parens.rast | |||
@@ -62,9 +62,8 @@ [email protected] | |||
62 | [email protected] ")" | 62 | [email protected] ")" |
63 | [email protected] " " | 63 | [email protected] " " |
64 | [email protected] | 64 | [email protected] |
65 | [email protected] | 65 | [email protected] "{" |
66 | [email protected] "{" | 66 | [email protected] "}" |
67 | [email protected] "}" | ||
68 | [email protected] "\n\n" | 67 | [email protected] "\n\n" |
69 | [email protected] | 68 | [email protected] |
70 | [email protected] "fn" | 69 | [email protected] "fn" |
@@ -76,219 +75,218 @@ [email protected] | |||
76 | [email protected] ")" | 75 | [email protected] ")" |
77 | [email protected] " " | 76 | [email protected] " " |
78 | [email protected] | 77 | [email protected] |
79 | [email protected] | 78 | [email protected] "{" |
80 | [email protected] "{" | 79 | [email protected] "\n " |
81 | [email protected] "\n " | 80 | [email protected] |
82 | [email protected] | 81 | [email protected] "let" |
83 | [email protected] "let" | 82 | [email protected] " " |
84 | [email protected] " " | 83 | [email protected] |
85 | [email protected] | 84 | [email protected] "_" |
86 | [email protected] "_" | 85 | [email protected] ":" |
87 | [email protected] ":" | 86 | [email protected] " " |
88 | [email protected] " " | 87 | [email protected] |
89 | [email protected] | 88 | [email protected] |
90 | [email protected] | 89 | [email protected] |
91 | [email protected] | 90 | [email protected] |
92 | [email protected] | 91 | [email protected] |
93 | [email protected] | 92 | [email protected] |
94 | [email protected] | 93 | [email protected] |
95 | [email protected] | 94 | [email protected] "Box" |
96 | [email protected] "Box" | 95 | [email protected] |
97 | [email protected] | 96 | [email protected] "<" |
98 | [email protected] "<" | 97 | [email protected] |
99 | [email protected] | 98 | [email protected] |
100 | [email protected] | 99 | [email protected] "(" |
101 | [email protected] "(" | 100 | [email protected] |
102 | [email protected] | 101 | [email protected] |
103 | [email protected] | 102 | [email protected] |
104 | [email protected] | 103 | [email protected] |
105 | [email protected] | 104 | [email protected] "Copy" |
106 | [email protected] "Copy" | 105 | [email protected] ")" |
107 | [email protected] ")" | 106 | [email protected] " " |
108 | [email protected] " " | 107 | [email protected] "+" |
109 | [email protected] "+" | 108 | [email protected] " " |
110 | [email protected] " " | 109 | [email protected] |
111 | [email protected] | 110 | [email protected] "(" |
112 | [email protected] "(" | 111 | [email protected] "?" |
113 | [email protected] "?" | 112 | [email protected] |
114 | [email protected] | 113 | [email protected] |
115 | [email protected] | 114 | [email protected] |
116 | [email protected] | 115 | [email protected] |
117 | [email protected] | 116 | [email protected] "Sized" |
118 | [email protected] "Sized" | 117 | [email protected] ")" |
119 | [email protected] ")" | 118 | [email protected] " " |
120 | [email protected] " " | 119 | [email protected] "+" |
121 | [email protected] "+" | 120 | [email protected] " " |
122 | [email protected] " " | 121 | [email protected] |
123 | [email protected] | 122 | [email protected] "(" |
124 | [email protected] "(" | 123 | [email protected] |
125 | [email protected] | 124 | [email protected] "for" |
126 | [email protected] "for" | 125 | [email protected] |
127 | [email protected] | 126 | [email protected] "<" |
128 | [email protected] "<" | 127 | [email protected] |
129 | [email protected] | 128 | [email protected] "\'a" |
130 | [email protected] "\'a" | 129 | [email protected] ">" |
131 | [email protected] ">" | 130 | [email protected] " " |
132 | [email protected] " " | 131 | [email protected] |
133 | [email protected] | 132 | [email protected] |
134 | [email protected] | 133 | [email protected] |
135 | [email protected] | 134 | [email protected] |
136 | [email protected] | 135 | [email protected] "Trait" |
137 | [email protected] "Trait" | 136 | [email protected] |
138 | [email protected] | 137 | [email protected] "<" |
139 | [email protected] "<" | 138 | [email protected] |
140 | [email protected] | 139 | [email protected] "\'a" |
141 | [email protected] "\'a" | 140 | [email protected] ">" |
142 | [email protected] ">" | 141 | [email protected] ")" |
143 | [email protected] ")" | 142 | [email protected] |
144 | [email protected] | 143 | [email protected] |
145 | [email protected] | 144 | [email protected] ">" |
146 | [email protected] ">" | 145 | [email protected] ";" |
147 | [email protected] ";" | 146 | [email protected] "\n " |
148 | [email protected] "\n " | 147 | [email protected] |
149 | [email protected] | 148 | [email protected] "let" |
150 | [email protected] "let" | 149 | [email protected] " " |
151 | [email protected] " " | 150 | [email protected] |
152 | [email protected] | 151 | [email protected] "_" |
153 | [email protected] "_" | 152 | [email protected] ":" |
154 | [email protected] ":" | 153 | [email protected] " " |
155 | [email protected] " " | 154 | [email protected] |
156 | [email protected] | 155 | [email protected] |
157 | [email protected] | 156 | [email protected] |
158 | [email protected] | 157 | [email protected] |
159 | [email protected] | 158 | [email protected] "Box" |
160 | [email protected] "Box" | 159 | [email protected] |
161 | [email protected] | 160 | [email protected] "<" |
162 | [email protected] "<" | 161 | [email protected] |
163 | [email protected] | 162 | [email protected] |
164 | [email protected] | 163 | [email protected] "(" |
165 | [email protected] "(" | 164 | [email protected] |
166 | [email protected] | 165 | [email protected] "?" |
167 | [email protected] "?" | 166 | [email protected] |
168 | [email protected] | 167 | [email protected] |
169 | [email protected] | 168 | [email protected] |
170 | [email protected] | 169 | [email protected] |
171 | [email protected] | 170 | [email protected] |
172 | [email protected] | 171 | [email protected] "Sized" |
173 | [email protected] "Sized" | 172 | [email protected] |
174 | [email protected] | 173 | [email protected] |
175 | [email protected] | 174 | [email protected] ")" |
176 | [email protected] ")" | 175 | [email protected] " " |
177 | [email protected] " " | 176 | [email protected] |
178 | [email protected] | 177 | [email protected] |
179 | [email protected] | 178 | [email protected] "+" |
180 | [email protected] "+" | 179 | [email protected] " " |
181 | [email protected] " " | 180 | [email protected] |
182 | [email protected] | 181 | [email protected] |
183 | [email protected] | 182 | [email protected] "(" |
184 | [email protected] "(" | 183 | [email protected] |
185 | [email protected] | 184 | [email protected] |
186 | [email protected] | 185 | [email protected] |
187 | [email protected] | 186 | [email protected] |
188 | [email protected] | 187 | [email protected] |
189 | [email protected] | 188 | [email protected] |
190 | [email protected] | 189 | [email protected] "for" |
191 | [email protected] "for" | 190 | [email protected] |
192 | [email protected] | 191 | [email protected] "<" |
193 | [email protected] "<" | 192 | [email protected] |
194 | [email protected] | 193 | [email protected] "\'a" |
195 | [email protected] "\'a" | 194 | [email protected] ">" |
196 | [email protected] ">" | 195 | [email protected] " " |
197 | [email protected] " " | 196 | [email protected] |
198 | [email protected] | 197 | [email protected] |
199 | [email protected] | 198 | [email protected] |
200 | [email protected] | 199 | [email protected] |
201 | [email protected] | 200 | [email protected] "Trait" |
202 | [email protected] "Trait" | 201 | [email protected] "<" |
203 | [email protected] "<" | 202 | [email protected] |
204 | [email protected] | 203 | [email protected] "\'a" |
205 | [email protected] "\'a" | 204 | [email protected] ">" |
206 | [email protected] ">" | 205 | [email protected] |
207 | [email protected] | 206 | [email protected] ")" |
208 | [email protected] ")" | 207 | [email protected] " " |
209 | [email protected] " " | 208 | [email protected] "+" |
210 | [email protected] "+" | 209 | [email protected] " " |
211 | [email protected] " " | 210 | [email protected] |
212 | [email protected] | 211 | [email protected] "(" |
213 | [email protected] "(" | 212 | [email protected] |
214 | [email protected] | 213 | [email protected] |
215 | [email protected] | 214 | [email protected] |
216 | [email protected] | 215 | [email protected] |
217 | [email protected] | 216 | [email protected] "Copy" |
218 | [email protected] "Copy" | 217 | [email protected] ")" |
219 | [email protected] ")" | 218 | [email protected] ">" |
220 | [email protected] ">" | 219 | [email protected] |
221 | [email protected] | 220 | [email protected] ";" |
222 | [email protected] ";" | 221 | [email protected] "\n " |
223 | [email protected] "\n " | 222 | [email protected] |
224 | [email protected] | 223 | [email protected] "let" |
225 | [email protected] "let" | 224 | [email protected] " " |
226 | [email protected] " " | 225 | [email protected] |
227 | [email protected] | 226 | [email protected] "_" |
228 | [email protected] "_" | 227 | [email protected] ":" |
229 | [email protected] ":" | 228 | [email protected] " " |
230 | [email protected] " " | 229 | [email protected] |
231 | [email protected] | 230 | [email protected] |
232 | [email protected] | 231 | [email protected] |
233 | [email protected] | 232 | [email protected] |
234 | [email protected] | 233 | [email protected] |
235 | [email protected] | 234 | [email protected] |
236 | [email protected] | 235 | [email protected] |
237 | [email protected] | 236 | [email protected] "Box" |
238 | [email protected] "Box" | 237 | [email protected] |
239 | [email protected] | 238 | [email protected] "<" |
240 | [email protected] "<" | 239 | [email protected] |
241 | [email protected] | 240 | [email protected] |
242 | [email protected] | 241 | [email protected] "(" |
243 | [email protected] "(" | 242 | [email protected] |
244 | [email protected] | 243 | [email protected] "for" |
245 | [email protected] "for" | 244 | [email protected] |
246 | [email protected] | 245 | [email protected] "<" |
247 | [email protected] "<" | 246 | [email protected] |
248 | [email protected] | 247 | [email protected] "\'a" |
249 | [email protected] "\'a" | 248 | [email protected] ">" |
250 | [email protected] ">" | 249 | [email protected] " " |
251 | [email protected] " " | 250 | [email protected] |
252 | [email protected] | 251 | [email protected] |
253 | [email protected] | 252 | [email protected] |
254 | [email protected] | 253 | [email protected] |
255 | [email protected] | 254 | [email protected] "Trait" |
256 | [email protected] "Trait" | 255 | [email protected] |
257 | [email protected] | 256 | [email protected] "<" |
258 | [email protected] "<" | 257 | [email protected] |
259 | [email protected] | 258 | [email protected] "\'a" |
260 | [email protected] "\'a" | 259 | [email protected] ">" |
261 | [email protected] ">" | 260 | [email protected] ")" |
262 | [email protected] ")" | 261 | [email protected] " " |
263 | [email protected] " " | 262 | [email protected] "+" |
264 | [email protected] "+" | 263 | [email protected] " " |
265 | [email protected] " " | 264 | [email protected] |
266 | [email protected] | 265 | [email protected] "(" |
267 | [email protected] "(" | 266 | [email protected] |
268 | [email protected] | 267 | [email protected] |
269 | [email protected] | 268 | [email protected] |
270 | [email protected] | 269 | [email protected] |
271 | [email protected] | 270 | [email protected] "Copy" |
272 | [email protected] "Copy" | 271 | [email protected] ")" |
273 | [email protected] ")" | 272 | [email protected] " " |
274 | [email protected] " " | 273 | [email protected] "+" |
275 | [email protected] "+" | 274 | [email protected] " " |
276 | [email protected] " " | 275 | [email protected] |
277 | [email protected] | 276 | [email protected] "(" |
278 | [email protected] "(" | 277 | [email protected] "?" |
279 | [email protected] "?" | 278 | [email protected] |
280 | [email protected] | 279 | [email protected] |
281 | [email protected] | 280 | [email protected] |
282 | [email protected] | 281 | [email protected] |
283 | [email protected] | 282 | [email protected] "Sized" |
284 | [email protected] "Sized" | 283 | [email protected] ")" |
285 | [email protected] ")" | 284 | [email protected] |
286 | [email protected] | 285 | [email protected] |
287 | [email protected] | 286 | [email protected] ">" |
288 | [email protected] ">" | 287 | [email protected] ";" |
289 | [email protected] ";" | 288 | [email protected] "\n" |
290 | [email protected] "\n" | 289 | [email protected] "}" |
291 | [email protected] "}" | ||
292 | [email protected] "\n" | 290 | [email protected] "\n" |
293 | error 88..88: expected COMMA | 291 | error 88..88: expected COMMA |
294 | error 88..88: expected R_ANGLE | 292 | error 88..88: expected R_ANGLE |
diff --git a/crates/ra_syntax/test_data/parser/err/0025_nope.rast b/crates/ra_syntax/test_data/parser/err/0025_nope.rast index 195c08bd9..88b086daf 100644 --- a/crates/ra_syntax/test_data/parser/err/0025_nope.rast +++ b/crates/ra_syntax/test_data/parser/err/0025_nope.rast | |||
@@ -9,187 +9,185 @@ [email protected] | |||
9 | [email protected] ")" | 9 | [email protected] ")" |
10 | [email protected] " " | 10 | [email protected] " " |
11 | [email protected] | 11 | [email protected] |
12 | [email protected] | 12 | [email protected] "{" |
13 | [email protected] "{" | 13 | [email protected] "\n " |
14 | [email protected] "\n " | 14 | [email protected] |
15 | [email protected] | 15 | [email protected] "enum" |
16 | [email protected] "enum" | 16 | [email protected] " " |
17 | [email protected] " " | 17 | [email protected] |
18 | [email protected] | 18 | [email protected] "Test" |
19 | [email protected] "Test" | 19 | [email protected] " " |
20 | [email protected] " " | 20 | [email protected] |
21 | [email protected] | 21 | [email protected] "{" |
22 | [email protected] "{" | 22 | [email protected] "\n " |
23 | [email protected] "\n " | 23 | [email protected] |
24 | [email protected] | 24 | [email protected] |
25 | [email protected] | 25 | [email protected] "Var1" |
26 | [email protected] "Var1" | 26 | [email protected] "," |
27 | [email protected] "," | 27 | [email protected] "\n " |
28 | [email protected] "\n " | 28 | [email protected] |
29 | [email protected] | 29 | [email protected] |
30 | [email protected] | 30 | [email protected] "Var2" |
31 | [email protected] "Var2" | 31 | [email protected] |
32 | [email protected] | 32 | [email protected] "(" |
33 | [email protected] "(" | 33 | [email protected] |
34 | [email protected] | 34 | [email protected] |
35 | [email protected] | 35 | [email protected] |
36 | [email protected] | 36 | [email protected] |
37 | [email protected] | 37 | [email protected] |
38 | [email protected] | 38 | [email protected] "String" |
39 | [email protected] "String" | 39 | [email protected] ")" |
40 | [email protected] ")" | 40 | [email protected] "," |
41 | [email protected] "," | 41 | [email protected] "\n " |
42 | [email protected] "\n " | 42 | [email protected] |
43 | [email protected] | 43 | [email protected] |
44 | [email protected] | 44 | [email protected] "Var3" |
45 | [email protected] "Var3" | 45 | [email protected] " " |
46 | [email protected] " " | 46 | [email protected] |
47 | [email protected] | 47 | [email protected] "{" |
48 | [email protected] "{" | 48 | [email protected] "\n " |
49 | [email protected] "\n " | 49 | [email protected] |
50 | [email protected] | 50 | [email protected] |
51 | [email protected] | 51 | [email protected] "abc" |
52 | [email protected] "abc" | 52 | [email protected] ":" |
53 | [email protected] ":" | 53 | [email protected] " " |
54 | [email protected] " " | 54 | [email protected] |
55 | [email protected] | 55 | [email protected] "{" |
56 | [email protected] "{" | 56 | [email protected] "}" |
57 | [email protected] "}" | 57 | [email protected] |
58 | [email protected] | 58 | [email protected] "," |
59 | [email protected] "," | 59 | [email protected] " " |
60 | [email protected] " " | 60 | [email protected] "//~ ERROR: expected t ..." |
61 | [email protected] "//~ ERROR: expected t ..." | 61 | [email protected] "\n " |
62 | [email protected] "\n " | 62 | [email protected] "}" |
63 | [email protected] "}" | 63 | [email protected] "," |
64 | [email protected] "," | 64 | [email protected] "\n " |
65 | [email protected] "\n " | 65 | [email protected] "}" |
66 | [email protected] "}" | 66 | [email protected] "\n\n " |
67 | [email protected] "\n\n " | 67 | [email protected] "// recover..." |
68 | [email protected] "// recover..." | 68 | [email protected] "\n " |
69 | [email protected] "\n " | 69 | [email protected] |
70 | [email protected] | 70 | [email protected] "let" |
71 | [email protected] "let" | 71 | [email protected] " " |
72 | [email protected] " " | 72 | [email protected] |
73 | [email protected] | 73 | [email protected] |
74 | [email protected] | 74 | [email protected] "a" |
75 | [email protected] "a" | 75 | [email protected] " " |
76 | [email protected] " " | 76 | [email protected] "=" |
77 | [email protected] "=" | 77 | [email protected] " " |
78 | [email protected] " " | 78 | [email protected] |
79 | [email protected] | 79 | [email protected] "1" |
80 | [email protected] "1" | 80 | [email protected] ";" |
81 | [email protected] ";" | 81 | [email protected] "\n " |
82 | [email protected] "\n " | 82 | [email protected] |
83 | [email protected] | 83 | [email protected] "enum" |
84 | [email protected] "enum" | 84 | [email protected] " " |
85 | [email protected] " " | 85 | [email protected] |
86 | [email protected] | 86 | [email protected] "Test2" |
87 | [email protected] "Test2" | 87 | [email protected] " " |
88 | [email protected] " " | 88 | [email protected] |
89 | [email protected] | 89 | [email protected] "{" |
90 | [email protected] "{" | 90 | [email protected] "\n " |
91 | [email protected] "\n " | 91 | [email protected] |
92 | [email protected] | 92 | [email protected] |
93 | [email protected] | 93 | [email protected] "Fine" |
94 | [email protected] "Fine" | 94 | [email protected] "," |
95 | [email protected] "," | 95 | [email protected] "\n " |
96 | [email protected] "\n " | 96 | [email protected] "}" |
97 | [email protected] "}" | 97 | [email protected] "\n\n " |
98 | [email protected] "\n\n " | 98 | [email protected] |
99 | [email protected] | 99 | [email protected] "enum" |
100 | [email protected] "enum" | 100 | [email protected] " " |
101 | [email protected] " " | 101 | [email protected] |
102 | [email protected] | 102 | [email protected] "Test3" |
103 | [email protected] "Test3" | 103 | [email protected] " " |
104 | [email protected] " " | 104 | [email protected] |
105 | [email protected] | 105 | [email protected] "{" |
106 | [email protected] "{" | 106 | [email protected] "\n " |
107 | [email protected] "\n " | 107 | [email protected] |
108 | [email protected] | 108 | [email protected] |
109 | [email protected] | 109 | [email protected] "StillFine" |
110 | [email protected] "StillFine" | 110 | [email protected] " " |
111 | [email protected] " " | 111 | [email protected] |
112 | [email protected] | 112 | [email protected] "{" |
113 | [email protected] "{" | 113 | [email protected] "\n " |
114 | [email protected] "\n " | 114 | [email protected] |
115 | [email protected] | 115 | [email protected] |
116 | [email protected] | 116 | [email protected] "def" |
117 | [email protected] "def" | 117 | [email protected] ":" |
118 | [email protected] ":" | 118 | [email protected] " " |
119 | [email protected] " " | 119 | [email protected] |
120 | [email protected] | 120 | [email protected] |
121 | [email protected] | 121 | [email protected] |
122 | [email protected] | 122 | [email protected] |
123 | [email protected] | 123 | [email protected] "i32" |
124 | [email protected] "i32" | 124 | [email protected] "," |
125 | [email protected] "," | 125 | [email protected] "\n " |
126 | [email protected] "\n " | 126 | [email protected] "}" |
127 | [email protected] "}" | 127 | [email protected] "," |
128 | [email protected] "," | 128 | [email protected] "\n " |
129 | [email protected] "\n " | 129 | [email protected] "}" |
130 | [email protected] "}" | 130 | [email protected] "\n\n " |
131 | [email protected] "\n\n " | 131 | [email protected] |
132 | [email protected] | 132 | [email protected] |
133 | [email protected] | 133 | [email protected] "{" |
134 | [email protected] | 134 | [email protected] "\n " |
135 | [email protected] "{" | 135 | [email protected] |
136 | [email protected] "\n " | 136 | [email protected] "// fail again" |
137 | [email protected] | 137 | [email protected] "\n " |
138 | [email protected] "// fail again" | 138 | [email protected] "enum" |
139 | [email protected] "\n " | 139 | [email protected] " " |
140 | [email protected] "enum" | 140 | [email protected] |
141 | [email protected] " " | 141 | [email protected] "Test4" |
142 | [email protected] | 142 | [email protected] " " |
143 | [email protected] "Test4" | 143 | [email protected] |
144 | [email protected] " " | 144 | [email protected] "{" |
145 | [email protected] | 145 | [email protected] "\n " |
146 | [email protected] "{" | 146 | [email protected] |
147 | [email protected] "\n " | 147 | [email protected] |
148 | [email protected] | 148 | [email protected] "Nope" |
149 | [email protected] | 149 | [email protected] |
150 | [email protected] "Nope" | 150 | [email protected] "(" |
151 | [email protected] | 151 | [email protected] |
152 | [email protected] "(" | 152 | [email protected] |
153 | [email protected] | 153 | [email protected] |
154 | [email protected] | 154 | [email protected] |
155 | [email protected] | 155 | [email protected] |
156 | [email protected] | 156 | [email protected] "i32" |
157 | [email protected] | 157 | [email protected] " " |
158 | [email protected] "i32" | 158 | [email protected] |
159 | [email protected] " " | 159 | [email protected] |
160 | [email protected] | 160 | [email protected] "{" |
161 | [email protected] | 161 | [email protected] "}" |
162 | [email protected] "{" | 162 | [email protected] |
163 | [email protected] "}" | 163 | [email protected] ")" |
164 | [email protected] | 164 | [email protected] " " |
165 | [email protected] ")" | 165 | [email protected] "//~ ERROR: found `{`" |
166 | [email protected] " " | 166 | [email protected] "\n ..." |
167 | [email protected] "//~ ERROR: found `{`" | 167 | [email protected] "//~^ ERROR: found `{`" |
168 | [email protected] "\n ..." | 168 | [email protected] "\n " |
169 | [email protected] "//~^ ERROR: found `{`" | 169 | [email protected] "}" |
170 | [email protected] "\n " | 170 | [email protected] "\n " |
171 | [email protected] "}" | 171 | [email protected] "}" |
172 | [email protected] "\n " | 172 | [email protected] "\n " |
173 | [email protected] "}" | 173 | [email protected] "// still recover later" |
174 | [email protected] "\n " | 174 | [email protected] "\n " |
175 | [email protected] "// still recover later" | 175 | [email protected] |
176 | [email protected] "\n " | 176 | [email protected] "let" |
177 | [email protected] | 177 | [email protected] " " |
178 | [email protected] "let" | 178 | [email protected] |
179 | [email protected] " " | 179 | [email protected] |
180 | [email protected] | 180 | [email protected] "bad_syntax" |
181 | [email protected] | 181 | [email protected] " " |
182 | [email protected] "bad_syntax" | 182 | [email protected] "=" |
183 | [email protected] " " | 183 | [email protected] " " |
184 | [email protected] "=" | 184 | [email protected] |
185 | [email protected] " " | 185 | [email protected] "_" |
186 | [email protected] | 186 | [email protected] ";" |
187 | [email protected] "_" | 187 | [email protected] " " |
188 | [email protected] ";" | 188 | [email protected] "//~ ERROR: expected e ..." |
189 | [email protected] " " | 189 | [email protected] "\n" |
190 | [email protected] "//~ ERROR: expected e ..." | 190 | [email protected] "}" |
191 | [email protected] "\n" | ||
192 | [email protected] "}" | ||
193 | [email protected] "\n" | 191 | [email protected] "\n" |
194 | error 95..95: expected type | 192 | error 95..95: expected type |
195 | error 95..95: expected COMMA | 193 | error 95..95: expected COMMA |
diff --git a/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast b/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast index f2fada510..568a4cc02 100644 --- a/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast +++ b/crates/ra_syntax/test_data/parser/err/0027_incomplere_where_for.rast | |||
@@ -21,9 +21,8 @@ [email protected] | |||
21 | [email protected] ">" | 21 | [email protected] ">" |
22 | [email protected] "\n" | 22 | [email protected] "\n" |
23 | [email protected] | 23 | [email protected] |
24 | [email protected] | 24 | [email protected] "{" |
25 | [email protected] "{" | 25 | [email protected] "}" |
26 | [email protected] "}" | ||
27 | [email protected] "\n" | 26 | [email protected] "\n" |
28 | error 26..26: expected a path | 27 | error 26..26: expected a path |
29 | error 26..26: expected colon | 28 | error 26..26: expected colon |
diff --git a/crates/ra_syntax/test_data/parser/err/0029_field_completion.rast b/crates/ra_syntax/test_data/parser/err/0029_field_completion.rast index 56682f966..0da8f59f0 100644 --- a/crates/ra_syntax/test_data/parser/err/0029_field_completion.rast +++ b/crates/ra_syntax/test_data/parser/err/0029_field_completion.rast | |||
@@ -20,17 +20,16 @@ [email protected] | |||
20 | [email protected] ")" | 20 | [email protected] ")" |
21 | [email protected] " " | 21 | [email protected] " " |
22 | [email protected] | 22 | [email protected] |
23 | [email protected] | 23 | [email protected] "{" |
24 | [email protected] "{" | 24 | [email protected] "\n " |
25 | [email protected] "\n " | 25 | [email protected] |
26 | [email protected] | 26 | [email protected] |
27 | [email protected] | 27 | [email protected] |
28 | [email protected] | 28 | [email protected] |
29 | [email protected] | 29 | [email protected] |
30 | [email protected] | 30 | [email protected] "a" |
31 | [email protected] "a" | 31 | [email protected] "." |
32 | [email protected] "." | 32 | [email protected] "\n" |
33 | [email protected] "\n" | 33 | [email protected] "}" |
34 | [email protected] "}" | ||
35 | [email protected] "\n" | 34 | [email protected] "\n" |
36 | error 21..21: expected field name or number | 35 | error 21..21: expected field name or number |
diff --git a/crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast b/crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast index aac476430..515819e42 100644 --- a/crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast +++ b/crates/ra_syntax/test_data/parser/err/0031_block_inner_attrs.rast | |||
@@ -9,115 +9,111 @@ [email protected] | |||
9 | [email protected] ")" | 9 | [email protected] ")" |
10 | [email protected] " " | 10 | [email protected] " " |
11 | [email protected] | 11 | [email protected] |
12 | [email protected] | 12 | [email protected] "{" |
13 | [email protected] "{" | 13 | [email protected] "\n " |
14 | [email protected] "\n " | 14 | [email protected] |
15 | [email protected] | 15 | [email protected] "let" |
16 | [email protected] "let" | 16 | [email protected] " " |
17 | [email protected] " " | 17 | [email protected] |
18 | [email protected] | 18 | [email protected] |
19 | [email protected] | 19 | [email protected] "inner" |
20 | [email protected] "inner" | 20 | [email protected] " " |
21 | [email protected] " " | 21 | [email protected] "=" |
22 | [email protected] "=" | 22 | [email protected] " " |
23 | [email protected] " " | 23 | [email protected] |
24 | [email protected] | 24 | [email protected] "{" |
25 | [email protected] | 25 | [email protected] "\n " |
26 | [email protected] "{" | 26 | [email protected] |
27 | [email protected] "\n " | 27 | [email protected] "#" |
28 | [email protected] | 28 | [email protected] "!" |
29 | [email protected] "#" | 29 | [email protected] "[" |
30 | [email protected] "!" | 30 | [email protected] |
31 | [email protected] "[" | 31 | [email protected] |
32 | [email protected] | 32 | [email protected] |
33 | [email protected] | 33 | [email protected] "doc" |
34 | [email protected] | 34 | [email protected] |
35 | [email protected] "doc" | 35 | [email protected] "(" |
36 | [email protected] | 36 | [email protected] "\"Inner attributes not ..." |
37 | [email protected] "(" | 37 | [email protected] ")" |
38 | [email protected] "\"Inner attributes not ..." | 38 | [email protected] "]" |
39 | [email protected] ")" | 39 | [email protected] "\n " |
40 | [email protected] "]" | 40 | [email protected] "//! Nor are ModuleDoc ..." |
41 | [email protected] "\n " | 41 | [email protected] "\n " |
42 | [email protected] "//! Nor are ModuleDoc ..." | 42 | [email protected] "}" |
43 | [email protected] "\n " | 43 | [email protected] ";" |
44 | [email protected] "}" | 44 | [email protected] "\n " |
45 | [email protected] ";" | 45 | [email protected] |
46 | [email protected] "\n " | 46 | [email protected] |
47 | [email protected] | 47 | [email protected] "if" |
48 | [email protected] | 48 | [email protected] " " |
49 | [email protected] "if" | 49 | [email protected] |
50 | [email protected] " " | 50 | [email protected] |
51 | [email protected] | 51 | [email protected] "true" |
52 | [email protected] | 52 | [email protected] " " |
53 | [email protected] "true" | 53 | [email protected] |
54 | [email protected] " " | 54 | [email protected] "{" |
55 | [email protected] | 55 | [email protected] "\n " |
56 | [email protected] | 56 | [email protected] |
57 | [email protected] "{" | 57 | [email protected] "#" |
58 | [email protected] "\n " | 58 | [email protected] "!" |
59 | [email protected] | 59 | [email protected] "[" |
60 | [email protected] "#" | 60 | [email protected] |
61 | [email protected] "!" | 61 | [email protected] |
62 | [email protected] "[" | 62 | [email protected] |
63 | [email protected] | 63 | [email protected] "doc" |
64 | [email protected] | 64 | [email protected] |
65 | [email protected] | 65 | [email protected] "(" |
66 | [email protected] "doc" | 66 | [email protected] "\"Nor here\"" |
67 | [email protected] | 67 | [email protected] ")" |
68 | [email protected] "(" | 68 | [email protected] "]" |
69 | [email protected] "\"Nor here\"" | 69 | [email protected] "\n " |
70 | [email protected] ")" | 70 | [email protected] |
71 | [email protected] "]" | 71 | [email protected] "#" |
72 | [email protected] "\n " | 72 | [email protected] "!" |
73 | [email protected] | 73 | [email protected] "[" |
74 | [email protected] "#" | 74 | [email protected] |
75 | [email protected] "!" | 75 | [email protected] |
76 | [email protected] "[" | 76 | [email protected] |
77 | [email protected] | 77 | [email protected] "doc" |
78 | [email protected] | 78 | [email protected] |
79 | [email protected] | 79 | [email protected] "(" |
80 | [email protected] "doc" | 80 | [email protected] "\"We error on each attr\"" |
81 | [email protected] | 81 | [email protected] ")" |
82 | [email protected] "(" | 82 | [email protected] "]" |
83 | [email protected] "\"We error on each attr\"" | 83 | [email protected] "\n " |
84 | [email protected] ")" | 84 | [email protected] "//! Nor are ModuleDoc ..." |
85 | [email protected] "]" | 85 | [email protected] "\n " |
86 | [email protected] "\n " | 86 | [email protected] "}" |
87 | [email protected] "//! Nor are ModuleDoc ..." | 87 | [email protected] "\n " |
88 | [email protected] "\n " | 88 | [email protected] |
89 | [email protected] "}" | 89 | [email protected] "while" |
90 | [email protected] "\n " | 90 | [email protected] " " |
91 | [email protected] | 91 | [email protected] |
92 | [email protected] "while" | 92 | [email protected] |
93 | [email protected] " " | 93 | [email protected] "true" |
94 | [email protected] | 94 | [email protected] " " |
95 | [email protected] | 95 | [email protected] |
96 | [email protected] "true" | 96 | [email protected] "{" |
97 | [email protected] " " | 97 | [email protected] "\n " |
98 | [email protected] | 98 | [email protected] |
99 | [email protected] | 99 | [email protected] "#" |
100 | [email protected] "{" | 100 | [email protected] "!" |
101 | [email protected] "\n " | 101 | [email protected] "[" |
102 | [email protected] | 102 | [email protected] |
103 | [email protected] "#" | 103 | [email protected] |
104 | [email protected] "!" | 104 | [email protected] |
105 | [email protected] "[" | 105 | [email protected] "doc" |
106 | [email protected] | 106 | [email protected] |
107 | [email protected] | 107 | [email protected] "(" |
108 | [email protected] | 108 | [email protected] "\"Nor here\"" |
109 | [email protected] "doc" | 109 | [email protected] ")" |
110 | [email protected] |