aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_parser/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_parser/src')
-rw-r--r--crates/ra_parser/src/grammar.rs24
-rw-r--r--crates/ra_parser/src/grammar/expressions.rs8
2 files changed, 13 insertions, 19 deletions
diff --git a/crates/ra_parser/src/grammar.rs b/crates/ra_parser/src/grammar.rs
index 15aab6c6f..f94702e97 100644
--- a/crates/ra_parser/src/grammar.rs
+++ b/crates/ra_parser/src/grammar.rs
@@ -182,21 +182,11 @@ fn name_ref(p: &mut Parser) {
182} 182}
183 183
184fn error_block(p: &mut Parser, message: &str) { 184fn error_block(p: &mut Parser, message: &str) {
185 go(p, Some(message)); 185 assert!(p.at(L_CURLY));
186 fn go(p: &mut Parser, message: Option<&str>) { 186 let m = p.start();
187 assert!(p.at(L_CURLY)); 187 p.error(message);
188 let m = p.start(); 188 p.bump();
189 if let Some(message) = message { 189 expressions::expr_block_contents(p);
190 p.error(message); 190 p.eat(R_CURLY);
191 } 191 m.complete(p, ERROR);
192 p.bump();
193 while !p.at(EOF) && !p.at(R_CURLY) {
194 match p.current() {
195 L_CURLY => go(p, None),
196 _ => p.bump(),
197 }
198 }
199 p.eat(R_CURLY);
200 m.complete(p, ERROR);
201 }
202} 192}
diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs
index d5a4f4d7b..70c71a8e1 100644
--- a/crates/ra_parser/src/grammar/expressions.rs
+++ b/crates/ra_parser/src/grammar/expressions.rs
@@ -33,6 +33,12 @@ pub(crate) fn block(p: &mut Parser) {
33 } 33 }
34 let m = p.start(); 34 let m = p.start();
35 p.bump(); 35 p.bump();
36 expr_block_contents(p);
37 p.expect(R_CURLY);
38 m.complete(p, BLOCK);
39}
40
41pub(crate) fn expr_block_contents(p: &mut Parser) {
36 // This is checked by a validator 42 // This is checked by a validator
37 attributes::inner_attributes(p); 43 attributes::inner_attributes(p);
38 44
@@ -101,8 +107,6 @@ pub(crate) fn block(p: &mut Parser) {
101 } 107 }
102 } 108 }
103 } 109 }
104 p.expect(R_CURLY);
105 m.complete(p, BLOCK);
106 110
107 // test let_stmt; 111 // test let_stmt;
108 // fn foo() { 112 // fn foo() {