diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-11-06 18:20:30 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-11-06 18:20:30 +0000 |
commit | 21797bf0efdeafde4148fe02ba4bd11171737872 (patch) | |
tree | b0007b25088335b70d1f7109824fdaeaec08a6eb | |
parent | dafe747dcc069084fc8bc771c5dcf72e7cb9ec23 (diff) | |
parent | ec131b6c7bd27d9034ed5e600b80420d35c00a21 (diff) |
Merge #208
208: grammar: fix where clause parsing r=matklad a=matklad
closes #205
Co-authored-by: Aleksey Kladov <[email protected]>
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 @@ | |||
1 | fn 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 @@ | |||
1 | ROOT@[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) | ||