Skip to content

Commit 911c305

Browse files
committed
fix: impl Trait inside macro parsed incorrectly
1 parent 0332da0 commit 911c305

File tree

3 files changed

+43
-7
lines changed

3 files changed

+43
-7
lines changed

src/parse/macros/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ fn parse_macro_arg<'a, 'b: 'a>(parser: &'a mut Parser<'b>) -> Option<MacroArg> {
5252
|parser: &mut Parser<'b>| parser.parse_expr(),
5353
|x: ptr::P<ast::Expr>| Some(x)
5454
);
55+
// `parse_item` returns `Option<ptr::P<ast::Item>>`.
56+
parse_macro_arg!(
57+
Item,
58+
NonterminalKind::Item,
59+
|parser: &mut Parser<'b>| parser.parse_item(ForceCollect::No),
60+
|x: Option<ptr::P<ast::Item>>| x
61+
);
5562
parse_macro_arg!(
5663
Ty,
5764
NonterminalKind::Ty,
@@ -64,13 +71,6 @@ fn parse_macro_arg<'a, 'b: 'a>(parser: &'a mut Parser<'b>) -> Option<MacroArg> {
6471
|parser: &mut Parser<'b>| parser.parse_pat_no_top_alt(None, None),
6572
|x: ptr::P<ast::Pat>| Some(x)
6673
);
67-
// `parse_item` returns `Option<ptr::P<ast::Item>>`.
68-
parse_macro_arg!(
69-
Item,
70-
NonterminalKind::Item,
71-
|parser: &mut Parser<'b>| parser.parse_item(ForceCollect::No),
72-
|x: Option<ptr::P<ast::Item>>| x
73-
);
7474

7575
None
7676
}

tests/source/issue-6036.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
fmt_me!(
2+
impl Foo { fn f(&self) {} }
3+
);
4+
fmt_me!(
5+
impl Bar for Baz { fn m(&self) {} }
6+
);
7+
8+
// does get formatted
9+
fmt_me!(
10+
impl<T> Foo<T> { fn g(&self) {} }
11+
mod test {
12+
impl Foo { fn f(&self) {} }
13+
}
14+
);

tests/target/issue-6036.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
fmt_me!(
2+
impl Foo {
3+
fn f(&self) {}
4+
}
5+
);
6+
fmt_me!(
7+
impl Bar for Baz {
8+
fn m(&self) {}
9+
}
10+
);
11+
12+
// does get formatted
13+
fmt_me!(
14+
impl<T> Foo<T> {
15+
fn g(&self) {}
16+
}
17+
mod test {
18+
impl Foo {
19+
fn f(&self) {}
20+
}
21+
}
22+
);

0 commit comments

Comments
 (0)