Skip to content

Commit 91171de

Browse files
bors[bot]matklad
andauthored
Merge #2863
2863: Minimize test r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
2 parents d3c4fbb + 5398b9e commit 91171de

File tree

9 files changed

+88
-190
lines changed

9 files changed

+88
-190
lines changed

crates/ra_parser/src/grammar/attributes.rs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,6 @@ pub(super) fn inner_attributes(p: &mut Parser) {
88
}
99
}
1010

11-
pub(super) fn with_outer_attributes(
12-
p: &mut Parser,
13-
f: impl Fn(&mut Parser) -> Option<CompletedMarker>,
14-
) -> bool {
15-
let am = p.start();
16-
let has_attrs = p.at(T![#]);
17-
attributes::outer_attributes(p);
18-
let cm = f(p);
19-
let success = cm.is_some();
20-
21-
match (has_attrs, cm) {
22-
(true, Some(cm)) => {
23-
let kind = cm.kind();
24-
cm.undo_completion(p).abandon(p);
25-
am.complete(p, kind);
26-
}
27-
_ => am.abandon(p),
28-
}
29-
30-
success
31-
}
32-
3311
pub(super) fn outer_attributes(p: &mut Parser) {
3412
while p.at(T![#]) {
3513
attribute(p, false)

crates/ra_parser/src/grammar/expressions/atom.rs

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -181,47 +181,42 @@ fn tuple_expr(p: &mut Parser) -> CompletedMarker {
181181
fn array_expr(p: &mut Parser) -> CompletedMarker {
182182
assert!(p.at(T!['[']));
183183
let m = p.start();
184-
p.bump(T!['[']);
185-
if p.eat(T![']']) {
186-
return m.complete(p, ARRAY_EXPR);
187-
}
188184

189-
// test first_array_member_attributes
190-
// pub const A: &[i64] = &[
191-
// #[cfg(test)]
192-
// 1,
193-
// 2,
194-
// ];
195-
attributes::with_outer_attributes(p, |p| expr(p).0);
185+
let mut n_exprs = 0u32;
186+
let mut has_semi = false;
196187

197-
if p.eat(T![;]) {
198-
expr(p);
199-
p.expect(T![']']);
200-
return m.complete(p, ARRAY_EXPR);
201-
}
188+
p.bump(T!['[']);
202189
while !p.at(EOF) && !p.at(T![']']) {
203-
p.expect(T![,]);
204-
if p.at(T![']']) {
205-
break;
206-
}
190+
n_exprs += 1;
191+
192+
// test array_attrs
193+
// const A: &[i64] = &[1, #[cfg(test)] 2];
194+
let m = p.start();
195+
let has_attrs = p.at(T![#]);
196+
attributes::outer_attributes(p);
207197

208-
// test subsequent_array_member_attributes
209-
// pub const A: &[i64] = &[
210-
// 1,
211-
// #[cfg(test)]
212-
// 2,
213-
// ];
214-
if !attributes::with_outer_attributes(p, |p| {
215-
if !p.at_ts(EXPR_FIRST) {
216-
p.error("expected expression");
217-
return None;
198+
let cm = expr(p).0;
199+
200+
match (has_attrs, cm) {
201+
(true, Some(cm)) => {
202+
let kind = cm.kind();
203+
cm.undo_completion(p).abandon(p);
204+
m.complete(p, kind);
218205
}
219-
expr(p).0
220-
}) {
206+
_ => m.abandon(p),
207+
}
208+
209+
if n_exprs == 1 && p.eat(T![;]) {
210+
has_semi = true;
211+
continue;
212+
}
213+
214+
if has_semi || !p.at(T![']']) && !p.expect(T![,]) {
221215
break;
222216
}
223217
}
224218
p.expect(T![']']);
219+
225220
m.complete(p, ARRAY_EXPR)
226221
}
227222

crates/ra_syntax/test_data/parser/err/0022_bad_exprs.txt

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ SOURCE_FILE@[0; 112)
1212
BLOCK@[7; 33)
1313
L_CURLY@[7; 8) "{"
1414
WHITESPACE@[8; 9) " "
15-
EXPR_STMT@[9; 15)
16-
ARRAY_EXPR@[9; 15)
15+
EXPR_STMT@[9; 26)
16+
ARRAY_EXPR@[9; 26)
1717
L_BRACK@[9; 10) "["
1818
LITERAL@[10; 11)
1919
INT_NUMBER@[10; 11) "1"
@@ -22,17 +22,13 @@ SOURCE_FILE@[0; 112)
2222
LITERAL@[13; 14)
2323
INT_NUMBER@[13; 14) "2"
2424
COMMA@[14; 15) ","
25-
WHITESPACE@[15; 16) " "
26-
EXPR_STMT@[16; 17)
27-
ERROR@[16; 17)
28-
AT@[16; 17) "@"
29-
EXPR_STMT@[17; 18)
30-
ERROR@[17; 18)
25+
WHITESPACE@[15; 16) " "
26+
ERROR@[16; 17)
27+
AT@[16; 17) "@"
3128
COMMA@[17; 18) ","
32-
WHITESPACE@[18; 19) " "
33-
STRUCT_DEF@[19; 26)
34-
STRUCT_KW@[19; 25) "struct"
35-
ERROR@[25; 26)
29+
WHITESPACE@[18; 19) " "
30+
ERROR@[19; 25)
31+
STRUCT_KW@[19; 25) "struct"
3632
COMMA@[25; 26) ","
3733
WHITESPACE@[26; 27) " "
3834
LET_STMT@[27; 31)
@@ -151,15 +147,12 @@ SOURCE_FILE@[0; 112)
151147
WHITESPACE@[109; 110) " "
152148
R_CURLY@[110; 111) "}"
153149
WHITESPACE@[111; 112) "\n"
154-
error 15: expected expression
155-
error 15: expected R_BRACK
156-
error 15: expected SEMI
157150
error 16: expected expression
158-
error 17: expected SEMI
159-
error 17: expected expression
160-
error 18: expected SEMI
161-
error 25: expected a name
162-
error 26: expected `;`, `{`, or `(`
151+
error 19: expected expression
152+
error 26: expected expression
153+
error 26: expected COMMA
154+
error 26: expected R_BRACK
155+
error 26: expected SEMI
163156
error 30: expected pattern
164157
error 31: expected SEMI
165158
error 52: expected expression

crates/ra_syntax/test_data/parser/inline/ok/0135_first_array_member_attributes.rs

Lines changed: 0 additions & 5 deletions
This file was deleted.

crates/ra_syntax/test_data/parser/inline/ok/0135_first_array_member_attributes.txt

Lines changed: 0 additions & 53 deletions
This file was deleted.

crates/ra_syntax/test_data/parser/inline/ok/0136_subsequent_array_member_attributes.rs

Lines changed: 0 additions & 5 deletions
This file was deleted.

crates/ra_syntax/test_data/parser/inline/ok/0136_subsequent_array_member_attributes.txt

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
const A: &[i64] = &[1, #[cfg(test)] 2];
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
SOURCE_FILE@[0; 40)
2+
CONST_DEF@[0; 39)
3+
CONST_KW@[0; 5) "const"
4+
WHITESPACE@[5; 6) " "
5+
NAME@[6; 7)
6+
IDENT@[6; 7) "A"
7+
COLON@[7; 8) ":"
8+
WHITESPACE@[8; 9) " "
9+
REFERENCE_TYPE@[9; 15)
10+
AMP@[9; 10) "&"
11+
SLICE_TYPE@[10; 15)
12+
L_BRACK@[10; 11) "["
13+
PATH_TYPE@[11; 14)
14+
PATH@[11; 14)
15+
PATH_SEGMENT@[11; 14)
16+
NAME_REF@[11; 14)
17+
IDENT@[11; 14) "i64"
18+
R_BRACK@[14; 15) "]"
19+
WHITESPACE@[15; 16) " "
20+
EQ@[16; 17) "="
21+
WHITESPACE@[17; 18) " "
22+
REF_EXPR@[18; 38)
23+
AMP@[18; 19) "&"
24+
ARRAY_EXPR@[19; 38)
25+
L_BRACK@[19; 20) "["
26+
LITERAL@[20; 21)
27+
INT_NUMBER@[20; 21) "1"
28+
COMMA@[21; 22) ","
29+
WHITESPACE@[22; 23) " "
30+
LITERAL@[23; 37)
31+
ATTR@[23; 35)
32+
POUND@[23; 24) "#"
33+
L_BRACK@[24; 25) "["
34+
PATH@[25; 28)
35+
PATH_SEGMENT@[25; 28)
36+
NAME_REF@[25; 28)
37+
IDENT@[25; 28) "cfg"
38+
TOKEN_TREE@[28; 34)
39+
L_PAREN@[28; 29) "("
40+
IDENT@[29; 33) "test"
41+
R_PAREN@[33; 34) ")"
42+
R_BRACK@[34; 35) "]"
43+
WHITESPACE@[35; 36) " "
44+
INT_NUMBER@[36; 37) "2"
45+
R_BRACK@[37; 38) "]"
46+
SEMI@[38; 39) ";"
47+
WHITESPACE@[39; 40) "\n"

0 commit comments

Comments
 (0)