Translate cxx_/rust_name from attribute to syntax tree
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 142d063..367ad05 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -300,6 +300,20 @@
         ));
     }
 
+    let mut doc = Doc::new();
+    let mut cxx_name = None;
+    let mut rust_name = None;
+    attrs::parse(
+        cx,
+        &foreign_fn.attrs,
+        attrs::Parser {
+            doc: Some(&mut doc),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
+            ..Default::default()
+        },
+    );
+
     let mut receiver = None;
     let mut args = Punctuated::new();
     for arg in foreign_fn.sig.inputs.pairs() {
@@ -356,10 +370,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 doc = attrs::parse_doc(cx, &foreign_fn.attrs);
     let unsafety = foreign_fn.sig.unsafety;
     let fn_token = foreign_fn.sig.fn_token;
-    let ident = foreign_fn.sig.ident.clone();
+    let ident = Pair {
+        cxx: cxx_name.unwrap_or(foreign_fn.sig.ident.clone()),
+        rust: rust_name.unwrap_or(foreign_fn.sig.ident.clone()),
+    };
     let paren_token = foreign_fn.sig.paren_token;
     let semi_token = foreign_fn.semi_token;
     let api_function = match lang {
@@ -370,10 +386,7 @@
     Ok(api_function(ExternFn {
         lang,
         doc,
-        ident: Pair {
-            cxx: ident.clone(),
-            rust: ident,
-        },
+        ident,
         sig: Signature {
             unsafety,
             fn_token,