difftreelog
feat add std regex builtins
in: master
Upstream issue: https://github.com/google/jsonnet/pull/1039
8 files changed
Cargo.lockdiffbeforeafterboth29 "zerocopy",29 "zerocopy",30]30]3132[[package]]33name = "aho-corasick"34version = "1.1.2"35source = "registry+https://github.com/rust-lang/crates.io-index"36checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"37dependencies = [38 "memchr",39]314032[[package]]41[[package]]33name = "allocator-api2"42name = "allocator-api2"374638[[package]]47[[package]]39name = "annotate-snippets"48name = "annotate-snippets"40version = "0.9.1"49version = "0.9.2"41source = "registry+https://github.com/rust-lang/crates.io-index"50source = "registry+https://github.com/rust-lang/crates.io-index"42checksum = "c3b9d411ecbaf79885c6df4d75fff75858d5995ff25385657a28af47e82f9c36"51checksum = "ccaf7e9dfbb6ab22c82e473cd1a8a7bd313c19a5b7e40970f3d89ef5a5c9e81e"43dependencies = [52dependencies = [44 "unicode-width",53 "unicode-width",45 "yansi-term",54 "yansi-term",46]55]475648[[package]]57[[package]]49name = "anstream"58name = "anstream"50version = "0.6.4"59version = "0.6.5"51source = "registry+https://github.com/rust-lang/crates.io-index"60source = "registry+https://github.com/rust-lang/crates.io-index"52checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"61checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6"53dependencies = [62dependencies = [54 "anstyle",63 "anstyle",55 "anstyle-parse",64 "anstyle-parse",677668[[package]]77[[package]]69name = "anstyle-parse"78name = "anstyle-parse"70version = "0.2.2"79version = "0.2.3"71source = "registry+https://github.com/rust-lang/crates.io-index"80source = "registry+https://github.com/rust-lang/crates.io-index"72checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"81checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"73dependencies = [82dependencies = [74 "utf8parse",83 "utf8parse",75]84]768577[[package]]86[[package]]78name = "anstyle-query"87name = "anstyle-query"79version = "1.0.0"88version = "1.0.2"80source = "registry+https://github.com/rust-lang/crates.io-index"89source = "registry+https://github.com/rust-lang/crates.io-index"81checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"90checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"82dependencies = [91dependencies = [83 "windows-sys 0.48.0",92 "windows-sys 0.52.0",84]93]859486[[package]]95[[package]]87name = "anstyle-wincon"96name = "anstyle-wincon"88version = "3.0.1"97version = "3.0.2"89source = "registry+https://github.com/rust-lang/crates.io-index"98source = "registry+https://github.com/rust-lang/crates.io-index"90checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"99checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"91dependencies = [100dependencies = [92 "anstyle",101 "anstyle",93 "windows-sys 0.48.0",102 "windows-sys 0.52.0",94]103]9510496[[package]]105[[package]]206215207[[package]]216[[package]]208name = "clap"217name = "clap"209version = "4.4.7"218version = "4.4.11"210source = "registry+https://github.com/rust-lang/crates.io-index"219source = "registry+https://github.com/rust-lang/crates.io-index"211checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b"220checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"212dependencies = [221dependencies = [213 "clap_builder",222 "clap_builder",214 "clap_derive",223 "clap_derive",215]224]216225217[[package]]226[[package]]218name = "clap_builder"227name = "clap_builder"219version = "4.4.7"228version = "4.4.11"220source = "registry+https://github.com/rust-lang/crates.io-index"229source = "registry+https://github.com/rust-lang/crates.io-index"221checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663"230checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"222dependencies = [231dependencies = [223 "anstream",232 "anstream",224 "anstyle",233 "anstyle",244 "heck",253 "heck",245 "proc-macro2",254 "proc-macro2",246 "quote",255 "quote",247 "syn 2.0.38",256 "syn 2.0.39",248]257]249258250[[package]]259[[package]]344dependencies = [353dependencies = [345 "anyhow",354 "anyhow",346 "bumpalo",355 "bumpalo",347 "indexmap 2.0.2",356 "indexmap 2.1.0",348 "rustc-hash",357 "rustc-hash",349 "serde",358 "serde",350 "unicode-width",359 "unicode-width",376385377[[package]]386[[package]]378name = "errno"387name = "errno"379version = "0.3.5"388version = "0.3.8"380source = "registry+https://github.com/rust-lang/crates.io-index"389source = "registry+https://github.com/rust-lang/crates.io-index"381checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"390checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"382dependencies = [391dependencies = [383 "libc",392 "libc",384 "windows-sys 0.48.0",393 "windows-sys 0.52.0",385]394]386395387[[package]]396[[package]]398407399[[package]]408[[package]]400name = "form_urlencoded"409name = "form_urlencoded"401version = "1.2.0"410version = "1.2.1"402source = "registry+https://github.com/rust-lang/crates.io-index"411source = "registry+https://github.com/rust-lang/crates.io-index"403checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"412checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"404dependencies = [413dependencies = [405 "percent-encoding",414 "percent-encoding",406]415]428437429[[package]]438[[package]]430name = "getrandom"439name = "getrandom"431version = "0.2.10"440version = "0.2.11"432source = "registry+https://github.com/rust-lang/crates.io-index"441source = "registry+https://github.com/rust-lang/crates.io-index"433checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"442checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"434dependencies = [443dependencies = [435 "cfg-if",444 "cfg-if",436 "libc",445 "libc",439448440[[package]]449[[package]]441name = "gimli"450name = "gimli"442version = "0.28.0"451version = "0.28.1"443source = "registry+https://github.com/rust-lang/crates.io-index"452source = "registry+https://github.com/rust-lang/crates.io-index"444checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"453checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"445454446[[package]]455[[package]]447name = "hashbrown"456name = "hashbrown"448version = "0.12.3"457version = "0.12.3"449source = "registry+https://github.com/rust-lang/crates.io-index"458source = "registry+https://github.com/rust-lang/crates.io-index"450checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"459checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"460461[[package]]462name = "hashbrown"463version = "0.13.2"464source = "registry+https://github.com/rust-lang/crates.io-index"465checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"466dependencies = [467 "ahash",468]451469452[[package]]470[[package]]453name = "hashbrown"471name = "hashbrown"454version = "0.14.2"472version = "0.14.3"455source = "registry+https://github.com/rust-lang/crates.io-index"473source = "registry+https://github.com/rust-lang/crates.io-index"456checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"474checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"457dependencies = [475dependencies = [458 "ahash",476 "ahash",459 "allocator-api2",477 "allocator-api2",473491474[[package]]492[[package]]475name = "idna"493name = "idna"476version = "0.4.0"494version = "0.5.0"477source = "registry+https://github.com/rust-lang/crates.io-index"495source = "registry+https://github.com/rust-lang/crates.io-index"478checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"496checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"479dependencies = [497dependencies = [480 "unicode-bidi",498 "unicode-bidi",481 "unicode-normalization",499 "unicode-normalization",493511494[[package]]512[[package]]495name = "indexmap"513name = "indexmap"496version = "2.0.2"514version = "2.1.0"497source = "registry+https://github.com/rust-lang/crates.io-index"515source = "registry+https://github.com/rust-lang/crates.io-index"498checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"516checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"499dependencies = [517dependencies = [500 "equivalent",518 "equivalent",501 "hashbrown 0.14.2",519 "hashbrown 0.14.3",502 "serde",520 "serde",503]521]504522549567550[[package]]568[[package]]551name = "itoa"569name = "itoa"552version = "1.0.9"570version = "1.0.10"553source = "registry+https://github.com/rust-lang/crates.io-index"571source = "registry+https://github.com/rust-lang/crates.io-index"554checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"572checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"555573556[[package]]574[[package]]557name = "jrsonnet"575name = "jrsonnet"589 "anyhow",607 "anyhow",590 "bincode",608 "bincode",591 "derivative",609 "derivative",592 "hashbrown 0.14.2",610 "hashbrown 0.14.3",593 "jrsonnet-gcmodule",611 "jrsonnet-gcmodule",594 "jrsonnet-interner",612 "jrsonnet-interner",595 "jrsonnet-macros",613 "jrsonnet-macros",643name = "jrsonnet-interner"661name = "jrsonnet-interner"644version = "0.5.0-pre95"662version = "0.5.0-pre95"645dependencies = [663dependencies = [646 "hashbrown 0.14.2",664 "hashbrown 0.14.3",647 "jrsonnet-gcmodule",665 "jrsonnet-gcmodule",648 "rustc-hash",666 "rustc-hash",649 "serde",667 "serde",669dependencies = [687dependencies = [670 "proc-macro2",688 "proc-macro2",671 "quote",689 "quote",672 "syn 2.0.38",690 "syn 2.0.39",673]691]674692675[[package]]693[[package]]709 "jrsonnet-gcmodule",727 "jrsonnet-gcmodule",710 "jrsonnet-macros",728 "jrsonnet-macros",711 "jrsonnet-parser",729 "jrsonnet-parser",730 "lru",712 "md5",731 "md5",713 "num-bigint",732 "num-bigint",733 "regex",734 "rustc-hash",714 "serde",735 "serde",715 "serde_json",736 "serde_json",716 "serde_yaml_with_quirks",737 "serde_yaml_with_quirks",745766746[[package]]767[[package]]747name = "libc"768name = "libc"748version = "0.2.149"769version = "0.2.151"749source = "registry+https://github.com/rust-lang/crates.io-index"770source = "registry+https://github.com/rust-lang/crates.io-index"750checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"771checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"751772752[[package]]773[[package]]753name = "libjsonnet"774name = "libjsonnet"767788768[[package]]789[[package]]769name = "linux-raw-sys"790name = "linux-raw-sys"770version = "0.4.10"791version = "0.4.12"771source = "registry+https://github.com/rust-lang/crates.io-index"792source = "registry+https://github.com/rust-lang/crates.io-index"772checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"793checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"773794774[[package]]795[[package]]775name = "lock_api"796name = "lock_api"806 "fnv",827 "fnv",807 "proc-macro2",828 "proc-macro2",808 "quote",829 "quote",809 "regex-syntax",830 "regex-syntax 0.6.29",810 "syn 1.0.109",831 "syn 1.0.109",811]832]833834[[package]]835name = "lru"836version = "0.10.1"837source = "registry+https://github.com/rust-lang/crates.io-index"838checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670"839dependencies = [840 "hashbrown 0.13.2",841]812842813[[package]]843[[package]]814name = "lsp-server"844name = "lsp-server"815version = "0.7.4"845version = "0.7.5"816source = "registry+https://github.com/rust-lang/crates.io-index"846source = "registry+https://github.com/rust-lang/crates.io-index"817checksum = "b52dccdf3302eefab8c8a1273047f0a3c3dca4b527c8458d00c09484c8371928"847checksum = "fb69ba934913ebf0ef3b3dd762f0149bf993decd571d094b646de09c2e456732"818dependencies = [848dependencies = [819 "crossbeam-channel",849 "crossbeam-channel",820 "log",850 "log",885dependencies = [915dependencies = [886 "proc-macro2",916 "proc-macro2",887 "quote",917 "quote",888 "syn 2.0.38",918 "syn 2.0.39",889]919]890920891[[package]]921[[package]]958988959[[package]]989[[package]]960name = "once_cell"990name = "once_cell"961version = "1.18.0"991version = "1.19.0"962source = "registry+https://github.com/rust-lang/crates.io-index"992source = "registry+https://github.com/rust-lang/crates.io-index"963checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"993checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"964994965[[package]]995[[package]]966name = "owo-colors"996name = "owo-colors"102610561027[[package]]1057[[package]]1028name = "percent-encoding"1058name = "percent-encoding"1029version = "2.3.0"1059version = "2.3.1"1030source = "registry+https://github.com/rust-lang/crates.io-index"1060source = "registry+https://github.com/rust-lang/crates.io-index"1031checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"1061checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"103210621033[[package]]1063[[package]]1034name = "ppv-lite86"1064name = "ppv-lite86"103810681039[[package]]1069[[package]]1040name = "proc-macro2"1070name = "proc-macro2"1041version = "1.0.69"1071version = "1.0.70"1042source = "registry+https://github.com/rust-lang/crates.io-index"1072source = "registry+https://github.com/rust-lang/crates.io-index"1043checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"1073checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"1044dependencies = [1074dependencies = [1045 "unicode-ident",1075 "unicode-ident",1046]1076]1114source = "registry+https://github.com/rust-lang/crates.io-index"1144source = "registry+https://github.com/rust-lang/crates.io-index"1115checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"1145checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"1116dependencies = [1146dependencies = [1117 "getrandom 0.2.10",1147 "getrandom 0.2.11",1118]1148]111911491120[[package]]1150[[package]]1162 "bitflags 1.3.2",1192 "bitflags 1.3.2",1163]1193]11941195[[package]]1196name = "regex"1197version = "1.10.2"1198source = "registry+https://github.com/rust-lang/crates.io-index"1199checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"1200dependencies = [1201 "aho-corasick",1202 "memchr",1203 "regex-automata",1204 "regex-syntax 0.8.2",1205]12061207[[package]]1208name = "regex-automata"1209version = "0.4.3"1210source = "registry+https://github.com/rust-lang/crates.io-index"1211checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"1212dependencies = [1213 "aho-corasick",1214 "memchr",1215 "regex-syntax 0.8.2",1216]116412171165[[package]]1218[[package]]1166name = "regex-syntax"1219name = "regex-syntax"1167version = "0.6.29"1220version = "0.6.29"1168source = "registry+https://github.com/rust-lang/crates.io-index"1221source = "registry+https://github.com/rust-lang/crates.io-index"1169checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"1222checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"12231224[[package]]1225name = "regex-syntax"1226version = "0.8.2"1227source = "registry+https://github.com/rust-lang/crates.io-index"1228checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"117012291171[[package]]1230[[package]]1172name = "rowan"1231name = "rowan"1173version = "0.15.13"1232version = "0.15.15"1174source = "registry+https://github.com/rust-lang/crates.io-index"1233source = "registry+https://github.com/rust-lang/crates.io-index"1175checksum = "906057e449592587bf6724f00155bf82a6752c868d78a8fb3aa41f4e6357cfe8"1234checksum = "32a58fa8a7ccff2aec4f39cc45bf5f985cec7125ab271cf681c279fd00192b49"1176dependencies = [1235dependencies = [1177 "countme",1236 "countme",1178 "hashbrown 0.12.3",1237 "hashbrown 0.14.3",1179 "memoffset",1238 "memoffset",1180 "rustc-hash",1239 "rustc-hash",1181 "text-size",1240 "text-size",119512541196[[package]]1255[[package]]1197name = "rustix"1256name = "rustix"1198version = "0.38.21"1257version = "0.38.28"1199source = "registry+https://github.com/rust-lang/crates.io-index"1258source = "registry+https://github.com/rust-lang/crates.io-index"1200checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"1259checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"1201dependencies = [1260dependencies = [1202 "bitflags 2.4.1",1261 "bitflags 2.4.1",1203 "errno",1262 "errno",1204 "libc",1263 "libc",1205 "linux-raw-sys",1264 "linux-raw-sys",1206 "windows-sys 0.48.0",1265 "windows-sys 0.52.0",1207]1266]120812671209[[package]]1268[[package]]1210name = "ryu"1269name = "ryu"1211version = "1.0.15"1270version = "1.0.16"1212source = "registry+https://github.com/rust-lang/crates.io-index"1271source = "registry+https://github.com/rust-lang/crates.io-index"1213checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"1272checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"121412731215[[package]]1274[[package]]1216name = "scopeguard"1275name = "scopeguard"122012791221[[package]]1280[[package]]1222name = "serde"1281name = "serde"1223version = "1.0.190"1282version = "1.0.193"1224source = "registry+https://github.com/rust-lang/crates.io-index"1283source = "registry+https://github.com/rust-lang/crates.io-index"1225checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7"1284checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"1226dependencies = [1285dependencies = [1227 "serde_derive",1286 "serde_derive",1228]1287]122912881230[[package]]1289[[package]]1231name = "serde_derive"1290name = "serde_derive"1232version = "1.0.190"1291version = "1.0.193"1233source = "registry+https://github.com/rust-lang/crates.io-index"1292source = "registry+https://github.com/rust-lang/crates.io-index"1234checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3"1293checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"1235dependencies = [1294dependencies = [1236 "proc-macro2",1295 "proc-macro2",1237 "quote",1296 "quote",1238 "syn 2.0.38",1297 "syn 2.0.39",1239]1298]124012991241[[package]]1300[[package]]1242name = "serde_json"1301name = "serde_json"1243version = "1.0.107"1302version = "1.0.108"1244source = "registry+https://github.com/rust-lang/crates.io-index"1303source = "registry+https://github.com/rust-lang/crates.io-index"1245checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"1304checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"1246dependencies = [1305dependencies = [1247 "itoa",1306 "itoa",1248 "ryu",1307 "ryu",125113101252[[package]]1311[[package]]1253name = "serde_repr"1312name = "serde_repr"1254version = "0.1.16"1313version = "0.1.17"1255source = "registry+https://github.com/rust-lang/crates.io-index"1314source = "registry+https://github.com/rust-lang/crates.io-index"1256checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"1315checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"1257dependencies = [1316dependencies = [1258 "proc-macro2",1317 "proc-macro2",1259 "quote",1318 "quote",1260 "syn 2.0.38",1319 "syn 2.0.39",1261]1320]126213211263[[package]]1322[[package]]131213711313[[package]]1372[[package]]1314name = "smallvec"1373name = "smallvec"1315version = "1.11.1"1374version = "1.11.2"1316source = "registry+https://github.com/rust-lang/crates.io-index"1375source = "registry+https://github.com/rust-lang/crates.io-index"1317checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"1376checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"131813771319[[package]]1378[[package]]1320name = "smawk"1379name = "smawk"139714561398[[package]]1457[[package]]1399name = "syn"1458name = "syn"1400version = "2.0.38"1459version = "2.0.39"1401source = "registry+https://github.com/rust-lang/crates.io-index"1460source = "registry+https://github.com/rust-lang/crates.io-index"1402checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"1461checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"1403dependencies = [1462dependencies = [1404 "proc-macro2",1463 "proc-macro2",1405 "quote",1464 "quote",1473dependencies = [1532dependencies = [1474 "proc-macro2",1533 "proc-macro2",1475 "quote",1534 "quote",1476 "syn 2.0.38",1535 "syn 2.0.39",1477]1536]147815371479[[package]]1538[[package]]150515641506[[package]]1565[[package]]1507name = "unicode-bidi"1566name = "unicode-bidi"1508version = "0.3.13"1567version = "0.3.14"1509source = "registry+https://github.com/rust-lang/crates.io-index"1568source = "registry+https://github.com/rust-lang/crates.io-index"1510checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"1569checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"151115701512[[package]]1571[[package]]1513name = "unicode-ident"1572name = "unicode-ident"153815971539[[package]]1598[[package]]1540name = "url"1599name = "url"1541version = "2.4.1"1600version = "2.5.0"1542source = "registry+https://github.com/rust-lang/crates.io-index"1601source = "registry+https://github.com/rust-lang/crates.io-index"1543checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"1602checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"1544dependencies = [1603dependencies = [1545 "form_urlencoded",1604 "form_urlencoded",1546 "idna",1605 "idna",1612 "windows-targets 0.48.5",1671 "windows-targets 0.48.5",1613]1672]16731674[[package]]1675name = "windows-sys"1676version = "0.52.0"1677source = "registry+https://github.com/rust-lang/crates.io-index"1678checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"1679dependencies = [1680 "windows-targets 0.52.0",1681]161416821615[[package]]1683[[package]]1616name = "windows-targets"1684name = "windows-targets"1642 "windows_x86_64_msvc 0.48.5",1710 "windows_x86_64_msvc 0.48.5",1643]1711]17121713[[package]]1714name = "windows-targets"1715version = "0.52.0"1716source = "registry+https://github.com/rust-lang/crates.io-index"1717checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"1718dependencies = [1719 "windows_aarch64_gnullvm 0.52.0",1720 "windows_aarch64_msvc 0.52.0",1721 "windows_i686_gnu 0.52.0",1722 "windows_i686_msvc 0.52.0",1723 "windows_x86_64_gnu 0.52.0",1724 "windows_x86_64_gnullvm 0.52.0",1725 "windows_x86_64_msvc 0.52.0",1726]164417271645[[package]]1728[[package]]1646name = "windows_aarch64_gnullvm"1729name = "windows_aarch64_gnullvm"1654source = "registry+https://github.com/rust-lang/crates.io-index"1737source = "registry+https://github.com/rust-lang/crates.io-index"1655checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"1738checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"17391740[[package]]1741name = "windows_aarch64_gnullvm"1742version = "0.52.0"1743source = "registry+https://github.com/rust-lang/crates.io-index"1744checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"165617451657[[package]]1746[[package]]1658name = "windows_aarch64_msvc"1747name = "windows_aarch64_msvc"1666source = "registry+https://github.com/rust-lang/crates.io-index"1755source = "registry+https://github.com/rust-lang/crates.io-index"1667checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"1756checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"17571758[[package]]1759name = "windows_aarch64_msvc"1760version = "0.52.0"1761source = "registry+https://github.com/rust-lang/crates.io-index"1762checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"166817631669[[package]]1764[[package]]1670name = "windows_i686_gnu"1765name = "windows_i686_gnu"1678source = "registry+https://github.com/rust-lang/crates.io-index"1773source = "registry+https://github.com/rust-lang/crates.io-index"1679checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"1774checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"17751776[[package]]1777name = "windows_i686_gnu"1778version = "0.52.0"1779source = "registry+https://github.com/rust-lang/crates.io-index"1780checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"168017811681[[package]]1782[[package]]1682name = "windows_i686_msvc"1783name = "windows_i686_msvc"1690source = "registry+https://github.com/rust-lang/crates.io-index"1791source = "registry+https://github.com/rust-lang/crates.io-index"1691checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"1792checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"17931794[[package]]1795name = "windows_i686_msvc"1796version = "0.52.0"1797source = "registry+https://github.com/rust-lang/crates.io-index"1798checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"169217991693[[package]]1800[[package]]1694name = "windows_x86_64_gnu"1801name = "windows_x86_64_gnu"1702source = "registry+https://github.com/rust-lang/crates.io-index"1809source = "registry+https://github.com/rust-lang/crates.io-index"1703checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"1810checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"18111812[[package]]1813name = "windows_x86_64_gnu"1814version = "0.52.0"1815source = "registry+https://github.com/rust-lang/crates.io-index"1816checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"170418171705[[package]]1818[[package]]1706name = "windows_x86_64_gnullvm"1819name = "windows_x86_64_gnullvm"1714source = "registry+https://github.com/rust-lang/crates.io-index"1827source = "registry+https://github.com/rust-lang/crates.io-index"1715checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"1828checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"18291830[[package]]1831name = "windows_x86_64_gnullvm"1832version = "0.52.0"1833source = "registry+https://github.com/rust-lang/crates.io-index"1834checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"171618351717[[package]]1836[[package]]1718name = "windows_x86_64_msvc"1837name = "windows_x86_64_msvc"1726source = "registry+https://github.com/rust-lang/crates.io-index"1845source = "registry+https://github.com/rust-lang/crates.io-index"1727checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"1846checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"18471848[[package]]1849name = "windows_x86_64_msvc"1850version = "0.52.0"1851source = "registry+https://github.com/rust-lang/crates.io-index"1852checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"172818531729[[package]]1854[[package]]1730name = "xshell"1855name = "xshell"1746version = "0.1.0"1871version = "0.1.0"1747dependencies = [1872dependencies = [1748 "anyhow",1873 "anyhow",1749 "indexmap 2.0.2",1874 "indexmap 2.1.0",1750 "itertools",1875 "itertools",1751 "proc-macro2",1876 "proc-macro2",1752 "quote",1877 "quote",177418991775[[package]]1900[[package]]1776name = "zerocopy"1901name = "zerocopy"1777version = "0.7.18"1902version = "0.7.30"1778source = "registry+https://github.com/rust-lang/crates.io-index"1903source = "registry+https://github.com/rust-lang/crates.io-index"1779checksum = "ede7d7c7970ca2215b8c1ccf4d4f354c4733201dfaaba72d44ae5b37472e4901"1904checksum = "306dca4455518f1f31635ec308b6b3e4eb1b11758cefafc782827d0aa7acb5c7"1780dependencies = [1905dependencies = [1781 "zerocopy-derive",1906 "zerocopy-derive",1782]1907]178319081784[[package]]1909[[package]]1785name = "zerocopy-derive"1910name = "zerocopy-derive"1786version = "0.7.18"1911version = "0.7.30"1787source = "registry+https://github.com/rust-lang/crates.io-index"1912source = "registry+https://github.com/rust-lang/crates.io-index"1788checksum = "4b27b1bb92570f989aac0ab7e9cbfbacdd65973f7ee920d9f0e71ebac878fd0b"1913checksum = "be912bf68235a88fbefd1b73415cb218405958d1655b2ece9035a19920bdf6ba"1789dependencies = [1914dependencies = [1790 "proc-macro2",1915 "proc-macro2",1791 "quote",1916 "quote",1792 "syn 2.0.38",1917 "syn 2.0.39",1793]1918]17941919Cargo.tomldiffbeforeafterboth--- a/Cargo.toml
+++ b/Cargo.toml
@@ -64,6 +64,9 @@
lsp-server = "0.7.4"
lsp-types = "0.94.1"
+regex = "1.8.4"
+lru = "0.10.0"
+
#[profile.test]
#opt-level = 1
cmds/jrsonnet/Cargo.tomldiffbeforeafterboth--- a/cmds/jrsonnet/Cargo.toml
+++ b/cmds/jrsonnet/Cargo.toml
@@ -29,6 +29,10 @@
exp-object-iteration = ["jrsonnet-evaluator/exp-object-iteration"]
# Bigint type
exp-bigint = ["jrsonnet-evaluator/exp-bigint", "jrsonnet-cli/exp-bigint"]
+# std.regex and co.
+exp-regex = [
+ "jrsonnet-stdlib/exp-regex",
+]
# obj?.field, obj?.['field']
exp-null-coaelse = [
"jrsonnet-evaluator/exp-null-coaelse",
crates/jrsonnet-cli/Cargo.tomldiffbeforeafterboth--- a/crates/jrsonnet-cli/Cargo.toml
+++ b/crates/jrsonnet-cli/Cargo.toml
@@ -20,6 +20,9 @@
"jrsonnet-evaluator/exp-null-coaelse",
"jrsonnet-stdlib/exp-null-coaelse",
]
+exp-regex = [
+ "jrsonnet-stdlib/exp-regex",
+]
legacy-this-file = ["jrsonnet-stdlib/legacy-this-file"]
[dependencies]
crates/jrsonnet-evaluator/src/typed/conversions.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/typed/conversions.rs
+++ b/crates/jrsonnet-evaluator/src/typed/conversions.rs
@@ -304,6 +304,22 @@
}
}
+impl Typed for StrValue {
+ const TYPE: &'static ComplexValType = &ComplexValType::Simple(ValType::Str);
+
+ fn into_untyped(value: Self) -> Result<Val> {
+ Ok(Val::Str(value))
+ }
+
+ fn from_untyped(value: Val) -> Result<Self> {
+ <Self as Typed>::TYPE.check(&value)?;
+ match value {
+ Val::Str(s) => Ok(s),
+ _ => unreachable!(),
+ }
+ }
+}
+
impl Typed for char {
const TYPE: &'static ComplexValType = &ComplexValType::Char;
crates/jrsonnet-stdlib/Cargo.tomldiffbeforeafterboth--- a/crates/jrsonnet-stdlib/Cargo.toml
+++ b/crates/jrsonnet-stdlib/Cargo.toml
@@ -20,6 +20,8 @@
exp-bigint = ["num-bigint", "jrsonnet-evaluator/exp-bigint"]
exp-null-coaelse = ["jrsonnet-parser/exp-null-coaelse", "jrsonnet-evaluator/exp-null-coaelse"]
+# std.regexMatch and other helpers
+exp-regex = ["regex", "lru", "rustc-hash"]
[dependencies]
jrsonnet-evaluator.workspace = true
@@ -49,6 +51,11 @@
num-bigint = { workspace = true, optional = true }
+# regex
+regex = { workspace = true, optional = true }
+lru = { workspace = true, optional = true }
+rustc-hash = { workspace = true, optional = true }
+
[build-dependencies]
jrsonnet-parser.workspace = true
structdump = { workspace = true, features = ["derive"] }
crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/lib.rs
+++ b/crates/jrsonnet-stdlib/src/lib.rs
@@ -43,6 +43,10 @@
pub use sets::*;
mod compat;
pub use compat::*;
+#[cfg(feature = "exp-regex")]
+mod regex;
+#[cfg(feature = "exp-regex")]
+pub use crate::regex::*;
pub fn stdlib_uncached(settings: Rc<RefCell<Settings>>) -> ObjValue {
let mut builder = ObjValueBuilder::new();
@@ -185,6 +189,9 @@
("setInter", builtin_set_inter::INST),
("setDiff", builtin_set_diff::INST),
("setUnion", builtin_set_union::INST),
+ // Regex
+ #[cfg(feature = "exp-regex")]
+ ("regexQuoteMeta", builtin_regex_quote_meta::INST),
// Compat
("__compare", builtin___compare::INST),
]
@@ -207,8 +214,37 @@
},
);
builder.method("trace", builtin_trace { settings });
+ builder.method("id", FuncVal::Id);
- builder.method("id", FuncVal::Id);
+ #[cfg(feature = "exp-regex")]
+ {
+ // Regex
+ let regex_cache = RegexCache::default();
+ builder.method(
+ "regexFullMatch",
+ builtin_regex_full_match {
+ cache: regex_cache.clone(),
+ },
+ );
+ builder.method(
+ "regexPartialMatch",
+ builtin_regex_partial_match {
+ cache: regex_cache.clone(),
+ },
+ );
+ builder.method(
+ "regexReplace",
+ builtin_regex_replace {
+ cache: regex_cache.clone(),
+ },
+ );
+ builder.method(
+ "regexGlobalReplace",
+ builtin_regex_global_replace {
+ cache: regex_cache.clone(),
+ },
+ );
+ };
builder.build()
}
crates/jrsonnet-stdlib/src/regex.rsdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-stdlib/src/regex.rs
@@ -0,0 +1,134 @@
+use std::{cell::RefCell, hash::BuildHasherDefault, num::NonZeroUsize, rc::Rc};
+
+use ::regex::Regex;
+use jrsonnet_evaluator::{
+ error::{ErrorKind::*, Result},
+ val::StrValue,
+ IStr, ObjValueBuilder, Val,
+};
+use jrsonnet_macros::builtin;
+use lru::LruCache;
+use rustc_hash::FxHasher;
+
+pub struct RegexCacheInner {
+ cache: RefCell<LruCache<IStr, Rc<Regex>, BuildHasherDefault<FxHasher>>>,
+}
+impl Default for RegexCacheInner {
+ fn default() -> Self {
+ Self {
+ cache: RefCell::new(LruCache::with_hasher(
+ NonZeroUsize::new(20).unwrap(),
+ BuildHasherDefault::default(),
+ )),
+ }
+ }
+}
+pub type RegexCache = Rc<RegexCacheInner>;
+impl RegexCacheInner {
+ fn parse(&self, pattern: IStr) -> Result<Rc<Regex>> {
+ let mut cache = self.cache.borrow_mut();
+ if let Some(found) = cache.get(&pattern) {
+ return Ok(found.clone());
+ }
+ let regex = Regex::new(&pattern)
+ .map_err(|e| RuntimeError(format!("regex parse failed: {e}").into()))?;
+ let regex = Rc::new(regex);
+ cache.push(pattern, regex.clone());
+ Ok(regex)
+ }
+}
+
+pub fn regex_match_inner(regex: &Regex, str: String) -> Result<Val> {
+ let mut out = ObjValueBuilder::with_capacity(3);
+
+ let mut captures = Vec::with_capacity(regex.captures_len());
+ let mut named_captures = ObjValueBuilder::with_capacity(regex.capture_names().len());
+
+ let Some(captured) = regex.captures(&str) else {
+ return Ok(Val::Null)
+ };
+
+ for ele in captured.iter().skip(1) {
+ if let Some(ele) = ele {
+ captures.push(Val::Str(StrValue::Flat(ele.as_str().into())))
+ } else {
+ captures.push(Val::Str(StrValue::Flat(IStr::empty())))
+ }
+ }
+ for (i, name) in regex
+ .capture_names()
+ .skip(1)
+ .enumerate()
+ .flat_map(|(i, v)| Some((i, v?)))
+ {
+ let capture = captures[i].clone();
+ named_captures.member(name.into()).value(capture)?;
+ }
+
+ out.member("string".into())
+ .value_unchecked(Val::Str(captured.get(0).unwrap().as_str().into()));
+ out.member("captures".into())
+ .value_unchecked(Val::Arr(captures.into()));
+ out.member("namedCaptures".into())
+ .value_unchecked(Val::Obj(named_captures.build()));
+
+ Ok(Val::Obj(out.build()))
+}
+
+#[builtin(fields(
+ cache: RegexCache,
+))]
+pub fn builtin_regex_partial_match(
+ this: &builtin_regex_partial_match,
+ pattern: IStr,
+ str: String,
+) -> Result<Val> {
+ let regex = this.cache.parse(pattern)?;
+ regex_match_inner(®ex, str)
+}
+
+#[builtin(fields(
+ cache: RegexCache,
+))]
+pub fn builtin_regex_full_match(
+ this: &builtin_regex_full_match,
+ pattern: StrValue,
+ str: String,
+) -> Result<Val> {
+ let pattern = format!("^{pattern}$").into();
+ let regex = this.cache.parse(pattern)?;
+ regex_match_inner(®ex, str)
+}
+
+#[builtin]
+pub fn builtin_regex_quote_meta(pattern: String) -> String {
+ regex::escape(&pattern)
+}
+
+#[builtin(fields(
+ cache: RegexCache,
+))]
+pub fn builtin_regex_replace(
+ this: &builtin_regex_replace,
+ str: String,
+ pattern: IStr,
+ to: String,
+) -> Result<String> {
+ let regex = this.cache.parse(pattern)?;
+ let replaced = regex.replace(&str, to);
+ Ok(replaced.to_string())
+}
+
+#[builtin(fields(
+ cache: RegexCache,
+))]
+pub fn builtin_regex_global_replace(
+ this: &builtin_regex_global_replace,
+ str: String,
+ pattern: IStr,
+ to: String,
+) -> Result<String> {
+ let regex = this.cache.parse(pattern)?;
+ let replaced = regex.replace_all(&str, to);
+ Ok(replaced.to_string())
+}