mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-22 18:19:54 -04:00
DEV: Handle TRACE, fail, and format expressions with embedded comments.
This commit is contained in:
parent
e6f6421ca6
commit
f88955517e
@ -282,10 +282,16 @@ where
|
|||||||
}
|
}
|
||||||
Expression::Debug(_def) => {
|
Expression::Debug(_def) => {
|
||||||
self.w.write("TRACE ".as_bytes())?;
|
self.w.write("TRACE ".as_bytes())?;
|
||||||
|
if self.has_comment(_def.expr.pos().line) {
|
||||||
|
self.w.write("\n".as_bytes())?;
|
||||||
|
}
|
||||||
self.render_expr(&_def.expr)?;
|
self.render_expr(&_def.expr)?;
|
||||||
}
|
}
|
||||||
Expression::Fail(_def) => {
|
Expression::Fail(_def) => {
|
||||||
self.w.write("fail ".as_bytes())?;
|
self.w.write("fail ".as_bytes())?;
|
||||||
|
if self.has_comment(_def.message.pos().line) {
|
||||||
|
self.w.write("\n".as_bytes())?;
|
||||||
|
}
|
||||||
self.render_expr(&_def.message)?;
|
self.render_expr(&_def.message)?;
|
||||||
}
|
}
|
||||||
Expression::Format(_def) => {
|
Expression::Format(_def) => {
|
||||||
@ -293,13 +299,24 @@ where
|
|||||||
write!(self.w, " % ")?;
|
write!(self.w, " % ")?;
|
||||||
match _def.args {
|
match _def.args {
|
||||||
FormatArgs::Single(ref e) => {
|
FormatArgs::Single(ref e) => {
|
||||||
|
if self.has_comment(e.pos().line) {
|
||||||
|
self.w.write("\n".as_bytes())?;
|
||||||
|
}
|
||||||
self.render_expr(e)?;
|
self.render_expr(e)?;
|
||||||
}
|
}
|
||||||
FormatArgs::List(ref es) => {
|
FormatArgs::List(ref es) => {
|
||||||
self.w.write("(\n".as_bytes())?;
|
self.w.write("(\n".as_bytes())?;
|
||||||
self.curr_indent += self.indent_size;
|
self.curr_indent += self.indent_size;
|
||||||
let indent = self.make_indent();
|
let indent = self.make_indent();
|
||||||
let mut prefix = "";
|
let mut prefix = if es
|
||||||
|
.first()
|
||||||
|
.and_then(|e| Some(self.has_comment(e.pos().line)))
|
||||||
|
.unwrap_or(false)
|
||||||
|
{
|
||||||
|
"\n"
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
};
|
||||||
for e in es.iter() {
|
for e in es.iter() {
|
||||||
write!(self.w, "{}{}", prefix, indent)?;
|
write!(self.w, "{}{}", prefix, indent)?;
|
||||||
self.render_expr(e)?;
|
self.render_expr(e)?;
|
||||||
|
@ -506,3 +506,59 @@ fn test_call_expression_with_embedded_comment_in_args() {
|
|||||||
format!("{}\n", input.trim())
|
format!("{}\n", input.trim())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_copy_expression_with_embedded_comment_in_args() {
|
||||||
|
let mut comment_map = BTreeMap::new();
|
||||||
|
let input = "// a comment\nmyfunc{\n foo = arg1,\n // another comment\n bar = arg2,\n};";
|
||||||
|
let stmts = assert_parse(input, Some(&mut comment_map));
|
||||||
|
let mut buffer: Vec<u8> = Vec::new();
|
||||||
|
let mut printer = AstPrinter::new(2, &mut buffer).with_comment_map(&comment_map);
|
||||||
|
assert!(printer.render(&stmts).is_ok());
|
||||||
|
assert_eq!(
|
||||||
|
String::from_utf8(buffer).unwrap(),
|
||||||
|
format!("{}\n", input.trim())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_trace_expression_with_embedded_comment() {
|
||||||
|
let mut comment_map = BTreeMap::new();
|
||||||
|
let input = "// a comment\nTRACE \n// another comment\nfoo;";
|
||||||
|
let stmts = assert_parse(input, Some(&mut comment_map));
|
||||||
|
let mut buffer: Vec<u8> = Vec::new();
|
||||||
|
let mut printer = AstPrinter::new(2, &mut buffer).with_comment_map(&comment_map);
|
||||||
|
assert!(printer.render(&stmts).is_ok());
|
||||||
|
assert_eq!(
|
||||||
|
String::from_utf8(buffer).unwrap(),
|
||||||
|
format!("{}\n", input.trim())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_fail_expression_with_embedded_comment() {
|
||||||
|
let mut comment_map = BTreeMap::new();
|
||||||
|
let input = "// a comment\nfail \n// another comment\nfoo;";
|
||||||
|
let stmts = assert_parse(input, Some(&mut comment_map));
|
||||||
|
let mut buffer: Vec<u8> = Vec::new();
|
||||||
|
let mut printer = AstPrinter::new(2, &mut buffer).with_comment_map(&comment_map);
|
||||||
|
assert!(printer.render(&stmts).is_ok());
|
||||||
|
assert_eq!(
|
||||||
|
String::from_utf8(buffer).unwrap(),
|
||||||
|
format!("{}\n", input.trim())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_format_expression_with_embedded_comment() {
|
||||||
|
let mut comment_map = BTreeMap::new();
|
||||||
|
let input = "// a comment\n\"@(item.bar)\" % \n// another comment\nfoo;";
|
||||||
|
let stmts = assert_parse(input, Some(&mut comment_map));
|
||||||
|
let mut buffer: Vec<u8> = Vec::new();
|
||||||
|
let mut printer = AstPrinter::new(2, &mut buffer).with_comment_map(&comment_map);
|
||||||
|
assert!(printer.render(&stmts).is_ok());
|
||||||
|
assert_eq!(
|
||||||
|
String::from_utf8(buffer).unwrap(),
|
||||||
|
format!("{}\n", input.trim())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user