aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-11-06 18:19:32 +0000
committerAleksey Kladov <[email protected]>2018-11-06 18:19:32 +0000
commitec131b6c7bd27d9034ed5e600b80420d35c00a21 (patch)
treeb0007b25088335b70d1f7109824fdaeaec08a6eb
parentdafe747dcc069084fc8bc771c5dcf72e7cb9ec23 (diff)
grammar: fix where clause parsing
closes #205
-rw-r--r--crates/ra_syntax/src/grammar/type_params.rs6
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0027_incomplere_where_for.rs3
-rw-r--r--crates/ra_syntax/tests/data/parser/err/0027_incomplere_where_for.txt27
3 files changed, 35 insertions, 1 deletions
diff --git a/crates/ra_syntax/src/grammar/type_params.rs b/crates/ra_syntax/src/grammar/type_params.rs
index 68eca0ce8..f4c98675c 100644
--- a/crates/ra_syntax/src/grammar/type_params.rs
+++ b/crates/ra_syntax/src/grammar/type_params.rs
@@ -135,7 +135,11 @@ fn where_predicate(p: &mut Parser) {
135 if p.at(FOR_KW) { 135 if p.at(FOR_KW) {
136 types::for_binder(p); 136 types::for_binder(p);
137 } 137 }
138 types::path_type(p); 138 if paths::is_path_start(p) || p.at(L_ANGLE) {
139 types::path_type_(p, false);
140 } else {
141 p.error("expected a type");
142 }
139 if p.at(COLON) { 143 if p.at(COLON) {
140 bounds(p); 144 bounds(p);
141 } else { 145 } else {
diff --git a/crates/ra_syntax/tests/data/parser/err/0027_incomplere_where_for.rs b/crates/ra_syntax/tests/data/parser/err/0027_incomplere_where_for.rs
new file mode 100644
index 000000000..2792c2084
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0027_incomplere_where_for.rs
@@ -0,0 +1,3 @@
1fn foo()
2 where for<'a>
3{}
diff --git a/crates/ra_syntax/tests/data/parser/err/0027_incomplere_where_for.txt b/crates/ra_syntax/tests/data/parser/err/0027_incomplere_where_for.txt
new file mode 100644
index 000000000..94b75a656
--- /dev/null
+++ b/crates/ra_syntax/tests/data/parser/err/0027_incomplere_where_for.txt
@@ -0,0 +1,27 @@
1ROOT@[0; 30)
2 FN_DEF@[0; 29)
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; 13)
11 WHERE_CLAUSE@[13; 26)
12 WHERE_KW@[13; 18)
13 WHITESPACE@[18; 19)
14 WHERE_PRED@[19; 26)
15 FOR_KW@[19; 22)
16 TYPE_PARAM_LIST@[22; 26)
17 L_ANGLE@[22; 23)
18 LIFETIME_PARAM@[23; 25)
19 LIFETIME@[23; 25) "'a"
20 R_ANGLE@[25; 26)
21 err: `expected a type`
22 err: `expected colon`
23 WHITESPACE@[26; 27)
24 BLOCK@[27; 29)
25 L_CURLY@[27; 28)
26 R_CURLY@[28; 29)
27 WHITESPACE@[29; 30)