difftreelog
refactor AssertStmt to struct
in: master
6 files changed
crates/jrsonnet-evaluator/src/evaluate/mod.rsdiffbeforeafterboth454}454}455455456pub fn evaluate_assert(ctx: Context, assertion: &AssertStmt) -> Result<()> {456pub fn evaluate_assert(ctx: Context, assertion: &AssertStmt) -> Result<()> {457 let value = &assertion.0;457 let AssertStmt { assertion, message } = assertion;458 let msg = &assertion.1;459 let assertion_result = in_frame(458 let assertion_result = in_frame(460 CallLocation::new(&value.span),459 CallLocation::new(&assertion.span),461 || "assertion condition".to_owned(),460 || "assertion condition".to_owned(),462 || bool::from_untyped(evaluate(ctx.clone(), value)?),461 || bool::from_untyped(evaluate(ctx.clone(), assertion)?),463 )?;462 )?;464 if !assertion_result {463 if !assertion_result {465 in_frame(464 in_frame(466 CallLocation::new(&value.span),465 CallLocation::new(&assertion.span),467 || "assertion failure".to_owned(),466 || "assertion failure".to_owned(),468 || {467 || {469 if let Some(msg) = msg {468 if let Some(msg) = message {470 bail!(AssertionFailed(evaluate(ctx, msg)?.to_string()?));469 bail!(AssertionFailed(evaluate(ctx, msg)?.to_string()?));471 }470 }472 bail!(AssertionFailed(Val::Null.to_string()?));471 bail!(AssertionFailed(Val::Null.to_string()?));crates/jrsonnet-ir-parser/src/lib.rsdiffbeforeafterboth237237238fn assert_stmt(p: &mut Parser<'_>) -> Result<AssertStmt> {238fn assert_stmt(p: &mut Parser<'_>) -> Result<AssertStmt> {239 p.eat(T![assert])?;239 p.eat(T![assert])?;240 let cond = spanned(p, expr)?;240 let assertion = spanned(p, expr)?;241 let msg = if p.try_eat(T![:]) {241 let message = if p.try_eat(T![:]) {242 Some(spanned(p, expr)?)242 Some(expr(p)?)243 } else {243 } else {244 None244 None245 };245 };246 Ok(AssertStmt(cond, msg))246 Ok(AssertStmt { assertion, message })247}247}248248249fn if_spec_data(p: &mut Parser<'_>) -> Result<IfSpecData> {249fn if_spec_data(p: &mut Parser<'_>) -> Result<IfSpecData> {crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__basic_test.snapdiffbeforeafterboth4---4---5AssertExpr(5AssertExpr(6 AssertExpr {6 AssertExpr {7 assert: AssertStmt(7 assert: AssertStmt {8 Index {8 assertion: Index {9 indexable: Literal(9 indexable: Literal(10 True,10 True,11 ),11 ),18 },18 },19 ],19 ],20 } from virtual:<test>:7-18,20 } from virtual:<test>:7-18,21 Some(21 message: Some(22 Literal(22 Literal(23 False,23 False,24 ) from virtual:<test>:21-26,24 ),25 ),25 ),26 ),26 },27 rest: Literal(27 rest: Literal(28 True,28 True,29 ),29 ),crates/jrsonnet-ir/src/expr.rsdiffbeforeafterboth38}38}393940#[derive(Debug, PartialEq, Acyclic)]40#[derive(Debug, PartialEq, Acyclic)]41pub struct AssertStmt(pub Spanned<Expr>, pub Option<Spanned<Expr>>);41pub struct AssertStmt {42 pub assertion: Spanned<Expr>,43 pub message: Option<Expr>,44}424543#[derive(Debug, PartialEq, Acyclic)]46#[derive(Debug, PartialEq, Acyclic)]44pub struct FieldMember {47pub struct FieldMember {crates/jrsonnet-ir/src/visit.rsdiffbeforeafterboth157}157}158158159pub fn visit_assert_stmt<V: Visitor>(v: &mut V, ass: &AssertStmt) {159pub fn visit_assert_stmt<V: Visitor>(v: &mut V, ass: &AssertStmt) {160 let AssertStmt(cond, msg) = ass;160 let AssertStmt { assertion, message } = ass;161 v.visit_expr(cond);161 v.visit_expr(assertion);162 if let Some(msg) = msg {162 if let Some(message) = message {163 v.visit_expr(msg);163 v.visit_expr(message);164 }164 }165}165}166pub fn visit_expr<V: Visitor>(v: &mut V, e: &Expr) {166pub fn visit_expr<V: Visitor>(v: &mut V, e: &Expr) {crates/jrsonnet-peg-parser/src/lib.rsdiffbeforeafterboth138 / name:id() _ "(" _ params:params(s) _ ")" _ "=" _ value:expr(s) {BindSpec::Function{name, params, value: Rc::new(value)}}138 / name:id() _ "(" _ params:params(s) _ ")" _ "=" _ value:expr(s) {BindSpec::Function{name, params, value: Rc::new(value)}}139139140 pub rule assertion(s: &ParserSettings) -> AssertStmt140 pub rule assertion(s: &ParserSettings) -> AssertStmt141 = keyword("assert") _ cond:spanned(<expr(s)>, s) msg:(_ ":" _ e:spanned(<expr(s)>, s) {e})? { AssertStmt(cond, msg) }141 = keyword("assert") _ assertion:spanned(<expr(s)>, s) message:(_ ":" _ e:expr(s) {e})? { AssertStmt{assertion, message} }142142143 pub rule whole_line() -> &'input str143 pub rule whole_line() -> &'input str144 = str:$((!['\n'][_])* "\n") {str}144 = str:$((!['\n'][_])* "\n") {str}