Un-ignore all ignored doc tests
diff --git a/src/expr.rs b/src/expr.rs
index 523efd8..97db379 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -552,11 +552,17 @@
     ///
     /// E.g. `0..=10 => { println!("match!") }` as in
     ///
-    /// ```rust,ignore
+    /// ```rust
+    /// # #![feature(dotdoteq_in_patterns)]
+    /// #
+    /// # fn main() {
+    /// #     let n = 0;
     /// match n {
-    ///     0..=10 => { println!("match!") },
+    ///     0..=10 => { println!("match!") }
     ///     // ..
+    ///     # _ => {}
     /// }
+    /// # }
     /// ```
     pub struct Arm {
         pub attrs: Vec<Attribute>,
@@ -658,28 +664,28 @@
     #[cfg(feature = "full")]
     use synom::parse_error;
 
-    /// When we're parsing expressions which occur before blocks, like in
-    /// an if statement's condition, we cannot parse a struct literal.
-    ///
-    /// Struct literals are ambiguous in certain positions
-    /// https://github.com/rust-lang/rfcs/pull/92
+    // When we're parsing expressions which occur before blocks, like in an if
+    // statement's condition, we cannot parse a struct literal.
+    //
+    // Struct literals are ambiguous in certain positions
+    // https://github.com/rust-lang/rfcs/pull/92
     macro_rules! ambiguous_expr {
         ($i:expr, $allow_struct:ident) => {
             ambiguous_expr($i, $allow_struct, true)
         };
     }
 
-    /// When we are parsing an optional suffix expression, we cannot allow
-    /// blocks if structs are not allowed.
-    ///
-    /// Example:
-    /// ```ignore
-    /// if break { } { }
-    /// // is ambiguous between:
-    /// if (break { }) { }
-    /// // - or -
-    /// if (break) { } { }
-    /// ```
+    // When we are parsing an optional suffix expression, we cannot allow blocks
+    // if structs are not allowed.
+    //
+    // Example:
+    //
+    //     if break {} {}
+    //
+    // is ambiguous between:
+    //
+    //     if (break {}) {}
+    //     if (break) {} {}
     #[cfg(feature = "full")]
     macro_rules! opt_ambiguous_expr {
         ($i:expr, $allow_struct:ident) => {
@@ -698,7 +704,7 @@
     #[cfg(feature = "full")]
     named!(expr_no_struct -> Expr, ambiguous_expr!(false));
 
-    /// Parse an arbitrary expression.
+    // Parse an arbitrary expression.
     #[cfg(feature = "full")]
     fn ambiguous_expr(i: Cursor,
                       allow_struct: bool,
@@ -725,7 +731,7 @@
         )
     }
 
-    /// Parse a left-associative binary operator.
+    // Parse a left-associative binary operator.
     macro_rules! binop {
         (
             $name: ident,
@@ -750,21 +756,19 @@
         }
     }
 
-    /// ```ignore
-    /// <placement> = <placement> ..
-    /// <placement> += <placement> ..
-    /// <placement> -= <placement> ..
-    /// <placement> *= <placement> ..
-    /// <placement> /= <placement> ..
-    /// <placement> %= <placement> ..
-    /// <placement> ^= <placement> ..
-    /// <placement> &= <placement> ..
-    /// <placement> |= <placement> ..
-    /// <placement> <<= <placement> ..
-    /// <placement> >>= <placement> ..
-    /// ```
-    ///
-    /// NOTE: This operator is right-associative.
+    // <placement> = <placement> ..
+    // <placement> += <placement> ..
+    // <placement> -= <placement> ..
+    // <placement> *= <placement> ..
+    // <placement> /= <placement> ..
+    // <placement> %= <placement> ..
+    // <placement> ^= <placement> ..
+    // <placement> &= <placement> ..
+    // <placement> |= <placement> ..
+    // <placement> <<= <placement> ..
+    // <placement> >>= <placement> ..
+    //
+    // NOTE: This operator is right-associative.
     #[cfg(feature = "full")]
     named!(assign_expr(allow_struct: bool, allow_block: bool) -> ExprKind, do_parse!(
         mut e: call!(placement_expr, allow_struct, allow_block) >>
@@ -800,14 +804,12 @@
         (e)
     ));
 
-    /// ```ignore
-    /// <range> <- <range> ..
-    /// ```
-    ///
-    /// NOTE: The `in place { expr }` version of this syntax is parsed in
-    /// `atom_expr`, not here.
-    ///
-    /// NOTE: This operator is right-associative.
+    // <range> <- <range> ..
+    //
+    // NOTE: The `in place { expr }` version of this syntax is parsed in
+    // `atom_expr`, not here.
+    //
+    // NOTE: This operator is right-associative.
     #[cfg(feature = "full")]
     named!(placement_expr(allow_struct: bool, allow_block: bool) -> ExprKind, do_parse!(
         mut e: call!(range_expr, allow_struct, allow_block) >>
@@ -831,19 +833,17 @@
         (e)
     ));
 
-    /// ```ignore
-    /// <or> ... <or> ..
-    /// <or> .. <or> ..
-    /// <or> ..
-    /// ```
-    ///
-    /// NOTE: This is currently parsed oddly - I'm not sure of what the exact
-    /// rules are for parsing these expressions are, but this is not correct.
-    /// For example, `a .. b .. c` is not a legal expression. It should not
-    /// be parsed as either `(a .. b) .. c` or `a .. (b .. c)` apparently.
-    ///
-    /// NOTE: The form of ranges which don't include a preceding expression are
-    /// parsed by `atom_expr`, rather than by this function.
+    // <or> ... <or> ..
+    // <or> .. <or> ..
+    // <or> ..
+    //
+    // NOTE: This is currently parsed oddly - I'm not sure of what the exact
+    // rules are for parsing these expressions are, but this is not correct.
+    // For example, `a .. b .. c` is not a legal expression. It should not
+    // be parsed as either `(a .. b) .. c` or `a .. (b .. c)` apparently.
+    //
+    // NOTE: The form of ranges which don't include a preceding expression are
+    // parsed by `atom_expr`, rather than by this function.
     #[cfg(feature = "full")]
     named!(range_expr(allow_struct: bool, allow_block: bool) -> ExprKind, do_parse!(
         mut e: call!(or_expr, allow_struct, allow_block) >>
@@ -863,27 +863,21 @@
         (e)
     ));
 
-    /// ```ignore
-    /// <and> || <and> ...
-    /// ```
+    // <and> || <and> ...
     binop!(or_expr, and_expr, map!(punct!(||), BinOp::Or));
 
-    /// ```ignore
-    /// <compare> && <compare> ...
-    /// ```
+    // <compare> && <compare> ...
     binop!(and_expr, compare_expr, map!(punct!(&&), BinOp::And));
 
-    /// ```ignore
-    /// <bitor> == <bitor> ...
-    /// <bitor> != <bitor> ...
-    /// <bitor> >= <bitor> ...
-    /// <bitor> <= <bitor> ...
-    /// <bitor> > <bitor> ...
-    /// <bitor> < <bitor> ...
-    /// ```
-    ///
-    /// NOTE: This operator appears to be parsed as left-associative, but errors
-    /// if it is used in a non-associative manner.
+    // <bitor> == <bitor> ...
+    // <bitor> != <bitor> ...
+    // <bitor> >= <bitor> ...
+    // <bitor> <= <bitor> ...
+    // <bitor> > <bitor> ...
+    // <bitor> < <bitor> ...
+    //
+    // NOTE: This operator appears to be parsed as left-associative, but errors
+    // if it is used in a non-associative manner.
     binop!(compare_expr, bitor_expr, alt!(
         punct!(==) => { BinOp::Eq }
         |
@@ -905,9 +899,7 @@
         punct!(>) => { BinOp::Gt }
     ));
 
-    /// ```ignore
-    /// <bitxor> | <bitxor> ...
-    /// ```
+    // <bitxor> | <bitxor> ...
     binop!(bitor_expr, bitxor_expr, do_parse!(
         not!(punct!(||)) >>
         not!(punct!(|=)) >>
@@ -915,9 +907,7 @@
         (BinOp::BitOr(t))
     ));
 
-    /// ```ignore
-    /// <bitand> ^ <bitand> ...
-    /// ```
+    // <bitand> ^ <bitand> ...
     binop!(bitxor_expr, bitand_expr, do_parse!(
         // NOTE: Make sure we aren't looking at ^=.
         not!(punct!(^=)) >>
@@ -925,9 +915,7 @@
         (BinOp::BitXor(t))
     ));
 
-    /// ```ignore
-    /// <shift> & <shift> ...
-    /// ```
+    // <shift> & <shift> ...
     binop!(bitand_expr, shift_expr, do_parse!(
         // NOTE: Make sure we aren't looking at && or &=.
         not!(punct!(&&)) >>
@@ -936,31 +924,25 @@
         (BinOp::BitAnd(t))
     ));
 
-    /// ```ignore
-    /// <arith> << <arith> ...
-    /// <arith> >> <arith> ...
-    /// ```
+    // <arith> << <arith> ...
+    // <arith> >> <arith> ...
     binop!(shift_expr, arith_expr, alt!(
         punct!(<<) => { BinOp::Shl }
         |
         punct!(>>) => { BinOp::Shr }
     ));
 
-    /// ```ignore
-    /// <term> + <term> ...
-    /// <term> - <term> ...
-    /// ```
+    // <term> + <term> ...
+    // <term> - <term> ...
     binop!(arith_expr, term_expr, alt!(
         punct!(+) => { BinOp::Add }
         |
         punct!(-) => { BinOp::Sub }
     ));
 
-    /// ```ignore
-    /// <cast> * <cast> ...
-    /// <cast> / <cast> ...
-    /// <cast> % <cast> ...
-    /// ```
+    // <cast> * <cast> ...
+    // <cast> / <cast> ...
+    // <cast> % <cast> ...
     binop!(term_expr, cast_expr, alt!(
         punct!(*) => { BinOp::Mul }
         |
@@ -969,10 +951,8 @@
         punct!(%) => { BinOp::Rem }
     ));
 
-    /// ```ignore
-    /// <unary> as <ty>
-    /// <unary> : <ty>
-    /// ```
+    // <unary> as <ty>
+    // <unary> : <ty>
     named!(cast_expr(allow_struct: bool, allow_block: bool) -> ExprKind, do_parse!(
         mut e: call!(unary_expr, allow_struct, allow_block) >>
         many0!(alt!(
@@ -1007,12 +987,10 @@
         (e)
     ));
 
-    /// ```
-    /// <UnOp> <trailer>
-    /// & <trailer>
-    /// &mut <trailer>
-    /// box <trailer>
-    /// ```
+    // <UnOp> <trailer>
+    // & <trailer>
+    // &mut <trailer>
+    // box <trailer>
     #[cfg(feature = "full")]
     named!(unary_expr(allow_struct: bool, allow_block: bool) -> ExprKind, alt!(
         do_parse!(
@@ -1062,14 +1040,12 @@
         call!(trailer_expr, allow_struct, allow_block)
     ));
 
-    /// ```ignore
-    /// <atom> (..<args>) ...
-    /// <atom> . <ident> (..<args>) ...
-    /// <atom> . <ident> ...
-    /// <atom> . <lit> ...
-    /// <atom> [ <expr> ] ...
-    /// <atom> ? ...
-    /// ```
+    // <atom> (..<args>) ...
+    // <atom> . <ident> (..<args>) ...
+    // <atom> . <ident> ...
+    // <atom> . <lit> ...
+    // <atom> [ <expr> ] ...
+    // <atom> ? ...
     #[cfg(feature = "full")]
     named!(trailer_expr(allow_struct: bool, allow_block: bool) -> ExprKind, do_parse!(
         mut e: call!(atom_expr, allow_struct, allow_block) >>
@@ -1152,8 +1128,8 @@
         (e)
     ));
 
-    /// Parse all atomic expressions which don't have to worry about precidence
-    /// interactions, as they are fully contained.
+    // Parse all atomic expressions which don't have to worry about precidence
+    // interactions, as they are fully contained.
     #[cfg(feature = "full")]
     named!(atom_expr(allow_struct: bool, allow_block: bool) -> ExprKind, alt!(
         syn!(ExprGroup) => { ExprKind::Group } // must be placed first
@@ -1659,7 +1635,7 @@
         // position where structs are not allowed, such as in if statement
         // conditions. For example:
         //
-        // if return { println!("A") } { } // Prints "A"
+        // if return { println!("A") } {} // Prints "A"
         ret_value: option!(ambiguous_expr!(allow_struct)) >>
         (ExprRet {
             expr: ret_value.map(Box::new),
@@ -2281,8 +2257,8 @@
     use attr::FilterAttrs;
     use quote::{Tokens, ToTokens};
 
-    /// If the given expression is a bare `ExprStruct`, wraps it in parenthesis
-    /// before appending it to `Tokens`.
+    // If the given expression is a bare `ExprStruct`, wraps it in parenthesis
+    // before appending it to `Tokens`.
     #[cfg(feature = "full")]
     fn wrap_bare_struct(tokens: &mut Tokens, e: &Expr) {
         if let ExprKind::Struct(_) = e.node {
diff --git a/src/lib.rs b/src/lib.rs
index 40472c5..bcad33a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -126,7 +126,7 @@
 ///
 /// # Examples
 ///
-/// ```rust,ignore
+/// ```rust
 /// extern crate proc_macro;
 /// use proc_macro::TokenStream;
 ///
@@ -137,7 +137,9 @@
 ///
 /// use syn::DeriveInput;
 ///
+/// # const IGNORE_TOKENS: &str = stringify! {
 /// #[proc_macro_derive(MyMacro)]
+/// # };
 /// pub fn my_macro(input: TokenStream) -> TokenStream {
 ///     // Parse the tokens into a syntax tree
 ///     let ast: DeriveInput = syn::parse(input).unwrap();
@@ -147,9 +149,11 @@
 ///         /* ... */
 ///     };
 ///
-///     // Parse back to a token stream and return it
-///     expanded.parse().unwrap()
+///     // Convert into a token stream and return it
+///     expanded.into()
 /// }
+/// #
+/// # fn main() {}
 /// ```
 #[cfg(feature = "parsing")]
 pub fn parse<T>(tokens: proc_macro::TokenStream) -> Result<T, ParseError>
diff --git a/src/ty.rs b/src/ty.rs
index b55f2f0..04339fe 100644
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -256,13 +256,13 @@
     /// separately. `position` represents the index of the associated
     /// item qualified with this Self type.
     ///
-    /// ```rust,ignore
+    /// ```text
     /// <Vec<T> as a::b::Trait>::AssociatedItem
-    ///  ^~~~~     ~~~~~~~~~~~~~~^
+    ///  ^~~~~~    ~~~~~~~~~~~~~~^
     ///  ty        position = 3
     ///
     /// <Vec<T>>::AssociatedItem
-    ///  ^~~~~    ^
+    ///  ^~~~~~   ^
     ///  ty       position = 0
     /// ```
     pub struct QSelf {