git.delta.rocks / jrsonnet / refs/commits / fda6372e4ce3

difftreelog

fix(parser) remove default param before normal restriction

Yaroslav Bolyukin2021-11-10parent: #be06ce0.patch.diff
in: master

1 file changed

modifiedcrates/jrsonnet-parser/src/lib.rsdiffbeforeafterboth
59 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::ParamsDesc
61 = 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 &params {
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 code
569 }562 }
563
564 #[test]
565 fn default_param_before_nondefault() {
566 parse!("local x(foo = 'foo', bar) = null; null");
567 }
570568
571 #[test]569 #[test]
572 fn can_parse_stdlib() {570 fn can_parse_stdlib() {