mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-22 18:19:54 -04:00
FEATURE: Improvements to format expression printing.
This commit is contained in:
parent
9b99bc026c
commit
aa9e664c0d
@ -248,21 +248,21 @@ where
|
|||||||
self.render_expr(&_def.message)?;
|
self.render_expr(&_def.message)?;
|
||||||
}
|
}
|
||||||
Expression::Format(_def) => {
|
Expression::Format(_def) => {
|
||||||
self.w
|
write!(self.w, "\"{}\"", Self::escape_quotes(&_def.template))?;
|
||||||
.write(Self::escape_quotes(&_def.template).as_bytes())?;
|
|
||||||
write!(self.w, " % ")?;
|
write!(self.w, " % ")?;
|
||||||
match _def.args {
|
match _def.args {
|
||||||
FormatArgs::Single(ref e) => {
|
FormatArgs::Single(ref e) => {
|
||||||
self.render_expr(e)?;
|
self.render_expr(e)?;
|
||||||
}
|
}
|
||||||
FormatArgs::List(ref es) => {
|
FormatArgs::List(ref es) => {
|
||||||
self.w.write("(".as_bytes())?;
|
self.w.write("(\n".as_bytes())?;
|
||||||
self.curr_indent += self.indent;
|
self.curr_indent += self.indent;
|
||||||
let indent = self.make_indent();
|
let indent = self.make_indent();
|
||||||
|
let mut prefix = "";
|
||||||
for e in es.iter() {
|
for e in es.iter() {
|
||||||
self.w.write(indent.as_bytes())?;
|
write!(self.w, "{}{}", prefix, indent)?;
|
||||||
self.render_expr(e)?;
|
self.render_expr(e)?;
|
||||||
self.w.write("\n".as_bytes())?;
|
prefix = ",\n";
|
||||||
}
|
}
|
||||||
self.curr_indent -= self.indent;
|
self.curr_indent -= self.indent;
|
||||||
self.w.write(")".as_bytes())?;
|
self.w.write(")".as_bytes())?;
|
||||||
|
@ -333,3 +333,29 @@ fn test_func_expr_single_arg_printing() {
|
|||||||
assert!(printer.err.is_none());
|
assert!(printer.err.is_none());
|
||||||
assert_eq!(String::from_utf8(buffer).unwrap(), format!("{}\n", input));
|
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<u8> = 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<u8> = 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));
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user