diff --git a/jaq-play/src/lib.rs b/jaq-play/src/lib.rs index 6c14e426..331d8358 100644 --- a/jaq-play/src/lib.rs +++ b/jaq-play/src/lib.rs @@ -385,8 +385,14 @@ fn report_parse(code: &str, (expected, found): load::parse::Error<&str>) -> Repo } fn report_compile(code: &str, (found, undefined): compile::Error<&str>) -> Report { + use compile::Undefined::Filter; let found_range = load::span(code, found); - let message = format!("undefined {}", undefined.as_str()); + let wnoa = |exp, got| format!("wrong number of arguments (expected {exp}, found {got})"); + let message = match (found, undefined) { + ("reduce", Filter(arity)) => wnoa("2", arity), + ("foreach", Filter(arity)) => wnoa("2 or 3", arity), + (_, undefined) => format!("undefined {}", undefined.as_str()), + }; let found = [(message.clone(), None)].into(); Report { diff --git a/jaq/src/main.rs b/jaq/src/main.rs index 773ca9ec..532e4d98 100644 --- a/jaq/src/main.rs +++ b/jaq/src/main.rs @@ -726,8 +726,14 @@ fn report_parse(code: &str, (expected, found): load::parse::Error<&str>) -> Repo } fn report_compile(code: &str, (found, undefined): compile::Error<&str>) -> Report { + use compile::Undefined::Filter; let found_range = load::span(code, found); - let message = format!("undefined {}", undefined.as_str()); + let wnoa = |exp, got| format!("wrong number of arguments (expected {exp}, found {got})"); + let message = match (found, undefined) { + ("reduce", Filter(arity)) => wnoa("2", arity), + ("foreach", Filter(arity)) => wnoa("2 or 3", arity), + (_, undefined) => format!("undefined {}", undefined.as_str()), + }; let found = [(message.clone(), None)].into(); Report {