diff --git a/src/ast/printer/mod.rs b/src/ast/printer/mod.rs index 1738607..b0517c5 100644 --- a/src/ast/printer/mod.rs +++ b/src/ast/printer/mod.rs @@ -248,21 +248,21 @@ where self.render_expr(&_def.message)?; } Expression::Format(_def) => { - self.w - .write(Self::escape_quotes(&_def.template).as_bytes())?; + write!(self.w, "\"{}\"", Self::escape_quotes(&_def.template))?; write!(self.w, " % ")?; match _def.args { FormatArgs::Single(ref e) => { self.render_expr(e)?; } FormatArgs::List(ref es) => { - self.w.write("(".as_bytes())?; + self.w.write("(\n".as_bytes())?; self.curr_indent += self.indent; let indent = self.make_indent(); + let mut prefix = ""; for e in es.iter() { - self.w.write(indent.as_bytes())?; + write!(self.w, "{}{}", prefix, indent)?; self.render_expr(e)?; - self.w.write("\n".as_bytes())?; + prefix = ",\n"; } self.curr_indent -= self.indent; self.w.write(")".as_bytes())?; diff --git a/src/ast/printer/test.rs b/src/ast/printer/test.rs index 0a1aca3..e427921 100644 --- a/src/ast/printer/test.rs +++ b/src/ast/printer/test.rs @@ -333,3 +333,29 @@ fn test_func_expr_single_arg_printing() { assert!(printer.err.is_none()); assert_eq!(String::from_utf8(buffer).unwrap(), format!("{}\n", input)); } + +#[test] +fn test_format_expr_single_arg_printing() { + let input = "\"what? @{item.foo}\" % { + foo = 1, +};"; + let stmts = assert_parse(input); + let mut buffer: Vec = Vec::new(); + let mut printer = AstPrinter::new(2, &mut buffer); + printer.render(&stmts); + assert!(printer.err.is_none()); + assert_eq!(String::from_utf8(buffer).unwrap(), format!("{}\n", input)); +} + +#[test] +fn test_format_expr_list_arg_printing() { + let input = "\"what? @ @\" % ( + 1, + 2);"; + let stmts = assert_parse(input); + let mut buffer: Vec = Vec::new(); + let mut printer = AstPrinter::new(2, &mut buffer); + printer.render(&stmts); + assert!(printer.err.is_none()); + assert_eq!(String::from_utf8(buffer).unwrap(), format!("{}\n", input)); +}