Terminated list helper
diff --git a/src/expr.rs b/src/expr.rs
index d370f34..4f5c73f 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -422,16 +422,14 @@
named!(expr_vec -> Expr, do_parse!(
punct!("[") >>
- elems: separated_list!(punct!(","), expr) >>
- cond!(!elems.is_empty(), option!(punct!(","))) >>
+ elems: terminated_list!(punct!(","), expr) >>
punct!("]") >>
(Expr::Vec(elems))
));
named!(and_call -> Vec<Expr>, do_parse!(
punct!("(") >>
- args: separated_list!(punct!(","), expr) >>
- cond!(!args.is_empty(), option!(punct!(","))) >>
+ args: terminated_list!(punct!(","), expr) >>
punct!(")") >>
(args)
));
@@ -443,21 +441,19 @@
punct!("::"),
delimited!(
punct!("<"),
- separated_list!(punct!(","), ty),
+ terminated_list!(punct!(","), ty),
punct!(">")
)
)) >>
punct!("(") >>
- args: separated_list!(punct!(","), expr) >>
- cond!(!args.is_empty(), option!(punct!(","))) >>
+ args: terminated_list!(punct!(","), expr) >>
punct!(")") >>
(method, ascript, args)
));
named!(expr_tup -> Expr, do_parse!(
punct!("(") >>
- elems: separated_list!(punct!(","), expr) >>
- cond!(!elems.is_empty(), option!(punct!(","))) >>
+ elems: terminated_list!(punct!(","), expr) >>
punct!(")") >>
(Expr::Tup(elems))
));
@@ -583,8 +579,7 @@
named!(expr_closure -> Expr, do_parse!(
capture: capture_by >>
punct!("|") >>
- inputs: separated_list!(punct!(","), closure_arg) >>
- cond!(!inputs.is_empty(), option!(punct!(","))) >>
+ inputs: terminated_list!(punct!(","), closure_arg) >>
punct!("|") >>
ret_and_body: alt!(
do_parse!(
@@ -898,6 +893,7 @@
cond!(!fields.is_empty(), punct!(",")),
punct!("..")
)) >>
+ cond!(!fields.is_empty() && more.is_none(), option!(punct!(","))) >>
punct!("}") >>
(Pat::Struct(path, fields, more.is_some()))
));