From d512ff65b47265ef1fb2631ebb2c8835bd913cc2 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 20 Aug 2021 06:57:34 +0000 Subject: [PATCH] feat: plus in object comprehensions Fixes #60 --- --- a/crates/jrsonnet-evaluator/src/evaluate/mod.rs +++ b/crates/jrsonnet-evaluator/src/evaluate/mod.rs @@ -431,6 +431,7 @@ builder .member(n) .with_location(obj.value.1.clone()) + .with_add(obj.plus) .bindable(Box::new(ObjCompBinding { context: ctx, value: obj.value.clone(), --- a/crates/jrsonnet-parser/src/expr.rs +++ b/crates/jrsonnet-parser/src/expr.rs @@ -247,6 +247,7 @@ pub struct ObjComp { pub pre_locals: Vec, pub key: LocExpr, + pub plus: bool, pub value: LocExpr, pub post_locals: Vec, pub compspecs: Vec, --- a/crates/jrsonnet-parser/src/lib.rs +++ b/crates/jrsonnet-parser/src/lib.rs @@ -136,12 +136,13 @@ / assertion:assertion(s) {expr::Member::AssertStmt(assertion)} / field:field(s) {expr::Member::Field(field)} pub rule objinside(s: &ParserSettings) -> expr::ObjBody - = pre_locals:(b: obj_local(s) comma() {b})* "[" _ key:expr(s) _ "]" _ ":" _ value:expr(s) post_locals:(comma() b:obj_local(s) {b})* _ forspec:forspec(s) others:(_ rest:compspec(s) {rest})? { + = pre_locals:(b: obj_local(s) comma() {b})* "[" _ key:expr(s) _ "]" _ plus:"+"? _ ":" _ value:expr(s) post_locals:(comma() b:obj_local(s) {b})* _ forspec:forspec(s) others:(_ rest:compspec(s) {rest})? { let mut compspecs = vec![CompSpec::ForSpec(forspec)]; compspecs.extend(others.unwrap_or_default()); expr::ObjBody::ObjComp(expr::ObjComp{ pre_locals, key, + plus: plus.is_some(), value, post_locals, compspecs, -- gitstuff