Some special cases for parse_quote
diff --git a/src/lib.rs b/src/lib.rs
index 98aea1d..b974dc4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -385,6 +385,11 @@
 #[cfg(any(feature = "full", feature = "derive"))]
 mod tt;
 
+// Not public API except the `parse_quote!` macro.
+#[cfg(all(feature = "parsing", feature = "printing"))]
+#[doc(hidden)]
+pub mod parse_quote;
+
 #[cfg(all(feature = "parsing", feature = "printing"))]
 pub mod spanned;
 
@@ -696,83 +701,6 @@
     Ok(file)
 }
 
-/// Quasi-quotation macro that accepts input like the [`quote!`] macro but uses
-/// type inference to figure out a return type for those tokens.
-///
-/// [`quote!`]: https://docs.rs/quote/0.4/quote/index.html
-///
-/// The return type can be any syntax tree node that implements the [`Synom`]
-/// trait.
-///
-/// [`Synom`]: synom/trait.Synom.html
-///
-/// ```
-/// #[macro_use]
-/// extern crate syn;
-///
-/// #[macro_use]
-/// extern crate quote;
-///
-/// use syn::Stmt;
-///
-/// fn main() {
-///     let name = quote!(v);
-///     let ty = quote!(u8);
-///
-///     let stmt: Stmt = parse_quote! {
-///         let #name: #ty = Default::default();
-///     };
-///
-///     println!("{:#?}", stmt);
-/// }
-/// ```
-///
-/// *This macro is available if Syn is built with both the `"parsing"` and
-/// `"printing"` features.*
-///
-/// # Example
-///
-/// The following helper function adds a bound `T: HeapSize` to every type
-/// parameter `T` in the input generics.
-///
-/// ```
-/// # #[macro_use]
-/// # extern crate syn;
-/// #
-/// # #[macro_use]
-/// # extern crate quote;
-/// #
-/// # use syn::{Generics, GenericParam};
-/// #
-/// // Add a bound `T: HeapSize` to every type parameter T.
-/// fn add_trait_bounds(mut generics: Generics) -> Generics {
-///     for param in &mut generics.params {
-///         if let GenericParam::Type(ref mut type_param) = *param {
-///             type_param.bounds.push(parse_quote!(HeapSize));
-///         }
-///     }
-///     generics
-/// }
-/// #
-/// # fn main() {}
-/// ```
-///
-/// # Panics
-///
-/// Panics if the tokens fail to parse as the expected syntax tree type. The
-/// caller is responsible for ensuring that the input tokens are syntactically
-/// valid.
-#[cfg(all(feature = "parsing", feature = "printing"))]
-#[macro_export]
-macro_rules! parse_quote {
-    ($($tt:tt)*) => {
-        ::std::result::Result::unwrap(
-            $crate::parse2(
-                ::std::convert::Into::into(
-                    quote!($($tt)*))))
-    };
-}
-
 #[cfg(all(any(feature = "full", feature = "derive"), feature = "printing"))]
 struct TokensOrDefault<'a, T: 'a>(&'a Option<T>);