Skip to content

Commit 4be9ed6

Browse files
committed
Properly attach attributes to Param instead of parent ParamList
1 parent f312555 commit 4be9ed6

File tree

4 files changed

+143
-144
lines changed

4 files changed

+143
-144
lines changed

crates/parser/src/grammar/params.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,23 @@ fn list_(p: &mut Parser, flavor: Flavor) {
4747
if let FnDef = flavor {
4848
// test self_param_outer_attr
4949
// fn f(#[must_use] self) {}
50+
let m = p.start();
5051
attributes::outer_attrs(p);
51-
opt_self_param(p);
52+
opt_self_param(p, m);
5253
}
5354

5455
while !p.at(EOF) && !p.at(ket) {
5556
// test param_outer_arg
5657
// fn f(#[attr1] pat: Type) {}
58+
let m = p.start();
5759
attributes::outer_attrs(p);
5860

5961
if !p.at_ts(PARAM_FIRST) {
6062
p.error("expected value parameter");
63+
m.abandon(p);
6164
break;
6265
}
63-
let param = param(p, flavor);
66+
let param = param(p, m, flavor);
6467
if !p.at(ket) {
6568
p.expect(T![,]);
6669
}
@@ -77,9 +80,8 @@ const PARAM_FIRST: TokenSet = patterns::PATTERN_FIRST.union(types::TYPE_FIRST);
7780

7881
struct Variadic(bool);
7982

80-
fn param(p: &mut Parser, flavor: Flavor) -> Variadic {
83+
fn param(p: &mut Parser, m: Marker, flavor: Flavor) -> Variadic {
8184
let mut res = Variadic(false);
82-
let m = p.start();
8385
match flavor {
8486
// test param_list_vararg
8587
// extern "C" { fn printf(format: *const i8, ...) -> i32; }
@@ -151,10 +153,8 @@ fn variadic_param(p: &mut Parser) -> bool {
151153
// fn d(&'a mut self, x: i32) {}
152154
// fn e(mut self) {}
153155
// }
154-
fn opt_self_param(p: &mut Parser) {
155-
let m;
156+
fn opt_self_param(p: &mut Parser, m: Marker) {
156157
if p.at(T![self]) || p.at(T![mut]) && p.nth(1) == T![self] {
157-
m = p.start();
158158
p.eat(T![mut]);
159159
p.eat(T![self]);
160160
// test arb_self_types
@@ -174,9 +174,8 @@ fn opt_self_param(p: &mut Parser) {
174174
(T![&], T![mut], T![self], _) => 3,
175175
(T![&], LIFETIME_IDENT, T![self], _) => 3,
176176
(T![&], LIFETIME_IDENT, T![mut], T![self]) => 4,
177-
_ => return,
177+
_ => return m.abandon(p),
178178
};
179-
m = p.start();
180179
p.bump_any();
181180
if p.at(LIFETIME_IDENT) {
182181
lifetime(p);

crates/syntax/test_data/parser/inline/ok/0138_self_param_outer_attr.rast

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ [email protected]
66
77
88
9-
ATTR@5..16
10-
POUND@5..6 "#"
11-
12-
13-
PATH_SEGMENT@7..15
14-
NAME_REF@7..15
15-
IDENT@7..15 "must_use"
16-
17-
18-
9+
SELF_PARAM@5..21
10+
ATTR@5..16
11+
12+
13+
PATH@7..15
14+
PATH_SEGMENT@7..15
15+
NAME_REF@7..15
16+
[email protected] "must_use"
17+
18+
1919
2020
2121

crates/syntax/test_data/parser/ok/0051_parameter_attrs.rast

Lines changed: 111 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -107,16 +107,16 @@ [email protected]
107107
108108
109109
110-
ATTR@106..113
111-
POUND@106..107 "#"
112-
113-
114-
PATH_SEGMENT@108..112
115-
NAME_REF@108..112
116-
IDENT@108..112 "attr"
117-
118-
119-
110+
PARAM@106..117
111+
ATTR@106..113
112+
113+
114+
PATH@108..112
115+
PATH_SEGMENT@108..112
116+
NAME_REF@108..112
117+
118+
119+
120120
121121
122122
@@ -153,16 +153,16 @@ [email protected]
153153
154154
155155
156-
ATTR@146..153
157-
POUND@146..147 "#"
158-
159-
160-
PATH_SEGMENT@148..152
161-
NAME_REF@148..152
162-
IDENT@148..152 "attr"
163-
164-
165-
156+
PARAM@146..166
157+
ATTR@146..153
158+
159+
160+
PATH@148..152
161+
PATH_SEGMENT@148..152
162+
NAME_REF@148..152
163+
164+
165+
166166
167167
168168
@@ -224,17 +224,17 @@ [email protected]
224224
225225
226226
227-
ATTR@213..221
228-
POUND@213..214 "#"
229-
230-
231-
232-
PATH_SEGMENT@216..220
233-
NAME_REF@216..220
234-
IDENT@216..220 "attr"
235-
236-
237-
227+
PARAM@213..232
228+
ATTR@213..221
229+
230+
231+
232+
PATH@216..220
233+
PATH_SEGMENT@216..220
234+
NAME_REF@216..220
235+
236+
237+
238238
239239
240240
@@ -271,16 +271,16 @@ [email protected]
271271
272272
273273
274-
ATTR@257..268
275-
POUND@257..258 "#"
276-
277-
278-
PATH_SEGMENT@259..267
279-
NAME_REF@259..267
280-
IDENT@259..267 "must_use"
281-
282-
283-
274+
SELF_PARAM@257..273
275+
ATTR@257..268
276+
277+
278+
PATH@259..267
279+
PATH_SEGMENT@259..267
280+
NAME_REF@259..267
281+
[email protected] "must_use"
282+
283+
284284
285285
286286
@@ -295,16 +295,16 @@ [email protected]
295295
296296
297297
298-
ATTR@289..296
299-
POUND@289..290 "#"
300-
301-
302-
PATH_SEGMENT@291..295
303-
NAME_REF@291..295
304-
IDENT@291..295 "attr"
305-
306-
307-
298+
SELF_PARAM@289..301
299+
ATTR@289..296
300+
301+
302+
PATH@291..295
303+
PATH_SEGMENT@291..295
304+
NAME_REF@291..295
305+
306+
307+
308308
309309
310310
@@ -319,16 +319,16 @@ [email protected]
319319
320320
321321
322-
ATTR@317..324
323-
POUND@317..318 "#"
324-
325-
326-
PATH_SEGMENT@319..323
327-
NAME_REF@319..323
328-
IDENT@319..323 "attr"
329-
330-
331-
322+
SELF_PARAM@317..330
323+
ATTR@317..324
324+
325+
326+
PATH@319..323
327+
PATH_SEGMENT@319..323
328+
NAME_REF@319..323
329+
330+
331+
332332
333333
334334
@@ -350,16 +350,16 @@ [email protected]
350350
351351
352352
353-
ATTR@350..357
354-
POUND@350..351 "#"
355-
356-
357-
PATH_SEGMENT@352..356
358-
NAME_REF@352..356
359-
IDENT@352..356 "attr"
360-
361-
362-
353+
SELF_PARAM@350..367
354+
ATTR@350..357
355+
356+
357+
PATH@352..356
358+
PATH_SEGMENT@352..356
359+
NAME_REF@352..356
360+
361+
362+
363363
364364
365365
@@ -383,16 +383,16 @@ [email protected]
383383
384384
385385
386-
ATTR@387..394
387-
POUND@387..388 "#"
388-
389-
390-
PATH_SEGMENT@389..393
391-
NAME_REF@389..393
392-
IDENT@389..393 "attr"
393-
394-
395-
386+
SELF_PARAM@387..403
387+
ATTR@387..394
388+
389+
390+
PATH@389..393
391+
PATH_SEGMENT@389..393
392+
NAME_REF@389..393
393+
394+
395+
396396
397397
398398
@@ -417,16 +417,16 @@ [email protected]
417417
418418
419419
420-
ATTR@423..430
421-
POUND@423..424 "#"
422-
423-
424-
PATH_SEGMENT@425..429
425-
NAME_REF@425..429
426-
IDENT@425..429 "attr"
427-
428-
429-
420+
SELF_PARAM@423..443
421+
ATTR@423..430
422+
423+
424+
PATH@425..429
425+
PATH_SEGMENT@425..429
426+
NAME_REF@425..429
427+
428+
429+
430430
431431
432432
@@ -447,16 +447,16 @@ [email protected]
447447
448448
449449
450-
ATTR@458..465
451-
POUND@458..459 "#"
452-
453-
454-
PATH_SEGMENT@460..464
455-
NAME_REF@460..464
456-
IDENT@460..464 "attr"
457-
458-
459-
450+
SELF_PARAM@458..476
451+
ATTR@458..465
452+
453+
454+
PATH@460..464
455+
PATH_SEGMENT@460..464
456+
NAME_REF@460..464
457+
458+
459+
460460
461461
462462
@@ -478,16 +478,16 @@ [email protected]
478478
479479
480480
481-
ATTR@491..498
482-
POUND@491..492 "#"
483-
484-
485-
PATH_SEGMENT@493..497
486-
NAME_REF@493..497
487-
IDENT@493..497 "attr"
488-
489-
490-
481+
SELF_PARAM@491..513
482+
ATTR@491..498
483+
484+
485+
PATH@493..497
486+
PATH_SEGMENT@493..497
487+
NAME_REF@493..497
488+
489+
490+
491491
492492
493493

0 commit comments

Comments
 (0)