Move extension traits into top level ext module
diff --git a/src/data.rs b/src/data.rs
index 242dc7f..fff1c84 100644
--- a/src/data.rs
+++ b/src/data.rs
@@ -185,8 +185,8 @@
 pub mod parsing {
     use super::*;
 
+    use ext::IdentExt;
     use parse::{Parse, ParseStream, Result};
-    use synom::ext::IdentExt;
 
     impl Parse for Variant {
         fn parse(input: ParseStream) -> Result<Self> {
diff --git a/src/expr.rs b/src/expr.rs
index eaae23f..27b9eb5 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -1025,11 +1025,11 @@
 #[cfg(feature = "parsing")]
 pub mod parsing {
     use super::*;
-    use path;
 
-    use parse::{Parse, ParseStream, Result};
     #[cfg(feature = "full")]
-    use synom::ext::IdentExt;
+    use ext::IdentExt;
+    use parse::{Parse, ParseStream, Result};
+    use path;
 
     // When we're parsing expressions which occur before blocks, like in an if
     // statement's condition, we cannot parse a struct literal.
diff --git a/src/ext.rs b/src/ext.rs
new file mode 100644
index 0000000..d45fc26
--- /dev/null
+++ b/src/ext.rs
@@ -0,0 +1,60 @@
+//! Extension traits that are made available within the `call!` parser.
+//!
+//! *This module is available if Syn is built with the `"parsing"` feature.*
+
+use proc_macro2::Ident;
+
+use parse::{ParseStream, Result};
+
+/// Additional parsing methods for `Ident`.
+///
+/// This trait is sealed and cannot be implemented for types outside of Syn.
+///
+/// *This trait is available if Syn is built with the `"parsing"` feature.*
+pub trait IdentExt: Sized + private::Sealed {
+    /// Parses any identifier including keywords.
+    ///
+    /// This is useful when parsing a DSL which allows Rust keywords as
+    /// identifiers.
+    ///
+    /// ```rust
+    /// #[macro_use]
+    /// extern crate syn;
+    ///
+    /// use syn::Ident;
+    ///
+    /// // Parses input that looks like `name = NAME` where `NAME` can be
+    /// // any identifier.
+    /// //
+    /// // Examples:
+    /// //
+    /// //     name = anything
+    /// //     name = impl
+    /// named!(parse_dsl -> Ident, do_parse!(
+    ///     custom_keyword!(name) >>
+    ///     punct!(=) >>
+    ///     name: call!(Ident::parse_any) >>
+    ///     (name)
+    /// ));
+    /// #
+    /// # fn main() {}
+    /// ```
+    fn parse_any(input: ParseStream) -> Result<Self>;
+}
+
+impl IdentExt for Ident {
+    fn parse_any(input: ParseStream) -> Result<Self> {
+        input.step(|cursor| match cursor.ident() {
+            Some((ident, rest)) => Ok((ident, rest)),
+            None => Err(cursor.error("expected ident")),
+        })
+    }
+}
+
+mod private {
+    use proc_macro2::Ident;
+
+    pub trait Sealed {}
+
+    impl Sealed for Ident {}
+}
diff --git a/src/item.rs b/src/item.rs
index 3fe7c70..d95019d 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -768,8 +768,8 @@
 pub mod parsing {
     use super::*;
 
+    use ext::IdentExt;
     use parse::{Parse, ParseStream, Result};
-    use synom::ext::IdentExt;
 
     impl Parse for Item {
         fn parse(input: ParseStream) -> Result<Self> {
diff --git a/src/lib.rs b/src/lib.rs
index 5c60a70..6c8e915 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -438,6 +438,8 @@
 
 #[cfg(feature = "parsing")]
 pub mod buffer;
+#[cfg(feature = "parsing")]
+pub mod ext;
 pub mod punctuated;
 #[cfg(feature = "parsing")]
 pub mod synom;
diff --git a/src/lifetime.rs b/src/lifetime.rs
index 6a039c6..e62d6d0 100644
--- a/src/lifetime.rs
+++ b/src/lifetime.rs
@@ -118,8 +118,9 @@
 #[cfg(feature = "parsing")]
 pub mod parsing {
     use super::*;
+
+    use ext::IdentExt;
     use parse::{Error, Parse, ParseStream, Result};
-    use synom::ext::IdentExt;
 
     impl Parse for Lifetime {
         fn parse(input: ParseStream) -> Result<Self> {
diff --git a/src/path.rs b/src/path.rs
index 4a63b65..3c4ce07 100644
--- a/src/path.rs
+++ b/src/path.rs
@@ -227,10 +227,11 @@
 #[cfg(feature = "parsing")]
 pub mod parsing {
     use super::*;
+
     #[cfg(feature = "full")]
     use expr;
+    use ext::IdentExt;
     use parse::{Parse, ParseStream, Result};
-    use synom::ext::IdentExt;
 
     impl Parse for Path {
         fn parse(input: ParseStream) -> Result<Self> {
diff --git a/src/synom.rs b/src/synom.rs
index f08c7d0..4dabe38 100644
--- a/src/synom.rs
+++ b/src/synom.rs
@@ -269,65 +269,3 @@
         }
     }
 }
-
-/// Extension traits that are made available within the `call!` parser.
-///
-/// *This module is available if Syn is built with the `"parsing"` feature.*
-pub mod ext {
-    use proc_macro2::Ident;
-
-    use parse::{ParseStream, Result};
-
-    /// Additional parsing methods for `Ident`.
-    ///
-    /// This trait is sealed and cannot be implemented for types outside of Syn.
-    ///
-    /// *This trait is available if Syn is built with the `"parsing"` feature.*
-    pub trait IdentExt: Sized + private::Sealed {
-        /// Parses any identifier including keywords.
-        ///
-        /// This is useful when parsing a DSL which allows Rust keywords as
-        /// identifiers.
-        ///
-        /// ```rust
-        /// #[macro_use]
-        /// extern crate syn;
-        ///
-        /// use syn::Ident;
-        ///
-        /// // Parses input that looks like `name = NAME` where `NAME` can be
-        /// // any identifier.
-        /// //
-        /// // Examples:
-        /// //
-        /// //     name = anything
-        /// //     name = impl
-        /// named!(parse_dsl -> Ident, do_parse!(
-        ///     custom_keyword!(name) >>
-        ///     punct!(=) >>
-        ///     name: call!(Ident::parse_any) >>
-        ///     (name)
-        /// ));
-        /// #
-        /// # fn main() {}
-        /// ```
-        fn parse_any(input: ParseStream) -> Result<Self>;
-    }
-
-    impl IdentExt for Ident {
-        fn parse_any(input: ParseStream) -> Result<Self> {
-            input.step(|cursor| match cursor.ident() {
-                Some((ident, rest)) => Ok((ident, rest)),
-                None => Err(cursor.error("expected ident")),
-            })
-        }
-    }
-
-    mod private {
-        use proc_macro2::Ident;
-
-        pub trait Sealed {}
-
-        impl Sealed for Ident {}
-    }
-}