diff --git a/Cargo.lock b/Cargo.lock
index f5d228ae..2be3ca06 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2,6 +2,16 @@
# It is not intended for manual editing.
version = 3
+[[package]]
+name = "Inflector"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
+dependencies = [
+ "lazy_static",
+ "regex",
+]
+
[[package]]
name = "abnf-core"
version = "0.6.0"
@@ -19,9 +29,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ahash"
-version = "0.8.5"
+version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd7d5a2cecb58716e47d67d5703a249964b14c7be1ec3cad3affc295b2d1c35d"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
"once_cell",
@@ -38,6 +48,30 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "allocative"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "082af274fd02beef17b7f0725a49ecafe6c075ef56cac9d6363eb3916a9817ae"
+dependencies = [
+ "allocative_derive",
+ "bumpalo",
+ "ctor",
+ "hashbrown 0.14.3",
+ "num-bigint",
+]
+
+[[package]]
+name = "allocative_derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe233a377643e0fc1a56421d7c90acdec45c291b30345eb9f08e8d0ddce5a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.60",
+]
+
[[package]]
name = "allocator-api2"
version = "0.2.16"
@@ -59,6 +93,30 @@ dependencies = [
"libc",
]
+[[package]]
+name = "annotate-snippets"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccaf7e9dfbb6ab22c82e473cd1a8a7bd313c19a5b7e40970f3d89ef5a5c9e81e"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
[[package]]
name = "async-channel"
version = "1.9.0"
@@ -152,7 +210,7 @@ dependencies = [
"futures-lite",
"rustix 0.37.23",
"signal-hook",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -174,7 +232,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
]
[[package]]
@@ -227,6 +285,27 @@ dependencies = [
"byteorder",
]
+[[package]]
+name = "beef"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1"
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
[[package]]
name = "bitflags"
version = "1.3.2"
@@ -334,6 +413,23 @@ dependencies = [
"unicode-width",
]
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "cmp_any"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9b18233253483ce2f65329a24072ec414db782531bdbb7d0bbc4bd2ce6b7e21"
+
[[package]]
name = "concurrent-queue"
version = "2.2.0"
@@ -343,6 +439,12 @@ dependencies = [
"crossbeam-utils",
]
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
[[package]]
name = "core-foundation"
version = "0.9.3"
@@ -412,7 +514,7 @@ dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
- "memoffset",
+ "memoffset 0.9.0",
"scopeguard",
]
@@ -435,6 +537,12 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
[[package]]
name = "csv"
version = "1.2.2"
@@ -456,6 +564,16 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
[[package]]
name = "curl"
version = "0.4.44"
@@ -504,12 +622,53 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "debugserver-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf6834a70ed14e8e4e41882df27190bea150f1f6ecf461f1033f8739cd8af4a"
+dependencies = [
+ "schemafy",
+ "serde",
+ "serde_json",
+]
+
[[package]]
name = "deranged"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
[[package]]
name = "dirs-next"
version = "2.0.0"
@@ -531,12 +690,51 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "display_container"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a110a75c96bedec8e65823dea00a1d710288b7a369d95fd8a0f5127639466fa"
+dependencies = [
+ "either",
+ "indenter",
+]
+
+[[package]]
+name = "dupe"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f73b0ec8a0206a0aa8cfd70f10adae48bdfe4b01663a5a5a37e2e48fa16a2705"
+dependencies = [
+ "dupe_derive",
+]
+
+[[package]]
+name = "dupe_derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e7d0f888ea556a80f971cda6c897ce90ae0e7673fc1602eb2e9b86734e68768"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.60",
+]
+
[[package]]
name = "either"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+[[package]]
+name = "ena"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1"
+dependencies = [
+ "log",
+]
+
[[package]]
name = "encoding"
version = "0.2.33"
@@ -610,12 +808,27 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
[[package]]
name = "equivalent"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+[[package]]
+name = "erased-serde"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "errno"
version = "0.3.2"
@@ -624,7 +837,7 @@ checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
dependencies = [
"errno-dragonfly",
"libc",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -637,6 +850,16 @@ dependencies = [
"libc",
]
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
[[package]]
name = "event-listener"
version = "2.5.3"
@@ -670,6 +893,17 @@ version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+[[package]]
+name = "fd-lock"
+version = "3.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5"
+dependencies = [
+ "cfg-if",
+ "rustix 0.38.9",
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "filetime"
version = "0.2.22"
@@ -679,9 +913,15 @@ dependencies = [
"cfg-if",
"libc",
"redox_syscall 0.3.5",
- "windows-sys",
+ "windows-sys 0.48.0",
]
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
[[package]]
name = "flate2"
version = "1.0.27"
@@ -802,7 +1042,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
]
[[package]]
@@ -835,6 +1075,15 @@ dependencies = [
"slab",
]
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
[[package]]
name = "getrandom"
version = "0.2.10"
@@ -854,9 +1103,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
-version = "0.14.0"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
dependencies = [
"ahash",
"allocator-api2",
@@ -868,7 +1117,7 @@ version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f"
dependencies = [
- "hashbrown 0.14.0",
+ "hashbrown 0.14.3",
]
[[package]]
@@ -965,6 +1214,12 @@ dependencies = [
"thiserror",
]
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
[[package]]
name = "indexmap"
version = "1.9.3"
@@ -983,7 +1238,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad227c3af19d4914570ad36d30409928b75967c298feb9ea1969db3a610bb14e"
dependencies = [
"equivalent",
- "hashbrown 0.14.0",
+ "hashbrown 0.14.3",
]
[[package]]
@@ -1015,6 +1270,12 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "inventory"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767"
+
[[package]]
name = "io-lifetimes"
version = "1.0.11"
@@ -1023,7 +1284,18 @@ checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
dependencies = [
"hermit-abi 0.3.2",
"libc",
- "windows-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -1055,6 +1327,15 @@ dependencies = [
"waker-fn",
]
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
[[package]]
name = "itoa"
version = "1.0.9"
@@ -1099,6 +1380,37 @@ dependencies = [
"libc",
]
+[[package]]
+name = "lalrpop"
+version = "0.19.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b"
+dependencies = [
+ "ascii-canvas",
+ "bit-set",
+ "diff",
+ "ena",
+ "is-terminal",
+ "itertools",
+ "lalrpop-util",
+ "petgraph",
+ "regex",
+ "regex-syntax 0.6.29",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.19.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed"
+dependencies = [
+ "regex",
+]
+
[[package]]
name = "lazy_static"
version = "1.4.0"
@@ -1185,12 +1497,58 @@ version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
[[package]]
name = "log"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+[[package]]
+name = "logos"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf8b031682c67a8e3d5446840f9573eb7fe26efe7ec8d195c9ac4c0647c502f1"
+dependencies = [
+ "logos-derive",
+]
+
+[[package]]
+name = "logos-derive"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d849148dbaf9661a6151d1ca82b13bb4c4c128146a88d05253b38d4e2f496c"
+dependencies = [
+ "beef",
+ "fnv",
+ "proc-macro2",
+ "quote",
+ "regex-syntax 0.6.29",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "lsp-types"
+version = "0.94.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1"
+dependencies = [
+ "bitflags 1.3.2",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "url",
+]
+
[[package]]
name = "mac-notification-sys"
version = "0.6.1"
@@ -1241,6 +1599,12 @@ dependencies = [
"libc",
]
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
[[package]]
name = "meli"
version = "0.8.5-rc.3"
@@ -1255,7 +1619,7 @@ dependencies = [
"libz-sys",
"linkify",
"melib",
- "nix",
+ "nix 0.27.1",
"notify-rust",
"pcre2",
"proc-macro2",
@@ -1267,6 +1631,7 @@ dependencies = [
"signal-hook",
"signal-hook-registry",
"smallvec",
+ "starlark",
"structopt",
"svg",
"syn 1.0.109",
@@ -1296,7 +1661,7 @@ dependencies = [
"log",
"mailin-embedded",
"native-tls",
- "nix",
+ "nix 0.27.1",
"nom",
"notify",
"polling",
@@ -1322,6 +1687,15 @@ version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76fc44e2588d5b436dbc3c6cf62aef290f90dab6235744a93dfe1cc18f451e2c"
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
[[package]]
name = "memoffset"
version = "0.9.0"
@@ -1361,7 +1735,7 @@ dependencies = [
"libc",
"log",
"wasi",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1382,6 +1756,32 @@ dependencies = [
"tempfile",
]
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+]
+
[[package]]
name = "nix"
version = "0.27.1"
@@ -1391,7 +1791,7 @@ dependencies = [
"bitflags 2.4.0",
"cfg-if",
"libc",
- "memoffset",
+ "memoffset 0.9.0",
]
[[package]]
@@ -1420,7 +1820,7 @@ dependencies = [
"log",
"mio",
"walkdir",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1435,6 +1835,26 @@ dependencies = [
"tauri-winrt-notification",
]
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.46"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
+dependencies = [
+ "num-traits",
+]
+
[[package]]
name = "num-traits"
version = "0.2.16"
@@ -1508,7 +1928,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
]
[[package]]
@@ -1545,6 +1965,35 @@ version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
[[package]]
name = "pcre2"
version = "0.2.4"
@@ -1574,6 +2023,25 @@ version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.0.1",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
[[package]]
name = "pin-project"
version = "1.1.3"
@@ -1591,7 +2059,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
]
[[package]]
@@ -1625,9 +2093,15 @@ dependencies = [
"libc",
"log",
"pin-project-lite",
- "windows-sys",
+ "windows-sys 0.48.0",
]
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
[[package]]
name = "proc-macro-error"
version = "1.0.4"
@@ -1654,9 +2128,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.66"
+version = "1.0.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
dependencies = [
"unicode-ident",
]
@@ -1672,13 +2146,23 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.33"
+version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [
"proc-macro2",
]
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+]
+
[[package]]
name = "redox_syscall"
version = "0.2.16"
@@ -1697,6 +2181,15 @@ dependencies = [
"bitflags 1.3.2",
]
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
[[package]]
name = "redox_termios"
version = "0.1.2"
@@ -1726,7 +2219,7 @@ dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
- "regex-syntax",
+ "regex-syntax 0.7.5",
]
[[package]]
@@ -1737,9 +2230,15 @@ checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax",
+ "regex-syntax 0.7.5",
]
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
[[package]]
name = "regex-syntax"
version = "0.7.5"
@@ -1781,6 +2280,15 @@ dependencies = [
"uuid",
]
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
[[package]]
name = "rustix"
version = "0.37.23"
@@ -1792,7 +2300,7 @@ dependencies = [
"io-lifetimes",
"libc",
"linux-raw-sys 0.3.8",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1805,7 +2313,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys 0.4.5",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1829,6 +2337,35 @@ dependencies = [
"base64 0.21.3",
]
+[[package]]
+name = "rustversion"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47"
+
+[[package]]
+name = "rustyline"
+version = "11.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dfc8644681285d1fb67a467fb3021bfea306b99b4146b166a1fe3ada965eece"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "clipboard-win",
+ "dirs-next",
+ "fd-lock",
+ "libc",
+ "log",
+ "memchr",
+ "nix 0.26.4",
+ "radix_trie",
+ "scopeguard",
+ "unicode-segmentation",
+ "unicode-width",
+ "utf8parse",
+ "winapi",
+]
+
[[package]]
name = "ryu"
version = "1.0.15"
@@ -1850,7 +2387,49 @@ version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
dependencies = [
- "windows-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "schemafy"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8aea5ba40287dae331f2c48b64dbc8138541f5e97ee8793caa7948c1f31d86d5"
+dependencies = [
+ "Inflector",
+ "schemafy_core",
+ "schemafy_lib",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_repr",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "schemafy_core"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41781ae092f4fd52c9287efb74456aea0d3b90032d2ecad272bd14dbbcb0511b"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemafy_lib"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e953db32579999ca98c451d80801b6f6a7ecba6127196c5387ec0774c528befa"
+dependencies = [
+ "Inflector",
+ "proc-macro2",
+ "quote",
+ "schemafy_core",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "syn 1.0.109",
]
[[package]]
@@ -1898,6 +2477,12 @@ dependencies = [
"libc",
]
+[[package]]
+name = "semver"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
+
[[package]]
name = "serde"
version = "1.0.188"
@@ -1915,7 +2500,7 @@ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
]
[[package]]
@@ -1939,6 +2524,17 @@ dependencies = [
"serde",
]
+[[package]]
+name = "serde_repr"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.60",
+]
+
[[package]]
name = "serde_spanned"
version = "0.6.5"
@@ -1973,6 +2569,12 @@ dependencies = [
"libc",
]
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
[[package]]
name = "slab"
version = "0.4.9"
@@ -2036,7 +2638,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
dependencies = [
"libc",
- "windows-sys",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -2045,6 +2647,101 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+[[package]]
+name = "starlark"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "419b088f6fe8393b8b2525d57f32e240ff07ab49e39f0afe3c8a5372bb94a823"
+dependencies = [
+ "allocative",
+ "anyhow",
+ "bumpalo",
+ "cmp_any",
+ "debugserver-types",
+ "derivative",
+ "derive_more",
+ "display_container",
+ "dupe",
+ "either",
+ "erased-serde",
+ "hashbrown 0.14.3",
+ "inventory",
+ "itertools",
+ "maplit",
+ "memoffset 0.6.5",
+ "num-bigint",
+ "num-traits",
+ "once_cell",
+ "paste",
+ "regex",
+ "rustyline",
+ "serde",
+ "serde_json",
+ "starlark_derive",
+ "starlark_map",
+ "starlark_syntax",
+ "static_assertions",
+ "strsim",
+ "textwrap",
+ "thiserror",
+]
+
+[[package]]
+name = "starlark_derive"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee8407ca86174f600acfc8b7e0576058bb866a19521b92f9590fa2bcf1c8c807"
+dependencies = [
+ "dupe",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.60",
+]
+
+[[package]]
+name = "starlark_map"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e03678553f5f0ce473a7a9064fc7bf2c1fa5013eb605c95d09896e3eacbacc5"
+dependencies = [
+ "allocative",
+ "dupe",
+ "equivalent",
+ "fxhash",
+ "hashbrown 0.14.3",
+ "serde",
+]
+
+[[package]]
+name = "starlark_syntax"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ae4c126dbc9702fae89fb2460f06b0f562e7de1351ab545591a27e9528afa2f"
+dependencies = [
+ "allocative",
+ "annotate-snippets",
+ "anyhow",
+ "derivative",
+ "derive_more",
+ "dupe",
+ "lalrpop",
+ "lalrpop-util",
+ "logos",
+ "lsp-types",
+ "memchr",
+ "num-bigint",
+ "num-traits",
+ "once_cell",
+ "starlark_map",
+ "thiserror",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
[[package]]
name = "stderrlog"
version = "0.5.4"
@@ -2058,6 +2755,31 @@ dependencies = [
"thread_local",
]
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
[[package]]
name = "structopt"
version = "0.3.26"
@@ -2101,9 +2823,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.29"
+version = "2.0.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
+checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
dependencies = [
"proc-macro2",
"quote",
@@ -2130,7 +2852,18 @@ dependencies = [
"fastrand 2.0.0",
"redox_syscall 0.3.5",
"rustix 0.38.9",
- "windows-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
]
[[package]]
@@ -2186,7 +2919,7 @@ checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
]
[[package]]
@@ -2227,6 +2960,15 @@ dependencies = [
"time-core",
]
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
[[package]]
name = "tinyvec"
version = "1.6.0"
@@ -2298,7 +3040,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
]
[[package]]
@@ -2353,6 +3095,12 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
[[package]]
name = "untrusted"
version = "0.7.1"
@@ -2371,6 +3119,12 @@ dependencies = [
"serde",
]
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
[[package]]
name = "uuid"
version = "1.4.1"
@@ -2437,7 +3191,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
"wasm-bindgen-shared",
]
@@ -2459,7 +3213,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -2540,7 +3294,7 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
dependencies = [
- "windows-targets",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -2549,7 +3303,16 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "windows-targets",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.5",
]
[[package]]
@@ -2558,21 +3321,43 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
- "windows_aarch64_gnullvm",
+ "windows_aarch64_gnullvm 0.48.5",
"windows_aarch64_msvc 0.48.5",
"windows_i686_gnu 0.48.5",
"windows_i686_msvc 0.48.5",
"windows_x86_64_gnu 0.48.5",
- "windows_x86_64_gnullvm",
+ "windows_x86_64_gnullvm 0.48.5",
"windows_x86_64_msvc 0.48.5",
]
+[[package]]
+name = "windows-targets"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.5",
+ "windows_aarch64_msvc 0.52.5",
+ "windows_i686_gnu 0.52.5",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.5",
+ "windows_x86_64_gnu 0.52.5",
+ "windows_x86_64_gnullvm 0.52.5",
+ "windows_x86_64_msvc 0.52.5",
+]
+
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
+
[[package]]
name = "windows_aarch64_msvc"
version = "0.39.0"
@@ -2585,6 +3370,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
+
[[package]]
name = "windows_i686_gnu"
version = "0.39.0"
@@ -2597,6 +3388,18 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
+
[[package]]
name = "windows_i686_msvc"
version = "0.39.0"
@@ -2609,6 +3412,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.39.0"
@@ -2621,12 +3430,24 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
+
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
+
[[package]]
name = "windows_x86_64_msvc"
version = "0.39.0"
@@ -2639,6 +3460,12 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
+
[[package]]
name = "winnow"
version = "0.5.30"
@@ -2656,20 +3483,20 @@ checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
[[package]]
name = "zerocopy"
-version = "0.7.3"
+version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a7af71d8643341260a65f89fa60c0eeaa907f34544d8f6d9b0df72f069b5e74"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.7.3"
+version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9731702e2f0617ad526794ae28fbc6f6ca8849b5ba729666c2a5bc4b6ddee2cd"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.60",
]
diff --git a/meli/Cargo.toml b/meli/Cargo.toml
index 7fcd1b04..f7d00551 100644
--- a/meli/Cargo.toml
+++ b/meli/Cargo.toml
@@ -39,6 +39,7 @@ serde_json = "1.0"
signal-hook = { version = "^0.3", default-features = false, features = ["iterator"] }
signal-hook-registry = { version = "1.2.0", default-features = false }
smallvec = { version = "^1.5.0", features = ["serde"] }
+starlark = { version = "0.12.0", optional = true }
structopt = { version = "0.3.14", default-features = false }
svg_crate = { version = "^0.13", optional = true, package = "svg" }
termion = { version = "1.5.1", default-features = false }
@@ -52,7 +53,7 @@ version = "0.2.3"
optional = true
[features]
-default = ["sqlite3", "notmuch", "smtp", "dbus-notifications", "gpgme", "cli-docs", "jmap", "static"]
+default = ["sqlite3", "notmuch", "smtp", "dbus-notifications", "gpgme", "cli-docs", "jmap", "static", "plugins"]
notmuch = ["melib/notmuch"]
jmap = ["melib/jmap"]
sqlite3 = ["melib/sqlite3"]
@@ -69,6 +70,7 @@ http-static = ["melib/http-static"]
sqlite3-static = ["melib/sqlite3-static"]
dbus-static = ["dep:notify-rust", "notify-rust?/d_vendored"]
libz-static = ["dep:libz-sys", "libz-sys?/static"]
+plugins = ["dep:starlark"]
static = ["tls-static", "http-static", "sqlite3-static", "dbus-static", "libz-static"]
# Print tracing logs as meli runs in stderr
diff --git a/meli/src/lib.rs b/meli/src/lib.rs
index ecad2f69..696b1c37 100644
--- a/meli/src/lib.rs
+++ b/meli/src/lib.rs
@@ -139,6 +139,9 @@ pub mod notifications;
pub mod mailbox_management;
pub use mailbox_management::*;
+#[cfg(feature = "plugins")]
+pub mod plugins;
+
pub mod jobs_view;
pub use jobs_view::*;
diff --git a/meli/src/plugins.rs b/meli/src/plugins.rs
index 103df5b0..3b0f48e7 100644
--- a/meli/src/plugins.rs
+++ b/meli/src/plugins.rs
@@ -19,6 +19,11 @@
* along with meli. If not, see .
*/
+//! Plugins.
+
+mod starlark;
+
+/*
//! Plugins are executed by meli and communication is done by `messagepack` IPC.
use melib::error::{Error, Result};
@@ -301,3 +306,4 @@ pub enum FilterResult {
Binary(Vec),
Error(String),
}
+*/
diff --git a/meli/src/plugins/starlark.rs b/meli/src/plugins/starlark.rs
new file mode 100644
index 00000000..b53e4e94
--- /dev/null
+++ b/meli/src/plugins/starlark.rs
@@ -0,0 +1,411 @@
+/*
+ * ____
+ *
+ * Copyright ____ Manos Pitsidianakis
+ *
+ * This file is part of ____.
+ *
+ * ____ is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * ____ is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with ____. If not, see .
+ */
+
+#[cfg(test)]
+#[test]
+fn test_starlark() {
+ use starlark::{
+ environment::{Globals, Module},
+ eval::Evaluator,
+ syntax::{AstModule, Dialect},
+ values::Value,
+ };
+ let content = r#"
+def hello():
+ return "hello"
+hello() + " world!"
+"#;
+
+ // We first parse the content, giving a filename and the Starlark
+ // `Dialect` we'd like to use (we pick standard).
+ let ast: AstModule =
+ AstModule::parse("hello_world.star", content.to_owned(), &Dialect::Standard).unwrap();
+
+ // We create a `Globals`, defining the standard library functions available.
+ // The `standard` function uses those defined in the Starlark specification.
+ let globals: Globals = Globals::standard();
+
+ // We create a `Module`, which stores the global variables for our calculation.
+ let module: Module = Module::new();
+
+ // We create an evaluator, which controls how evaluation occurs.
+ let mut eval: Evaluator = Evaluator::new(&module);
+
+ // And finally we evaluate the code using the evaluator.
+ let res: Value = eval.eval_module(ast, &globals).unwrap();
+ assert_eq!(res.unpack_str(), Some("hello world!"));
+}
+
+#[cfg(test)]
+#[test]
+fn test_starlark_2() {
+ use starlark::{
+ environment::{GlobalsBuilder, Module},
+ eval::Evaluator,
+ starlark_module,
+ syntax::{AstModule, Dialect},
+ };
+
+ // This defines the function that is visible to Starlark
+ #[starlark_module]
+ fn starlark_quadratic(builder: &mut GlobalsBuilder) {
+ fn quadratic(a: i32, b: i32, c: i32, x: i32) -> starlark::Result {
+ Ok(a * x * x + b * x + c)
+ }
+ }
+
+ // We build our globals to make the function available in Starlark
+ let globals = GlobalsBuilder::new().with(starlark_quadratic).build();
+ let module = Module::new();
+ let mut eval = Evaluator::new(&module);
+
+ // Let's test calling the function from Starlark code
+ let starlark_code = r#"
+quadratic(4, 2, 1, x = 8)
+"#;
+
+ let ast = AstModule::parse(
+ "quadratic.star",
+ starlark_code.to_owned(),
+ &Dialect::Standard,
+ )
+ .unwrap();
+ let res = eval.eval_module(ast, &globals).unwrap();
+ assert_eq!(res.unpack_i32(), Some(273)); // Verify that we got an `int`
+ // return value of 4 * 8^2 + 2 * 8
+ // + 1 = 273
+}
+
+#[cfg(test)]
+#[test]
+fn test_starlark_3() {
+ use std::cell::RefCell;
+
+ use starlark::{
+ any::ProvidesStaticType,
+ environment::{GlobalsBuilder, Module},
+ eval::Evaluator,
+ starlark_module,
+ syntax::{AstModule, Dialect},
+ values::{none::NoneType, Value},
+ };
+
+ let content = r#"
+emit(1)
+emit(["test"])
+emit({"x": "y"})
+"#;
+
+ // Define a store in which to accumulate JSON strings
+ #[derive(Debug, ProvidesStaticType, Default)]
+ struct Store(RefCell>);
+
+ impl Store {
+ fn add(&self, x: String) {
+ self.0.borrow_mut().push(x)
+ }
+ }
+
+ #[starlark_module]
+ fn starlark_emit(builder: &mut GlobalsBuilder) {
+ fn emit(x: Value, eval: &mut Evaluator) -> starlark::Result {
+ // We modify extra (which we know is a Store) and add the JSON of the
+ // value the user gave.
+ eval.extra
+ .unwrap()
+ .downcast_ref::()
+ .unwrap()
+ .add(x.to_json()?);
+ Ok(NoneType)
+ }
+ }
+
+ let ast = AstModule::parse("json.star", content.to_owned(), &Dialect::Standard).unwrap();
+ // We build our globals adding some functions we wrote
+ let globals = GlobalsBuilder::new().with(starlark_emit).build();
+ let module = Module::new();
+ let store = Store::default();
+ {
+ let mut eval = Evaluator::new(&module);
+ // We add a reference to our store
+ eval.extra = Some(&store);
+ eval.eval_module(ast, &globals).unwrap();
+ }
+ assert_eq!(&*store.0.borrow(), &["1", "[\"test\"]", "{\"x\":\"y\"}"]);
+}
+
+#[cfg(test)]
+#[test]
+fn test_starlark_4() {
+ use starlark::{
+ environment::{Globals, Module},
+ eval::Evaluator,
+ syntax::{AstModule, Dialect, DialectTypes},
+ };
+
+ let content = r#"
+def takes_int(x: int):
+ pass
+takes_int("test")
+"#;
+
+ // Make the dialect enable types
+ let dialect = Dialect {
+ enable_types: DialectTypes::Enable,
+ ..Dialect::Standard
+ };
+ // We could equally have done `dialect = Dialect::Extended`.
+ let ast = AstModule::parse("json.star", content.to_owned(), &dialect).unwrap();
+ let globals = Globals::standard();
+ let module = Module::new();
+ let mut eval = Evaluator::new(&module);
+ let res = eval.eval_module(ast, &globals);
+ // We expect this to fail, since it is a type violation
+ assert!(res
+ .unwrap_err()
+ .to_string()
+ .contains("Value `test` of type `string` does not match the type annotation `int`"));
+}
+
+#[cfg(test)]
+#[test]
+fn test_starlark_5() {
+ use starlark::{
+ environment::{FrozenModule, Globals, Module},
+ eval::{Evaluator, ReturnFileLoader},
+ syntax::{AstModule, Dialect},
+ };
+
+ // Get the file contents (for the demo), in reality use `AstModule::parse_file`.
+ fn get_source(file: &str) -> &str {
+ match file {
+ "a.star" => "a = 7",
+ "b.star" => "b = 6",
+ _ => {
+ r#"
+load('a.star', 'a')
+load('b.star', 'b')
+ab = a * b
+"#
+ }
+ }
+ }
+
+ fn get_module(file: &str) -> starlark::Result {
+ let ast = AstModule::parse(file, get_source(file).to_owned(), &Dialect::Standard)?;
+
+ // We can get the loaded modules from `ast.loads`.
+ // And ultimately produce a `loader` capable of giving those modules to
+ // Starlark.
+ let mut loads = Vec::new();
+ for load in ast.loads() {
+ loads.push((load.module_id.to_owned(), get_module(load.module_id)?));
+ }
+ let modules = loads.iter().map(|(a, b)| (a.as_str(), b)).collect();
+ let mut loader = ReturnFileLoader { modules: &modules };
+
+ let globals = Globals::standard();
+ let module = Module::new();
+ {
+ let mut eval = Evaluator::new(&module);
+ eval.set_loader(&mut loader);
+ eval.eval_module(ast, &globals)?;
+ }
+ // After creating a module we freeze it, preventing further mutation.
+ // It can now be used as the input for other Starlark modules.
+ Ok(module.freeze()?)
+ }
+
+ let ab = get_module("ab.star").unwrap();
+ assert_eq!(ab.get("ab").unwrap().unpack_i32(), Some(42));
+}
+
+#[cfg(test)]
+#[test]
+fn test_starlark_6() {
+ use starlark::{
+ environment::{Globals, Module},
+ eval::Evaluator,
+ syntax::{AstModule, Dialect},
+ };
+
+ let content = r#"
+def quadratic(a, b, c, x):
+ return a*x*x + b*x + c
+quadratic
+"#;
+
+ let ast = AstModule::parse("quadratic.star", content.to_owned(), &Dialect::Extended).unwrap();
+ let globals = Globals::standard();
+ let module = Module::new();
+ let mut eval = Evaluator::new(&module);
+ let quad = eval.eval_module(ast, &globals).unwrap();
+ let heap = module.heap();
+ let res = eval
+ .eval_function(
+ quad,
+ &[heap.alloc(4), heap.alloc(2), heap.alloc(1)],
+ &[("x", heap.alloc(8))],
+ )
+ .unwrap();
+ assert_eq!(res.unpack_i32(), Some(273));
+}
+
+#[cfg(test)]
+#[test]
+fn test_starlark_datetime_fmt() {
+ use starlark::{
+ environment::{GlobalsBuilder, Module},
+ eval::Evaluator,
+ starlark_module,
+ syntax::{AstModule, Dialect},
+ values::Value,
+ };
+
+ let content = r#"
+def datetime_fmt():
+ now_val = now()
+ print("now returned ", now_val)
+ n = since(now_val)
+ print("since returned ", n)
+ if n < 60 * 60:
+ return "{} minute{} ago".format((n / (60)), ("" if n / 60 == 1 else "s"))
+ elif n < 24 * 60 * 60:
+ return "{} hour{} ago".format( n / (60 * 60), "" if n / (60 * 60) == 1 else "s")
+ elif n < 7 * 24 * 60 * 60:
+ return "{} day{} ago".format( n / (24 * 60 * 60), "" if n / (24 * 60 * 60) == 1 else "s")
+ else:
+ return "{}".format(n)
+datetime_fmt
+"#;
+
+ // This defines the function that is visible to Starlark
+ #[starlark_module]
+ fn starlark_datetime_fmt(builder: &mut GlobalsBuilder) {
+ fn print(s: Value, val: u64) -> starlark::Result {
+ let ss: &str = s.unpack_str().unwrap_or("");
+ println!("{ss}{val}");
+ Ok(1)
+ }
+
+ fn now() -> starlark::Result {
+ let d = std::time::UNIX_EPOCH;
+ let now: std::time::Duration = std::time::SystemTime::now().duration_since(d).unwrap();
+ Ok(now.as_secs())
+ }
+
+ fn since(epoch: u64) -> starlark::Result {
+ let d = std::time::UNIX_EPOCH + std::time::Duration::from_secs(epoch);
+ let now: std::time::Duration = std::time::SystemTime::now()
+ .duration_since(d)
+ .unwrap_or_else(|_| std::time::Duration::new(std::u64::MAX, 0));
+ Ok(now.as_secs())
+ }
+ }
+
+ let ast =
+ AstModule::parse("datetime_fmt.star", content.to_owned(), &Dialect::Extended).unwrap();
+ let globals = GlobalsBuilder::new().with(starlark_datetime_fmt).build();
+ let module = Module::new();
+ let mut eval = Evaluator::new(&module);
+ let quad = eval.eval_module(ast, &globals).unwrap();
+ let res = eval.eval_function(quad, &[], &[]).unwrap();
+ assert_eq!(
+ res.unpack_str(),
+ Some("0.0 minutes ago".to_string()).as_deref()
+ );
+}
+
+#[cfg(test)]
+#[test]
+fn test_starlark_7() {
+ /*
+ use starlark::starlark_module;
+ use std::fmt::Display;
+ use std::fmt::Write;
+ use std::fmt::{self};
+
+ use allocative::Allocative;
+ use starlark::environment::Globals;
+ use starlark::environment::Module;
+ use starlark::eval::Evaluator;
+ use starlark::starlark_simple_value;
+ use starlark::syntax::AstModule;
+ use starlark::syntax::Dialect;
+ use starlark::values::Heap;
+ use starlark::values::NoSerialize;
+ use starlark::values::ProvidesStaticType;
+ use starlark::values::StarlarkValue;
+ use starlark::values::Value;
+ use starlark::values::ValueError;
+ use starlark::values::ValueLike;
+ use starlark_derive::starlark_value;
+
+ // Define complex numbers
+ #[derive(Debug, PartialEq, Eq, ProvidesStaticType, NoSerialize, Allocative)]
+ struct Complex {
+ real: i32,
+ imaginary: i32,
+ }
+ starlark_simple_value!(Complex);
+
+ impl Display for Complex {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "{} + {}i", self.real, self.imaginary)
+ }
+ }
+
+ #[starlark_value(type = "complex")]
+ impl<'v> StarlarkValue<'v> for Complex {
+ // How we add them
+ fn add(&self, rhs: Value<'v>, heap: &'v Heap) -> Option>> {
+ if let Some(rhs) = rhs.downcast_ref::() {
+ Some(Ok(heap.alloc(Complex {
+ real: self.real + rhs.real,
+ imaginary: self.imaginary + rhs.imaginary,
+ })))
+ } else {
+ None
+ }
+ }
+ }
+
+ let content = "str(a + b)";
+
+ let ast = AstModule::parse("complex.star", content.to_owned(), &Dialect::Standard).unwrap();
+ let globals = Globals::standard();
+ let module = Module::new();
+ // We inject some complex numbers into the module before we start.
+ let a = module.heap().alloc(Complex {
+ real: 1,
+ imaginary: 8,
+ });
+ module.set("a", a);
+ let b = module.heap().alloc(Complex {
+ real: 4,
+ imaginary: 2,
+ });
+ module.set("b", b);
+ let mut eval = Evaluator::new(&module);
+ let res = eval.eval_module(ast, &globals).unwrap();
+ assert_eq!(res.unpack_str(), Some("5 + 10i"));
+ */
+}