Fix span placement on extern functions
diff --git a/syntax/mod.rs b/syntax/mod.rs
index 12904c3..4dd18ea 100644
--- a/syntax/mod.rs
+++ b/syntax/mod.rs
@@ -113,6 +113,7 @@
     pub lang: Lang,
     pub doc: Doc,
     pub attrs: OtherAttrs,
+    pub visibility: Token![pub],
     pub name: Pair,
     pub sig: Signature,
     pub semi_token: Token![;],
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 17c216d..0ef0b0b 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -597,6 +597,12 @@
     let mut throws_tokens = None;
     let ret = parse_return_type(&foreign_fn.sig.output, &mut throws_tokens)?;
     let throws = throws_tokens.is_some();
+    let visibility = Token![pub](match foreign_fn.vis {
+        Visibility::Public(vis) => vis.pub_token.span,
+        Visibility::Crate(vis) => vis.crate_token.span,
+        Visibility::Restricted(vis) => vis.pub_token.span,
+        Visibility::Inherited => foreign_fn.sig.ident.span(),
+    });
     let unsafety = foreign_fn.sig.unsafety;
     let fn_token = foreign_fn.sig.fn_token;
     let name = pair(namespace, &foreign_fn.sig.ident, cxx_name, rust_name);
@@ -611,6 +617,7 @@
         lang,
         doc,
         attrs,
+        visibility,
         name,
         sig: Signature {
             unsafety,