diff --git a/src/color.rs b/src/color.rs index bf4cf05a0..966ab3d67 100644 --- a/src/color.rs +++ b/src/color.rs @@ -20,14 +20,6 @@ impl Debug for Color { } } -impl Display for Color { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - match self { - Self::Rgba(c) => Display::fmt(c, f), - } - } -} - /// An 8-bit RGBA color. #[derive(Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] pub struct RgbaColor { @@ -104,18 +96,12 @@ impl Debug for RgbaColor { f, "rgba({:02}, {:02}, {:02}, {:02})", self.r, self.g, self.b, self.a, - ) + )?; } else { - Display::fmt(self, f) - } - } -} - -impl Display for RgbaColor { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - write!(f, "#{:02x}{:02x}{:02x}", self.r, self.g, self.b)?; - if self.a != 255 { - write!(f, "{:02x}", self.a)?; + write!(f, "#{:02x}{:02x}{:02x}", self.r, self.g, self.b)?; + if self.a != 255 { + write!(f, "{:02x}", self.a)?; + } } Ok(()) } diff --git a/src/eval/array.rs b/src/eval/array.rs index bae89c4b9..17192cb34 100644 --- a/src/eval/array.rs +++ b/src/eval/array.rs @@ -1,6 +1,6 @@ use std::cmp::Ordering; use std::convert::TryFrom; -use std::fmt::{self, Debug, Display, Formatter, Write}; +use std::fmt::{self, Debug, Formatter, Write}; use std::iter::FromIterator; use std::ops::{Add, AddAssign}; use std::rc::Rc; @@ -119,16 +119,10 @@ fn out_of_bounds(index: i64, len: i64) -> String { } impl Debug for Array { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - f.debug_list().entries(self.0.iter()).finish() - } -} - -impl Display for Array { fn fmt(&self, f: &mut Formatter) -> fmt::Result { f.write_char('(')?; for (i, value) in self.iter().enumerate() { - Display::fmt(value, f)?; + value.fmt(f)?; if i + 1 < self.0.len() { f.write_str(", ")?; } diff --git a/src/eval/dict.rs b/src/eval/dict.rs index dfac04ed9..c0ddf3289 100644 --- a/src/eval/dict.rs +++ b/src/eval/dict.rs @@ -1,5 +1,5 @@ use std::collections::BTreeMap; -use std::fmt::{self, Debug, Display, Formatter, Write}; +use std::fmt::{self, Debug, Formatter, Write}; use std::iter::FromIterator; use std::ops::{Add, AddAssign}; use std::rc::Rc; @@ -79,16 +79,10 @@ impl Dict { /// The missing key access error message. #[cold] fn missing_key(key: &Str) -> String { - format!("dictionary does not contain key: {}", key) + format!("dictionary does not contain key: {:?}", key) } impl Debug for Dict { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - f.debug_map().entries(self.0.iter()).finish() - } -} - -impl Display for Dict { fn fmt(&self, f: &mut Formatter) -> fmt::Result { f.write_char('(')?; if self.is_empty() { @@ -97,7 +91,7 @@ impl Display for Dict { for (i, (key, value)) in self.iter().enumerate() { f.write_str(key)?; f.write_str(": ")?; - Display::fmt(value, f)?; + value.fmt(f)?; if i + 1 < self.0.len() { f.write_str(", ")?; } diff --git a/src/eval/function.rs b/src/eval/function.rs index 57364d11d..c45ac7ba4 100644 --- a/src/eval/function.rs +++ b/src/eval/function.rs @@ -1,4 +1,4 @@ -use std::fmt::{self, Debug, Display, Formatter, Write}; +use std::fmt::{self, Debug, Formatter, Write}; use std::rc::Rc; use super::{Cast, EvalContext, Str, Value}; @@ -39,12 +39,6 @@ impl Function { } impl Debug for Function { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - f.debug_struct("Function").field("name", &self.0.name).finish() - } -} - -impl Display for Function { fn fmt(&self, f: &mut Formatter) -> fmt::Result { f.write_str(" fmt::Result { f.write_char('(')?; for (i, arg) in self.items.iter().enumerate() { - if let Some(name) = &arg.name { - f.write_str(name)?; - f.write_str(": ")?; - } - Display::fmt(&arg.value.v, f)?; + arg.fmt(f)?; if i + 1 < self.items.len() { f.write_str(", ")?; } @@ -209,6 +199,16 @@ impl Display for Arguments { } } +impl Debug for Argument { + fn fmt(&self, f: &mut Formatter) -> fmt::Result { + if let Some(name) = &self.name { + f.write_str(name)?; + f.write_str(": ")?; + } + Debug::fmt(&self.value.v, f) + } +} + dynamic! { Arguments: "arguments", } diff --git a/src/eval/str.rs b/src/eval/str.rs index 099a43635..59e0887ae 100644 --- a/src/eval/str.rs +++ b/src/eval/str.rs @@ -1,6 +1,6 @@ use std::borrow::Borrow; use std::convert::TryFrom; -use std::fmt::{self, Debug, Display, Formatter, Write}; +use std::fmt::{self, Debug, Formatter, Write}; use std::ops::{Add, AddAssign, Deref}; use crate::diag::StrResult; @@ -10,9 +10,9 @@ use crate::util::EcoString; macro_rules! format_str { ($($tts:tt)*) => {{ use std::fmt::Write; - let mut s = $crate::util::EcoString::new(); + let mut s = $crate::eval::Str::new(); write!(s, $($tts)*).unwrap(); - $crate::eval::Str::from(s) + s }}; } @@ -66,12 +66,6 @@ impl Deref for Str { } impl Debug for Str { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - Debug::fmt(&self.0, f) - } -} - -impl Display for Str { fn fmt(&self, f: &mut Formatter) -> fmt::Result { f.write_char('"')?; for c in self.chars() { @@ -103,6 +97,16 @@ impl AddAssign for Str { } } +impl Write for Str { + fn write_str(&mut self, s: &str) -> fmt::Result { + self.0.write_str(s) + } + + fn write_char(&mut self, c: char) -> fmt::Result { + self.0.write_char(c) + } +} + impl AsRef for Str { fn as_ref(&self) -> &str { self diff --git a/src/eval/template.rs b/src/eval/template.rs index f4feda400..42b35fc32 100644 --- a/src/eval/template.rs +++ b/src/eval/template.rs @@ -1,5 +1,5 @@ use std::convert::TryFrom; -use std::fmt::{self, Debug, Display, Formatter}; +use std::fmt::{self, Debug, Formatter}; use std::mem; use std::ops::{Add, AddAssign}; use std::rc::Rc; @@ -188,12 +188,6 @@ impl Template { } impl Debug for Template { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - f.pad("Template { .. }") - } -} - -impl Display for Template { fn fmt(&self, f: &mut Formatter) -> fmt::Result { f.pad("