Parse inner attributes within foreign mod
diff --git a/src/item.rs b/src/item.rs
index 222c648..ebe2cb9 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -1068,14 +1068,21 @@
));
impl_synom!(ItemForeignMod "foreign mod item" do_parse!(
- attrs: many0!(Attribute::parse_outer) >>
+ outer_attrs: many0!(Attribute::parse_outer) >>
abi: syn!(Abi) >>
- items: braces!(many0!(ForeignItem::parse)) >>
+ braced_content: braces!(tuple!(
+ many0!(Attribute::parse_inner),
+ many0!(ForeignItem::parse)
+ )) >>
(ItemForeignMod {
- attrs: attrs,
+ attrs: {
+ let mut attrs = outer_attrs;
+ attrs.extend((braced_content.1).0);
+ attrs
+ },
abi: abi,
- brace_token: items.0,
- items: items.1,
+ brace_token: braced_content.0,
+ items: (braced_content.1).1,
})
));
@@ -1640,6 +1647,7 @@
tokens.append_all(self.attrs.outer());
self.abi.to_tokens(tokens);
self.brace_token.surround(tokens, |tokens| {
+ tokens.append_all(self.attrs.inner());
tokens.append_all(&self.items);
});
}
diff --git a/tests/common/mod.rs b/tests/common/mod.rs
index e424246..3c4029a 100644
--- a/tests/common/mod.rs
+++ b/tests/common/mod.rs
@@ -89,10 +89,6 @@
// https://github.com/dtolnay/syn/issues/459
// https://github.com/dtolnay/syn/issues/460
"tests/rust/src/test/pretty/stmt_expr_attributes.rs" |
- // TODO inner attributes within foreign mod
- //
- // https://github.com/dtolnay/syn/issues/456
- "tests/rust/src/test/run-pass/item-attributes.rs" |
// TODO feature(macros_in_extern)
//
// https://github.com/dtolnay/syn/issues/390