Rename non-Ident fields previously named ident

It will be clearer to avoid using 'ident' to refer to anything but Ident.
diff --git a/gen/src/namespace.rs b/gen/src/namespace.rs
index 7343875..b79c38f 100644
--- a/gen/src/namespace.rs
+++ b/gen/src/namespace.rs
@@ -4,10 +4,10 @@
 impl Api {
     pub fn namespace(&self) -> &Namespace {
         match self {
-            Api::CxxFunction(efn) | Api::RustFunction(efn) => &efn.ident.namespace,
-            Api::CxxType(ety) | Api::RustType(ety) => &ety.ident.namespace,
-            Api::Enum(enm) => &enm.ident.namespace,
-            Api::Struct(strct) => &strct.ident.namespace,
+            Api::CxxFunction(efn) | Api::RustFunction(efn) => &efn.name.namespace,
+            Api::CxxType(ety) | Api::RustType(ety) => &ety.name.namespace,
+            Api::Enum(enm) => &enm.name.namespace,
+            Api::Struct(strct) => &strct.name.namespace,
             Api::Impl(_) | Api::Include(_) | Api::TypeAlias(_) => Default::default(),
         }
     }
diff --git a/gen/src/nested.rs b/gen/src/nested.rs
index 0a8816c..22b0c9f 100644
--- a/gen/src/nested.rs
+++ b/gen/src/nested.rs
@@ -117,7 +117,7 @@
 
     fn assert_ident(api: &Api, expected: &str) {
         if let Api::CxxType(cxx_type) = api {
-            assert_eq!(cxx_type.ident.cxx.ident, expected);
+            assert_eq!(cxx_type.name.cxx, expected);
         } else {
             unreachable!()
         }
@@ -128,7 +128,7 @@
         Api::CxxType(ExternType {
             doc: Doc::new(),
             type_token: Token![type](Span::call_site()),
-            ident: Pair::new(ns, Ident::new(ident, Span::call_site())),
+            name: Pair::new(ns, Ident::new(ident, Span::call_site())),
             semi_token: Token![;](Span::call_site()),
             trusted: false,
         })
diff --git a/gen/src/write.rs b/gen/src/write.rs
index 7c16e81..8688797 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -32,7 +32,7 @@
 fn write_forward_declarations(out: &mut OutFile, apis: &[Api]) {
     let needs_forward_declaration = |api: &&Api| match api {
         Api::Struct(_) | Api::CxxType(_) | Api::RustType(_) => true,
-        Api::Enum(enm) => !out.types.cxx.contains(&enm.ident.rust),
+        Api::Enum(enm) => !out.types.cxx.contains(&enm.name.rust),
         _ => false,
     };
 
@@ -47,10 +47,10 @@
         for api in apis {
             write!(out, "{:1$}", "", indent);
             match api {
-                Api::Struct(strct) => write_struct_decl(out, &strct.ident.cxx),
+                Api::Struct(strct) => write_struct_decl(out, &strct.name.cxx),
                 Api::Enum(enm) => write_enum_decl(out, enm),
-                Api::CxxType(ety) => write_struct_using(out, &ety.ident),
-                Api::RustType(ety) => write_struct_decl(out, &ety.ident.cxx),
+                Api::CxxType(ety) => write_struct_using(out, &ety.name),
+                Api::RustType(ety) => write_struct_decl(out, &ety.name.cxx),
                 _ => unreachable!(),
             }
         }
@@ -80,20 +80,20 @@
         match api {
             Api::Struct(strct) => {
                 out.next_section();
-                if !out.types.cxx.contains(&strct.ident.rust) {
+                if !out.types.cxx.contains(&strct.name.rust) {
                     write_struct(out, strct);
                 }
             }
             Api::Enum(enm) => {
                 out.next_section();
-                if out.types.cxx.contains(&enm.ident.rust) {
+                if out.types.cxx.contains(&enm.name.rust) {
                     check_enum(out, enm);
                 } else {
                     write_enum(out, enm);
                 }
             }
             Api::RustType(ety) => {
-                if let Some(methods) = methods_for_type.get(&ety.ident.rust) {
+                if let Some(methods) = methods_for_type.get(&ety.name.rust) {
                     out.next_section();
                     write_struct_with_methods(out, ety, methods);
                 }
@@ -105,8 +105,8 @@
     out.next_section();
     for api in apis {
         if let Api::TypeAlias(ety) = api {
-            if out.types.required_trivial.contains_key(&ety.ident.rust) {
-                check_trivial_extern_type(out, &ety.ident)
+            if out.types.required_trivial.contains_key(&ety.name.rust) {
+                check_trivial_extern_type(out, &ety.name)
             }
         }
     }
@@ -193,14 +193,14 @@
 }
 
 fn write_struct<'a>(out: &mut OutFile<'a>, strct: &'a Struct) {
-    out.set_namespace(&strct.ident.namespace);
-    let guard = format!("CXXBRIDGE05_STRUCT_{}", strct.ident.to_symbol());
+    out.set_namespace(&strct.name.namespace);
+    let guard = format!("CXXBRIDGE05_STRUCT_{}", strct.name.to_symbol());
     writeln!(out, "#ifndef {}", guard);
     writeln!(out, "#define {}", guard);
     for line in strct.doc.to_string().lines() {
         writeln!(out, "//{}", line);
     }
-    writeln!(out, "struct {} final {{", strct.ident.cxx);
+    writeln!(out, "struct {} final {{", strct.name.cxx);
     for field in &strct.fields {
         write!(out, "  ");
         write_type_space(out, &field.ty);
@@ -215,7 +215,7 @@
 }
 
 fn write_enum_decl(out: &mut OutFile, enm: &Enum) {
-    write!(out, "enum class {} : ", enm.ident.cxx);
+    write!(out, "enum class {} : ", enm.name.cxx);
     write_atom(out, enm.repr);
     writeln!(out, ";");
 }
@@ -229,24 +229,24 @@
     ety: &'a ExternType,
     methods: &[&ExternFn],
 ) {
-    out.set_namespace(&ety.ident.namespace);
-    let guard = format!("CXXBRIDGE05_STRUCT_{}", ety.ident.to_symbol());
+    out.set_namespace(&ety.name.namespace);
+    let guard = format!("CXXBRIDGE05_STRUCT_{}", ety.name.to_symbol());
     writeln!(out, "#ifndef {}", guard);
     writeln!(out, "#define {}", guard);
     for line in ety.doc.to_string().lines() {
         writeln!(out, "//{}", line);
     }
-    writeln!(out, "struct {} final {{", ety.ident.cxx);
-    writeln!(out, "  {}() = delete;", ety.ident.cxx);
+    writeln!(out, "struct {} final {{", ety.name.cxx);
+    writeln!(out, "  {}() = delete;", ety.name.cxx);
     writeln!(
         out,
         "  {}(const {} &) = delete;",
-        ety.ident.cxx, ety.ident.cxx,
+        ety.name.cxx, ety.name.cxx,
     );
     for method in methods {
         write!(out, "  ");
         let sig = &method.sig;
-        let local_name = method.ident.cxx.to_string();
+        let local_name = method.name.cxx.to_string();
         write_rust_function_shim_decl(out, &local_name, sig, false);
         writeln!(out, ";");
     }
@@ -255,14 +255,14 @@
 }
 
 fn write_enum<'a>(out: &mut OutFile<'a>, enm: &'a Enum) {
-    out.set_namespace(&enm.ident.namespace);
-    let guard = format!("CXXBRIDGE05_ENUM_{}", enm.ident.to_symbol());
+    out.set_namespace(&enm.name.namespace);
+    let guard = format!("CXXBRIDGE05_ENUM_{}", enm.name.to_symbol());
     writeln!(out, "#ifndef {}", guard);
     writeln!(out, "#define {}", guard);
     for line in enm.doc.to_string().lines() {
         writeln!(out, "//{}", line);
     }
-    write!(out, "enum class {} : ", enm.ident.cxx);
+    write!(out, "enum class {} : ", enm.name.cxx);
     write_atom(out, enm.repr);
     writeln!(out, " {{");
     for variant in &enm.variants {
@@ -273,8 +273,8 @@
 }
 
 fn check_enum<'a>(out: &mut OutFile<'a>, enm: &'a Enum) {
-    out.set_namespace(&enm.ident.namespace);
-    write!(out, "static_assert(sizeof({}) == sizeof(", enm.ident.cxx);
+    out.set_namespace(&enm.name.namespace);
+    write!(out, "static_assert(sizeof({}) == sizeof(", enm.name.cxx);
     write_atom(out, enm.repr);
     writeln!(out, "), \"incorrect size\");");
     for variant in &enm.variants {
@@ -283,7 +283,7 @@
         writeln!(
             out,
             ">({}::{}) == {}, \"disagrees with the value in #[cxx::bridge]\");",
-            enm.ident.cxx, variant.ident, variant.discriminant,
+            enm.name.cxx, variant.ident, variant.discriminant,
         );
     }
 }
@@ -331,7 +331,7 @@
 
 fn write_cxx_function_shim<'a>(out: &mut OutFile<'a>, efn: &'a ExternFn) {
     out.next_section();
-    out.set_namespace(&efn.ident.namespace);
+    out.set_namespace(&efn.name.namespace);
     out.begin_block(Block::ExternC);
     if let Some(annotation) = &out.opt.cxx_impl_annotations {
         write!(out, "{} ", annotation);
@@ -377,12 +377,12 @@
     write!(out, "  ");
     write_return_type(out, &efn.ret);
     match &efn.receiver {
-        None => write!(out, "(*{}$)(", efn.ident.rust),
+        None => write!(out, "(*{}$)(", efn.name.rust),
         Some(receiver) => write!(
             out,
             "({}::*{}$)(",
             out.types.resolve(&receiver.ty).to_fully_qualified(),
-            efn.ident.rust,
+            efn.name.rust,
         ),
     }
     for (i, arg) in efn.args.iter().enumerate() {
@@ -399,12 +399,12 @@
     }
     write!(out, " = ");
     match &efn.receiver {
-        None => write!(out, "{}", efn.ident.to_fully_qualified()),
+        None => write!(out, "{}", efn.name.to_fully_qualified()),
         Some(receiver) => write!(
             out,
             "&{}::{}",
             out.types.resolve(&receiver.ty).to_fully_qualified(),
-            efn.ident.cxx,
+            efn.name.cxx,
         ),
     }
     writeln!(out, ";");
@@ -438,8 +438,8 @@
         _ => {}
     }
     match &efn.receiver {
-        None => write!(out, "{}$(", efn.ident.rust),
-        Some(_) => write!(out, "(self.*{}$)(", efn.ident.rust),
+        None => write!(out, "{}$(", efn.name.rust),
+        Some(_) => write!(out, "(self.*{}$)(", efn.name.rust),
     }
     for (i, arg) in efn.args.iter().enumerate() {
         if i > 0 {
@@ -533,7 +533,7 @@
 }
 
 fn write_rust_function_decl<'a>(out: &mut OutFile<'a>, efn: &'a ExternFn) {
-    out.set_namespace(&efn.ident.namespace);
+    out.set_namespace(&efn.name.namespace);
     out.begin_block(Block::ExternC);
     let link_name = mangle::extern_fn(efn, out.types);
     let indirect_call = false;
@@ -592,13 +592,13 @@
 }
 
 fn write_rust_function_shim<'a>(out: &mut OutFile<'a>, efn: &'a ExternFn) {
-    out.set_namespace(&efn.ident.namespace);
+    out.set_namespace(&efn.name.namespace);
     for line in efn.doc.to_string().lines() {
         writeln!(out, "//{}", line);
     }
     let local_name = match &efn.sig.receiver {
-        None => efn.ident.cxx.to_string(),
-        Some(receiver) => format!("{}::{}", out.types.resolve(&receiver.ty).cxx, efn.ident.cxx),
+        None => efn.name.cxx.to_string(),
+        Some(receiver) => format!("{}::{}", out.types.resolve(&receiver.ty).cxx, efn.name.cxx),
     };
     let invoke = mangle::extern_fn(efn, out.types);
     let indirect_call = false;
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 026ec43..029c54f 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -43,10 +43,8 @@
             Api::Struct(strct) => expanded.extend(expand_struct(strct)),
             Api::Enum(enm) => expanded.extend(expand_enum(enm)),
             Api::CxxType(ety) => {
-                let ident = &ety.ident;
-                if !types.structs.contains_key(&ident.rust)
-                    && !types.enums.contains_key(&ident.rust)
-                {
+                let ident = &ety.name.rust;
+                if !types.structs.contains_key(ident) && !types.enums.contains_key(ident) {
                     expanded.extend(expand_cxx_type(ety));
                 }
             }
@@ -125,10 +123,10 @@
 }
 
 fn expand_struct(strct: &Struct) -> TokenStream {
-    let ident = &strct.ident;
+    let ident = &strct.name.rust;
     let doc = &strct.doc;
     let derives = DeriveAttribute(&strct.derives);
-    let type_id = type_id(&strct.ident);
+    let type_id = type_id(&strct.name);
     let fields = strct.fields.iter().map(|field| {
         // This span on the pub makes "private type in public interface" errors
         // appear in the right place.
@@ -152,10 +150,10 @@
 }
 
 fn expand_enum(enm: &Enum) -> TokenStream {
-    let ident = &enm.ident;
+    let ident = &enm.name.rust;
     let doc = &enm.doc;
     let repr = enm.repr;
-    let type_id = type_id(&enm.ident);
+    let type_id = type_id(&enm.name);
     let variants = enm.variants.iter().map(|variant| {
         let variant_ident = &variant.ident;
         let discriminant = &variant.discriminant;
@@ -185,9 +183,9 @@
 }
 
 fn expand_cxx_type(ety: &ExternType) -> TokenStream {
-    let ident = &ety.ident;
+    let ident = &ety.name.rust;
     let doc = &ety.doc;
-    let type_id = type_id(&ety.ident);
+    let type_id = type_id(&ety.name);
 
     quote! {
         #doc
@@ -235,7 +233,7 @@
         outparam = Some(quote!(__return: *mut #ret));
     }
     let link_name = mangle::extern_fn(efn, types);
-    let local_name = format_ident!("__{}", efn.ident.rust);
+    let local_name = format_ident!("__{}", efn.name.rust);
     quote! {
         #[link_name = #link_name]
         fn #local_name(#(#all_args,)* #outparam) #ret;
@@ -323,7 +321,7 @@
             }
         })
         .collect::<TokenStream>();
-    let local_name = format_ident!("__{}", efn.ident.rust);
+    let local_name = format_ident!("__{}", efn.name.rust);
     let call = if indirect_return {
         let ret = expand_extern_type(efn.ret.as_ref().unwrap());
         setup.extend(quote! {
@@ -420,7 +418,7 @@
     if unsafety.is_none() {
         dispatch = quote!(unsafe { #dispatch });
     }
-    let ident = &efn.ident;
+    let ident = &efn.name.rust;
     let function_shim = quote! {
         #doc
         pub #unsafety fn #ident(#(#all_args,)*) #ret {
@@ -449,7 +447,7 @@
     let c_trampoline = mangle::c_trampoline(efn, var, types);
     let r_trampoline = mangle::r_trampoline(efn, var, types);
     let local_name = parse_quote!(__);
-    let catch_unwind_label = format!("::{}::{}", efn.ident.rust, var);
+    let catch_unwind_label = format!("::{}::{}", efn.name.rust, var);
     let shim = expand_rust_function_shim_impl(
         sig,
         types,
@@ -475,7 +473,7 @@
 }
 
 fn expand_rust_type(ety: &ExternType) -> TokenStream {
-    let ident = &ety.ident;
+    let ident = &ety.name.rust;
     quote! {
         use super::#ident;
     }
@@ -490,12 +488,12 @@
     //     |    doesn't have a size known at compile-time
     //     required by this bound in `ffi::_::__AssertSized`
 
-    let ident = &ety.ident;
+    let ident = &ety.name.rust;
     let begin_span = Token![::](ety.type_token.span);
     let sized = quote_spanned! {ety.semi_token.span=>
         #begin_span std::marker::Sized
     };
-    quote_spanned! {ident.rust.span()=>
+    quote_spanned! {ident.span()=>
         let _ = {
             fn __AssertSized<T: ?#sized + #sized>() {}
             __AssertSized::<#ident>
@@ -505,9 +503,9 @@
 
 fn expand_rust_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
     let link_name = mangle::extern_fn(efn, types);
-    let local_name = format_ident!("__{}", efn.ident.rust);
-    let catch_unwind_label = format!("::{}", efn.ident.rust);
-    let invoke = Some(&efn.ident.rust);
+    let local_name = format_ident!("__{}", efn.name.rust);
+    let catch_unwind_label = format!("::{}", efn.name.rust);
+    let invoke = Some(&efn.name.rust);
     expand_rust_function_shim_impl(
         efn,
         types,
@@ -675,7 +673,7 @@
 
 fn expand_type_alias(alias: &TypeAlias) -> TokenStream {
     let doc = &alias.doc;
-    let ident = &alias.ident;
+    let ident = &alias.name.rust;
     let ty = &alias.ty;
     quote! {
         #doc
@@ -684,8 +682,8 @@
 }
 
 fn expand_type_alias_verify(alias: &TypeAlias, types: &Types) -> TokenStream {
-    let ident = &alias.ident;
-    let type_id = type_id(ident);
+    let ident = &alias.name.rust;
+    let type_id = type_id(&alias.name);
     let begin_span = alias.type_token.span;
     let end_span = alias.semi_token.span;
     let begin = quote_spanned!(begin_span=> ::cxx::private::verify_extern_type::<);
@@ -695,7 +693,7 @@
         const _: fn() = #begin #ident, #type_id #end;
     };
 
-    if types.required_trivial.contains_key(&alias.ident.rust) {
+    if types.required_trivial.contains_key(&alias.name.rust) {
         let begin = quote_spanned!(begin_span=> ::cxx::private::verify_extern_kind::<);
         verify.extend(quote! {
             const _: fn() = #begin #ident, ::cxx::kind::Trivial #end;
diff --git a/syntax/check.rs b/syntax/check.rs
index ba488e1..e8a6448 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -167,16 +167,16 @@
 }
 
 fn check_api_struct(cx: &mut Check, strct: &Struct) {
-    let ident = &strct.ident;
-    check_reserved_name(cx, &ident.rust);
+    let name = &strct.name;
+    check_reserved_name(cx, &name.rust);
 
     if strct.fields.is_empty() {
         let span = span_for_struct_error(strct);
         cx.error(span, "structs without any fields are not supported");
     }
 
-    if cx.types.cxx.contains(&ident.rust) {
-        if let Some(ety) = cx.types.untrusted.get(&ident.rust) {
+    if cx.types.cxx.contains(&name.rust) {
+        if let Some(ety) = cx.types.untrusted.get(&name.rust) {
             let msg = "extern shared struct must be declared in an `unsafe extern` block";
             cx.error(ety, msg);
         }
@@ -198,7 +198,7 @@
 }
 
 fn check_api_enum(cx: &mut Check, enm: &Enum) {
-    check_reserved_name(cx, &enm.ident.rust);
+    check_reserved_name(cx, &enm.name.rust);
 
     if enm.variants.is_empty() {
         let span = span_for_enum_error(enm);
@@ -207,13 +207,13 @@
 }
 
 fn check_api_type(cx: &mut Check, ety: &ExternType) {
-    check_reserved_name(cx, &ety.ident.rust);
+    check_reserved_name(cx, &ety.name.rust);
 
-    if let Some(reason) = cx.types.required_trivial.get(&ety.ident.rust) {
+    if let Some(reason) = cx.types.required_trivial.get(&ety.name.rust) {
         let what = match reason {
-            TrivialReason::StructField(strct) => format!("a field of `{}`", strct.ident.rust),
-            TrivialReason::FunctionArgument(efn) => format!("an argument of `{}`", efn.ident.rust),
-            TrivialReason::FunctionReturn(efn) => format!("a return value of `{}`", efn.ident.rust),
+            TrivialReason::StructField(strct) => format!("a field of `{}`", strct.name.rust),
+            TrivialReason::FunctionArgument(efn) => format!("an argument of `{}`", efn.name.rust),
+            TrivialReason::FunctionReturn(efn) => format!("a return value of `{}`", efn.name.rust),
         };
         let msg = format!(
             "needs a cxx::ExternType impl in order to be used as {}",
diff --git a/syntax/ident.rs b/syntax/ident.rs
index bb2fe46..aaf7832 100644
--- a/syntax/ident.rs
+++ b/syntax/ident.rs
@@ -24,28 +24,28 @@
         match api {
             Api::Include(_) | Api::Impl(_) => {}
             Api::Struct(strct) => {
-                check_ident(cx, &strct.ident);
+                check_ident(cx, &strct.name);
                 for field in &strct.fields {
                     check(cx, &field.ident);
                 }
             }
             Api::Enum(enm) => {
-                check_ident(cx, &enm.ident);
+                check_ident(cx, &enm.name);
                 for variant in &enm.variants {
                     check(cx, &variant.ident);
                 }
             }
             Api::CxxType(ety) | Api::RustType(ety) => {
-                check_ident(cx, &ety.ident);
+                check_ident(cx, &ety.name);
             }
             Api::CxxFunction(efn) | Api::RustFunction(efn) => {
-                check(cx, &efn.ident.rust);
+                check(cx, &efn.name.rust);
                 for arg in &efn.args {
                     check(cx, &arg.ident);
                 }
             }
             Api::TypeAlias(alias) => {
-                check_ident(cx, &alias.ident);
+                check_ident(cx, &alias.name);
             }
         }
     }
diff --git a/syntax/mangle.rs b/syntax/mangle.rs
index 55ffca5..cc5115a 100644
--- a/syntax/mangle.rs
+++ b/syntax/mangle.rs
@@ -15,13 +15,13 @@
         Some(receiver) => {
             let receiver_ident = types.resolve(&receiver.ty);
             join!(
-                efn.ident.namespace,
+                efn.name.namespace,
                 CXXBRIDGE,
                 receiver_ident.cxx,
-                efn.ident.rust
+                efn.name.rust
             )
         }
-        None => join!(efn.ident.namespace, CXXBRIDGE, efn.ident.rust),
+        None => join!(efn.name.namespace, CXXBRIDGE, efn.name.rust),
     }
 }
 
diff --git a/syntax/mod.rs b/syntax/mod.rs
index 782d617..ac6350a 100644
--- a/syntax/mod.rs
+++ b/syntax/mod.rs
@@ -67,7 +67,7 @@
 pub struct ExternType {
     pub doc: Doc,
     pub type_token: Token![type],
-    pub ident: Pair,
+    pub name: Pair,
     pub semi_token: Token![;],
     pub trusted: bool,
 }
@@ -76,7 +76,7 @@
     pub doc: Doc,
     pub derives: Vec<Derive>,
     pub struct_token: Token![struct],
-    pub ident: Pair,
+    pub name: Pair,
     pub brace_token: Brace,
     pub fields: Vec<Var>,
 }
@@ -84,7 +84,7 @@
 pub struct Enum {
     pub doc: Doc,
     pub enum_token: Token![enum],
-    pub ident: Pair,
+    pub name: Pair,
     pub brace_token: Brace,
     pub variants: Vec<Variant>,
     pub repr: Atom,
@@ -93,7 +93,7 @@
 pub struct ExternFn {
     pub lang: Lang,
     pub doc: Doc,
-    pub ident: Pair,
+    pub name: Pair,
     pub sig: Signature,
     pub semi_token: Token![;],
 }
@@ -101,7 +101,7 @@
 pub struct TypeAlias {
     pub doc: Doc,
     pub type_token: Token![type],
-    pub ident: Pair,
+    pub name: Pair,
     pub eq_token: Token![=],
     pub ty: RustType,
     pub semi_token: Token![;],
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 6b5d925..2136653 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -90,7 +90,7 @@
         doc,
         derives,
         struct_token: item.struct_token,
-        ident: Pair::new(namespace.clone(), item.ident),
+        name: Pair::new(namespace.clone(), item.ident),
         brace_token: fields.brace_token,
         fields: fields
             .named
@@ -177,7 +177,7 @@
     Ok(Api::Enum(Enum {
         doc,
         enum_token,
-        ident: Pair::new(namespace, item.ident),
+        name: Pair::new(namespace, item.ident),
         brace_token,
         variants,
         repr,
@@ -241,8 +241,8 @@
     }
 
     let mut types = items.iter().filter_map(|item| match item {
-        Api::CxxType(ety) | Api::RustType(ety) => Some(&ety.ident),
-        Api::TypeAlias(alias) => Some(&alias.ident),
+        Api::CxxType(ety) | Api::RustType(ety) => Some(&ety.name),
+        Api::TypeAlias(alias) => Some(&alias.name),
         _ => None,
     });
     if let (Some(single_type), None) = (types.next(), types.next()) {
@@ -305,7 +305,7 @@
     Ok(api_type(ExternType {
         doc,
         type_token,
-        ident: Pair::new(namespace, ident),
+        name: Pair::new(namespace, ident),
         semi_token,
         trusted,
     }))
@@ -404,7 +404,7 @@
     let throws = throws_tokens.is_some();
     let unsafety = foreign_fn.sig.unsafety;
     let fn_token = foreign_fn.sig.fn_token;
-    let ident = Pair::new_from_differing_names(
+    let name = Pair::new_from_differing_names(
         namespace,
         cxx_name.unwrap_or(foreign_fn.sig.ident.clone()),
         rust_name.unwrap_or(foreign_fn.sig.ident.clone()),
@@ -419,7 +419,7 @@
     Ok(api_function(ExternFn {
         lang,
         doc,
-        ident,
+        name,
         sig: Signature {
             unsafety,
             fn_token,
@@ -468,7 +468,7 @@
         Ok(TypeAlias {
             doc,
             type_token,
-            ident: Pair::new(namespace, ident),
+            name: Pair::new(namespace, ident),
             eq_token,
             ty,
             semi_token,
diff --git a/syntax/tokens.rs b/syntax/tokens.rs
index 2b32532..15c23dc 100644
--- a/syntax/tokens.rs
+++ b/syntax/tokens.rs
@@ -85,7 +85,7 @@
     fn to_tokens(&self, tokens: &mut TokenStream) {
         // Notional token range for error reporting purposes.
         self.type_token.to_tokens(tokens);
-        self.ident.to_tokens(tokens);
+        self.name.to_tokens(tokens);
     }
 }
 
@@ -93,7 +93,7 @@
     fn to_tokens(&self, tokens: &mut TokenStream) {
         // Notional token range for error reporting purposes.
         self.type_token.to_tokens(tokens);
-        self.ident.to_tokens(tokens);
+        self.name.to_tokens(tokens);
     }
 }
 
@@ -101,7 +101,7 @@
     fn to_tokens(&self, tokens: &mut TokenStream) {
         // Notional token range for error reporting purposes.
         self.struct_token.to_tokens(tokens);
-        self.ident.to_tokens(tokens);
+        self.name.to_tokens(tokens);
     }
 }
 
@@ -109,7 +109,7 @@
     fn to_tokens(&self, tokens: &mut TokenStream) {
         // Notional token range for error reporting purposes.
         self.enum_token.to_tokens(tokens);
-        self.ident.to_tokens(tokens);
+        self.name.to_tokens(tokens);
     }
 }
 
diff --git a/syntax/types.rs b/syntax/types.rs
index d9d6361..67b041b 100644
--- a/syntax/types.rs
+++ b/syntax/types.rs
@@ -70,7 +70,7 @@
             match api {
                 Api::Include(_) => {}
                 Api::Struct(strct) => {
-                    let ident = &strct.ident.rust;
+                    let ident = &strct.name.rust;
                     if !type_names.insert(ident)
                         && (!cxx.contains(ident)
                             || structs.contains_key(ident)
@@ -81,14 +81,14 @@
                         // type, then error.
                         duplicate_name(cx, strct, ident);
                     }
-                    structs.insert(&strct.ident.rust, strct);
+                    structs.insert(&strct.name.rust, strct);
                     for field in &strct.fields {
                         visit(&mut all, &field.ty);
                     }
-                    add_resolution(&strct.ident);
+                    add_resolution(&strct.name);
                 }
                 Api::Enum(enm) => {
-                    let ident = &enm.ident.rust;
+                    let ident = &enm.name.rust;
                     if !type_names.insert(ident)
                         && (!cxx.contains(ident)
                             || structs.contains_key(ident)
@@ -100,10 +100,10 @@
                         duplicate_name(cx, enm, ident);
                     }
                     enums.insert(ident, enm);
-                    add_resolution(&enm.ident);
+                    add_resolution(&enm.name);
                 }
                 Api::CxxType(ety) => {
-                    let ident = &ety.ident.rust;
+                    let ident = &ety.name.rust;
                     if !type_names.insert(ident)
                         && (cxx.contains(ident)
                             || !structs.contains_key(ident) && !enums.contains_key(ident))
@@ -117,21 +117,21 @@
                     if !ety.trusted {
                         untrusted.insert(ident, ety);
                     }
-                    add_resolution(&ety.ident);
+                    add_resolution(&ety.name);
                 }
                 Api::RustType(ety) => {
-                    let ident = &ety.ident.rust;
+                    let ident = &ety.name.rust;
                     if !type_names.insert(ident) {
                         duplicate_name(cx, ety, ident);
                     }
                     rust.insert(ident);
-                    add_resolution(&ety.ident);
+                    add_resolution(&ety.name);
                 }
                 Api::CxxFunction(efn) | Api::RustFunction(efn) => {
                     // Note: duplication of the C++ name is fine because C++ has
                     // function overloading.
-                    if !function_names.insert((&efn.receiver, &efn.ident.rust)) {
-                        duplicate_name(cx, efn, &efn.ident.rust);
+                    if !function_names.insert((&efn.receiver, &efn.name.rust)) {
+                        duplicate_name(cx, efn, &efn.name.rust);
                     }
                     for arg in &efn.args {
                         visit(&mut all, &arg.ty);
@@ -141,13 +141,13 @@
                     }
                 }
                 Api::TypeAlias(alias) => {
-                    let ident = &alias.ident;
-                    if !type_names.insert(&ident.rust) {
-                        duplicate_name(cx, alias, &ident.rust);
+                    let ident = &alias.name.rust;
+                    if !type_names.insert(ident) {
+                        duplicate_name(cx, alias, ident);
                     }
-                    cxx.insert(&ident.rust);
-                    aliases.insert(&ident.rust, alias);
-                    add_resolution(&alias.ident);
+                    cxx.insert(ident);
+                    aliases.insert(ident, alias);
+                    add_resolution(&alias.name);
                 }
                 Api::Impl(imp) => {
                     visit(&mut all, &imp.ty);