diff --git a/rustfmt.toml b/rustfmt.toml
index 34977e4..83697e3 100644
--- a/rustfmt.toml
+++ b/rustfmt.toml
@@ -1,3 +1,4 @@
 wrap_comments = true
 format_strings = true
 error_on_unformatted = false
+reorder_impl_items = true
diff --git a/src/completion.rs b/src/completion.rs
index 1d05753..aeb9a34 100644
--- a/src/completion.rs
+++ b/src/completion.rs
@@ -24,6 +24,7 @@
     fn display(&self) -> &str {
         self.as_str()
     }
+
     fn replacement(&self) -> &str {
         self.as_str()
     }
@@ -38,6 +39,7 @@
     fn display(&self) -> &str {
         self.display.as_str()
     }
+
     fn replacement(&self) -> &str {
         self.replacement.as_str()
     }
@@ -66,6 +68,7 @@
     fn complete(&self, _line: &str, _pos: usize) -> Result<(usize, Vec<String>)> {
         Ok((0, Vec::with_capacity(0)))
     }
+
     fn update(&self, _line: &mut LineBuffer, _start: usize, _elected: &str) {
         unreachable!()
     }
@@ -77,6 +80,7 @@
     fn complete(&self, line: &str, pos: usize) -> Result<(usize, Vec<Self::Candidate>)> {
         (**self).complete(line, pos)
     }
+
     fn update(&self, line: &mut LineBuffer, start: usize, elected: &str) {
         (**self).update(line, start, elected)
     }
diff --git a/src/edit.rs b/src/edit.rs
index 7dae766..6a82da6 100644
--- a/src/edit.rs
+++ b/src/edit.rs
@@ -80,6 +80,7 @@
         self.saved_line_for_history
             .update(self.line.as_str(), self.line.pos());
     }
+
     pub fn restore(&mut self) {
         self.line.update(
             self.saved_line_for_history.as_str(),
@@ -136,12 +137,15 @@
         let hint = self.hint();
         self.refresh(prompt, prompt_size, hint)
     }
+
     fn doing_insert(&mut self) {
         self.changes.borrow_mut().begin();
     }
+
     fn done_inserting(&mut self) {
         self.changes.borrow_mut().end();
     }
+
     fn last_insert(&self) -> Option<String> {
         self.changes.borrow().last_insert()
     }
diff --git a/src/history.rs b/src/history.rs
index 60821d3..76a5bcf 100644
--- a/src/history.rs
+++ b/src/history.rs
@@ -32,6 +32,7 @@
     pub fn new() -> History {
         Self::with_config(Config::default())
     }
+
     pub fn with_config(config: Config) -> History {
         History {
             entries: VecDeque::new(),
@@ -83,6 +84,7 @@
     pub fn len(&self) -> usize {
         self.entries.len()
     }
+
     /// Return true if the history has no entry.
     pub fn is_empty(&self) -> bool {
         self.entries.is_empty()
@@ -213,8 +215,8 @@
 }
 
 impl<'a> IntoIterator for &'a History {
-    type Item = &'a String;
     type IntoIter = Iter<'a>;
+    type Item = &'a String;
 
     fn into_iter(self) -> Iter<'a> {
         self.iter()
diff --git a/src/keymap.rs b/src/keymap.rs
index eb3d560..877a12d 100644
--- a/src/keymap.rs
+++ b/src/keymap.rs
@@ -111,6 +111,7 @@
             _ => false,
         }
     }
+
     fn is_repeatable(&self) -> bool {
         match *self {
             Cmd::Move(_) => true,
diff --git a/src/kill_ring.rs b/src/kill_ring.rs
index 15b6649..b5d8778 100644
--- a/src/kill_ring.rs
+++ b/src/kill_ring.rs
@@ -109,6 +109,7 @@
     fn start_killing(&mut self) {
         self.killing = true;
     }
+
     fn delete(&mut self, _: usize, string: &str, dir: Direction) {
         if !self.killing {
             return;
@@ -119,6 +120,7 @@
         };
         self.kill(string, mode);
     }
+
     fn stop_killing(&mut self) {
         self.killing = false;
     }
diff --git a/src/lib.rs b/src/lib.rs
index 9d2f876..9cd6a16 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -677,6 +677,7 @@
     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.
     ///
@@ -710,22 +711,27 @@
     pub fn load_history<P: AsRef<Path> + ?Sized>(&mut self, path: &P) -> Result<()> {
         self.history.load(path)
     }
+
     /// Save the history in the specified file.
     pub fn save_history<P: AsRef<Path> + ?Sized>(&self, path: &P) -> Result<()> {
         self.history.save(path)
     }
+
     /// Add a new entry in the history.
     pub fn add_history_entry<S: AsRef<str> + Into<String>>(&mut self, line: S) -> bool {
         self.history.add(line)
     }
+
     /// Clear history.
     pub fn clear_history(&mut self) {
         self.history.clear()
     }
+
     /// Return a mutable reference to the history object.
     pub fn get_history(&mut self) -> &mut History {
         &mut self.history
     }
+
     /// Return an immutable reference to the history object.
     pub fn get_history_const(&self) -> &History {
         &self.history
@@ -747,6 +753,7 @@
         let mut bindings = self.custom_bindings.write().unwrap();
         bindings.insert(key_seq, cmd)
     }
+
     /// Remove a binding for the given sequence.
     pub fn unbind_sequence(&mut self, key_seq: KeyPress) -> Option<Cmd> {
         let mut bindings = self.custom_bindings.write().unwrap();
diff --git a/src/line_buffer.rs b/src/line_buffer.rs
index 1e7ddc2..1c220ca 100644
--- a/src/line_buffer.rs
+++ b/src/line_buffer.rs
@@ -93,9 +93,11 @@
     pub(crate) fn set_delete_listener(&mut self, dl: Arc<Mutex<DeleteListener>>) {
         self.dl = Some(dl);
     }
+
     pub(crate) fn set_change_listener(&mut self, dl: Rc<RefCell<ChangeListener>>) {
         self.cl = Some(dl);
     }
+
     pub(crate) fn remove_change_listener(&mut self) {
         self.cl = None;
     }
@@ -114,6 +116,7 @@
     pub fn pos(&self) -> usize {
         self.pos
     }
+
     /// Set cursor position (byte position)
     pub fn set_pos(&mut self, pos: usize) {
         assert!(pos <= self.buf.len());
@@ -124,6 +127,7 @@
     pub fn len(&self) -> usize {
         self.buf.len()
     }
+
     /// Returns `true` if this buffer has a length of zero.
     pub fn is_empty(&self) -> bool {
         self.buf.is_empty()
@@ -169,6 +173,7 @@
             .last()
             .map(|(i, s)| i + self.pos + s.len())
     }
+
     /// Returns the position of the character just before the current cursor
     /// position.
     fn prev_pos(&self, n: RepeatCount) -> Option<usize> {
@@ -583,6 +588,7 @@
             .next()
             .map(|i| i + self.pos)
     }
+
     /// Alter the next word.
     pub fn edit_word(&mut self, a: WordAction) -> bool {
         if let Some(start) = self.skip_whitespace() {
@@ -872,14 +878,18 @@
 
     impl DeleteListener for Listener {
         fn start_killing(&mut self) {}
+
         fn delete(&mut self, _: usize, string: &str, _: Direction) {
             self.deleted_str = Some(string.to_owned());
         }
+
         fn stop_killing(&mut self) {}
     }
     impl ChangeListener for Listener {
         fn insert_char(&mut self, _: usize, _: char) {}
+
         fn insert_str(&mut self, _: usize, _: &str) {}
+
         fn replace(&mut self, _: usize, _: &str, _: &str) {}
     }
 
diff --git a/src/tty/mod.rs b/src/tty/mod.rs
index 1047c42..e96f676 100644
--- a/src/tty/mod.rs
+++ b/src/tty/mod.rs
@@ -77,6 +77,7 @@
     fn move_cursor(&mut self, old: Position, new: Position) -> Result<()> {
         (**self).move_cursor(old, new)
     }
+
     fn refresh_line(
         &mut self,
         prompt: &str,
@@ -88,27 +89,35 @@
     ) -> Result<(Position, Position)> {
         (**self).refresh_line(prompt, prompt_size, line, hint, current_row, old_rows)
     }
+
     fn calculate_position(&self, s: &str, orig: Position) -> Position {
         (**self).calculate_position(s, orig)
     }
+
     fn write_and_flush(&mut self, buf: &[u8]) -> Result<()> {
         (**self).write_and_flush(buf)
     }
+
     fn beep(&mut self) -> Result<()> {
         (**self).beep()
     }
+
     fn clear_screen(&mut self) -> Result<()> {
         (**self).clear_screen()
     }
+
     fn sigwinch(&self) -> bool {
         (**self).sigwinch()
     }
+
     fn update_size(&mut self) {
         (**self).update_size()
     }
+
     fn get_columns(&self) -> usize {
         (**self).get_columns()
     }
+
     fn get_rows(&self) -> usize {
         (**self).get_rows()
     }
diff --git a/src/tty/test.rs b/src/tty/test.rs
index b8e5df5..4166948 100644
--- a/src/tty/test.rs
+++ b/src/tty/test.rs
@@ -25,6 +25,7 @@
             None => Err(ReadlineError::Eof),
         }
     }
+
     #[cfg(unix)]
     fn next_char(&mut self) -> Result<char> {
         unimplemented!();
@@ -38,6 +39,7 @@
             None => Err(ReadlineError::Eof),
         }
     }
+
     #[cfg(unix)]
     fn next_char(&mut self) -> Result<char> {
         match self.next() {
@@ -99,10 +101,13 @@
     fn sigwinch(&self) -> bool {
         false
     }
+
     fn update_size(&mut self) {}
+
     fn get_columns(&self) -> usize {
         80
     }
+
     fn get_rows(&self) -> usize {
         24
     }
@@ -117,9 +122,9 @@
 }
 
 impl Term for DummyTerminal {
+    type Mode = Mode;
     type Reader = IntoIter<KeyPress>;
     type Writer = Sink;
-    type Mode = Mode;
 
     fn new(_color_mode: ColorMode) -> DummyTerminal {
         DummyTerminal {
diff --git a/src/tty/unix.rs b/src/tty/unix.rs
index fd366d5..22dd675 100644
--- a/src/tty/unix.rs
+++ b/src/tty/unix.rs
@@ -528,6 +528,7 @@
     fn get_columns(&self) -> usize {
         self.cols
     }
+
     /// Try to get the number of rows in the current terminal,
     /// or assume 24 if it fails.
     fn get_rows(&self) -> usize {
@@ -566,9 +567,9 @@
 }
 
 impl Term for PosixTerminal {
+    type Mode = Mode;
     type Reader = PosixRawReader;
     type Writer = PosixRenderer;
-    type Mode = Mode;
 
     fn new(color_mode: ColorMode) -> PosixTerminal {
         let term = PosixTerminal {
diff --git a/src/tty/windows.rs b/src/tty/windows.rs
index 5618f8c..a27b9fb 100644
--- a/src/tty/windows.rs
+++ b/src/tty/windows.rs
@@ -407,9 +407,9 @@
 impl Console {}
 
 impl Term for Console {
+    type Mode = Mode;
     type Reader = ConsoleRawReader;
     type Writer = ConsoleRenderer;
-    type Mode = Mode;
 
     fn new(color_mode: ColorMode) -> Console {
         use std::ptr;
diff --git a/src/undo.rs b/src/undo.rs
index 333e5b4..7f7c9ab 100644
--- a/src/undo.rs
+++ b/src/undo.rs
@@ -329,18 +329,22 @@
 
 impl DeleteListener for Changeset {
     fn start_killing(&mut self) {}
+
     fn delete(&mut self, idx: usize, string: &str, _: Direction) {
         self.delete(idx, string);
     }
+
     fn stop_killing(&mut self) {}
 }
 impl ChangeListener for Changeset {
     fn insert_char(&mut self, idx: usize, c: char) {
         self.insert(idx, c);
     }
+
     fn insert_str(&mut self, idx: usize, string: &str) {
         self.insert_str(idx, string);
     }
+
     fn replace(&mut self, idx: usize, old: &str, new: &str) {
         self.replace(idx, old, new);
     }
