diff --git a/src/lib.rs b/src/lib.rs
index a2e4231..bfd2dc6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,4 +1,5 @@
 #![deny(rust_2018_idioms)]
+#![warn(missing_debug_implementations)]
 
 //! A library for formatting of text or programming code snippets.
 //!
diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs
index ee63da9..845d293 100644
--- a/src/renderer/mod.rs
+++ b/src/renderer/mod.rs
@@ -24,7 +24,7 @@ use stylesheet::Stylesheet;
 pub const DEFAULT_TERM_WIDTH: usize = 140;
 
 /// A renderer for [`Message`]s
-#[derive(Clone)]
+#[derive(Clone, Debug)]
 pub struct Renderer {
     anonymized_line_numbers: bool,
     term_width: usize,
diff --git a/src/snippet.rs b/src/snippet.rs
index e7d4bef..8e9a3a8 100644
--- a/src/snippet.rs
+++ b/src/snippet.rs
@@ -15,6 +15,7 @@ use std::ops::Range;
 /// Primary structure provided for formatting
 ///
 /// See [`Level::title`] to create a [`Message`]
+#[derive(Debug)]
 pub struct Message<'a> {
     pub(crate) level: Level,
     pub(crate) id: Option<&'a str>,
@@ -55,6 +56,7 @@ impl<'a> Message<'a> {
 ///
 /// One `Snippet` is meant to represent a single, continuous,
 /// slice of source code that you want to annotate.
+#[derive(Debug)]
 pub struct Snippet<'a> {
     pub(crate) origin: Option<&'a str>,
     pub(crate) line_start: usize,