diff --git a/src/attr.rs b/src/attr.rs
index bfc41d9..a07fa77 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -11,9 +11,9 @@
 
 use std::iter;
 
+use proc_macro2::TokenStream;
 #[cfg(not(feature = "parsing"))]
 use proc_macro2::{Delimiter, Spacing, TokenTree};
-use proc_macro2::TokenStream;
 
 #[cfg(feature = "parsing")]
 use parse::{ParseStream, Result};
@@ -195,7 +195,11 @@
             return Err(Error::new(colon.spans[0], "expected meta identifier"));
         }
 
-        let first_segment = self.path.segments.first().expect("paths have at least one segment");
+        let first_segment = self
+            .path
+            .segments
+            .first()
+            .expect("paths have at least one segment");
         if let Some(colon) = first_segment.punct() {
             return Err(Error::new(colon.spans[0], "expected meta value"));
         }
@@ -643,7 +647,10 @@
         })
     }
 
-    fn parse_meta_name_value_after_ident(ident: Ident, input: ParseStream) -> Result<MetaNameValue> {
+    fn parse_meta_name_value_after_ident(
+        ident: Ident,
+        input: ParseStream,
+    ) -> Result<MetaNameValue> {
         Ok(MetaNameValue {
             ident: ident,
             eq_token: input.parse()?,
diff --git a/src/parse_quote.rs b/src/parse_quote.rs
index 93e2759..7be6039 100644
--- a/src/parse_quote.rs
+++ b/src/parse_quote.rs
@@ -38,10 +38,7 @@
 /// parameter `T` in the input generics.
 ///
 /// ```
-#[cfg_attr(
-    not(syn_can_call_macro_by_path),
-    doc = " #[macro_use]"
-)]
+#[cfg_attr(not(syn_can_call_macro_by_path), doc = " #[macro_use]")]
 #[cfg_attr(
     not(syn_can_call_macro_by_path),
     doc = " extern crate quote;"
diff --git a/src/spanned.rs b/src/spanned.rs
index a6f9aea..8978727 100644
--- a/src/spanned.rs
+++ b/src/spanned.rs
@@ -120,20 +120,18 @@
 }
 
 fn join_spans(tokens: TokenStream) -> Span {
-    let mut iter = tokens
-        .into_iter()
-        .filter_map(|tt| {
-            // FIXME: This shouldn't be required, since optimally spans should
-            // never be invalid. This filter_map can probably be removed when
-            // https://github.com/rust-lang/rust/issues/43081 is resolved.
-            let span = tt.span();
-            let debug = format!("{:?}", span);
-            if debug.ends_with("bytes(0..0)") {
-                None
-            } else {
-                Some(span)
-            }
-        });
+    let mut iter = tokens.into_iter().filter_map(|tt| {
+        // FIXME: This shouldn't be required, since optimally spans should
+        // never be invalid. This filter_map can probably be removed when
+        // https://github.com/rust-lang/rust/issues/43081 is resolved.
+        let span = tt.span();
+        let debug = format!("{:?}", span);
+        if debug.ends_with("bytes(0..0)") {
+            None
+        } else {
+            Some(span)
+        }
+    });
 
     let mut joined = match iter.next() {
         Some(span) => span,
diff --git a/tests/test_meta_item.rs b/tests/test_meta_item.rs
index 30b06cc..3840622 100644
--- a/tests/test_meta_item.rs
+++ b/tests/test_meta_item.rs
@@ -9,8 +9,8 @@
 #![cfg(feature = "extra-traits")]
 
 extern crate proc_macro2;
-extern crate syn;
 extern crate quote;
+extern crate syn;
 
 use proc_macro2::{Ident, Literal, Span};
 use syn::parse::Parser;
