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 {}
-    }
-}
