difftreelog
feat TLA support
in: master
2 files changed
cmds/jrsonnet/src/main.rsdiffbeforeafterboth223use clap::Clap;3use clap::Clap;4use jsonnet_evaluator::{EvaluationSettings, EvaluationState, LocError, StackTrace, Val};4use jsonnet_evaluator::{EvaluationSettings, EvaluationState, LocError, StackTrace, Val};5use jsonnet_parser::{el, Arg, ArgsDesc, Expr, LocExpr, ParserSettings};5use location::{offset_to_location, CodeLocation};6use location::{offset_to_location, CodeLocation};6use std::env::current_dir;7use std::env::current_dir;7use std::{path::PathBuf, str::FromStr};8use std::{collections::HashMap, path::PathBuf, str::FromStr};899enum Format {10enum Format {10 None,11 None,134 let result = evaluator.evaluate_file(&input);135 let result = evaluator.evaluate_file(&input);135 match result {136 match result {136 Ok(v) => {137 Ok(v) => {138 let v = match v {139 Val::Func(f) => {140 let mut desc_map = HashMap::new();141 for ExtStr { name, value } in opts.tla_str.iter().cloned() {142 desc_map.insert(name, el!(Expr::Str(value)));143 }144 for ExtStr { name, value } in opts.tla_code.iter().cloned() {145 desc_map.insert(146 name,147 jsonnet_parser::parse(148 &value,149 &ParserSettings {150 file_name: PathBuf::new(),151 loc_data: false,152 },153 )154 .unwrap(),155 );156 }157 evaluator.add_global("__tmp__tlf__".to_owned(), Val::Func(f));158 evaluator159 .evaluate_raw(el!(Expr::Apply(160 el!(Expr::Var("__tmp__tlf__".to_owned())),161 ArgsDesc(desc_map.into_iter().map(|(k, v)| Arg(Some(k), v)).collect()),162 false,163 )))164 .unwrap()165 }166 v => v,167 };137 let v = match opts.format {168 let v = match opts.format {138 Format::Json => {169 Format::Json => {139 if opts.no_stdlib {170 if opts.no_stdlib {crates/jsonnet-evaluator/src/lib.rsdiffbeforeafterboth191 file_name: PathBuf::from("raw.jsonnet"),191 file_name: PathBuf::from("raw.jsonnet"),192 loc_data: true,192 loc_data: true,193 },193 },194 );194 )195 self.begin_state();195 .unwrap();196 let value = evaluate(self.create_default_context()?, &parsed.unwrap());197 self.end_state();196 self.evaluate_raw(parsed)198 value199 }197 }198199 pub fn evaluate_raw(&self, code: LocExpr) -> Result<Val> {200 self.begin_state();201 let value = evaluate(self.create_default_context()?, &code);202 self.end_state();203 value204 }200205201 pub fn add_global(&self, name: String, value: Val) {206 pub fn add_global(&self, name: String, value: Val) {202 self.0.globals.borrow_mut().insert(name, value);207 self.0.globals.borrow_mut().insert(name, value);