diff --git a/examples/example.rs b/examples/example.rs
index 45b14da..9bd3ccb 100644
--- a/examples/example.rs
+++ b/examples/example.rs
@@ -42,7 +42,7 @@
     let c = FilenameCompleter::new();
     let mut rl = Editor::with_config(config);
     rl.set_completer(Some(Rc::new(RefCell::new(c))));
-    rl.set_hinter(Some(Rc::new(RefCell::new(Hints{}))));
+    rl.set_hinter(Some(Rc::new(RefCell::new(Hints {}))));
     rl.bind_sequence(KeyPress::Meta('N'), Cmd::HistorySearchForward);
     rl.bind_sequence(KeyPress::Meta('P'), Cmd::HistorySearchBackward);
     if rl.load_history("history.txt").is_err() {
diff --git a/rustfmt.toml b/rustfmt.toml
index ea29d79..b0d7dd1 100644
--- a/rustfmt.toml
+++ b/rustfmt.toml
@@ -3,4 +3,5 @@
 force_format_strings = true
 format_strings = true
 reorder_imported_names = true
-write_mode = "Overwrite"
\ No newline at end of file
+write_mode = "Overwrite"
+error_on_line_overflow_comments = false
\ No newline at end of file
diff --git a/src/hint.rs b/src/hint.rs
index 2a5634a..84342dc 100644
--- a/src/hint.rs
+++ b/src/hint.rs
@@ -6,4 +6,4 @@
     /// returns the string that should be displayed or `None`
     /// if no hint is available for the text the user currently typed.
     fn hint(&mut self, line: &str, pos: usize) -> Option<String>;
-}
\ No newline at end of file
+}
diff --git a/src/history.rs b/src/history.rs
index af13052..e26b60b 100644
--- a/src/history.rs
+++ b/src/history.rs
@@ -93,7 +93,8 @@
     /// just the latest `len` elements if the new history length value is
     /// smaller than the amount of items already inside the history.
     ///
-    /// Like [stifle_history](http://cnswww.cns.cwru.edu/php/chet/readline/history.html#IDX11).
+    /// Like [stifle_history](http://cnswww.cns.cwru.
+    /// edu/php/chet/readline/history.html#IDX11).
     pub fn set_max_len(&mut self, len: usize) {
         self.max_len = len;
         if len == 0 {
diff --git a/src/lib.rs b/src/lib.rs
index ae5676d..31011eb 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -75,11 +75,11 @@
 /// Implement rendering.
 struct State<'out, 'prompt> {
     out: &'out mut Renderer,
-    prompt: &'prompt str,               // Prompt to display
-    prompt_size: Position,              // Prompt Unicode/visible width and height
-    line: LineBuffer,                   // Edited line buffer
-    cursor: Position,                   /* Cursor position (relative to the start of the prompt
-                                         * for `row`) */
+    prompt: &'prompt str,  // Prompt to display
+    prompt_size: Position, // Prompt Unicode/visible width and height
+    line: LineBuffer,      // Edited line buffer
+    cursor: Position,      /* Cursor position (relative to the start of the prompt
+                            * for `row`) */
     old_rows: usize, // Number of rows used so far (from start of prompt to end of input)
     history_index: usize, // The history index we are currently editing
     saved_line_for_history: LineBuffer, // Current edited line before history browsing
@@ -182,7 +182,9 @@
 
     fn hint(&self) -> Option<String> {
         if let Some(ref hinter) = self.hinter {
-            hinter.borrow_mut().hint(self.line.as_str(), self.line.pos())
+            hinter
+                .borrow_mut()
+                .hint(self.line.as_str(), self.line.pos())
         } else {
             None
         }
@@ -210,7 +212,9 @@
         if push {
             let prompt_size = s.prompt_size;
             let hint = s.hint();
-            if n == 1 && s.cursor.col + ch.width().unwrap_or(0) < s.out.get_columns() && hint.is_none() {
+            if n == 1 && s.cursor.col + ch.width().unwrap_or(0) < s.out.get_columns() &&
+                hint.is_none()
+            {
                 // Avoid a full update of the line in the trivial case.
                 let cursor = s.out
                     .calculate_position(&s.line[..s.line.pos()], s.prompt_size);
@@ -537,7 +541,7 @@
 }
 
 /// Completes the line/word
-fn complete_line<R: RawReader, C: Completer+?Sized>(
+fn complete_line<R: RawReader, C: Completer + ?Sized>(
     rdr: &mut R,
     s: &mut State,
     completer: &mut C,
@@ -807,7 +811,7 @@
     original_mode: tty::Mode,
 ) -> Result<String> {
     let completer = editor.completer.as_ref();
-    let hinter = editor.hinter.as_ref().map(|h| h.clone());
+    let hinter = editor.hinter.as_ref().cloned();
 
     let mut stdout = editor.term.create_writer();
 
@@ -825,7 +829,8 @@
     s.line.set_change_listener(s.changes.clone());
 
     if let Some((left, right)) = initial {
-        s.line.update((left.to_owned() + right).as_ref(), left.len());
+        s.line
+            .update((left.to_owned() + right).as_ref(), left.len());
     }
 
     try!(s.refresh_line());
@@ -1088,7 +1093,11 @@
 
 /// Readline method that will enable RAW mode, call the `readline_edit()`
 /// method and disable raw mode
-fn readline_raw(prompt: &str, initial: Option<(&str, &str)>, editor: &mut Editor) -> Result<String> {
+fn readline_raw(
+    prompt: &str,
+    initial: Option<(&str, &str)>,
+    editor: &mut Editor,
+) -> Result<String> {
     let original_mode = try!(editor.term.enable_raw_mode());
     let guard = Guard(original_mode);
     let user_input = readline_edit(prompt, initial, editor, original_mode);
@@ -1144,22 +1153,26 @@
 
     /// This method will read a line from STDIN and will display a `prompt`.
     ///
-    /// It uses terminal-style interaction if `stdin` is connected to a terminal.
+    /// It uses terminal-style interaction if `stdin` is connected to a
+    /// terminal.
     /// Otherwise (e.g., if `stdin` is a pipe or the terminal is not supported),
     /// it uses file-style interaction.
     pub fn readline(&mut self, prompt: &str) -> Result<String> {
         self.readline_with(prompt, None)
     }
-    /// This function behaves in the exact same manner as `readline`, except that it pre-populates the input area.
+    /// This function behaves in the exact same manner as `readline`, except
+    /// that it pre-populates the input area.
     ///
     /// The text that resides in the input area is given as a 2-tuple.
-    /// The string on the left of the tuple what will appear to the left of the cursor
-    /// and the string on the right is what will appear to the right of the cursor.
-    pub fn readline_with_initial(&mut self, prompt: &str, initial: (&str,&str)) -> Result<String> {
+    /// The string on the left of the tuple what will appear to the left of the
+    /// cursor
+    /// and the string on the right is what will appear to the right of the
+    /// cursor.
+    pub fn readline_with_initial(&mut self, prompt: &str, initial: (&str, &str)) -> Result<String> {
         self.readline_with(prompt, Some(initial))
     }
 
-    fn readline_with(&mut self, prompt: &str, initial: Option<(&str,&str)>) -> Result<String> {
+    fn readline_with(&mut self, prompt: &str, initial: Option<(&str, &str)>) -> Result<String> {
         if self.term.is_unsupported() {
             debug!(target: "rustyline", "unsupported terminal");
             // Write prompt and flush it to stdout
@@ -1258,8 +1271,7 @@
 }
 
 /// Edited lines iterator
-pub struct Iter<'a>
-{
+pub struct Iter<'a> {
     editor: &'a mut Editor,
     prompt: &'a str,
 }
@@ -1270,9 +1282,7 @@
     fn next(&mut self) -> Option<Result<String>> {
         let readline = self.editor.readline(self.prompt);
         match readline {
-            Ok(l) => {
-                Some(Ok(l))
-            }
+            Ok(l) => Some(Ok(l)),
             Err(error::ReadlineError::Eof) => None,
             e @ Err(_) => Some(e),
         }
@@ -1370,7 +1380,8 @@
         let keys = &[KeyPress::Enter];
         let mut rdr = keys.iter();
         let mut completer = SimpleCompleter;
-        let cmd = super::complete_line(&mut rdr, &mut s, &mut completer, &Config::default()).unwrap();
+        let cmd =
+            super::complete_line(&mut rdr, &mut s, &mut completer, &Config::default()).unwrap();
         assert_eq!(Some(Cmd::AcceptLine), cmd);
         assert_eq!("rust", s.line.as_str());
         assert_eq!(4, s.line.pos());
diff --git a/src/tty/unix.rs b/src/tty/unix.rs
index b3f1675..6e5280a 100644
--- a/src/tty/unix.rs
+++ b/src/tty/unix.rs
@@ -129,7 +129,8 @@
                         '5' => KeyPress::PageUp,    // kpp
                         '6' => KeyPress::PageDown,  // knp
                         _ => {
-                            debug!(target: "rustyline", "unsupported esc sequence: ESC [ {} ~", seq2);
+                            debug!(target: "rustyline",
+                            "unsupported esc sequence: ESC [ {} ~", seq2);
                             KeyPress::UnknownEscSeq
                         }
                     })
@@ -150,7 +151,8 @@
                             ('2', '3') => KeyPress::F(11), // kf11
                             ('2', '4') => KeyPress::F(12), // kf12
                             _ => {
-                                debug!(target: "rustyline", "unsupported esc sequence: ESC [ {}{} ~", seq1, seq2);
+                                debug!(target: "rustyline",
+                                "unsupported esc sequence: ESC [ {}{} ~", seq1, seq2);
                                 KeyPress::UnknownEscSeq
                             }
                         })
@@ -158,13 +160,16 @@
                         let seq5 = try!(self.next_char());
                         if seq5.is_digit(10) {
                             let seq6 = try!(self.next_char()); // '~' expected
-                            debug!(target: "rustyline", "unsupported esc sequence: ESC [ {}{} ; {} {}", seq2, seq3, seq5, seq6);
+                            debug!(target: "rustyline",
+                            "unsupported esc sequence: ESC [ {}{} ; {} {}", seq2, seq3, seq5, seq6);
                         } else {
-                            debug!(target: "rustyline", "unsupported esc sequence: ESC [ {}{} ; {:?}", seq2, seq3, seq5);
+                            debug!(target: "rustyline",
+                            "unsupported esc sequence: ESC [ {}{} ; {:?}", seq2, seq3, seq5);
                         }
                         Ok(KeyPress::UnknownEscSeq)
                     } else {
-                        debug!(target: "rustyline", "unsupported esc sequence: ESC [ {}{} {:?}", seq2, seq3, seq4);
+                        debug!(target: "rustyline",
+                        "unsupported esc sequence: ESC [ {}{} {:?}", seq2, seq3, seq4);
                         Ok(KeyPress::UnknownEscSeq)
                     }
                 } else if seq3 == ';' {
@@ -182,16 +187,19 @@
                                 ('2', 'C') => KeyPress::ShiftRight,
                                 ('2', 'D') => KeyPress::ShiftLeft,
                                 _ => {
-                                    debug!(target: "rustyline", "unsupported esc sequence: ESC [ {} ; {} {}", seq2, seq4, seq5);
+                                    debug!(target: "rustyline",
+                                    "unsupported esc sequence: ESC [ {} ; {} {}", seq2, seq4, seq5);
                                     KeyPress::UnknownEscSeq
                                 }
                             })
                         } else {
-                            debug!(target: "rustyline", "unsupported esc sequence: ESC [ {} ; {} {}", seq2, seq4, seq5);
+                            debug!(target: "rustyline",
+                            "unsupported esc sequence: ESC [ {} ; {} {}", seq2, seq4, seq5);
                             Ok(KeyPress::UnknownEscSeq)
                         }
                     } else {
-                        debug!(target: "rustyline", "unsupported esc sequence: ESC [ {} ; {:?}", seq2, seq4);
+                        debug!(target: "rustyline",
+                        "unsupported esc sequence: ESC [ {} ; {:?}", seq2, seq4);
                         Ok(KeyPress::UnknownEscSeq)
                     }
                 } else {
@@ -201,7 +209,8 @@
                         ('5', 'C') => KeyPress::ControlRight,
                         ('5', 'D') => KeyPress::ControlLeft,
                         _ => {
-                            debug!(target: "rustyline", "unsupported esc sequence: ESC [ {} {:?}", seq2, seq3);
+                            debug!(target: "rustyline",
+                            "unsupported esc sequence: ESC [ {} {:?}", seq2, seq3);
                             KeyPress::UnknownEscSeq
                         }
                     })
