Merge pull request #378 from dtolnay/doc

Document Synom::description()
diff --git a/.travis.yml b/.travis.yml
index 3f95f84..fa153d9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -44,7 +44,7 @@
           ;;
         clippy)
           cargo install clippy --debug --force || exit
-          cargo clippy --features 'full fold visit visit-mut' -- -Dclippy
+          cargo clippy --all-features -- -Dclippy
           ;;
         codegen)
           (cd codegen && cargo run) &&
@@ -62,4 +62,4 @@
     - ROLE=clippy
     - ROLE=codegen
   global:
-    - RUST_MIN_STACK=16000000
+    - RUST_MIN_STACK=20000000
diff --git a/Cargo.toml b/Cargo.toml
index b447ac2..2793250 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "syn"
-version = "0.12.13" # don't forget to update html_root_url
+version = "0.12.14" # don't forget to update html_root_url
 authors = ["David Tolnay <dtolnay@gmail.com>"]
 license = "MIT/Apache-2.0"
 description = "Nom parser for Rust source code"
@@ -33,7 +33,7 @@
 
 [dev-dependencies]
 rayon = "1.0.0"
-walkdir = "1.0.1"
+walkdir = "2"
 
 [package.metadata.docs.rs]
 all-features = true
diff --git a/src/generics.rs b/src/generics.rs
index b86f77d..13a850b 100644
--- a/src/generics.rs
+++ b/src/generics.rs
@@ -950,8 +950,10 @@
 
     impl ToTokens for WhereClause {
         fn to_tokens(&self, tokens: &mut Tokens) {
-            self.where_token.to_tokens(tokens);
-            self.predicates.to_tokens(tokens);
+            if !self.predicates.is_empty() {
+                self.where_token.to_tokens(tokens);
+                self.predicates.to_tokens(tokens);
+            }
         }
     }
 
diff --git a/src/lib.rs b/src/lib.rs
index e6e716a..ee7e8de 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -256,10 +256,10 @@
 //!   types.
 
 // Syn types in rustdoc of other crates get linked to here.
-#![doc(html_root_url = "https://docs.rs/syn/0.12.13")]
+#![doc(html_root_url = "https://docs.rs/syn/0.12.14")]
 #![cfg_attr(feature = "cargo-clippy",
             allow(const_static_lifetime, doc_markdown, large_enum_variant, match_bool,
-                  redundant_closure, needless_pass_by_value))]
+                  redundant_closure, needless_pass_by_value, redundant_field_names))]
 
 extern crate proc_macro2;
 extern crate proc_macro;
diff --git a/tests/common/respan.rs b/tests/common/respan.rs
index bc59965..6d1e75a 100644
--- a/tests/common/respan.rs
+++ b/tests/common/respan.rs
@@ -128,7 +128,7 @@
                         // default fold_fn_decl does not fold this span
                         FunctionRetTy::Default(span) => FunctionRetTy::Default(self.new_span(span)),
                     },
-                    variadic: variadic,
+                    variadic,
                 }
             },
         )
@@ -192,7 +192,7 @@
     fn fold_meta_item(&mut self, meta_item: MetaItem) -> MetaItem {
         let MetaItem { name, node, span } = meta_item;
         MetaItem {
-            name: name,
+            name,
             node: match node {
                 MetaItemKind::Word => MetaItemKind::Word,
                 MetaItemKind::List(nested) => {
diff --git a/tests/test_precedence.rs b/tests/test_precedence.rs
index 0a2ee15..6c2d74c 100644
--- a/tests/test_precedence.rs
+++ b/tests/test_precedence.rs
@@ -30,7 +30,7 @@
 use rayon::iter::{IntoParallelIterator, ParallelIterator};
 use syntax::ast;
 use syntax::ptr::P;
-use walkdir::{DirEntry, WalkDir, WalkDirIterator};
+use walkdir::{DirEntry, WalkDir};
 
 use std::fs::File;
 use std::io::Read;
@@ -97,7 +97,7 @@
     let failed = AtomicUsize::new(0);
 
     WalkDir::new("tests/rust")
-        .sort_by(|a, b| a.cmp(b))
+        .sort_by(|a, b| a.file_name().cmp(b.file_name()))
         .into_iter()
         .filter_entry(common::base_dir_filter)
         .collect::<Result<Vec<DirEntry>, walkdir::Error>>()
@@ -162,7 +162,7 @@
     let mut passed = 0;
     let mut failed = 0;
 
-    for expr in exprs {
+    syntax::with_globals(|| for expr in exprs {
         let raw = quote!(#expr).to_string();
 
         let libsyntax_ast = if let Some(e) = libsyntax_parse_and_rewrite(&raw) {
@@ -191,7 +191,7 @@
             failed += 1;
             errorf!("\nFAIL\n{:?}\n!=\n{:?}\n", syn_ast, libsyntax_ast);
         }
-    }
+    });
 
     (passed, failed)
 }
@@ -216,7 +216,7 @@
     fn expr(node: ExprKind) -> P<Expr> {
         P(Expr {
             id: ast::DUMMY_NODE_ID,
-            node: node,
+            node,
             span: DUMMY_SP,
             attrs: ThinVec::new(),
         })
@@ -274,7 +274,7 @@
                 s => s,
             };
 
-            SmallVector::one(Stmt { node: node, ..stmt })
+            SmallVector::one(Stmt { node, ..stmt })
         }
 
         fn fold_mac(&mut self, mac: Mac) -> Mac {
@@ -306,7 +306,7 @@
     fn paren(folder: &mut ParenthesizeEveryExpr, mut node: Expr) -> Expr {
         let attrs = node.replace_attrs(Vec::new());
         Expr::Paren(ExprParen {
-            attrs: attrs,
+            attrs,
             expr: Box::new(fold_expr(folder, node)),
             paren_token: token::Paren::default(),
         })
diff --git a/tests/test_round_trip.rs b/tests/test_round_trip.rs
index 527a0e2..3313acb 100644
--- a/tests/test_round_trip.rs
+++ b/tests/test_round_trip.rs
@@ -22,7 +22,7 @@
 use syntax::parse::{self, PResult, ParseSess};
 use syntax::codemap::FilePathMapping;
 use syntax_pos::FileName;
-use walkdir::{DirEntry, WalkDir, WalkDirIterator};
+use walkdir::{DirEntry, WalkDir};
 
 use std::fs::File;
 use std::io::Read;
@@ -49,7 +49,7 @@
     let failed = AtomicUsize::new(0);
 
     WalkDir::new("tests/rust")
-        .sort_by(|a, b| a.cmp(b))
+        .sort_by(|a, b| a.file_name().cmp(b.file_name()))
         .into_iter()
         .filter_entry(common::base_dir_filter)
         .collect::<Result<Vec<DirEntry>, walkdir::Error>>()
@@ -146,5 +146,7 @@
 
 fn libsyntax_parse(content: String, sess: &ParseSess) -> PResult<ast::Crate> {
     let name = FileName::Custom("test_round_trip".to_string());
-    parse::parse_crate_from_source_str(name, content, sess).map(common::respan::respan_crate)
+    syntax::with_globals(|| {
+        parse::parse_crate_from_source_str(name, content, sess).map(common::respan::respan_crate)
+    })
 }
diff --git a/tests/test_token_trees.rs b/tests/test_token_trees.rs
index 398e630..0047ae2 100644
--- a/tests/test_token_trees.rs
+++ b/tests/test_token_trees.rs
@@ -93,7 +93,7 @@
             pound_token: Default::default(),
             bracket_token: Default::default(),
             path: "test".into(),
-            tts: tts,
+            tts,
             is_sugared_doc: false,
         }
     }