Support parsing the auto trait syntax
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index a660945..a03ed31 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -1764,6 +1764,7 @@
         attrs: FoldHelper::lift(_i . attrs, |it| { _visitor.fold_attribute(it) }),
         vis: _visitor.fold_visibility(_i . vis),
         unsafety: _visitor.fold_unsafety(_i . unsafety),
+        auto_token: _i . auto_token,
         trait_token: _i . trait_token,
         ident: _i . ident,
         generics: _visitor.fold_generics(_i . generics),
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index b4e88d9..b311a89 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -1370,6 +1370,7 @@
     for it in (_i . attrs).iter() { _visitor.visit_attribute(&it) };
     _visitor.visit_visibility(&_i . vis);
     _visitor.visit_unsafety(&_i . unsafety);
+    // Skipped field _i . auto_token;
     // Skipped field _i . trait_token;
     // Skipped field _i . ident;
     _visitor.visit_generics(&_i . generics);
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index a3034c2..0d75bc7 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -1370,6 +1370,7 @@
     for mut it in (_i . attrs).iter_mut() { _visitor.visit_attribute_mut(&mut it) };
     _visitor.visit_visibility_mut(&mut _i . vis);
     _visitor.visit_unsafety_mut(&mut _i . unsafety);
+    // Skipped field _i . auto_token;
     // Skipped field _i . trait_token;
     // Skipped field _i . ident;
     _visitor.visit_generics_mut(&mut _i . generics);
diff --git a/src/item.rs b/src/item.rs
index ff36380..194a1ec 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -143,6 +143,7 @@
             pub attrs: Vec<Attribute>,
             pub vis: Visibility,
             pub unsafety: Unsafety,
+            pub auto_token: Option<Token![auto]>,
             pub trait_token: Token![trait],
             pub ident: Ident,
             pub generics: Generics,
@@ -966,6 +967,7 @@
         attrs: many0!(call!(Attribute::parse_outer)) >>
         vis: syn!(Visibility) >>
         unsafety: syn!(Unsafety) >>
+        auto_: option!(keyword!(auto)) >>
         trait_: keyword!(trait) >>
         ident: syn!(Ident) >>
         generics: syn!(Generics) >>
@@ -979,6 +981,7 @@
             attrs: attrs,
             vis: vis,
             unsafety: unsafety,
+            auto_token: auto_,
             trait_token: trait_,
             ident: ident,
             generics: Generics {
@@ -1478,6 +1481,7 @@
             tokens.append_all(self.attrs.outer());
             self.vis.to_tokens(tokens);
             self.unsafety.to_tokens(tokens);
+            self.auto_token.to_tokens(tokens);
             self.trait_token.to_tokens(tokens);
             self.ident.to_tokens(tokens);
             self.generics.to_tokens(tokens);
diff --git a/synom/src/tokens.rs b/synom/src/tokens.rs
index 08bd683..6b14b76 100644
--- a/synom/src/tokens.rs
+++ b/synom/src/tokens.rs
@@ -164,6 +164,7 @@
     }
     syms: {
         (pub struct As                      => "as"),
+        (pub struct Auto                    => "auto"),
         (pub struct Box                     => "box"),
         (pub struct Break                   => "break"),
         (pub struct CapSelf                 => "Self"),
@@ -254,6 +255,7 @@
     (-=)       => { $crate::tokens::SubEq };
     (_)        => { $crate::tokens::Underscore };
     (as)       => { $crate::tokens::As };
+    (auto)     => { $crate::tokens::Auto };
     (box)      => { $crate::tokens::Box };
     (break)    => { $crate::tokens::Break };
     (Self)     => { $crate::tokens::CapSelf };
@@ -345,6 +347,7 @@
 #[macro_export]
 macro_rules! keyword {
     ($i:expr, as)       => { call!($i, <$crate::tokens::As as $crate::Synom>::parse) };
+    ($i:expr, auto)     => { call!($i, <$crate::tokens::Auto as $crate::Synom>::parse) };
     ($i:expr, box)      => { call!($i, <$crate::tokens::Box as $crate::Synom>::parse) };
     ($i:expr, break)    => { call!($i, <$crate::tokens::Break as $crate::Synom>::parse) };
     ($i:expr, Self)     => { call!($i, <$crate::tokens::CapSelf as $crate::Synom>::parse) };