aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/tests/data/parser/err
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-09-16 10:54:24 +0100
committerAleksey Kladov <[email protected]>2018-09-16 11:07:39 +0100
commitb5021411a84822cb3f1e3aeffad9550dd15bdeb6 (patch)
tree9dca564f8e51b298dced01c4ce669c756dce3142 /crates/ra_syntax/tests/data/parser/err
parentba0bfeee12e19da40b5eabc8d0408639af10e96f (diff)
rename all things
Diffstat (limited to 'crates/ra_syntax/tests/data/parser/err')
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0000_struct_field_missing_comma.rs4
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0000_struct_field_missing_comma.txt34
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0001_item_recovery_in_file.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0001_item_recovery_in_file.txt18
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0002_duplicate_shebang.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0002_duplicate_shebang.txt7
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0003_C++_semicolon.rs4
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0003_C++_semicolon.txt39
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0004_use_path_bad_segment.rs1
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0004_use_path_bad_segment.txt16
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0005_attribute_recover.rs8
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0005_attribute_recover.txt55
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0006_named_field_recovery.rs7
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0006_named_field_recovery.txt74
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0007_stray_curly_in_file.rs9
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0007_stray_curly_in_file.txt32
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.rs13
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.txt70
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.rs5
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.txt44
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0010_unsafe_lambda_block.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0010_unsafe_lambda_block.txt42
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0011_extern_struct.rs1
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0011_extern_struct.txt13
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0012_broken_lambda.txt387
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0013_invalid_type.rs7
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0013_invalid_type.txt89
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0014_where_no_bounds.rs1
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0014_where_no_bounds.txt31
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0015_curly_in_params.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0015_curly_in_params.txt24
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0016_missing_semi.rs6
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0016_missing_semi.txt43
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0017_incomplete_binexpr.rs4
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0017_incomplete_binexpr.txt46
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0018_incomplete_fn.rs8
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0018_incomplete_fn.txt131
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0019_let_recover.rs12
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0019_let_recover.txt103
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0020_fn_recover.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0020_fn_recover.txt20
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0021_incomplete_param.rs2
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0021_incomplete_param.txt34
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0022_bad_exprs.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0022_bad_exprs.txt189
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0023_mismatched_paren.rs5
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0023_mismatched_paren.txt43
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0024_many_type_parens.rs7
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0024_many_type_parens.txt310
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0025_nope.rs31
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0025_nope.txt203
51 files changed, 2248 insertions, 0 deletions
diff --git a/crates/ra_syntax/tests/data/parser/err/0000_struct_field_missing_comma.rs b/crates/ra_syntax/tests/data/parser/err/0000_struct_field_missing_comma.rs
new file mode 100644
index 000000000..fe5030d89
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0000_struct_field_missing_comma.rs
@@ -0,0 +1,4 @@
1struct S {
2 a: u32
3 b: u32
4} \ No newline at end of file
diff --git a/crates/ra_syntax/tests/data/parser/err/0000_struct_field_missing_comma.txt b/crates/ra_syntax/tests/data/parser/err/0000_struct_field_missing_comma.txt
new file mode 100644
index 000000000..aa375fe8a
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0000_struct_field_missing_comma.txt
@@ -0,0 +1,34 @@
1ROOT@[0; 34)
2 STRUCT_DEF@[0; 34)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 8)
6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
8 NAMED_FIELD_DEF_LIST@[9; 34)
9 L_CURLY@[9; 10)
10 WHITESPACE@[10; 15)
11 NAMED_FIELD_DEF@[15; 21)
12 NAME@[15; 16)
13 IDENT@[15; 16) "a"
14 COLON@[16; 17)
15 WHITESPACE@[17; 18)
16 PATH_TYPE@[18; 21)
17 PATH@[18; 21)
18 PATH_SEGMENT@[18; 21)
19 NAME_REF@[18; 21)
20 IDENT@[18; 21) "u32"
21 err: `expected COMMA`
22 WHITESPACE@[21; 26)
23 NAMED_FIELD_DEF@[26; 32)
24 NAME@[26; 27)
25 IDENT@[26; 27) "b"
26 COLON@[27; 28)
27 WHITESPACE@[28; 29)
28 PATH_TYPE@[29; 32)
29 PATH@[29; 32)
30 PATH_SEGMENT@[29; 32)
31 NAME_REF@[29; 32)
32 IDENT@[29; 32) "u32"
33 WHITESPACE@[32; 33)
34 R_CURLY@[33; 34)
diff --git a/crates/ra_syntax/tests/data/parser/err/0001_item_recovery_in_file.rs b/crates/ra_syntax/tests/data/parser/err/0001_item_recovery_in_file.rs
new file mode 100644
index 000000000..98f23de1f
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0001_item_recovery_in_file.rs
@@ -0,0 +1,3 @@
1if match
2
3struct S {} \ No newline at end of file
diff --git a/crates/ra_syntax/tests/data/parser/err/0001_item_recovery_in_file.txt b/crates/ra_syntax/tests/data/parser/err/0001_item_recovery_in_file.txt
new file mode 100644
index 000000000..771d6e1ef
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0001_item_recovery_in_file.txt
@@ -0,0 +1,18 @@
1ROOT@[0; 21)
2 ERROR@[0; 2)
3 IF_KW@[0; 2)
4 err: `expected an item`
5 WHITESPACE@[2; 3)
6 err: `expected an item`
7 ERROR@[3; 8)
8 MATCH_KW@[3; 8)
9 WHITESPACE@[8; 10)
10 STRUCT_DEF@[10; 21)
11 STRUCT_KW@[10; 16)
12 WHITESPACE@[16; 17)
13 NAME@[17; 18)
14 IDENT@[17; 18) "S"
15 WHITESPACE@[18; 19)
16 NAMED_FIELD_DEF_LIST@[19; 21)
17 L_CURLY@[19; 20)
18 R_CURLY@[20; 21)
diff --git a/crates/ra_syntax/tests/data/parser/err/0002_duplicate_shebang.rs b/crates/ra_syntax/tests/data/parser/err/0002_duplicate_shebang.rs
new file mode 100644
index 000000000..48a3a3980
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0002_duplicate_shebang.rs
@@ -0,0 +1,2 @@
1#!/use/bin/env rusti
2#!/use/bin/env rusti
diff --git a/crates/ra_syntax/tests/data/parser/err/0002_duplicate_shebang.txt b/crates/ra_syntax/tests/data/parser/err/0002_duplicate_shebang.txt
new file mode 100644
index 000000000..57fb48420
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0002_duplicate_shebang.txt
@@ -0,0 +1,7 @@
1ROOT@[0; 42)
2 SHEBANG@[0; 20)
3 WHITESPACE@[20; 21)
4 err: `expected an item`
5 ERROR@[21; 41)
6 SHEBANG@[21; 41)
7 WHITESPACE@[41; 42)
diff --git a/crates/ra_syntax/tests/data/parser/err/0003_C++_semicolon.rs b/crates/ra_syntax/tests/data/parser/err/0003_C++_semicolon.rs
new file mode 100644
index 000000000..009312270
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0003_C++_semicolon.rs
@@ -0,0 +1,4 @@
1struct S {
2 a: i32,
3 b: String,
4}; \ No newline at end of file
diff --git a/crates/ra_syntax/tests/data/parser/err/0003_C++_semicolon.txt b/crates/ra_syntax/tests/data/parser/err/0003_C++_semicolon.txt
new file mode 100644
index 000000000..b51c0573a
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0003_C++_semicolon.txt
@@ -0,0 +1,39 @@
1ROOT@[0; 40)
2 STRUCT_DEF@[0; 40)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 8)
6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
8 NAMED_FIELD_DEF_LIST@[9; 39)
9 L_CURLY@[9; 10)
10 WHITESPACE@[10; 15)
11 NAMED_FIELD_DEF@[15; 21)
12 NAME@[15; 16)
13 IDENT@[15; 16) "a"
14 COLON@[16; 17)
15 WHITESPACE@[17; 18)
16 PATH_TYPE@[18; 21)
17 PATH@[18; 21)
18 PATH_SEGMENT@[18; 21)
19 NAME_REF@[18; 21)
20 IDENT@[18; 21) "i32"
21 COMMA@[21; 22)
22 WHITESPACE@[22; 27)
23 NAMED_FIELD_DEF@[27; 36)
24 NAME@[27; 28)
25 IDENT@[27; 28) "b"
26 COLON@[28; 29)
27 WHITESPACE@[29; 30)
28 PATH_TYPE@[30; 36)
29 PATH@[30; 36)
30 PATH_SEGMENT@[30; 36)
31 NAME_REF@[30; 36)
32 IDENT@[30; 36) "String"
33 COMMA@[36; 37)
34 WHITESPACE@[37; 38)
35 R_CURLY@[38; 39)
36 err: `expected item, found `;`
37consider removing this semicolon`
38 ERROR@[39; 40)
39 SEMI@[39; 40)
diff --git a/crates/ra_syntax/tests/data/parser/err/0004_use_path_bad_segment.rs b/crates/ra_syntax/tests/data/parser/err/0004_use_path_bad_segment.rs
new file mode 100644
index 000000000..060e65d06
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0004_use_path_bad_segment.rs
@@ -0,0 +1 @@
use foo::92; \ No newline at end of file
diff --git a/crates/ra_syntax/tests/data/parser/err/0004_use_path_bad_segment.txt b/crates/ra_syntax/tests/data/parser/err/0004_use_path_bad_segment.txt
new file mode 100644
index 000000000..646c84534
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0004_use_path_bad_segment.txt
@@ -0,0 +1,16 @@
1ROOT@[0; 12)
2 USE_ITEM@[0; 12)
3 USE_KW@[0; 3)
4 WHITESPACE@[3; 4)
5 USE_TREE@[4; 11)
6 PATH@[4; 11)
7 PATH@[4; 7)
8 PATH_SEGMENT@[4; 7)
9 NAME_REF@[4; 7)
10 IDENT@[4; 7) "foo"
11 COLONCOLON@[7; 9)
12 err: `expected identifier`
13 PATH_SEGMENT@[9; 11)
14 ERROR@[9; 11)
15 INT_NUMBER@[9; 11) "92"
16 SEMI@[11; 12)
diff --git a/crates/ra_syntax/tests/data/parser/err/0005_attribute_recover.rs b/crates/ra_syntax/tests/data/parser/err/0005_attribute_recover.rs
new file mode 100644
index 000000000..de7f81628
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0005_attribute_recover.rs
@@ -0,0 +1,8 @@
1#[foo(foo, +, 92)]
2fn foo() {
3}
4
5
6#[foo(
7fn foo() {
8}
diff --git a/crates/ra_syntax/tests/data/parser/err/0005_attribute_recover.txt b/crates/ra_syntax/tests/data/parser/err/0005_attribute_recover.txt
new file mode 100644
index 000000000..b3cf9b889
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0005_attribute_recover.txt
@@ -0,0 +1,55 @@
1ROOT@[0; 54)
2 FN_DEF@[0; 31)
3 ATTR@[0; 18)
4 POUND@[0; 1)
5 TOKEN_TREE@[1; 18)
6 L_BRACK@[1; 2)
7 IDENT@[2; 5) "foo"
8 TOKEN_TREE@[5; 17)
9 L_PAREN@[5; 6)
10 IDENT@[6; 9) "foo"
11 COMMA@[9; 10)
12 WHITESPACE@[10; 11)
13 PLUS@[11; 12)
14 COMMA@[12; 13)
15 WHITESPACE@[13; 14)
16 INT_NUMBER@[14; 16) "92"
17 R_PAREN@[16; 17)
18 R_BRACK@[17; 18)
19 WHITESPACE@[18; 19)
20 FN_KW@[19; 21)
21 WHITESPACE@[21; 22)
22 NAME@[22; 25)
23 IDENT@[22; 25) "foo"
24 PARAM_LIST@[25; 27)
25 L_PAREN@[25; 26)
26 R_PAREN@[26; 27)
27 WHITESPACE@[27; 28)
28 BLOCK@[28; 31)
29 L_CURLY@[28; 29)
30 WHITESPACE@[29; 30)
31 R_CURLY@[30; 31)
32 WHITESPACE@[31; 34)
33 ATTR@[34; 53)
34 POUND@[34; 35)
35 TOKEN_TREE@[35; 53)
36 L_BRACK@[35; 36)
37 IDENT@[36; 39) "foo"
38 TOKEN_TREE@[39; 53)
39 L_PAREN@[39; 40)
40 WHITESPACE@[40; 41)
41 FN_KW@[41; 43)
42 WHITESPACE@[43; 44)
43 IDENT@[44; 47) "foo"
44 TOKEN_TREE@[47; 49)
45 L_PAREN@[47; 48)
46 R_PAREN@[48; 49)
47 WHITESPACE@[49; 50)
48 TOKEN_TREE@[50; 53)
49 L_CURLY@[50; 51)
50 WHITESPACE@[51; 52)
51 R_CURLY@[52; 53)
52 err: `expected R_PAREN`
53 err: `expected R_BRACK`
54 err: `expected an item`
55 WHITESPACE@[53; 54)
diff --git a/crates/ra_syntax/tests/data/parser/err/0006_named_field_recovery.rs b/crates/ra_syntax/tests/data/parser/err/0006_named_field_recovery.rs
new file mode 100644
index 000000000..8069c111b
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0006_named_field_recovery.rs
@@ -0,0 +1,7 @@
1struct S {
2 f: u32,
3 pub 92
4 + - *
5 pub x: u32,
6 z: f64,
7}
diff --git a/crates/ra_syntax/tests/data/parser/err/0006_named_field_recovery.txt b/crates/ra_syntax/tests/data/parser/err/0006_named_field_recovery.txt
new file mode 100644
index 000000000..9abda7099
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0006_named_field_recovery.txt
@@ -0,0 +1,74 @@
1ROOT@[0; 74)
2 STRUCT_DEF@[0; 73)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 8)
6 IDENT@[7; 8) "S"
7 WHITESPACE@[8; 9)
8 NAMED_FIELD_DEF_LIST@[9; 73)
9 L_CURLY@[9; 10)
10 WHITESPACE@[10; 15)
11 NAMED_FIELD_DEF@[15; 21)
12 NAME@[15; 16)
13 IDENT@[15; 16) "f"
14 COLON@[16; 17)
15 WHITESPACE@[17; 18)
16 PATH_TYPE@[18; 21)
17 PATH@[18; 21)
18 PATH_SEGMENT@[18; 21)
19 NAME_REF@[18; 21)
20 IDENT@[18; 21) "u32"
21 COMMA@[21; 22)
22 WHITESPACE@[22; 27)
23 VISIBILITY@[27; 30)
24 PUB_KW@[27; 30)
25 WHITESPACE@[30; 31)
26 err: `expected field declaration`
27 ERROR@[31; 33)
28 INT_NUMBER@[31; 33) "92"
29 err: `expected COMMA`
30 WHITESPACE@[33; 38)
31 err: `expected field declaration`
32 ERROR@[38; 39)
33 PLUS@[38; 39)
34 err: `expected COMMA`
35 WHITESPACE@[39; 40)
36 err: `expected field declaration`
37 ERROR@[40; 41)
38 MINUS@[40; 41)
39 err: `expected COMMA`
40 WHITESPACE@[41; 42)
41 err: `expected field declaration`
42 ERROR@[42; 43)
43 STAR@[42; 43)
44 err: `expected COMMA`
45 WHITESPACE@[43; 48)
46 NAMED_FIELD_DEF@[48; 58)
47 VISIBILITY@[48; 51)
48 PUB_KW@[48; 51)
49 WHITESPACE@[51; 52)
50 NAME@[52; 53)
51 IDENT@[52; 53) "x"
52 COLON@[53; 54)
53 WHITESPACE@[54; 55)
54 PATH_TYPE@[55; 58)
55 PATH@[55; 58)
56 PATH_SEGMENT@[55; 58)
57 NAME_REF@[55; 58)
58 IDENT@[55; 58) "u32"
59 COMMA@[58; 59)
60 WHITESPACE@[59; 64)
61 NAMED_FIELD_DEF@[64; 70)
62 NAME@[64; 65)
63 IDENT@[64; 65) "z"
64 COLON@[65; 66)
65 WHITESPACE@[66; 67)
66 PATH_TYPE@[67; 70)
67 PATH@[67; 70)
68 PATH_SEGMENT@[67; 70)
69 NAME_REF@[67; 70)
70 IDENT@[67; 70) "f64"
71 COMMA@[70; 71)
72 WHITESPACE@[71; 72)
73 R_CURLY@[72; 73)
74 WHITESPACE@[73; 74)
diff --git a/crates/ra_syntax/tests/data/parser/err/0007_stray_curly_in_file.rs b/crates/ra_syntax/tests/data/parser/err/0007_stray_curly_in_file.rs
new file mode 100644
index 000000000..dc869fb78
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0007_stray_curly_in_file.rs
@@ -0,0 +1,9 @@
1}
2
3struct S;
4
5}
6
7fn foo(){}
8
9}
diff --git a/crates/ra_syntax/tests/data/parser/err/0007_stray_curly_in_file.txt b/crates/ra_syntax/tests/data/parser/err/0007_stray_curly_in_file.txt
new file mode 100644
index 000000000..802c69b31
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0007_stray_curly_in_file.txt
@@ -0,0 +1,32 @@
1ROOT@[0; 31)
2 ERROR@[0; 1)
3 R_CURLY@[0; 1)
4 err: `unmatched `}``
5 WHITESPACE@[1; 3)
6 STRUCT_DEF@[3; 12)
7 STRUCT_KW@[3; 9)
8 WHITESPACE@[9; 10)
9 NAME@[10; 11)
10 IDENT@[10; 11) "S"
11 SEMI@[11; 12)
12 WHITESPACE@[12; 14)
13 err: `unmatched `}``
14 ERROR@[14; 15)
15 R_CURLY@[14; 15)
16 WHITESPACE@[15; 17)
17 FN_DEF@[17; 27)
18 FN_KW@[17; 19)
19 WHITESPACE@[19; 20)
20 NAME@[20; 23)
21 IDENT@[20; 23) "foo"
22 PARAM_LIST@[23; 25)
23 L_PAREN@[23; 24)
24 R_PAREN@[24; 25)
25 BLOCK@[25; 27)
26 L_CURLY@[25; 26)
27 R_CURLY@[26; 27)
28 WHITESPACE@[27; 29)
29 err: `unmatched `}``
30 ERROR@[29; 30)
31 R_CURLY@[29; 30)
32 WHITESPACE@[30; 31)
diff --git a/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.rs b/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.rs
new file mode 100644
index 000000000..9fcac19b5
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.rs
@@ -0,0 +1,13 @@
1fn foo() {
2}
3
4bar() {
5 if true {
6 1
7 } else {
8 2 + 3
9 }
10}
11
12fn baz() {
13}
diff --git a/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.txt b/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.txt
new file mode 100644
index 000000000..95a34333b
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0008_item_block_recovery.txt
@@ -0,0 +1,70 @@
1ROOT@[0; 95)
2 FN_DEF@[0; 12)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 PARAM_LIST@[6; 8)
8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9)
11 BLOCK@[9; 12)
12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 11)
14 R_CURLY@[11; 12)
15 WHITESPACE@[12; 14)
16 MACRO_CALL@[14; 19)
17 PATH@[14; 17)
18 PATH_SEGMENT@[14; 17)
19 NAME_REF@[14; 17)
20 IDENT@[14; 17) "bar"
21 err: `expected EXCL`
22 TOKEN_TREE@[17; 19)
23 L_PAREN@[17; 18)
24 R_PAREN@[18; 19)
25 err: `expected SEMI`
26 WHITESPACE@[19; 20)
27 err: `expected an item`
28 ERROR@[20; 80)
29 L_CURLY@[20; 21)
30 WHITESPACE@[21; 26)
31 IF_KW@[26; 28)
32 WHITESPACE@[28; 29)
33 TRUE_KW@[29; 33)
34 WHITESPACE@[33; 34)
35 ERROR@[34; 51)
36 L_CURLY@[34; 35)
37 WHITESPACE@[35; 44)
38 INT_NUMBER@[44; 45) "1"
39 WHITESPACE@[45; 50)
40 R_CURLY@[50; 51)
41 WHITESPACE@[51; 52)
42 ELSE_KW@[52; 56)
43 WHITESPACE@[56; 57)
44 ERROR@[57; 78)
45 L_CURLY@[57; 58)
46 WHITESPACE@[58; 67)
47 INT_NUMBER@[67; 68) "2"
48 WHITESPACE@[68; 69)
49 PLUS@[69; 70)
50 WHITESPACE@[70; 71)
51 INT_NUMBER@[71; 72) "3"
52 WHITESPACE@[72; 77)
53 R_CURLY@[77; 78)
54 WHITESPACE@[78; 79)
55 R_CURLY@[79; 80)
56 WHITESPACE@[80; 82)
57 FN_DEF@[82; 94)
58 FN_KW@[82; 84)
59 WHITESPACE@[84; 85)
60 NAME@[85; 88)
61 IDENT@[85; 88) "baz"
62 PARAM_LIST@[88; 90)
63 L_PAREN@[88; 89)
64 R_PAREN@[89; 90)
65 WHITESPACE@[90; 91)
66 BLOCK@[91; 94)
67 L_CURLY@[91; 92)
68 WHITESPACE@[92; 93)
69 R_CURLY@[93; 94)
70 WHITESPACE@[94; 95)
diff --git a/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.rs b/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.rs
new file mode 100644
index 000000000..0dd30d0bd
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.rs
@@ -0,0 +1,5 @@
1struct S<90 + 2> {
2 f: u32
3}
4
5struct T;
diff --git a/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.txt b/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.txt
new file mode 100644
index 000000000..fa8adf881
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0009_broken_struct_type_parameter.txt
@@ -0,0 +1,44 @@
1ROOT@[0; 43)
2 STRUCT_DEF@[0; 11)
3 STRUCT_KW@[0; 6)
4 WHITESPACE@[6; 7)
5 NAME@[7; 8)
6 IDENT@[7; 8) "S"
7 TYPE_PARAM_LIST@[8; 11)
8 L_ANGLE@[8; 9)
9 err: `expected type parameter`
10 ERROR@[9; 11)
11 INT_NUMBER@[9; 11) "90"
12 err: `expected COMMA`
13 err: `expected R_ANGLE`
14 err: `expected `;`, `{`, or `(``
15 WHITESPACE@[11; 12)
16 err: `expected an item`
17 ERROR@[12; 13)
18 PLUS@[12; 13)
19 WHITESPACE@[13; 14)
20 err: `expected an item`
21 ERROR@[14; 15)
22 INT_NUMBER@[14; 15) "2"
23 err: `expected an item`
24 ERROR@[15; 16)
25 R_ANGLE@[15; 16)
26 WHITESPACE@[16; 17)
27 err: `expected an item`
28 ERROR@[17; 31)
29 L_CURLY@[17; 18)
30 WHITESPACE@[18; 23)
31 IDENT@[23; 24) "f"
32 COLON@[24; 25)
33 WHITESPACE@[25; 26)
34 IDENT@[26; 29) "u32"
35 WHITESPACE@[29; 30)
36 R_CURLY@[30; 31)
37 WHITESPACE@[31; 33)
38 STRUCT_DEF@[33; 42)
39 STRUCT_KW@[33; 39)
40 WHITESPACE@[39; 40)
41 NAME@[40; 41)
42 IDENT@[40; 41) "T"
43 SEMI@[41; 42)
44 WHITESPACE@[42; 43)
diff --git a/crates/ra_syntax/tests/data/parser/err/0010_unsafe_lambda_block.rs b/crates/ra_syntax/tests/data/parser/err/0010_unsafe_lambda_block.rs
new file mode 100644
index 000000000..985775282
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0010_unsafe_lambda_block.rs
@@ -0,0 +1,3 @@
1fn main() {
2 || -> () unsafe { () };
3}
diff --git a/crates/ra_syntax/tests/data/parser/err/0010_unsafe_lambda_block.txt b/crates/ra_syntax/tests/data/parser/err/0010_unsafe_lambda_block.txt
new file mode 100644
index 000000000..38667e030
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0010_unsafe_lambda_block.txt
@@ -0,0 +1,42 @@
1ROOT@[0; 42)
2 FN_DEF@[0; 41)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 7)
6 IDENT@[3; 7) "main"
7 PARAM_LIST@[7; 9)
8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10)
11 BLOCK@[10; 41)
12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16)
14 EXPR_STMT@[16; 39)
15 LAMBDA_EXPR@[16; 38)
16 PARAM_LIST@[16; 18)
17 PIPE@[16; 17)
18 PIPE@[17; 18)
19 WHITESPACE@[18; 19)
20 RET_TYPE@[19; 24)
21 THIN_ARROW@[19; 21)
22 WHITESPACE@[21; 22)
23 TUPLE_TYPE@[22; 24)
24 L_PAREN@[22; 23)
25 R_PAREN@[23; 24)
26 err: `expected `{``
27 WHITESPACE@[24; 25)
28 BLOCK_EXPR@[25; 38)
29 UNSAFE_KW@[25; 31)
30 WHITESPACE@[31; 32)
31 BLOCK@[32; 38)
32 L_CURLY@[32; 33)
33 WHITESPACE@[33; 34)
34 TUPLE_EXPR@[34; 36)
35 L_PAREN@[34; 35)
36 R_PAREN@[35; 36)
37 WHITESPACE@[36; 37)
38 R_CURLY@[37; 38)
39 SEMI@[38; 39)
40 WHITESPACE@[39; 40)
41 R_CURLY@[40; 41)
42 WHITESPACE@[41; 42)
diff --git a/crates/ra_syntax/tests/data/parser/err/0011_extern_struct.rs b/crates/ra_syntax/tests/data/parser/err/0011_extern_struct.rs
new file mode 100644
index 000000000..c1bd0a2d1
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0011_extern_struct.rs
@@ -0,0 +1 @@
extern struct Foo;
diff --git a/crates/ra_syntax/tests/data/parser/err/0011_extern_struct.txt b/crates/ra_syntax/tests/data/parser/err/0011_extern_struct.txt
new file mode 100644
index 000000000..0cb7447c4
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0011_extern_struct.txt
@@ -0,0 +1,13 @@
1ROOT@[0; 19)
2 ERROR@[0; 6)
3 ABI@[0; 6)
4 EXTERN_KW@[0; 6)
5 err: `expected fn, trait or impl`
6 WHITESPACE@[6; 7)
7 STRUCT_DEF@[7; 18)
8 STRUCT_KW@[7; 13)
9 WHITESPACE@[13; 14)
10 NAME@[14; 17)
11 IDENT@[14; 17) "Foo"
12 SEMI@[17; 18)
13 WHITESPACE@[18; 19)
diff --git a/crates/ra_syntax/tests/data/parser/err/0012_broken_lambda.txt b/crates/ra_syntax/tests/data/parser/err/0012_broken_lambda.txt
new file mode 100644
index 000000000..a03aa05e3
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0012_broken_lambda.txt
@@ -0,0 +1,387 @@
1ROOT@[0; 389)
2 FN_DEF@[0; 389)
3 VISIBILITY@[0; 10)
4 PUB_KW@[0; 3)
5 L_PAREN@[3; 4)
6 SUPER_KW@[4; 9)
7 R_PAREN@[9; 10)
8 WHITESPACE@[10; 11)
9 FN_KW@[11; 13)
10 WHITESPACE@[13; 14)
11 NAME@[14; 21)
12 IDENT@[14; 21) "process"
13 TYPE_PARAM_LIST@[21; 38)
14 L_ANGLE@[21; 22)
15 LIFETIME_PARAM@[22; 24)
16 LIFETIME@[22; 24) "'a"
17 COMMA@[24; 25)
18 WHITESPACE@[25; 26)
19 TYPE_PARAM@[26; 37)
20 NAME@[26; 27)
21 IDENT@[26; 27) "S"
22 COLON@[27; 28)
23 WHITESPACE@[28; 29)
24 PATH@[29; 37)
25 PATH_SEGMENT@[29; 37)
26 NAME_REF@[29; 33)
27 IDENT@[29; 33) "Sink"
28 TYPE_ARG_LIST@[33; 37)
29 L_ANGLE@[33; 34)
30 LIFETIME_ARG@[34; 36)
31 LIFETIME@[34; 36) "'a"
32 R_ANGLE@[36; 37)
33 R_ANGLE@[37; 38)
34 PARAM_LIST@[38; 93)
35 L_PAREN@[38; 39)
36 PARAM@[39; 54)
37 BIND_PAT@[39; 46)
38 NAME@[39; 46)
39 IDENT@[39; 46) "builder"
40 COLON@[46; 47)
41 WHITESPACE@[47; 48)
42 REFERENCE_TYPE@[48; 54)
43 AMP@[48; 49)
44 MUT_KW@[49; 52)
45 WHITESPACE@[52; 53)
46 PATH_TYPE@[53; 54)
47 PATH@[53; 54)
48 PATH_SEGMENT@[53; 54)
49 NAME_REF@[53; 54)
50 IDENT@[53; 54) "S"
51 COMMA@[54; 55)
52 WHITESPACE@[55; 56)
53 PARAM@[56; 72)
54 BIND_PAT@[56; 62)
55 NAME@[56; 62)
56 IDENT@[56; 62) "tokens"
57 COLON@[62; 63)
58 WHITESPACE@[63; 64)
59 REFERENCE_TYPE@[64; 72)
60 AMP@[64; 65)
61 SLICE_TYPE@[65; 72)
62 L_BRACK@[65; 66)
63 PATH_TYPE@[66; 71)
64 PATH@[66; 71)
65 PATH_SEGMENT@[66; 71)
66 NAME_REF@[66; 71)
67 IDENT@[66; 71) "Token"
68 R_BRACK@[71; 72)
69 COMMA@[72; 73)
70 WHITESPACE@[73; 74)
71 PARAM@[74; 92)
72 BIND_PAT@[74; 80)
73 NAME@[74; 80)
74 IDENT@[74; 80) "events"
75 COLON@[80; 81)
76 WHITESPACE@[81; 82)
77 PATH_TYPE@[82; 92)
78 PATH@[82; 92)
79 PATH_SEGMENT@[82; 92)
80 NAME_REF@[82; 85)
81 IDENT@[82; 85) "Vec"
82 TYPE_ARG_LIST@[85; 92)
83 L_ANGLE@[85; 86)
84 TYPE_ARG@[86; 91)
85 PATH_TYPE@[86; 91)
86 PATH@[86; 91)
87 PATH_SEGMENT@[86; 91)
88 NAME_REF@[86; 91)
89 IDENT@[86; 91) "Event"
90 R_ANGLE@[91; 92)
91 R_PAREN@[92; 93)
92 WHITESPACE@[93; 94)
93 BLOCK_EXPR@[94; 389)
94 L_CURLY@[94; 95)
95 WHITESPACE@[95; 100)
96 LET_STMT@[100; 125)
97 LET_KW@[100; 103)
98 WHITESPACE@[103; 104)
99 BIND_PAT@[104; 120)
100 MUT_KW@[104; 107)
101 WHITESPACE@[107; 108)
102 NAME@[108; 120)
103 IDENT@[108; 120) "next_tok_idx"
104 WHITESPACE@[120; 121)
105 EQ@[121; 122)
106 WHITESPACE@[122; 123)
107 LITERAL@[123; 124)
108 INT_NUMBER@[123; 124) "0"
109 SEMI@[124; 125)
110 WHITESPACE@[125; 130)
111 LET_STMT@[130; 389)
112 LET_KW@[130; 133)
113 WHITESPACE@[133; 134)
114 BIND_PAT@[134; 140)
115 NAME@[134; 140)
116 IDENT@[134; 140) "eat_ws"
117 WHITESPACE@[140; 141)
118 EQ@[141; 142)
119 WHITESPACE@[142; 143)
120 LAMBDA_EXPR@[143; 389)
121 PARAM_LIST@[143; 388)
122 PIPE@[143; 144)
123 PARAM@[144; 159)
124 BIND_PAT@[144; 147)
125 NAME@[144; 147)
126 IDENT@[144; 147) "idx"
127 COLON@[147; 148)
128 WHITESPACE@[148; 149)
129 REFERENCE_TYPE@[149; 159)
130 AMP@[149; 150)
131 MUT_KW@[150; 153)
132 WHITESPACE@[153; 154)
133 PATH_TYPE@[154; 159)
134 PATH@[154; 159)
135 PATH_SEGMENT@[154; 159)
136 NAME_REF@[154; 159)
137 IDENT@[154; 159) "usize"
138 COMMA@[159; 160)
139 WHITESPACE@[160; 161)
140 PARAM@[161; 167)
141 REF_PAT@[161; 167)
142 AMP@[161; 162)
143 MUT_KW@[162; 165)
144 WHITESPACE@[165; 166)
145 err: `expected pattern`
146 ERROR@[166; 167)
147 PIPE@[166; 167)
148 err: `expected COMMA`
149 WHITESPACE@[167; 168)
150 err: `expected pattern`
151 PARAM@[168; 169)
152 ERROR@[168; 169)
153 L_CURLY@[168; 169)
154 err: `expected COMMA`
155 WHITESPACE@[169; 178)
156 err: `expected pattern`
157 PARAM@[178; 183)
158 ERROR@[178; 183)
159 WHILE_KW@[178; 183)
160 err: `expected COMMA`
161 WHITESPACE@[183; 184)
162 err: `expected pattern`
163 PARAM@[184; 187)
164 ERROR@[184; 187)
165 LET_KW@[184; 187)
166 err: `expected COMMA`
167 WHITESPACE@[187; 188)
168 PARAM@[188; 199)
169 TUPLE_STRUCT_PAT@[188; 199)
170 PATH@[188; 192)
171 PATH_SEGMENT@[188; 192)
172 NAME_REF@[188; 192)
173 IDENT@[188; 192) "Some"
174 L_PAREN@[192; 193)
175 BIND_PAT@[193; 198)
176 NAME@[193; 198)
177 IDENT@[193; 198) "token"
178 R_PAREN@[198; 199)
179 err: `expected COMMA`
180 WHITESPACE@[199; 200)
181 err: `expected pattern`
182 PARAM@[200; 201)
183 ERROR@[200; 201)
184 EQ@[200; 201)
185 err: `expected COMMA`
186 WHITESPACE@[201; 202)
187 PARAM@[202; 208)
188 BIND_PAT@[202; 208)
189 NAME@[202; 208)
190 IDENT@[202; 208) "tokens"
191 err: `expected COMMA`
192 err: `expected pattern`
193 PARAM@[208; 209)
194 ERROR@[208; 209)
195 DOT@[208; 209)
196 err: `expected COMMA`
197 PARAM@[209; 218)
198 TUPLE_STRUCT_PAT@[209; 218)
199 PATH@[209; 212)
200 PATH_SEGMENT@[209; 212)
201 NAME_REF@[209; 212)
202 IDENT@[209; 212) "get"
203 L_PAREN@[212; 213)
204 err: `expected pattern`
205 ERROR@[213; 214)
206 STAR@[213; 214)
207 err: `expected COMMA`
208 BIND_PAT@[214; 217)
209 NAME@[214; 217)
210 IDENT@[214; 217) "idx"
211 R_PAREN@[217; 218)
212 err: `expected COMMA`
213 WHITESPACE@[218; 219)
214 err: `expected pattern`
215 PARAM@[219; 220)
216 ERROR@[219; 220)
217 L_CURLY@[219; 220)
218 err: `expected COMMA`
219 WHITESPACE@[220; 233)
220 err: `expected pattern`
221 PARAM@[233; 235)
222 ERROR@[233; 235)
223 IF_KW@[233; 235)
224 err: `expected COMMA`
225 WHITESPACE@[235; 236)
226 err: `expected pattern`
227 PARAM@[236; 237)
228 ERROR@[236; 237)
229 EXCL@[236; 237)
230 err: `expected COMMA`
231 PARAM@[237; 242)
232 BIND_PAT@[237; 242)
233 NAME@[237; 242)
234 IDENT@[237; 242) "token"
235 err: `expected COMMA`
236 err: `expected pattern`
237 PARAM@[242; 243)
238 ERROR@[242; 243)
239 DOT@[242; 243)
240 err: `expected COMMA`
241 PARAM@[243; 247)
242 BIND_PAT@[243; 247)
243 NAME@[243; 247)
244 IDENT@[243; 247) "kind"
245 err: `expected COMMA`
246 err: `expected pattern`
247 PARAM@[247; 248)
248 ERROR@[247; 248)
249 DOT@[247; 248)
250 err: `expected COMMA`
251 PARAM@[248; 259)
252 TUPLE_STRUCT_PAT@[248; 259)
253 PATH@[248; 257)
254 PATH_SEGMENT@[248; 257)
255 NAME_REF@[248; 257)
256 IDENT@[248; 257) "is_trivia"
257 L_PAREN@[257; 258)
258 R_PAREN@[258; 259)
259 err: `expected COMMA`
260 WHITESPACE@[259; 260)
261 err: `expected pattern`
262 PARAM@[260; 261)
263 ERROR@[260; 261)
264 L_CURLY@[260; 261)
265 err: `expected COMMA`
266 WHITESPACE@[261; 278)
267 PARAM@[278; 283)
268 BIND_PAT@[278; 283)
269 NAME@[278; 283)
270 IDENT@[278; 283) "break"
271 err: `expected COMMA`
272 err: `expected pattern`
273 PARAM@[283; 284)
274 ERROR@[283; 284)
275 SEMI@[283; 284)
276 err: `expected COMMA`
277 WHITESPACE@[284; 297)
278 err: `expected pattern`
279 PARAM@[297; 298)
280 ERROR@[297; 298)
281 R_CURLY@[297; 298)
282 err: `expected COMMA`
283 WHITESPACE@[298; 311)
284 PARAM@[311; 318)
285 BIND_PAT@[311; 318)
286 NAME@[311; 318)
287 IDENT@[311; 318) "builder"
288 err: `expected COMMA`
289 err: `expected pattern`
290 PARAM@[318; 319)
291 ERROR@[318; 319)
292 DOT@[318; 319)
293 err: `expected COMMA`
294 PARAM@[319; 346)
295 TUPLE_STRUCT_PAT@[319; 346)
296 PATH@[319; 323)
297 PATH_SEGMENT@[319; 323)
298 NAME_REF@[319; 323)
299 IDENT@[319; 323) "leaf"
300 L_PAREN@[323; 324)
301 BIND_PAT@[324; 329)
302 NAME@[324; 329)
303 IDENT@[324; 329) "token"
304 err: `expected COMMA`
305 err: `expected pattern`
306 ERROR@[329; 330)
307 DOT@[329; 330)
308 err: `expected COMMA`
309 BIND_PAT@[330; 334)
310 NAME@[330; 334)
311 IDENT@[330; 334) "kind"
312 COMMA@[334; 335)
313 WHITESPACE@[335; 336)
314 BIND_PAT@[336; 341)
315 NAME@[336; 341)
316 IDENT@[336; 341) "token"
317 err: `expected COMMA`
318 err: `expected pattern`
319 ERROR@[341; 342)
320 DOT@[341; 342)
321 err: `expected COMMA`
322 BIND_PAT@[342; 345)
323 NAME@[342; 345)
324 IDENT@[342; 345) "len"
325 R_PAREN@[345; 346)
326 err: `expected COMMA`
327 err: `expected pattern`
328 PARAM@[346; 347)
329 ERROR@[346; 347)
330 SEMI@[346; 347)
331 err: `expected COMMA`
332 WHITESPACE@[347; 360)
333 err: `expected pattern`
334 PARAM@[360; 361)
335 ERROR@[360; 361)
336 STAR@[360; 361)
337 err: `expected COMMA`
338 PARAM@[361; 364)
339 BIND_PAT@[361; 364)
340 NAME@[361; 364)
341 IDENT@[361; 364) "idx"
342 err: `expected COMMA`
343 WHITESPACE@[364; 365)
344 err: `expected pattern`
345 PARAM@[365; 366)
346 ERROR@[365; 366)
347 PLUS@[365; 366)
348 err: `expected COMMA`
349 err: `expected pattern`
350 PARAM@[366; 367)
351 ERROR@[366; 367)
352 EQ@[366; 367)
353 err: `expected COMMA`
354 WHITESPACE@[367; 368)
355 PARAM@[368; 369)
356 LITERAL@[368; 369)
357 INT_NUMBER@[368; 369) "1"
358 err: `expected COMMA`
359 WHITESPACE@[369; 378)
360 err: `expected pattern`
361 PARAM@[378; 379)
362 ERROR@[378; 379)
363 R_CURLY@[378; 379)
364 err: `expected COMMA`
365 WHITESPACE@[379; 384)
366 err: `expected pattern`
367 PARAM@[384; 385)
368 ERROR@[384; 385)
369 R_CURLY@[384; 385)
370 err: `expected COMMA`
371 err: `expected pattern`
372 PARAM@[385; 386)
373 ERROR@[385; 386)
374 SEMI@[385; 386)
375 err: `expected COMMA`
376 WHITESPACE@[386; 387)
377 err: `expected pattern`
378 PARAM@[387; 388)
379 ERROR@[387; 388)
380 R_CURLY@[387; 388)
381 err: `expected COMMA`
382 err: `expected PIPE`
383 WHITESPACE@[388; 389)
384 err: `expected expression`
385 err: `expected SEMI`
386 err: `expected R_CURLY`
387 ERROR@[389; 389)
diff --git a/crates/ra_syntax/tests/data/parser/err/0013_invalid_type.rs b/crates/ra_syntax/tests/data/parser/err/0013_invalid_type.rs
new file mode 100644
index 000000000..20dde3bc3
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0013_invalid_type.rs
@@ -0,0 +1,7 @@
1pub struct Cache(
2 RefCell<HashMap<
3 TypeId,
4 Box<@ Any>,
5 >>
6);
7
diff --git a/crates/ra_syntax/tests/data/parser/err/0013_invalid_type.txt b/crates/ra_syntax/tests/data/parser/err/0013_invalid_type.txt
new file mode 100644
index 000000000..e1a6b6432
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0013_invalid_type.txt
@@ -0,0 +1,89 @@
1ROOT@[0; 86)
2 STRUCT_DEF@[0; 72)
3 VISIBILITY@[0; 3)
4 PUB_KW@[0; 3)
5 WHITESPACE@[3; 4)
6 STRUCT_KW@[4; 10)
7 WHITESPACE@[10; 11)
8 NAME@[11; 16)
9 IDENT@[11; 16) "Cache"
10 POS_FIELD_LIST@[16; 72)
11 L_PAREN@[16; 17)
12 WHITESPACE@[17; 22)
13 POS_FIELD@[22; 68)
14 PATH_TYPE@[22; 68)
15 PATH@[22; 68)
16 PATH_SEGMENT@[22; 68)
17 NAME_REF@[22; 29)
18 IDENT@[22; 29) "RefCell"
19 TYPE_ARG_LIST@[29; 68)
20 L_ANGLE@[29; 30)
21 TYPE_ARG@[30; 68)
22 PATH_TYPE@[30; 68)
23 PATH@[30; 68)
24 PATH_SEGMENT@[30; 68)
25 NAME_REF@[30; 37)
26 IDENT@[30; 37) "HashMap"
27 TYPE_ARG_LIST@[37; 68)
28 L_ANGLE@[37; 38)
29 WHITESPACE@[38; 47)
30 TYPE_ARG@[47; 53)
31 PATH_TYPE@[47; 53)
32 PATH@[47; 53)
33 PATH_SEGMENT@[47; 53)
34 NAME_REF@[47; 53)
35 IDENT@[47; 53) "TypeId"
36 COMMA@[53; 54)
37 WHITESPACE@[54; 63)
38 TYPE_ARG@[63; 68)
39 PATH_TYPE@[63; 68)
40 PATH@[63; 68)
41 PATH_SEGMENT@[63; 68)
42 NAME_REF@[63; 66)
43 IDENT@[63; 66) "Box"
44 TYPE_ARG_LIST@[66; 68)
45 L_ANGLE@[66; 67)
46 err: `expected type`
47 TYPE_ARG@[67; 68)
48 ERROR@[67; 68)
49 AT@[67; 68)
50 err: `expected COMMA`
51 err: `expected R_ANGLE`
52 err: `expected COMMA`
53 err: `expected R_ANGLE`
54 err: `expected COMMA`
55 err: `expected R_ANGLE`
56 err: `expected COMMA`
57 WHITESPACE@[68; 69)
58 POS_FIELD@[69; 72)
59 PATH_TYPE@[69; 72)
60 PATH@[69; 72)
61 PATH_SEGMENT@[69; 72)
62 NAME_REF@[69; 72)
63 IDENT@[69; 72) "Any"
64 err: `expected COMMA`
65 err: `expected a type`
66 err: `expected R_PAREN`
67 err: `expected SEMI`
68 err: `expected an item`
69 ERROR@[72; 72)
70 ERROR@[72; 73)
71 R_ANGLE@[72; 73)
72 err: `expected an item`
73 ERROR@[73; 74)
74 COMMA@[73; 74)
75 WHITESPACE@[74; 79)
76 err: `expected an item`
77 ERROR@[79; 80)
78 R_ANGLE@[79; 80)
79 err: `expected an item`
80 ERROR@[80; 81)
81 R_ANGLE@[80; 81)
82 WHITESPACE@[81; 82)
83 err: `expected an item`
84 ERROR@[82; 83)
85 R_PAREN@[82; 83)
86 err: `expected an item`
87 ERROR@[83; 84)
88 SEMI@[83; 84)
89 WHITESPACE@[84; 86)
diff --git a/crates/ra_syntax/tests/data/parser/err/0014_where_no_bounds.rs b/crates/ra_syntax/tests/data/parser/err/0014_where_no_bounds.rs
new file mode 100644
index 000000000..75c1d2f98
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0014_where_no_bounds.rs
@@ -0,0 +1 @@
fn foo<T>() where T {}
diff --git a/crates/ra_syntax/tests/data/parser/err/0014_where_no_bounds.txt b/crates/ra_syntax/tests/data/parser/err/0014_where_no_bounds.txt
new file mode 100644
index 000000000..37826ce86
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0014_where_no_bounds.txt
@@ -0,0 +1,31 @@
1ROOT@[0; 23)
2 FN_DEF@[0; 22)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 TYPE_PARAM_LIST@[6; 9)
8 L_ANGLE@[6; 7)
9 TYPE_PARAM@[7; 8)
10 NAME@[7; 8)
11 IDENT@[7; 8) "T"
12 R_ANGLE@[8; 9)
13 PARAM_LIST@[9; 11)
14 L_PAREN@[9; 10)
15 R_PAREN@[10; 11)
16 WHITESPACE@[11; 12)
17 WHERE_CLAUSE@[12; 19)
18 WHERE_KW@[12; 17)
19 WHITESPACE@[17; 18)
20 WHERE_PRED@[18; 19)
21 PATH_TYPE@[18; 19)
22 PATH@[18; 19)
23 PATH_SEGMENT@[18; 19)
24 NAME_REF@[18; 19)
25 IDENT@[18; 19) "T"
26 err: `expected colon`
27 WHITESPACE@[19; 20)
28 BLOCK@[20; 22)
29 L_CURLY@[20; 21)
30 R_CURLY@[21; 22)
31 WHITESPACE@[22; 23)
diff --git a/crates/ra_syntax/tests/data/parser/err/0015_curly_in_params.rs b/crates/ra_syntax/tests/data/parser/err/0015_curly_in_params.rs
new file mode 100644
index 000000000..156e70251
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0015_curly_in_params.rs
@@ -0,0 +1,2 @@
1fn foo(}) {
2}
diff --git a/crates/ra_syntax/tests/data/parser/err/0015_curly_in_params.txt b/crates/ra_syntax/tests/data/parser/err/0015_curly_in_params.txt
new file mode 100644
index 000000000..5f736a978
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0015_curly_in_params.txt
@@ -0,0 +1,24 @@
1ROOT@[0; 14)
2 FN_DEF@[0; 7)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 PARAM_LIST@[6; 7)
8 L_PAREN@[6; 7)
9 err: `expected value parameter`
10 err: `expected R_PAREN`
11 err: `expected a block`
12 err: `unmatched `}``
13 ERROR@[7; 8)
14 R_CURLY@[7; 8)
15 err: `expected an item`
16 ERROR@[8; 9)
17 R_PAREN@[8; 9)
18 WHITESPACE@[9; 10)
19 err: `expected an item`
20 ERROR@[10; 13)
21 L_CURLY@[10; 11)
22 WHITESPACE@[11; 12)
23 R_CURLY@[12; 13)
24 WHITESPACE@[13; 14)
diff --git a/crates/ra_syntax/tests/data/parser/err/0016_missing_semi.rs b/crates/ra_syntax/tests/data/parser/err/0016_missing_semi.rs
new file mode 100644
index 000000000..9ae857686
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0016_missing_semi.rs
@@ -0,0 +1,6 @@
1fn foo() {
2 foo(
3 1, 2
4 )
5 return 92;
6}
diff --git a/crates/ra_syntax/tests/data/parser/err/0016_missing_semi.txt b/crates/ra_syntax/tests/data/parser/err/0016_missing_semi.txt
new file mode 100644
index 000000000..a3163adcb
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0016_missing_semi.txt
@@ -0,0 +1,43 @@
1ROOT@[0; 56)
2 FN_DEF@[0; 55)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 PARAM_LIST@[6; 8)
8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9)
11 BLOCK@[9; 55)
12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15)
14 EXPR_STMT@[15; 38)
15 CALL_EXPR@[15; 38)
16 PATH_EXPR@[15; 18)
17 PATH@[15; 18)
18 PATH_SEGMENT@[15; 18)
19 NAME_REF@[15; 18)
20 IDENT@[15; 18) "foo"
21 ARG_LIST@[18; 38)
22 L_PAREN@[18; 19)
23 WHITESPACE@[19; 28)
24 LITERAL@[28; 29)
25 INT_NUMBER@[28; 29) "1"
26 COMMA@[29; 30)
27 WHITESPACE@[30; 31)
28 LITERAL@[31; 32)
29 INT_NUMBER@[31; 32) "2"
30 WHITESPACE@[32; 37)
31 R_PAREN@[37; 38)
32 err: `expected SEMI`
33 WHITESPACE@[38; 43)
34 EXPR_STMT@[43; 53)
35 RETURN_EXPR@[43; 52)
36 RETURN_KW@[43; 49)
37 WHITESPACE@[49; 50)
38 LITERAL@[50; 52)
39 INT_NUMBER@[50; 52) "92"
40 SEMI@[52; 53)
41 WHITESPACE@[53; 54)
42 R_CURLY@[54; 55)
43 WHITESPACE@[55; 56)
diff --git a/crates/ra_syntax/tests/data/parser/err/0017_incomplete_binexpr.rs b/crates/ra_syntax/tests/data/parser/err/0017_incomplete_binexpr.rs
new file mode 100644
index 000000000..17bd49777
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0017_incomplete_binexpr.rs
@@ -0,0 +1,4 @@
1fn foo(foo: i32) {
2 let bar = 92;
3 1 +
4}
diff --git a/crates/ra_syntax/tests/data/parser/err/0017_incomplete_binexpr.txt b/crates/ra_syntax/tests/data/parser/err/0017_incomplete_binexpr.txt
new file mode 100644
index 000000000..f0be287ad
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0017_incomplete_binexpr.txt
@@ -0,0 +1,46 @@
1ROOT@[0; 47)
2 FN_DEF@[0; 46)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 PARAM_LIST@[6; 16)
8 L_PAREN@[6; 7)
9 PARAM@[7; 15)
10 BIND_PAT@[7; 10)
11 NAME@[7; 10)
12 IDENT@[7; 10) "foo"
13 COLON@[10; 11)
14 WHITESPACE@[11; 12)
15 PATH_TYPE@[12; 15)
16 PATH@[12; 15)
17 PATH_SEGMENT@[12; 15)
18 NAME_REF@[12; 15)
19 IDENT@[12; 15) "i32"
20 R_PAREN@[15; 16)
21 WHITESPACE@[16; 17)
22 BLOCK@[17; 46)
23 L_CURLY@[17; 18)
24 WHITESPACE@[18; 23)
25 LET_STMT@[23; 36)
26 LET_KW@[23; 26)
27 WHITESPACE@[26; 27)
28 BIND_PAT@[27; 30)
29 NAME@[27; 30)
30 IDENT@[27; 30) "bar"
31 WHITESPACE@[30; 31)
32 EQ@[31; 32)
33 WHITESPACE@[32; 33)
34 LITERAL@[33; 35)
35 INT_NUMBER@[33; 35) "92"
36 SEMI@[35; 36)
37 WHITESPACE@[36; 41)
38 BIN_EXPR@[41; 44)
39 LITERAL@[41; 42)
40 INT_NUMBER@[41; 42) "1"
41 WHITESPACE@[42; 43)
42 PLUS@[43; 44)
43 err: `expected expression`
44 WHITESPACE@[44; 45)
45 R_CURLY@[45; 46)
46 WHITESPACE@[46; 47)
diff --git a/crates/ra_syntax/tests/data/parser/err/0018_incomplete_fn.rs b/crates/ra_syntax/tests/data/parser/err/0018_incomplete_fn.rs
new file mode 100644
index 000000000..fe604006c
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0018_incomplete_fn.rs
@@ -0,0 +1,8 @@
1impl FnScopes {
2 fn new_scope(&) -> ScopeId {
3 let res = self.scopes.len();
4 self.scopes.push(ScopeData { parent: None, entries: vec![] })
5 }
6
7 fn set_parent
8}
diff --git a/crates/ra_syntax/tests/data/parser/err/0018_incomplete_fn.txt b/crates/ra_syntax/tests/data/parser/err/0018_incomplete_fn.txt
new file mode 100644
index 000000000..c4d9f5e7e
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0018_incomplete_fn.txt
@@ -0,0 +1,131 @@
1ROOT@[0; 183)
2 IMPL_ITEM@[0; 182)
3 IMPL_KW@[0; 4)
4 WHITESPACE@[4; 5)
5 PATH_TYPE@[5; 13)
6 PATH@[5; 13)
7 PATH_SEGMENT@[5; 13)
8 NAME_REF@[5; 13)
9 IDENT@[5; 13) "FnScopes"
10 WHITESPACE@[13; 14)
11 ITEM_LIST@[14; 182)
12 L_CURLY@[14; 15)
13 WHITESPACE@[15; 20)
14 FN_DEF@[20; 161)
15 FN_KW@[20; 22)
16 WHITESPACE@[22; 23)
17 NAME@[23; 32)
18 IDENT@[23; 32) "new_scope"
19 PARAM_LIST@[32; 35)
20 L_PAREN@[32; 33)
21 PARAM@[33; 34)
22 REF_PAT@[33; 34)
23 AMP@[33; 34)
24 err: `expected pattern`
25 err: `expected COLON`
26 err: `expected type`
27 R_PAREN@[34; 35)
28 WHITESPACE@[35; 36)
29 RET_TYPE@[36; 46)
30 THIN_ARROW@[36; 38)
31 WHITESPACE@[38; 39)
32 PATH_TYPE@[39; 46)
33 PATH@[39; 46)
34 PATH_SEGMENT@[39; 46)
35 NAME_REF@[39; 46)
36 IDENT@[39; 46) "ScopeId"
37 WHITESPACE@[46; 47)
38 BLOCK@[47; 161)
39 L_CURLY@[47; 48)
40 WHITESPACE@[48; 57)
41 LET_STMT@[57; 85)
42 LET_KW@[57; 60)
43 WHITESPACE@[60; 61)
44 BIND_PAT@[61; 64)
45 NAME@[61; 64)
46 IDENT@[61; 64) "res"
47 WHITESPACE@[64; 65)
48 EQ@[65; 66)
49 WHITESPACE@[66; 67)
50 METHOD_CALL_EXPR@[67; 84)
51 FIELD_EXPR@[67; 78)
52 PATH_EXPR@[67; 71)
53 PATH@[67; 71)
54 PATH_SEGMENT@[67; 71)
55 SELF_KW@[67; 71)
56 DOT@[71; 72)
57 NAME_REF@[72; 78)
58 IDENT@[72; 78) "scopes"
59 DOT@[78; 79)
60 NAME_REF@[79; 82)
61 IDENT@[79; 82) "len"
62 ARG_LIST@[82; 84)
63 L_PAREN@[82; 83)
64 R_PAREN@[83; 84)
65 SEMI@[84; 85)
66 WHITESPACE@[85; 94)
67 METHOD_CALL_EXPR@[94; 155)
68 FIELD_EXPR@[94; 105)
69 PATH_EXPR@[94; 98)
70 PATH@[94; 98)
71 PATH_SEGMENT@[94; 98)
72 SELF_KW@[94; 98)
73 DOT@[98; 99)
74 NAME_REF@[99; 105)
75 IDENT@[99; 105) "scopes"
76 DOT@[105; 106)
77 NAME_REF@[106; 110)
78 IDENT@[106; 110) "push"
79 ARG_LIST@[110; 155)
80 L_PAREN@[110; 111)
81 STRUCT_LIT@[111; 154)
82 PATH@[111; 120)
83 PATH_SEGMENT@[111; 120)
84 NAME_REF@[111; 120)
85 IDENT@[111; 120) "ScopeData"
86 WHITESPACE@[120; 121)
87 NAMED_FIELD_LIST@[121; 154)
88 L_CURLY@[121; 122)
89 WHITESPACE@[122; 123)
90 NAMED_FIELD@[123; 135)
91 NAME_REF@[123; 129)
92 IDENT@[123; 129) "parent"
93 COLON@[129; 130)
94 WHITESPACE@[130; 131)
95 PATH_EXPR@[131; 135)
96 PATH@[131; 135)
97 PATH_SEGMENT@[131; 135)
98 NAME_REF@[131; 135)
99 IDENT@[131; 135) "None"
100 COMMA@[135; 136)
101 WHITESPACE@[136; 137)
102 NAMED_FIELD@[137; 152)
103 NAME_REF@[137; 144)
104 IDENT@[137; 144) "entries"
105 COLON@[144; 145)
106 WHITESPACE@[145; 146)
107 MACRO_CALL@[146; 152)
108 PATH@[146; 149)
109 PATH_SEGMENT@[146; 149)
110 NAME_REF@[146; 149)
111 IDENT@[146; 149) "vec"
112 EXCL@[149; 150)
113 TOKEN_TREE@[150; 152)
114 L_BRACK@[150; 151)
115 R_BRACK@[151; 152)
116 WHITESPACE@[152; 153)
117 R_CURLY@[153; 154)
118 R_PAREN@[154; 155)
119 WHITESPACE@[155; 160)
120 R_CURLY@[160; 161)
121 WHITESPACE@[161; 167)
122 FN_DEF@[167; 180)
123 FN_KW@[167; 169)
124 WHITESPACE@[169; 170)
125 NAME@[170; 180)
126 IDENT@[170; 180) "set_parent"
127 err: `expected function arguments`
128 err: `expected a block`
129 WHITESPACE@[180; 181)
130 R_CURLY@[181; 182)
131 WHITESPACE@[182; 183)
diff --git a/crates/ra_syntax/tests/data/parser/err/0019_let_recover.rs b/crates/ra_syntax/tests/data/parser/err/0019_let_recover.rs
new file mode 100644
index 000000000..48bf3d68b
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0019_let_recover.rs
@@ -0,0 +1,12 @@
1fn foo() {
2 let foo =
3 let bar = 1;
4 let
5 let baz = 92;
6 let
7 if true {}
8 let
9 while true {}
10 let
11 loop {}
12}
diff --git a/crates/ra_syntax/tests/data/parser/err/0019_let_recover.txt b/crates/ra_syntax/tests/data/parser/err/0019_let_recover.txt
new file mode 100644
index 000000000..6e74771f1
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0019_let_recover.txt
@@ -0,0 +1,103 @@
1ROOT@[0; 139)
2 FN_DEF@[0; 138)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 PARAM_LIST@[6; 8)
8 L_PAREN@[6; 7)
9 R_PAREN@[7; 8)
10 WHITESPACE@[8; 9)
11 BLOCK@[9; 138)
12 L_CURLY@[9; 10)
13 WHITESPACE@[10; 15)
14 LET_STMT@[15; 24)
15 LET_KW@[15; 18)
16 WHITESPACE@[18; 19)
17 BIND_PAT@[19; 22)
18 NAME@[19; 22)
19 IDENT@[19; 22) "foo"
20 WHITESPACE@[22; 23)
21 EQ@[23; 24)
22 err: `expected expression`
23 err: `expected SEMI`
24 WHITESPACE@[24; 29)
25 LET_STMT@[29; 41)
26 LET_KW@[29; 32)
27 WHITESPACE@[32; 33)
28 BIND_PAT@[33; 36)
29 NAME@[33; 36)
30 IDENT@[33; 36) "bar"
31 WHITESPACE@[36; 37)
32 EQ@[37; 38)
33 WHITESPACE@[38; 39)
34 LITERAL@[39; 40)
35 INT_NUMBER@[39; 40) "1"
36 SEMI@[40; 41)
37 WHITESPACE@[41; 46)
38 LET_STMT@[46; 49)
39 LET_KW@[46; 49)
40 err: `expected pattern`
41 err: `expected SEMI`
42 WHITESPACE@[49; 54)
43 LET_STMT@[54; 67)
44 LET_KW@[54; 57)
45 WHITESPACE@[57; 58)
46 BIND_PAT@[58; 61)
47 NAME@[58; 61)
48 IDENT@[58; 61) "baz"
49 WHITESPACE@[61; 62)
50 EQ@[62; 63)
51 WHITESPACE@[63; 64)
52 LITERAL@[64; 66)
53 INT_NUMBER@[64; 66) "92"
54 SEMI@[66; 67)
55 WHITESPACE@[67; 72)
56 LET_STMT@[72; 75)
57 LET_KW@[72; 75)
58 err: `expected pattern`
59 err: `expected SEMI`
60 WHITESPACE@[75; 80)
61 EXPR_STMT@[80; 90)
62 IF_EXPR@[80; 90)
63 IF_KW@[80; 82)
64 WHITESPACE@[82; 83)
65 CONDITION@[83; 87)
66 LITERAL@[83; 87)
67 TRUE_KW@[83; 87)
68 WHITESPACE@[87; 88)
69 BLOCK@[88; 90)
70 L_CURLY@[88; 89)
71 R_CURLY@[89; 90)
72 WHITESPACE@[90; 95)
73 LET_STMT@[95; 98)
74 LET_KW@[95; 98)
75 err: `expected pattern`
76 err: `expected SEMI`
77 WHITESPACE@[98; 103)
78 EXPR_STMT@[103; 116)
79 WHILE_EXPR@[103; 116)
80 WHILE_KW@[103; 108)
81 WHITESPACE@[108; 109)
82 CONDITION@[109; 113)
83 LITERAL@[109; 113)
84 TRUE_KW@[109; 113)
85 WHITESPACE@[113; 114)
86 BLOCK@[114; 116)
87 L_CURLY@[114; 115)
88 R_CURLY@[115; 116)
89 WHITESPACE@[116; 121)
90 LET_STMT@[121; 124)
91 LET_KW@[121; 124)
92 err: `expected pattern`
93 err: `expected SEMI`
94 WHITESPACE@[124; 129)
95 LOOP_EXPR@[129; 136)
96 LOOP_KW@[129; 133)
97 WHITESPACE@[133; 134)
98 BLOCK@[134; 136)
99 L_CURLY@[134; 135)
100 R_CURLY@[135; 136)
101 WHITESPACE@[136; 137)
102 R_CURLY@[137; 138)
103 WHITESPACE@[138; 139)
diff --git a/crates/ra_syntax/tests/data/parser/err/0020_fn_recover.rs b/crates/ra_syntax/tests/data/parser/err/0020_fn_recover.rs
new file mode 100644
index 000000000..3393b668b
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0020_fn_recover.rs
@@ -0,0 +1,3 @@
1fn
2
3fn foo() {}
diff --git a/crates/ra_syntax/tests/data/parser/err/0020_fn_recover.txt b/crates/ra_syntax/tests/data/parser/err/0020_fn_recover.txt
new file mode 100644
index 000000000..b5218b0fa
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0020_fn_recover.txt
@@ -0,0 +1,20 @@
1ROOT@[0; 16)
2 FN_DEF@[0; 2)
3 FN_KW@[0; 2)
4 err: `expected a name`
5 err: `expected function arguments`
6 err: `expected a block`
7 WHITESPACE@[2; 4)
8 FN_DEF@[4; 15)
9 FN_KW@[4; 6)
10 WHITESPACE@[6; 7)
11 NAME@[7; 10)
12 IDENT@[7; 10) "foo"
13 PARAM_LIST@[10; 12)
14 L_PAREN@[10; 11)
15 R_PAREN@[11; 12)
16 WHITESPACE@[12; 13)
17 BLOCK@[13; 15)
18 L_CURLY@[13; 14)
19 R_CURLY@[14; 15)
20 WHITESPACE@[15; 16)
diff --git a/crates/ra_syntax/tests/data/parser/err/0021_incomplete_param.rs b/crates/ra_syntax/tests/data/parser/err/0021_incomplete_param.rs
new file mode 100644
index 000000000..7a6c264f6
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0021_incomplete_param.rs
@@ -0,0 +1,2 @@
1fn foo(x: i32, y) {
2}
diff --git a/crates/ra_syntax/tests/data/parser/err/0021_incomplete_param.txt b/crates/ra_syntax/tests/data/parser/err/0021_incomplete_param.txt
new file mode 100644
index 000000000..8dcb58ae2
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0021_incomplete_param.txt
@@ -0,0 +1,34 @@
1ROOT@[0; 22)
2 FN_DEF@[0; 21)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 6)
6 IDENT@[3; 6) "foo"
7 PARAM_LIST@[6; 17)
8 L_PAREN@[6; 7)
9 PARAM@[7; 13)
10 BIND_PAT@[7; 8)
11 NAME@[7; 8)
12 IDENT@[7; 8) "x"
13 COLON@[8; 9)
14 WHITESPACE@[9; 10)
15 PATH_TYPE@[10; 13)
16 PATH@[10; 13)
17 PATH_SEGMENT@[10; 13)
18 NAME_REF@[10; 13)
19 IDENT@[10; 13) "i32"
20 COMMA@[13; 14)
21 WHITESPACE@[14; 15)
22 PARAM@[15; 16)
23 BIND_PAT@[15; 16)
24 NAME@[15; 16)
25 IDENT@[15; 16) "y"
26 err: `expected COLON`
27 err: `expected type`
28 R_PAREN@[16; 17)
29 WHITESPACE@[17; 18)
30 BLOCK@[18; 21)
31 L_CURLY@[18; 19)
32 WHITESPACE@[19; 20)
33 R_CURLY@[20; 21)
34 WHITESPACE@[21; 22)
diff --git a/crates/ra_syntax/tests/data/parser/err/0022_bad_exprs.rs b/crates/ra_syntax/tests/data/parser/err/0022_bad_exprs.rs
new file mode 100644
index 000000000..cd2d493a1
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0022_bad_exprs.rs
@@ -0,0 +1,3 @@
1fn a() { [1, 2, @, struct, let] }
2fn b() { foo(1, 2, @, impl, let) }
3fn c() { foo.bar(1, 2, @, ], trait, let) }
diff --git a/crates/ra_syntax/tests/data/parser/err/0022_bad_exprs.txt b/crates/ra_syntax/tests/data/parser/err/0022_bad_exprs.txt
new file mode 100644
index 000000000..287e56ac4
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0022_bad_exprs.txt
@@ -0,0 +1,189 @@
1ROOT@[0; 112)
2 FN_DEF@[0; 33)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 4)
6 IDENT@[3; 4) "a"
7 PARAM_LIST@[4; 6)
8 L_PAREN@[4; 5)
9 R_PAREN@[5; 6)
10 WHITESPACE@[6; 7)
11 BLOCK@[7; 33)
12 L_CURLY@[7; 8)
13 WHITESPACE@[8; 9)
14 EXPR_STMT@[9; 15)
15 ARRAY_EXPR@[9; 15)
16 L_BRACK@[9; 10)
17 LITERAL@[10; 11)
18 INT_NUMBER@[10; 11) "1"
19 COMMA@[11; 12)
20 WHITESPACE@[12; 13)
21 LITERAL@[13; 14)
22 INT_NUMBER@[13; 14) "2"
23 COMMA@[14; 15)
24 err: `expected expression`
25 err: `expected R_BRACK`
26 err: `expected SEMI`
27 WHITESPACE@[15; 16)
28 err: `expected expression`
29 EXPR_STMT@[16; 17)
30 ERROR@[16; 17)
31 AT@[16; 17)
32 err: `expected SEMI`
33 err: `expected expression`
34 EXPR_STMT@[17; 18)
35 ERROR@[17; 18)
36 COMMA@[17; 18)
37 err: `expected SEMI`
38 WHITESPACE@[18; 19)
39 STRUCT_DEF@[19; 26)
40 STRUCT_KW@[19; 25)
41 err: `expected a name`
42 ERROR@[25; 26)
43 COMMA@[25; 26)
44 err: `expected `;`, `{`, or `(``
45 WHITESPACE@[26; 27)
46 LET_STMT@[27; 31)
47 LET_KW@[27; 30)
48 err: `expected pattern`
49 ERROR@[30; 31)
50 R_BRACK@[30; 31)
51 err: `expected SEMI`
52 WHITESPACE@[31; 32)
53 R_CURLY@[32; 33)
54 WHITESPACE@[33; 34)
55 FN_DEF@[34; 68)
56 FN_KW@[34; 36)
57 WHITESPACE@[36; 37)
58 NAME@[37; 38)
59 IDENT@[37; 38) "b"
60 PARAM_LIST@[38; 40)
61 L_PAREN@[38; 39)
62 R_PAREN@[39; 40)
63 WHITESPACE@[40; 41)
64 BLOCK@[41; 68)
65 L_CURLY@[41; 42)
66 WHITESPACE@[42; 43)
67 EXPR_STMT@[43; 52)
68 CALL_EXPR@[43; 52)
69 PATH_EXPR@[43; 46)
70 PATH@[43; 46)
71 PATH_SEGMENT@[43; 46)
72 NAME_REF@[43; 46)
73 IDENT@[43; 46) "foo"
74 ARG_LIST@[46; 52)
75 L_PAREN@[46; 47)
76 LITERAL@[47; 48)
77 INT_NUMBER@[47; 48) "1"
78 COMMA@[48; 49)
79 WHITESPACE@[49; 50)
80 LITERAL@[50; 51)
81 INT_NUMBER@[50; 51) "2"
82 COMMA@[51; 52)
83 err: `expected expression`
84 err: `expected SEMI`
85 WHITESPACE@[52; 53)
86 err: `expected expression`
87 EXPR_STMT@[53; 54)
88 ERROR@[53; 54)
89 AT@[53; 54)
90 err: `expected SEMI`
91 err: `expected expression`
92 EXPR_STMT@[54; 55)
93 ERROR@[54; 55)
94 COMMA@[54; 55)
95 err: `expected SEMI`
96 WHITESPACE@[55; 56)
97 IMPL_ITEM@[56; 60)
98 IMPL_KW@[56; 60)
99 err: `expected type`
100 err: `expected `{``
101 err: `expected expression`
102 EXPR_STMT@[60; 61)
103 ERROR@[60; 61)
104 COMMA@[60; 61)
105 err: `expected SEMI`
106 WHITESPACE@[61; 62)
107 LET_STMT@[62; 65)
108 LET_KW@[62; 65)
109 err: `expected pattern`
110 err: `expected SEMI`
111 err: `expected expression`
112 ERROR@[65; 66)
113 R_PAREN@[65; 66)
114 WHITESPACE@[66; 67)
115 R_CURLY@[67; 68)
116 WHITESPACE@[68; 69)
117 FN_DEF@[69; 111)
118 FN_KW@[69; 71)
119 WHITESPACE@[71; 72)
120 NAME@[72; 73)
121 IDENT@[72; 73) "c"
122 PARAM_LIST@[73; 75)
123 L_PAREN@[73; 74)
124 R_PAREN@[74; 75)
125 WHITESPACE@[75; 76)
126 BLOCK@[76; 111)
127 L_CURLY@[76; 77)
128 WHITESPACE@[77; 78)
129 EXPR_STMT@[78; 91)
130 METHOD_CALL_EXPR@[78; 91)
131 PATH_EXPR@[78; 81)
132 PATH@[78; 81)
133 PATH_SEGMENT@[78; 81)
134 NAME_REF@[78; 81)
135 IDENT@[78; 81) "foo"
136 DOT@[81; 82)
137 NAME_REF@[82; 85)
138 IDENT@[82; 85) "bar"
139 ARG_LIST@[85; 91)
140 L_PAREN@[85; 86)
141 LITERAL@[86; 87)
142 INT_NUMBER@[86; 87) "1"
143 COMMA@[87; 88)
144 WHITESPACE@[88; 89)
145 LITERAL@[89; 90)
146 INT_NUMBER@[89; 90) "2"
147 COMMA@[90; 91)
148 err: `expected expression`
149 err: `expected SEMI`
150 WHITESPACE@[91; 92)
151 err: `expected expression`
152 EXPR_STMT@[92; 93)
153 ERROR@[92; 93)
154 AT@[92; 93)
155 err: `expected SEMI`
156 err: `expected expression`
157 EXPR_STMT@[93; 94)
158 ERROR@[93; 94)
159 COMMA@[93; 94)
160 err: `expected SEMI`
161 WHITESPACE@[94; 95)
162 err: `expected expression`
163 EXPR_STMT@[95; 96)
164 ERROR@[95; 96)
165 R_BRACK@[95; 96)
166 err: `expected SEMI`
167 err: `expected expression`
168 EXPR_STMT@[96; 97)
169 ERROR@[96; 97)
170 COMMA@[96; 97)
171 err: `expected SEMI`
172 WHITESPACE@[97; 98)
173 TRAIT_DEF@[98; 104)
174 TRAIT_KW@[98; 103)
175 err: `expected a name`
176 ERROR@[103; 104)
177 COMMA@[103; 104)
178 err: `expected `{``
179 WHITESPACE@[104; 105)
180 LET_STMT@[105; 108)
181 LET_KW@[105; 108)
182 err: `expected pattern`
183 err: `expected SEMI`
184 err: `expected expression`
185 ERROR@[108; 109)
186 R_PAREN@[108; 109)
187 WHITESPACE@[109; 110)
188 R_CURLY@[110; 111)
189 WHITESPACE@[111; 112)
diff --git a/crates/ra_syntax/tests/data/parser/err/0023_mismatched_paren.rs b/crates/ra_syntax/tests/data/parser/err/0023_mismatched_paren.rs
new file mode 100644
index 000000000..0206d563e
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0023_mismatched_paren.rs
@@ -0,0 +1,5 @@
1fn main() {
2 foo! (
3 bar, "baz", 1, 2.0
4 } //~ ERROR incorrect close delimiter
5}
diff --git a/crates/ra_syntax/tests/data/parser/err/0023_mismatched_paren.txt b/crates/ra_syntax/tests/data/parser/err/0023_mismatched_paren.txt
new file mode 100644
index 000000000..2df81b12b
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0023_mismatched_paren.txt
@@ -0,0 +1,43 @@
1ROOT@[0; 94)
2 FN_DEF@[0; 55)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 7)
6 IDENT@[3; 7) "main"
7 PARAM_LIST@[7; 9)
8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10)
11 BLOCK@[10; 55)
12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16)
14 MACRO_CALL@[16; 49)
15 PATH@[16; 19)
16 PATH_SEGMENT@[16; 19)
17 NAME_REF@[16; 19)
18 IDENT@[16; 19) "foo"
19 EXCL@[19; 20)
20 WHITESPACE@[20; 21)
21 TOKEN_TREE@[21; 49)
22 L_PAREN@[21; 22)
23 WHITESPACE@[22; 31)
24 IDENT@[31; 34) "bar"
25 COMMA@[34; 35)
26 WHITESPACE@[35; 36)
27 STRING@[36; 41)
28 COMMA@[41; 42)
29 WHITESPACE@[42; 43)
30 INT_NUMBER@[43; 44) "1"
31 COMMA@[44; 45)
32 WHITESPACE@[45; 46)
33 FLOAT_NUMBER@[46; 49) "2.0"
34 err: `unmatched `}``
35 WHITESPACE@[49; 54)
36 R_CURLY@[54; 55)
37 WHITESPACE@[55; 56)
38 COMMENT@[56; 91)
39 WHITESPACE@[91; 92)
40 err: `unmatched `}``
41 ERROR@[92; 93)
42 R_CURLY@[92; 93)
43 WHITESPACE@[93; 94)
diff --git a/crates/ra_syntax/tests/data/parser/err/0024_many_type_parens.rs b/crates/ra_syntax/tests/data/parser/err/0024_many_type_parens.rs
new file mode 100644
index 000000000..6c2e95c02
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0024_many_type_parens.rs
@@ -0,0 +1,7 @@
1fn f<T: (Copy) + (?Sized) + (for<'a> Trait<'a>)>() {}
2
3fn main() {
4 let _: Box<(Copy) + (?Sized) + (for<'a> Trait<'a>)>;
5 let _: Box<(?Sized) + (for<'a> Trait<'a>) + (Copy)>;
6 let _: Box<(for<'a> Trait<'a>) + (Copy) + (?Sized)>;
7}
diff --git a/crates/ra_syntax/tests/data/parser/err/0024_many_type_parens.txt b/crates/ra_syntax/tests/data/parser/err/0024_many_type_parens.txt
new file mode 100644
index 000000000..195c12e08
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0024_many_type_parens.txt
@@ -0,0 +1,310 @@
1ROOT@[0; 240)
2 FN_DEF@[0; 53)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 4)
6 IDENT@[3; 4) "f"
7 TYPE_PARAM_LIST@[4; 48)
8 L_ANGLE@[4; 5)
9 TYPE_PARAM@[5; 47)
10 NAME@[5; 6)
11 IDENT@[5; 6) "T"
12 COLON@[6; 7)
13 WHITESPACE@[7; 8)
14 L_PAREN@[8; 9)
15 PATH_TYPE@[9; 13)
16 PATH@[9; 13)
17 PATH_SEGMENT@[9; 13)
18 NAME_REF@[9; 13)
19 IDENT@[9; 13) "Copy"
20 R_PAREN@[13; 14)
21 WHITESPACE@[14; 15)
22 PLUS@[15; 16)
23 WHITESPACE@[16; 17)
24 L_PAREN@[17; 18)
25 QUESTION@[18; 19)
26 PATH_TYPE@[19; 24)
27 PATH@[19; 24)
28 PATH_SEGMENT@[19; 24)
29 NAME_REF@[19; 24)
30 IDENT@[19; 24) "Sized"
31 R_PAREN@[24; 25)
32 WHITESPACE@[25; 26)
33 PLUS@[26; 27)
34 WHITESPACE@[27; 28)
35 L_PAREN@[28; 29)
36 FOR_TYPE@[29; 46)
37 FOR_KW@[29; 32)
38 TYPE_PARAM_LIST@[32; 36)
39 L_ANGLE@[32; 33)
40 LIFETIME_PARAM@[33; 35)
41 LIFETIME@[33; 35) "'a"
42 R_ANGLE@[35; 36)
43 WHITESPACE@[36; 37)
44 PATH_TYPE@[37; 46)
45 PATH@[37; 46)
46 PATH_SEGMENT@[37; 46)
47 NAME_REF@[37; 42)
48 IDENT@[37; 42) "Trait"
49 TYPE_ARG_LIST@[42; 46)
50 L_ANGLE@[42; 43)
51 LIFETIME_ARG@[43; 45)
52 LIFETIME@[43; 45) "'a"
53 R_ANGLE@[45; 46)
54 R_PAREN@[46; 47)
55 R_ANGLE@[47; 48)
56 PARAM_LIST@[48; 50)
57 L_PAREN@[48; 49)
58 R_PAREN@[49; 50)
59 WHITESPACE@[50; 51)
60 BLOCK@[51; 53)
61 L_CURLY@[51; 52)
62 R_CURLY@[52; 53)
63 WHITESPACE@[53; 55)
64 FN_DEF@[55; 239)
65 FN_KW@[55; 57)
66 WHITESPACE@[57; 58)
67 NAME@[58; 62)
68 IDENT@[58; 62) "main"
69 PARAM_LIST@[62; 64)
70 L_PAREN@[62; 63)
71 R_PAREN@[63; 64)
72 WHITESPACE@[64; 65)
73 BLOCK@[65; 239)
74 L_CURLY@[65; 66)
75 WHITESPACE@[66; 71)
76 LET_STMT@[71; 121)
77 LET_KW@[71; 74)
78 WHITESPACE@[74; 75)
79 PLACEHOLDER_PAT@[75; 76)
80 UNDERSCORE@[75; 76)
81 COLON@[76; 77)
82 WHITESPACE@[77; 78)
83 PATH_TYPE@[78; 121)
84 PATH@[78; 88)
85 PATH_SEGMENT@[78; 88)
86 NAME_REF@[78; 81)
87 IDENT@[78; 81) "Box"
88 TYPE_ARG_LIST@[81; 88)
89 L_ANGLE@[81; 82)
90 TYPE_ARG@[82; 88)
91 PAREN_TYPE@[82; 88)
92 L_PAREN@[82; 83)
93 PATH_TYPE@[83; 87)
94 PATH@[83; 87)
95 PATH_SEGMENT@[83; 87)
96 NAME_REF@[83; 87)
97 IDENT@[83; 87) "Copy"
98 R_PAREN@[87; 88)
99 err: `expected COMMA`
100 err: `expected R_ANGLE`
101 WHITESPACE@[88; 89)
102 PLUS@[89; 90)
103 WHITESPACE@[90; 91)
104 L_PAREN@[91; 92)
105 QUESTION@[92; 93)
106 PATH_TYPE@[93; 98)
107 PATH@[93; 98)
108 PATH_SEGMENT@[93; 98)
109 NAME_REF@[93; 98)
110 IDENT@[93; 98) "Sized"
111 R_PAREN@[98; 99)
112 WHITESPACE@[99; 100)
113 PLUS@[100; 101)
114 WHITESPACE@[101; 102)
115 L_PAREN@[102; 103)
116 FOR_TYPE@[103; 120)
117 FOR_KW@[103; 106)
118 TYPE_PARAM_LIST@[106; 110)
119 L_ANGLE@[106; 107)
120 LIFETIME_PARAM@[107; 109)
121 LIFETIME@[107; 109) "'a"
122 R_ANGLE@[109; 110)
123 WHITESPACE@[110; 111)
124 PATH_TYPE@[111; 120)
125 PATH@[111; 120)
126 PATH_SEGMENT@[111; 120)
127 NAME_REF@[111; 116)
128 IDENT@[111; 116) "Trait"
129 TYPE_ARG_LIST@[116; 120)
130 L_ANGLE@[116; 117)
131 LIFETIME_ARG@[117; 119)
132 LIFETIME@[117; 119) "'a"
133 R_ANGLE@[119; 120)
134 R_PAREN@[120; 121)
135 err: `expected SEMI`
136 err: `expected expression`
137 EXPR_STMT@[121; 123)
138 ERROR@[121; 122)
139 R_ANGLE@[121; 122)
140 SEMI@[122; 123)
141 WHITESPACE@[123; 128)
142 LET_STMT@[128; 141)
143 LET_KW@[128; 131)
144 WHITESPACE@[131; 132)
145 PLACEHOLDER_PAT@[132; 133)
146 UNDERSCORE@[132; 133)
147 COLON@[133; 134)
148 WHITESPACE@[134; 135)
149 PATH_TYPE@[135; 141)
150 PATH@[135; 141)
151 PATH_SEGMENT@[135; 141)
152 NAME_REF@[135; 138)
153 IDENT@[135; 138) "Box"
154 TYPE_ARG_LIST@[138; 141)
155 L_ANGLE@[138; 139)
156 TYPE_ARG@[139; 141)
157 PAREN_TYPE@[139; 141)
158 L_PAREN@[139; 140)
159 err: `expected type`
160 ERROR@[140; 141)
161 QUESTION@[140; 141)
162 err: `expected R_PAREN`
163 err: `expected COMMA`
164 err: `expected R_ANGLE`
165 err: `expected SEMI`
166 EXPR_STMT@[141; 146)
167 PATH_EXPR@[141; 146)
168 PATH@[141; 146)
169 PATH_SEGMENT@[141; 146)
170 NAME_REF@[141; 146)
171 IDENT@[141; 146) "Sized"
172 err: `expected SEMI`
173 err: `expected expression`
174 EXPR_STMT@[146; 147)
175 ERROR@[146; 147)
176 R_PAREN@[146; 147)
177 err: `expected SEMI`
178 WHITESPACE@[147; 148)
179 err: `expected expression`
180 EXPR_STMT@[148; 149)
181 ERROR@[148; 149)
182 PLUS@[148; 149)
183 err: `expected SEMI`
184 WHITESPACE@[149; 150)
185 EXPR_STMT@[150; 151)
186 PAREN_EXPR@[150; 151)
187 L_PAREN@[150; 151)
188 err: `expected expression`
189 err: `expected R_PAREN`
190 err: `expected SEMI`
191 EXPR_STMT@[151; 157)
192 FOR_EXPR@[151; 157)
193 FOR_KW@[151; 154)
194 err: `expected pattern`
195 ERROR@[154; 155)
196 L_ANGLE@[154; 155)
197 err: `expected IN_KW`
198 err: `expected expression`
199 ERROR@[155; 157)
200 LIFETIME@[155; 157) "'a"
201 err: `expected a block`
202 err: `expected expression`
203 EXPR_STMT@[157; 158)
204 ERROR@[157; 158)
205 R_ANGLE@[157; 158)
206 err: `expected SEMI`
207 WHITESPACE@[158; 159)
208 EXPR_STMT@[159; 180)
209 BIN_EXPR@[159; 180)
210 BIN_EXPR@[159; 178)
211 BIN_EXPR@[159; 169)
212 BIN_EXPR@[159; 167)
213 PATH_EXPR@[159; 164)
214 PATH@[159; 164)
215 PATH_SEGMENT@[159; 164)
216 NAME_REF@[159; 164)
217 IDENT@[159; 164) "Trait"
218 L_ANGLE@[164; 165)
219 err: `expected expression`
220 ERROR@[165; 167)
221 LIFETIME@[165; 167) "'a"
222 R_ANGLE@[167; 168)
223 err: `expected expression`
224 ERROR@[168; 169)
225 R_PAREN@[168; 169)
226 WHITESPACE@[169; 170)
227 PLUS@[170; 171)
228 WHITESPACE@[171; 172)
229 PAREN_EXPR@[172; 178)
230 L_PAREN@[172; 173)
231 PATH_EXPR@[173; 177)
232 PATH@[173; 177)
233 PATH_SEGMENT@[173; 177)
234 NAME_REF@[173; 177)
235 IDENT@[173; 177) "Copy"
236 R_PAREN@[177; 178)
237 R_ANGLE@[178; 179)
238 err: `expected expression`
239 ERROR@[179; 180)
240 SEMI@[179; 180)
241 err: `expected SEMI`
242 WHITESPACE@[180; 185)
243 LET_STMT@[185; 235)
244 LET_KW@[185; 188)
245 WHITESPACE@[188; 189)
246 PLACEHOLDER_PAT@[189; 190)
247 UNDERSCORE@[189; 190)
248 COLON@[190; 191)
249 WHITESPACE@[191; 192)
250 PATH_TYPE@[192; 235)
251 PATH@[192; 215)
252 PATH_SEGMENT@[192; 215)
253 NAME_REF@[192; 195)
254 IDENT@[192; 195) "Box"
255 TYPE_ARG_LIST@[195; 215)
256 L_ANGLE@[195; 196)
257 TYPE_ARG@[196; 215)
258 PAREN_TYPE@[196; 215)
259 L_PAREN@[196; 197)
260 FOR_TYPE@[197; 214)
261 FOR_KW@[197; 200)
262 TYPE_PARAM_LIST@[200; 204)
263 L_ANGLE@[200; 201)
264 LIFETIME_PARAM@[201; 203)
265 LIFETIME@[201; 203) "'a"
266 R_ANGLE@[203; 204)
267 WHITESPACE@[204; 205)
268 PATH_TYPE@[205; 214)
269 PATH@[205; 214)
270 PATH_SEGMENT@[205; 214)
271 NAME_REF@[205; 210)
272 IDENT@[205; 210) "Trait"
273 TYPE_ARG_LIST@[210; 214)
274 L_ANGLE@[210; 211)
275 LIFETIME_ARG@[211; 213)
276 LIFETIME@[211; 213) "'a"
277 R_ANGLE@[213; 214)
278 R_PAREN@[214; 215)
279 err: `expected COMMA`
280 err: `expected R_ANGLE`
281 WHITESPACE@[215; 216)
282 PLUS@[216; 217)
283 WHITESPACE@[217; 218)
284 L_PAREN@[218; 219)
285 PATH_TYPE@[219; 223)
286 PATH@[219; 223)
287 PATH_SEGMENT@[219; 223)
288 NAME_REF@[219; 223)
289 IDENT@[219; 223) "Copy"
290 R_PAREN@[223; 224)
291 WHITESPACE@[224; 225)
292 PLUS@[225; 226)
293 WHITESPACE@[226; 227)
294 L_PAREN@[227; 228)
295 QUESTION@[228; 229)
296 PATH_TYPE@[229; 234)
297 PATH@[229; 234)
298 PATH_SEGMENT@[229; 234)
299 NAME_REF@[229; 234)
300 IDENT@[229; 234) "Sized"
301 R_PAREN@[234; 235)
302 err: `expected SEMI`
303 err: `expected expression`
304 EXPR_STMT@[235; 237)
305 ERROR@[235; 236)
306 R_ANGLE@[235; 236)
307 SEMI@[236; 237)
308 WHITESPACE@[237; 238)
309 R_CURLY@[238; 239)
310 WHITESPACE@[239; 240)
diff --git a/crates/ra_syntax/tests/data/parser/err/0025_nope.rs b/crates/ra_syntax/tests/data/parser/err/0025_nope.rs
new file mode 100644
index 000000000..28726ed51
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0025_nope.rs
@@ -0,0 +1,31 @@
1fn main() {
2 enum Test {
3 Var1,
4 Var2(String),
5 Var3 {
6 abc: {}, //~ ERROR: expected type, found `{`
7 },
8 }
9
10 // recover...
11 let a = 1;
12 enum Test2 {
13 Fine,
14 }
15
16 enum Test3 {
17 StillFine {
18 def: i32,
19 },
20 }
21
22 {
23 // fail again
24 enum Test4 {
25 Nope(i32 {}) //~ ERROR: found `{`
26 //~^ ERROR: found `{`
27 }
28 }
29 // still recover later
30 let bad_syntax = _; //~ ERROR: expected expression, found reserved identifier `_`
31}
diff --git a/crates/ra_syntax/tests/data/parser/err/0025_nope.txt b/crates/ra_syntax/tests/data/parser/err/0025_nope.txt
new file mode 100644
index 000000000..c30b8585f
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0025_nope.txt
@@ -0,0 +1,203 @@
1ROOT@[0; 575)
2 FN_DEF@[0; 574)
3 FN_KW@[0; 2)
4 WHITESPACE@[2; 3)
5 NAME@[3; 7)
6 IDENT@[3; 7) "main"
7 PARAM_LIST@[7; 9)
8 L_PAREN@[7; 8)
9 R_PAREN@[8; 9)
10 WHITESPACE@[9; 10)
11 BLOCK@[10; 574)
12 L_CURLY@[10; 11)
13 WHITESPACE@[11; 16)
14 ENUM_DEF@[16; 152)
15 ENUM_KW@[16; 20)
16 WHITESPACE@[20; 21)
17 NAME@[21; 25)
18 IDENT@[21; 25) "Test"
19 WHITESPACE@[25; 26)
20 ENUM_VARIANT_LIST@[26; 152)
21 L_CURLY@[26; 27)
22 WHITESPACE@[27; 36)
23 ENUM_VARIANT@[36; 40)
24 NAME@[36; 40)
25 IDENT@[36; 40) "Var1"
26 COMMA@[40; 41)
27 WHITESPACE@[41; 50)
28 ENUM_VARIANT@[50; 62)
29 NAME@[50; 54)
30 IDENT@[50; 54) "Var2"
31 POS_FIELD_LIST@[54; 62)
32 L_PAREN@[54; 55)
33 POS_FIELD@[55; 61)
34 PATH_TYPE@[55; 61)
35 PATH@[55; 61)
36 PATH_SEGMENT@[55; 61)
37 NAME_REF@[55; 61)
38 IDENT@[55; 61) "String"
39 R_PAREN@[61; 62)
40 COMMA@[62; 63)
41 WHITESPACE@[63; 72)
42 ENUM_VARIANT@[72; 145)
43 NAME@[72; 76)
44 IDENT@[72; 76) "Var3"
45 WHITESPACE@[76; 77)
46 NAMED_FIELD_DEF_LIST@[77; 145)
47 L_CURLY@[77; 78)
48 WHITESPACE@[78; 91)
49 NAMED_FIELD_DEF@[91; 95)
50 NAME@[91; 94)
51 IDENT@[91; 94) "abc"
52 COLON@[94; 95)
53 err: `expected type`
54 err: `expected COMMA`
55 WHITESPACE@[95; 96)
56 err: `expected field`
57 ERROR@[96; 98)
58 L_CURLY@[96; 97)
59 R_CURLY@[97; 98)
60 err: `expected field declaration`
61 ERROR@[98; 99)
62 COMMA@[98; 99)
63 WHITESPACE@[99; 100)
64 COMMENT@[100; 135)
65 WHITESPACE@[135; 144)
66 R_CURLY@[144; 145)
67 COMMA@[145; 146)
68 WHITESPACE@[146; 151)
69 R_CURLY@[151; 152)
70 WHITESPACE@[152; 158)
71 COMMENT@[158; 171)
72 WHITESPACE@[171; 176)
73 LET_STMT@[176; 186)
74 LET_KW@[176; 179)
75 WHITESPACE@[179; 180)
76 BIND_PAT@[180; 181)
77 NAME@[180; 181)
78 IDENT@[180; 181) "a"
79 WHITESPACE@[181; 182)
80 EQ@[182; 183)
81 WHITESPACE@[183; 184)
82 LITERAL@[184; 185)
83 INT_NUMBER@[184; 185) "1"
84 SEMI@[185; 186)
85 WHITESPACE@[186; 191)
86 ENUM_DEF@[191; 223)
87 ENUM_KW@[191; 195)
88 WHITESPACE@[195; 196)
89 NAME@[196; 201)
90 IDENT@[196; 201) "Test2"
91 WHITESPACE@[201; 202)
92 ENUM_VARIANT_LIST@[202; 223)
93 L_CURLY@[202; 203)
94 WHITESPACE@[203; 212)
95 ENUM_VARIANT@[212; 216)
96 NAME@[212; 216)
97 IDENT@[212; 216) "Fine"
98 COMMA@[216; 217)
99 WHITESPACE@[217; 222)
100 R_CURLY@[222; 223)
101 WHITESPACE@[223; 229)
102 ENUM_DEF@[229; 300)
103 ENUM_KW@[229; 233)
104 WHITESPACE@[233; 234)
105 NAME@[234; 239)
106 IDENT@[234; 239) "Test3"
107 WHITESPACE@[239; 240)
108 ENUM_VARIANT_LIST@[240; 300)
109 L_CURLY@[240; 241)
110 WHITESPACE@[241; 250)
111 ENUM_VARIANT@[250; 293)
112 NAME@[250; 259)
113 IDENT@[250; 259) "StillFine"
114 WHITESPACE@[259; 260)
115 NAMED_FIELD_DEF_LIST@[260; 293)
116 L_CURLY@[260; 261)
117 WHITESPACE@[261; 274)
118 NAMED_FIELD_DEF@[274; 282)
119 NAME@[274; 277)
120 IDENT@[274; 277) "def"
121 COLON@[277; 278)
122 WHITESPACE@[278; 279)
123 PATH_TYPE@[279; 282)
124 PATH@[279; 282)
125 PATH_SEGMENT@[279; 282)
126 NAME_REF@[279; 282)
127 IDENT@[279; 282) "i32"
128 COMMA@[282; 283)
129 WHITESPACE@[283; 292)
130 R_CURLY@[292; 293)
131 COMMA@[293; 294)
132 WHITESPACE@[294; 299)
133 R_CURLY@[299; 300)
134 WHITESPACE@[300; 306)
135 EXPR_STMT@[306; 459)
136 BLOCK_EXPR@[306; 459)
137 BLOCK@[306; 459)
138 L_CURLY@[306; 307)
139 WHITESPACE@[307; 316)
140 COMMENT@[316; 329)
141 WHITESPACE@[329; 338)
142 ENUM_DEF@[338; 453)
143 ENUM_KW@[338; 342)
144 WHITESPACE@[342; 343)
145 NAME@[343; 348)
146 IDENT@[343; 348) "Test4"
147 WHITESPACE@[348; 349)
148 ENUM_VARIANT_LIST@[349; 453)
149 L_CURLY@[349; 350)
150 WHITESPACE@[350; 363)
151 ENUM_VARIANT@[363; 372)
152 NAME@[363; 367)
153 IDENT@[363; 367) "Nope"
154 POS_FIELD_LIST@[367; 372)
155 L_PAREN@[367; 368)
156 POS_FIELD@[368; 371)
157 PATH_TYPE@[368; 371)
158 PATH@[368; 371)
159 PATH_SEGMENT@[368; 371)
160 NAME_REF@[368; 371)
161 IDENT@[368; 371) "i32"
162 err: `expected COMMA`
163 WHITESPACE@[371; 372)
164 err: `expected a type`
165 err: `expected R_PAREN`
166 err: `expected COMMA`
167 err: `expected enum variant`
168 ERROR@[372; 372)
169 ERROR@[372; 374)
170 L_CURLY@[372; 373)
171 R_CURLY@[373; 374)
172 err: `expected enum variant`
173 ERROR@[374; 375)
174 R_PAREN@[374; 375)
175 WHITESPACE@[375; 376)
176 COMMENT@[376; 396)
177 WHITESPACE@[396; 422)
178 COMMENT@[422; 443)
179 WHITESPACE@[443; 452)
180 R_CURLY@[452; 453)
181 WHITESPACE@[453; 458)
182 R_CURLY@[458; 459)
183 WHITESPACE@[459; 464)
184 COMMENT@[464; 486)
185 WHITESPACE@[486; 491)
186 LET_STMT@[491; 510)
187 LET_KW@[491; 494)
188 WHITESPACE@[494; 495)
189 BIND_PAT@[495; 505)
190 NAME@[495; 505)
191 IDENT@[495; 505) "bad_syntax"
192 WHITESPACE@[505; 506)
193 EQ@[506; 507)
194 WHITESPACE@[507; 508)
195 err: `expected expression`
196 ERROR@[508; 509)
197 UNDERSCORE@[508; 509)
198 SEMI@[509; 510)
199 WHITESPACE@[510; 511)
200 COMMENT@[511; 572)
201 WHITESPACE@[572; 573)
202 R_CURLY@[573; 574)
203 WHITESPACE@[574; 575)