From 4ab075dbe65c215612ec6342204138f090785a22 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 10 Aug 2023 21:48:17 +0000 Subject: [PATCH] fix: std function argument names --- --- a/crates/jrsonnet-stdlib/src/arrays.rs +++ b/crates/jrsonnet-stdlib/src/arrays.rs @@ -255,9 +255,9 @@ } #[builtin] -pub fn builtin_remove_at(arr: ArrValue, index: usize) -> Result { - let newArrLeft = arr.clone().slice(None, Some(index), None); - let newArrRight = arr.slice(Some(index + 1), None, None); +pub fn builtin_remove_at(arr: ArrValue, at: usize) -> Result { + let newArrLeft = arr.clone().slice(None, Some(at), None); + let newArrRight = arr.slice(Some(at + 1), None, None); Ok(ArrValue::extended( newArrLeft.unwrap_or(ArrValue::empty()), --- a/crates/jrsonnet-stdlib/src/hash.rs +++ b/crates/jrsonnet-stdlib/src/hash.rs @@ -6,25 +6,25 @@ } #[builtin] -pub fn builtin_sha256(s: IStr) -> String { +pub fn builtin_sha256(str: IStr) -> String { use sha2::digest::Digest; - format!("{:x}", sha2::Sha256::digest(s.as_bytes())) + format!("{:x}", sha2::Sha256::digest(str.as_bytes())) } #[builtin] -pub fn builtin_sha512(s: IStr) -> String { +pub fn builtin_sha512(str: IStr) -> String { use sha2::digest::Digest; - format!("{:x}", sha2::Sha512::digest(s.as_bytes())) + format!("{:x}", sha2::Sha512::digest(str.as_bytes())) } #[builtin] -pub fn builtin_sha1(s: IStr) -> String { +pub fn builtin_sha1(str: IStr) -> String { use sha1::digest::Digest; - format!("{:x}", sha1::Sha1::digest(s.as_bytes())) + format!("{:x}", sha1::Sha1::digest(str.as_bytes())) } #[builtin] -pub fn builtin_sha3(s: IStr) -> String { +pub fn builtin_sha3(str: IStr) -> String { use sha3::digest::Digest; - format!("{:x}", sha3::Sha3_512::digest(s.as_bytes())) + format!("{:x}", sha3::Sha3_512::digest(str.as_bytes())) } --- a/crates/jrsonnet-stdlib/src/lib.rs +++ b/crates/jrsonnet-stdlib/src/lib.rs @@ -80,7 +80,7 @@ ("any", builtin_any::INST), ("all", builtin_all::INST), ("member", builtin_member::INST), - ("contains", builtin_member::INST), + ("contains", builtin_contains::INST), ("count", builtin_count::INST), ("avg", builtin_avg::INST), ("removeAt", builtin_remove_at::INST), --- a/crates/jrsonnet-stdlib/src/misc.rs +++ b/crates/jrsonnet-stdlib/src/misc.rs @@ -57,12 +57,12 @@ this: &builtin_trace, loc: CallLocation, str: Val, - rest: Thunk, + rest: Option>, ) -> Result { this.settings.borrow().trace_printer.print_trace( loc, - match str { - Val::Str(s) => s.into_flat(), + match &str { + Val::Str(s) => s.clone().into_flat(), Val::Func(f) => format!("{f:?}").into(), v => v .manifest(JsonFormat::std_to_json( @@ -75,7 +75,11 @@ .into(), }, ); - rest.evaluate() + if let Some(rest) = rest { + rest.evaluate() + } else { + Ok(str) + } } #[allow(clippy::comparison_chain)] --- a/crates/jrsonnet-stdlib/src/strings.rs +++ b/crates/jrsonnet-stdlib/src/strings.rs @@ -33,8 +33,8 @@ } #[builtin] -pub fn builtin_equals_ignore_case(x: String, y: String) -> bool { - x.to_ascii_lowercase() == y.to_ascii_lowercase() +pub fn builtin_equals_ignore_case(str1: String, str2: String) -> bool { + str1.to_ascii_lowercase() == str2.to_ascii_lowercase() } #[builtin] --- a/tests/suite/std_param_names.jsonnet +++ b/tests/suite/std_param_names.jsonnet @@ -126,8 +126,33 @@ decodeUTF8: ['arr'], sum: ['arr'], + avg: ['arr', 'onEmpty'], + minArray: ['arr', 'keyF', 'onEmpty'], + maxArray: ['arr', 'keyF', 'onEmpty'], + remove: ['arr', 'elem'], + contains: ['arr', 'elem'], + removeAt: ['arr', 'at'], + + equalsIgnoreCase: ['str1', 'str2'], + isEmpty: ['str'], + xor: ['x', 'y'], + xnor: ['x', 'y'], + isInteger: ['x'], + isDecimal: ['x'], + isEven: ['x'], + isOdd: ['x'], + round: ['x'], + sha1: ['str'], + sha256: ['str'], + sha512: ['str'], + sha3: ['str'], + + objectKeysValues: ['o'], + objectKeysValuesAll: ['o'], + objectRemoveKey: ['obj', 'key'], + // C++ jsonnet undocumented __compare: ['v1', 'v2'], __compare_array: ['arr1', 'arr2'], @@ -138,3 +163,9 @@ }; std.all(std.map(function(key) assertNames(key, names[key]), std.objectFields(names))) +&& std.all([ + assert std.objectHasAll(names, key): ('function "%s" is not defined in names' + % key); true, + for key in std.objectFieldsAll(std) + if key != 'thisFile' +]) -- gitstuff