From a3ab765efe831505179a5966b5546509cb862717 Mon Sep 17 00:00:00 2001 From: Greg Brown Date: Sat, 16 Jan 2021 12:35:13 +0000 Subject: Fix warnings in `chomp::ast`. --- src/chomp/ast/error.rs | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'src/chomp/ast/error.rs') diff --git a/src/chomp/ast/error.rs b/src/chomp/ast/error.rs index d2c49cd..7be5354 100644 --- a/src/chomp/ast/error.rs +++ b/src/chomp/ast/error.rs @@ -14,13 +14,43 @@ pub enum SubstituteError { impl From for syn::Error { fn from(e: SubstituteError) -> Self { - todo!() + match e { + SubstituteError::FreeParameter { span, .. } => { + Self::new(span.unwrap_or_else(Span::call_site), "unbound parameter") + } + SubstituteError::WrongArgCount { call, expected, span } => { + let msg = if call.args.len() == 1 { + format!("this function takes {} arguments but 1 was supplied", expected) + } else { + format!("this function takes {} arguments but {} were supplied", expected, call.args.len()) + }; + + Self::new(span.unwrap_or_else(Span::call_site), msg) + } + } } } impl Display for SubstituteError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - todo!() + match self { + Self::FreeParameter { param, span, name } => { + let start = span.unwrap_or_else(Span::call_site).start(); + if let Some(name) = name { + write!(f, "{}:{}: unbound parameter `{}`", start.line, start.column, name) + } else { + write!(f, "{}:{}: unbound parameter '{}", start.line, start.column, param.index) + } + } + Self::WrongArgCount { call, expected, span } => { + let start = span.unwrap_or_else(Span::call_site).start(); + if call.args.len() == 1 { + write!(f, "{}:{}: this function takes {} arguments but 1 was supplied", start.line, start.column, expected) + } else { + write!(f, "{}:{}: this function takes {} arguments but {} were supplied", start.line, start.column, expected, call.args.len()) + } + } + } } } -- cgit v1.2.3