Store span of function argument colon tokens
diff --git a/syntax/impls.rs b/syntax/impls.rs
index 8b0743b..7392d49 100644
--- a/syntax/impls.rs
+++ b/syntax/impls.rs
@@ -339,6 +339,7 @@
                     attrs: _,
                     visibility: _,
                     name: _,
+                    colon_token: _,
                     ty,
                 } = arg;
                 let Var {
@@ -346,6 +347,7 @@
                     attrs: _,
                     visibility: _,
                     name: _,
+                    colon_token: _,
                     ty: ty2,
                 } = arg2;
                 ty == ty2
@@ -374,6 +376,7 @@
                 attrs: _,
                 visibility: _,
                 name: _,
+                colon_token: _,
                 ty,
             } = arg;
             ty.hash(state);
diff --git a/syntax/mod.rs b/syntax/mod.rs
index 3d56293..b2c524b 100644
--- a/syntax/mod.rs
+++ b/syntax/mod.rs
@@ -174,6 +174,7 @@
     pub attrs: OtherAttrs,
     pub visibility: Token![pub],
     pub name: Pair,
+    pub colon_token: Token![:],
     pub ty: Type,
 }
 
diff --git a/syntax/parse.rs b/syntax/parse.rs
index d792076..fe18832 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -146,11 +146,13 @@
         };
         let visibility = visibility_pub(&field.vis, ident.span());
         let name = pair(Namespace::default(), &ident, cxx_name, rust_name);
+        let colon_token = field.colon_token.unwrap();
         fields.push(Var {
             doc,
             attrs,
             visibility,
             name,
+            colon_token,
             ty,
         });
     }
@@ -583,11 +585,13 @@
                     let attrs = OtherAttrs::none();
                     let visibility = Token![pub](ident.span());
                     let name = pair(Namespace::default(), &ident, None, None);
+                    let colon_token = arg.colon_token;
                     args.push_value(Var {
                         doc,
                         attrs,
                         visibility,
                         name,
+                        colon_token,
                         ty,
                     });
                     if let Some(comma) = comma {
@@ -1267,15 +1271,21 @@
         ));
     }
 
+    let fn_span = ty.fn_token.span;
+
     let args = ty
         .inputs
         .iter()
         .enumerate()
         .map(|(i, arg)| {
             let ty = parse_type(&arg.ty)?;
-            let ident = match &arg.name {
-                Some(ident) => ident.0.clone(),
-                None => format_ident!("arg{}", i),
+            let (ident, colon_token) = match &arg.name {
+                Some((ident, colon_token)) => (ident.clone(), *colon_token),
+                None => {
+                    let ident = format_ident!("arg{}", i, span = fn_span);
+                    let colon_token = Token![:](fn_span);
+                    (ident, colon_token)
+                }
             };
             let doc = Doc::new();
             let attrs = OtherAttrs::none();
@@ -1286,6 +1296,7 @@
                 attrs,
                 visibility,
                 name,
+                colon_token,
                 ty,
             })
         })
diff --git a/syntax/tokens.rs b/syntax/tokens.rs
index c1a06a2..a668aa6 100644
--- a/syntax/tokens.rs
+++ b/syntax/tokens.rs
@@ -43,6 +43,7 @@
             attrs: _,
             visibility: _,
             name,
+            colon_token: _,
             ty,
         } = self;
         name.rust.to_tokens(tokens);