--- a/crates/jsonnet-parser/src/lib.rs +++ b/crates/jsonnet-parser/src/lib.rs @@ -195,7 +195,7 @@ rule slice_part(s: &ParserSettings) -> Option = e:(_ e:expr(s) _{e})? {e} pub rule slice_desc(s: &ParserSettings) -> SliceDesc - = start:slice_part(s) ":" pair:(end:slice_part(s) ":" step:slice_part(s) {(end, step)})? { + = start:slice_part(s) ":" pair:(end:slice_part(s) step:(":" e:slice_part(s){e})? {(end, step.flatten())})? { let (end, step) = if let Some((end, step)) = pair { (end, step) }else{ @@ -357,10 +357,11 @@ #[test] fn slice() { - println!("{:?}", parse!("a[1:]")); - println!("{:?}", parse!("a[1::]")); - println!("{:?}", parse!("a[:1:]")); - println!("{:?}", parse!("a[::1]")); + parse!("a[1:]"); + parse!("a[1::]"); + parse!("a[:1:]"); + parse!("a[::1]"); + parse!("str[:len - 1]"); } #[test]