git.delta.rocks / jrsonnet / refs/commits / 0ecdce965896

difftreelog

feat std.asciiUpper and std.asciiLower builtin

messense2021-07-13parent: #fbae069.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth
126 ("strReplace".into(), builtin_str_replace),126 ("strReplace".into(), builtin_str_replace),
127 ("splitLimit".into(), builtin_splitlimit),127 ("splitLimit".into(), builtin_splitlimit),
128 ("parseJson".into(), builtin_parse_json),128 ("parseJson".into(), builtin_parse_json),
129 ("asciiUpper".into(), builtin_ascii_upper),
130 ("asciiLower".into(), builtin_ascii_lower),
129 ].iter().cloned().collect()131 ].iter().cloned().collect()
130 };132 };
131}133}
828 })830 })
829}831}
832
833fn builtin_ascii_upper(
834 context: Context,
835 _loc: Option<&ExprLocation>,
836 args: &ArgsDesc,
837) -> Result<Val> {
838 parse_args!(context, "asciiUpper", args, 1, [
839 0, str: ty!(string) => Val::Str;
840 ], {
841 Ok(Val::Str(str.to_ascii_uppercase().into()))
842 })
843}
844
845fn builtin_ascii_lower(
846 context: Context,
847 _loc: Option<&ExprLocation>,
848 args: &ArgsDesc,
849) -> Result<Val> {
850 parse_args!(context, "asciiLower", args, 1, [
851 0, str: ty!(string) => Val::Str;
852 ], {
853 Ok(Val::Str(str.to_ascii_lowercase().into()))
854 })
855}
830856
831pub fn call_builtin(857pub fn call_builtin(
832 context: Context,858 context: Context,
modifiedcrates/jrsonnet-evaluator/src/lib.rsdiffbeforeafterboth
1046 assert_eq!(error.error().to_string(), "assert failed: is number");1046 assert_eq!(error.error().to_string(), "assert failed: is number");
1047 }1047 }
1048
1049 #[test]
1050 fn test_ascii_upper_lower() {
1051 assert_eval!(r#"std.assertEqual(std.asciiUpper("aBc😀"), "ABC😀")"#);
1052 assert_eval!(r#"std.assertEqual(std.asciiLower("aBc😀"), "abc😀")"#);
1053 }
1048}1054}
10491055
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
128128
129 strReplace:: $intrinsic(strReplace),129 strReplace:: $intrinsic(strReplace),
130130
131 asciiUpper(str)::131 asciiUpper:: $intrinsic(asciiUpper),
132 local cp = std.codepoint;
133 local up_letter(c) = if cp(c) >= 97 && cp(c) < 123 then
134 std.char(cp(c) - 32)
135 else
136 c;
137 std.join('', std.map(up_letter, std.stringChars(str))),
138132
139 asciiLower(str)::133 asciiLower:: $intrinsic(asciiLower),
140 local cp = std.codepoint;
141 local down_letter(c) = if cp(c) >= 65 && cp(c) < 91 then
142 std.char(cp(c) + 32)
143 else
144 c;
145 std.join('', std.map(down_letter, std.stringChars(str))),
146134
147 range:: $intrinsic(range),135 range:: $intrinsic(range),
148136