Parse namespace attribute on foreign mods
diff --git a/syntax/file.rs b/syntax/file.rs
index 33340d8..fd6dd98 100644
--- a/syntax/file.rs
+++ b/syntax/file.rs
@@ -94,7 +94,7 @@
RustItem::Struct(item) => Ok(Item::Struct(ItemStruct { attrs, ..item })),
RustItem::Enum(item) => Ok(Item::Enum(ItemEnum { attrs, ..item })),
RustItem::ForeignMod(item) => Ok(Item::ForeignMod(ItemForeignMod {
- attrs: item.attrs,
+ attrs,
unsafety,
abi: item.abi,
brace_token: item.brace_token,
diff --git a/syntax/parse.rs b/syntax/parse.rs
index aa1eef6..a5f8bd1 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -214,16 +214,26 @@
let trusted = trusted || foreign_mod.unsafety.is_some();
+ let mut namespace = namespace.clone();
+ attrs::parse(
+ cx,
+ &foreign_mod.attrs,
+ attrs::Parser {
+ namespace: Some(&mut namespace),
+ ..Default::default()
+ },
+ );
+
let mut items = Vec::new();
for foreign in &foreign_mod.items {
match foreign {
ForeignItem::Type(foreign) => {
- match parse_extern_type(cx, foreign, lang, trusted, namespace) {
+ match parse_extern_type(cx, foreign, lang, trusted, &namespace) {
Ok(ety) => items.push(ety),
Err(err) => cx.push(err),
}
}
- ForeignItem::Fn(foreign) => match parse_extern_fn(cx, foreign, lang, namespace) {
+ ForeignItem::Fn(foreign) => match parse_extern_fn(cx, foreign, lang, &namespace) {
Ok(efn) => items.push(efn),
Err(err) => cx.push(err),
},
@@ -234,7 +244,7 @@
}
}
ForeignItem::Verbatim(tokens) => {
- match parse_extern_verbatim(cx, tokens, lang, namespace) {
+ match parse_extern_verbatim(cx, tokens, lang, &namespace) {
Ok(api) => items.push(api),
Err(err) => cx.push(err),
}