difftreelog
fix(parser) remove default param before normal restriction
in: master
1 file changed
crates/jrsonnet-parser/src/lib.rsdiffbeforeafterboth59 pub rule param(s: &ParserSettings) -> expr::Param = name:$(id()) expr:(_ "=" _ expr:expr(s){expr})? { expr::Param(name.into(), expr) }59 pub rule param(s: &ParserSettings) -> expr::Param = name:$(id()) expr:(_ "=" _ expr:expr(s){expr})? { expr::Param(name.into(), expr) }60 pub rule params(s: &ParserSettings) -> expr::ParamsDesc60 pub rule params(s: &ParserSettings) -> expr::ParamsDesc61 = params:param(s) ** comma() comma()? {61 = params:param(s) ** comma() comma()? { expr::ParamsDesc(Rc::new(params)) }62 let mut defaults_started = false;63 for param in ¶ms {64 defaults_started = defaults_started || param.1.is_some();65 assert_eq!(defaults_started, param.1.is_some(), "defauld parameters should be used after all positionals. Misplaced default parameter: {:?}", param.0);66 }67 expr::ParamsDesc(Rc::new(params))68 }69 / { expr::ParamsDesc(Rc::new(Vec::new())) }62 / { expr::ParamsDesc(Rc::new(Vec::new())) }568 // ^^^^ failed code561 // ^^^^ failed code569 }562 }563564 #[test]565 fn default_param_before_nondefault() {566 parse!("local x(foo = 'foo', bar) = null; null");567 }570568571 #[test]569 #[test]572 fn can_parse_stdlib() {570 fn can_parse_stdlib() {