Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #20796 from ChayimFriedman2/bump-salsa
internal: Bump Salsa
David Barsky 7 months ago
parent faa1184 · parent c6ef51e · commit 7e9be34
-rw-r--r--Cargo.lock469
-rw-r--r--Cargo.toml4
-rw-r--r--crates/cfg/Cargo.toml6
-rw-r--r--crates/cfg/src/cfg_expr.rs2
-rw-r--r--crates/hir-def/src/test_db.rs5
-rw-r--r--crates/hir-ty/src/consteval/tests.rs10
-rw-r--r--crates/hir-ty/src/dyn_compatibility/tests.rs2
-rw-r--r--crates/hir-ty/src/infer/cast.rs2
-rw-r--r--crates/hir-ty/src/layout.rs2
-rw-r--r--crates/hir-ty/src/layout/tests.rs53
-rw-r--r--crates/hir-ty/src/lib.rs1
-rw-r--r--crates/hir-ty/src/mir/eval/tests.rs8
-rw-r--r--crates/hir-ty/src/mir/lower/tests.rs33
-rw-r--r--crates/hir-ty/src/next_solver/consts.rs9
-rw-r--r--crates/hir-ty/src/next_solver/interner.rs153
-rw-r--r--crates/hir-ty/src/next_solver/ir_print.rs44
-rw-r--r--crates/hir-ty/src/next_solver/opaques.rs6
-rw-r--r--crates/hir-ty/src/next_solver/predicate.rs6
-rw-r--r--crates/hir-ty/src/next_solver/region.rs3
-rw-r--r--crates/hir-ty/src/next_solver/ty.rs3
-rw-r--r--crates/hir-ty/src/next_solver/util.rs2
-rw-r--r--crates/hir-ty/src/test_db.rs5
-rw-r--r--crates/hir-ty/src/tests.rs46
-rw-r--r--crates/hir-ty/src/tests/closure_captures.rs180
-rw-r--r--crates/hir-ty/src/tests/incremental.rs4
-rw-r--r--crates/hir-ty/src/variance.rs158
-rw-r--r--crates/hir/src/lib.rs2
-rw-r--r--crates/hir/src/source_analyzer.rs3
-rw-r--r--crates/ide-assists/src/tests.rs6
-rw-r--r--crates/ide-completion/src/context/analysis.rs3
-rw-r--r--crates/ide-completion/src/context/tests.rs5
-rw-r--r--crates/ide-completion/src/tests.rs6
-rw-r--r--crates/ide-completion/src/tests/flyimport.rs3
-rw-r--r--crates/ide-db/src/symbol_index.rs4
-rw-r--r--crates/ide-db/src/syntax_helpers/suggest_name.rs2
-rw-r--r--crates/ide-diagnostics/src/tests.rs14
-rw-r--r--crates/ide-ssr/src/matching.rs4
-rw-r--r--crates/ide-ssr/src/resolving.rs4
-rw-r--r--crates/ide-ssr/src/tests.rs11
-rw-r--r--crates/ide/src/doc_links/tests.rs5
-rw-r--r--crates/ide/src/inlay_hints.rs8
-rw-r--r--crates/ide/src/inlay_hints/adjustment.rs4
-rw-r--r--crates/ide/src/lib.rs6
-rw-r--r--crates/ide/src/navigation_target.rs6
-rw-r--r--crates/ide/src/runnables.rs6
-rw-r--r--crates/ide/src/signature_help.rs7
-rw-r--r--crates/ide/src/static_index.rs6
-rw-r--r--crates/ide/src/syntax_highlighting.rs8
-rw-r--r--crates/ide/src/syntax_highlighting/inject.rs6
-rw-r--r--crates/ide/src/view_memory_layout.rs3
-rw-r--r--crates/query-group-macro/src/queries.rs3
-rw-r--r--crates/rust-analyzer/src/cli/analysis_stats.rs7
-rw-r--r--crates/span/src/hygiene.rs97
53 files changed, 771 insertions, 684 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 5a0d209602..8e2c371bce 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -31,15 +31,15 @@ checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd"
[[package]]
name = "anyhow"
-version = "1.0.98"
+version = "1.0.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
+checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
[[package]]
name = "arbitrary"
-version = "1.4.1"
+version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223"
+checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
dependencies = [
"derive_arbitrary",
]
@@ -61,9 +61,9 @@ dependencies = [
[[package]]
name = "autocfg"
-version = "1.4.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "backtrace"
@@ -115,9 +115,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.9.1"
+version = "2.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
+checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
[[package]]
name = "borsh"
@@ -130,9 +130,9 @@ dependencies = [
[[package]]
name = "boxcar"
-version = "0.2.13"
+version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26c4925bc979b677330a8c7fe7a8c94af2dbb4a2d37b4a20a80d884400f46baa"
+checksum = "36f64beae40a84da1b4b26ff2761a5b895c12adc41dc25aaee1c4f2bbfe97a6e"
[[package]]
name = "byteorder"
@@ -142,11 +142,11 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "camino"
-version = "1.1.10"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab"
+checksum = "e1de8bc0aa9e9385ceb3bf0c152e3a9b9544f6c4a912c8ae504e80c1f0368603"
dependencies = [
- "serde",
+ "serde_core",
]
[[package]]
@@ -184,7 +184,7 @@ dependencies = [
"serde",
"serde-untagged",
"serde-value",
- "thiserror 2.0.12",
+ "thiserror 2.0.16",
"toml",
"unicode-xid",
"url",
@@ -202,7 +202,7 @@ dependencies = [
"semver",
"serde",
"serde_json",
- "thiserror 2.0.12",
+ "thiserror 2.0.16",
]
[[package]]
@@ -217,15 +217,16 @@ dependencies = [
"semver",
"serde",
"serde_json",
- "thiserror 2.0.12",
+ "thiserror 2.0.16",
]
[[package]]
name = "cc"
-version = "1.2.26"
+version = "1.2.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "956a5e21988b87f372569b66183b78babf23ebc2e744b733e4350a752c4dafac"
+checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9"
dependencies = [
+ "find-msvc-tools",
"shlex",
]
@@ -234,7 +235,6 @@ name = "cfg"
version = "0.0.0"
dependencies = [
"arbitrary",
- "derive_arbitrary",
"expect-test",
"intern",
"oorandom",
@@ -247,9 +247,9 @@ dependencies = [
[[package]]
name = "cfg-if"
-version = "1.0.1"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
+checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
[[package]]
name = "cfg_aliases"
@@ -275,24 +275,24 @@ version = "0.104.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7047a516de16226cd17344d41a319d0ea1064bf9e60bd612ab341ab4a34bbfa8"
dependencies = [
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"chalk-derive",
]
[[package]]
name = "clap"
-version = "4.5.42"
+version = "4.5.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882"
+checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae"
dependencies = [
"clap_builder",
]
[[package]]
name = "clap_builder"
-version = "4.5.42"
+version = "4.5.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966"
+checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9"
dependencies = [
"anstyle",
"clap_lex",
@@ -310,7 +310,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1"
dependencies = [
- "thiserror 2.0.12",
+ "thiserror 2.0.16",
]
[[package]]
@@ -321,15 +321,15 @@ checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636"
[[package]]
name = "cov-mark"
-version = "2.0.0"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0570650661aa447e7335f1d5e4f499d8e58796e617bedc9267d971e51c8b49d4"
+checksum = "3f1d92727879fb4f24cec33a35e3bff74035541326cbc12ad44ba8886d1927b0"
[[package]]
name = "crc32fast"
-version = "1.4.2"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
+checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
dependencies = [
"cfg-if",
]
@@ -385,12 +385,13 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "ctrlc"
-version = "3.4.7"
+version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73"
+checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3"
dependencies = [
+ "dispatch",
"nix",
- "windows-sys 0.59.0",
+ "windows-sys 0.61.0",
]
[[package]]
@@ -409,18 +410,18 @@ dependencies = [
[[package]]
name = "deranged"
-version = "0.4.0"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
+checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc"
dependencies = [
"powerfmt",
]
[[package]]
name = "derive-where"
-version = "1.5.0"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "510c292c8cf384b1a340b816a9a6cf2599eb8f566a44949024af88418000c50b"
+checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f"
dependencies = [
"proc-macro2",
"quote",
@@ -429,9 +430,9 @@ dependencies = [
[[package]]
name = "derive_arbitrary"
-version = "1.4.1"
+version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800"
+checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
dependencies = [
"proc-macro2",
"quote",
@@ -456,10 +457,16 @@ dependencies = [
"libc",
"option-ext",
"redox_users",
- "windows-sys 0.60.2",
+ "windows-sys 0.61.0",
]
[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
name = "displaydoc"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -515,11 +522,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "erased-serde"
-version = "0.4.6"
+version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
+checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b"
dependencies = [
"serde",
+ "serde_core",
"typeid",
]
@@ -534,16 +542,10 @@ dependencies = [
]
[[package]]
-name = "filetime"
-version = "0.2.25"
+name = "find-msvc-tools"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
-dependencies = [
- "cfg-if",
- "libc",
- "libredox",
- "windows-sys 0.59.0",
-]
+checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959"
[[package]]
name = "fixedbitset"
@@ -569,9 +571,9 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
name = "form_urlencoded"
-version = "1.2.1"
+version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
dependencies = [
"percent-encoding",
]
@@ -625,9 +627,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]]
name = "hashbrown"
-version = "0.15.4"
+version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
"allocator-api2",
"equivalent",
@@ -635,12 +637,18 @@ dependencies = [
]
[[package]]
+name = "hashbrown"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
+
+[[package]]
name = "hashlink"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
dependencies = [
- "hashbrown 0.15.4",
+ "hashbrown 0.15.5",
]
[[package]]
@@ -700,7 +708,7 @@ version = "0.0.0"
dependencies = [
"arrayvec",
"base-db",
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"cfg",
"cov-mark",
"drop_bomb",
@@ -767,7 +775,7 @@ version = "0.0.0"
dependencies = [
"arrayvec",
"base-db",
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"chalk-derive",
"chalk-ir",
"cov-mark",
@@ -980,7 +988,7 @@ version = "0.0.0"
dependencies = [
"arrayvec",
"base-db",
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"cov-mark",
"crossbeam-channel",
"either",
@@ -1047,9 +1055,9 @@ dependencies = [
[[package]]
name = "idna"
-version = "1.0.3"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
dependencies = [
"idna_adapter",
"smallvec",
@@ -1068,13 +1076,14 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.9.0"
+version = "2.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
+checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
dependencies = [
"equivalent",
- "hashbrown 0.15.4",
+ "hashbrown 0.16.0",
"serde",
+ "serde_core",
]
[[package]]
@@ -1083,7 +1092,7 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3"
dependencies = [
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"inotify-sys",
"libc",
]
@@ -1117,6 +1126,15 @@ dependencies = [
]
[[package]]
+name = "inventory"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e"
+dependencies = [
+ "rustversion",
+]
+
+[[package]]
name = "itertools"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1175,25 +1193,25 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libc"
-version = "0.2.172"
+version = "0.2.175"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
+checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
[[package]]
name = "libloading"
-version = "0.8.8"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
+checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
dependencies = [
"cfg-if",
- "windows-targets 0.53.2",
+ "windows-link 0.2.0",
]
[[package]]
name = "libmimalloc-sys"
-version = "0.1.42"
+version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec9d6fac27761dabcd4ee73571cdb06b7022dc99089acbe5435691edffaac0f4"
+checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870"
dependencies = [
"cc",
"libc",
@@ -1201,13 +1219,12 @@ dependencies = [
[[package]]
name = "libredox"
-version = "0.1.3"
+version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
+checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
dependencies = [
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"libc",
- "redox_syscall",
]
[[package]]
@@ -1266,9 +1283,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.27"
+version = "0.4.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
+checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
[[package]]
name = "lsp-server"
@@ -1340,9 +1357,9 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
[[package]]
name = "memmap2"
-version = "0.9.5"
+version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f"
+checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7"
dependencies = [
"libc",
]
@@ -1358,9 +1375,9 @@ dependencies = [
[[package]]
name = "mimalloc"
-version = "0.1.46"
+version = "0.1.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "995942f432bbb4822a7e9c3faa87a695185b0d09273ba85f097b54f4e458f2af"
+checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8"
dependencies = [
"libmimalloc-sys",
]
@@ -1388,11 +1405,11 @@ dependencies = [
[[package]]
name = "miow"
-version = "0.6.0"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044"
+checksum = "536bfad37a309d62069485248eeaba1e8d9853aaf951caaeaed0585a95346f08"
dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.61.0",
]
[[package]]
@@ -1401,7 +1418,7 @@ version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
dependencies = [
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"cfg-if",
"cfg_aliases",
"libc",
@@ -1415,12 +1432,11 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
[[package]]
name = "notify"
-version = "8.0.0"
+version = "8.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943"
+checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3"
dependencies = [
- "bitflags 2.9.1",
- "filetime",
+ "bitflags 2.9.4",
"fsevent-sys",
"inotify",
"kqueue",
@@ -1429,7 +1445,7 @@ dependencies = [
"mio",
"notify-types",
"walkdir",
- "windows-sys 0.59.0",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -1518,16 +1534,6 @@ dependencies = [
]
[[package]]
-name = "papaya"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f92dd0b07c53a0a0c764db2ace8c541dc47320dad97c2200c2a637ab9dd2328f"
-dependencies = [
- "equivalent",
- "seize",
-]
-
-[[package]]
name = "parking_lot"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1578,9 +1584,9 @@ dependencies = [
[[package]]
name = "percent-encoding"
-version = "2.3.1"
+version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "perf-event"
@@ -1608,7 +1614,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54acf3a685220b533e437e264e4d932cfbdc4cc7ec0cd232ed73c08d03b8a7ca"
dependencies = [
"fixedbitset",
- "hashbrown 0.15.4",
+ "hashbrown 0.15.5",
"indexmap",
]
@@ -1637,9 +1643,9 @@ dependencies = [
[[package]]
name = "potential_utf"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
+checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
dependencies = [
"zerovec",
]
@@ -1706,9 +1712,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.95"
+version = "1.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
+checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
dependencies = [
"unicode-ident",
]
@@ -1788,7 +1794,7 @@ version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b"
dependencies = [
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"memchr",
"unicase",
]
@@ -1829,7 +1835,7 @@ version = "0.132.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597bb303548ddcca3a2eb05af254508aaf39cf334d4350bb5da51de1eb728859"
dependencies = [
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"ra-ap-rustc_hashes",
"ra-ap-rustc_index",
"tracing",
@@ -1925,7 +1931,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52e35ee9e052406035016b8e6d54ca202bc39ccba1702780b33b2d5fb10d1da8"
dependencies = [
"arrayvec",
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"derive-where",
"ena",
"indexmap",
@@ -1952,9 +1958,9 @@ dependencies = [
[[package]]
name = "rayon"
-version = "1.10.0"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
dependencies = [
"either",
"rayon-core",
@@ -1962,9 +1968,9 @@ dependencies = [
[[package]]
name = "rayon-core"
-version = "1.12.1"
+version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
dependencies = [
"crossbeam-deque",
"crossbeam-utils",
@@ -1972,22 +1978,22 @@ dependencies = [
[[package]]
name = "redox_syscall"
-version = "0.5.13"
+version = "0.5.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6"
+checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
dependencies = [
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
]
[[package]]
name = "redox_users"
-version = "0.5.0"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
+checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
dependencies = [
"getrandom",
"libredox",
- "thiserror 2.0.12",
+ "thiserror 2.0.16",
]
[[package]]
@@ -2071,9 +2077,9 @@ dependencies = [
[[package]]
name = "rustc-demangle"
-version = "0.1.25"
+version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f"
+checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
[[package]]
name = "rustc-hash"
@@ -2111,7 +2117,7 @@ version = "0.2.3+llvm-462a31f5a5ab"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "486c2179b4796f65bfe2ee33679acf0927ac83ecf583ad6c91c3b4570911b9ad"
dependencies = [
- "bitflags 2.9.1",
+ "bitflags 2.9.4",
"smallvec",
]
@@ -2125,6 +2131,12 @@ dependencies = [
]
[[package]]
+name = "rustversion"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+
+[[package]]
name = "ryu"
version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2132,18 +2144,18 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "salsa"
-version = "0.23.0"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e235afdb8e510f38a07138fbe5a0b64691894358a9c0cbd813b1aade110efc9"
+checksum = "27956164373aeec733ac24ff1736de8541234e3a8e7e6f916b28175b5752af3b"
dependencies = [
"boxcar",
"crossbeam-queue",
"crossbeam-utils",
- "hashbrown 0.15.4",
+ "hashbrown 0.15.5",
"hashlink",
"indexmap",
"intrusive-collections",
- "papaya",
+ "inventory",
"parking_lot",
"portable-atomic",
"rayon",
@@ -2157,15 +2169,15 @@ dependencies = [
[[package]]
name = "salsa-macro-rules"
-version = "0.23.0"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2edb86a7e9c91f6d30c9ce054312721dbe773a162db27bbfae834d16177b30ce"
+checksum = "6ca3b9d6e47c08b5de4b218e0c5f7ec910b51bce6314e651c8e7b9d154d174da"
[[package]]
name = "salsa-macros"
-version = "0.23.0"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0778d6e209051bc4e75acfe83bcd7848601ec3dbe9c3dbb982829020e9128af"
+checksum = "6337b62f2968be6b8afa30017d7564ecbde6832ada47ed2261fb14d0fd402ff4"
dependencies = [
"proc-macro2",
"quote",
@@ -2204,41 +2216,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
-name = "seize"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4b8d813387d566f627f3ea1b914c068aac94c40ae27ec43f5f33bde65abefe7"
-dependencies = [
- "libc",
- "windows-sys 0.52.0",
-]
-
-[[package]]
name = "semver"
-version = "1.0.26"
+version = "1.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
+checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
dependencies = [
"serde",
+ "serde_core",
]
[[package]]
name = "serde"
-version = "1.0.219"
+version = "1.0.226"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd"
dependencies = [
+ "serde_core",
"serde_derive",
]
[[package]]
name = "serde-untagged"
-version = "0.1.7"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e"
+checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
dependencies = [
"erased-serde",
"serde",
+ "serde_core",
"typeid",
]
@@ -2253,10 +2258,19 @@ dependencies = [
]
[[package]]
+name = "serde_core"
+version = "1.0.226"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
name = "serde_derive"
-version = "1.0.219"
+version = "1.0.226"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33"
dependencies = [
"proc-macro2",
"quote",
@@ -2265,15 +2279,16 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.140"
+version = "1.0.145"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
+checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
dependencies = [
"indexmap",
"itoa",
"memchr",
"ryu",
"serde",
+ "serde_core",
]
[[package]]
@@ -2373,9 +2388,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.103"
+version = "2.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8"
+checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
dependencies = [
"proc-macro2",
"quote",
@@ -2491,11 +2506,11 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "2.0.12"
+version = "2.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0"
dependencies = [
- "thiserror-impl 2.0.12",
+ "thiserror-impl 2.0.16",
]
[[package]]
@@ -2511,9 +2526,9 @@ dependencies = [
[[package]]
name = "thiserror-impl"
-version = "2.0.12"
+version = "2.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
+checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960"
dependencies = [
"proc-macro2",
"quote",
@@ -2562,9 +2577,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.41"
+version = "0.3.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
+checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
dependencies = [
"deranged",
"itoa",
@@ -2579,15 +2594,15 @@ dependencies = [
[[package]]
name = "time-core"
-version = "0.1.4"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
+checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
[[package]]
name = "time-macros"
-version = "0.2.22"
+version = "0.2.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
+checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
dependencies = [
"num-conv",
"time-core",
@@ -2665,9 +2680,9 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.29"
+version = "0.1.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662"
+checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
dependencies = [
"proc-macro2",
"quote",
@@ -2763,9 +2778,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
[[package]]
name = "unicode-ident"
-version = "1.0.18"
+version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
[[package]]
name = "unicode-properties"
@@ -2781,9 +2796,9 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "url"
-version = "2.5.4"
+version = "2.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
+checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
dependencies = [
"form_urlencoded",
"idna",
@@ -2850,11 +2865,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "winapi-util"
-version = "0.1.9"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
- "windows-sys 0.59.0",
+ "windows-sys 0.61.0",
]
[[package]]
@@ -2866,7 +2881,7 @@ dependencies = [
"windows-collections",
"windows-core",
"windows-future",
- "windows-link",
+ "windows-link 0.1.3",
"windows-numerics",
]
@@ -2887,7 +2902,7 @@ checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
dependencies = [
"windows-implement",
"windows-interface",
- "windows-link",
+ "windows-link 0.1.3",
"windows-result",
"windows-strings",
]
@@ -2899,7 +2914,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
dependencies = [
"windows-core",
- "windows-link",
+ "windows-link 0.1.3",
"windows-threading",
]
@@ -2932,13 +2947,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
[[package]]
+name = "windows-link"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65"
+
+[[package]]
name = "windows-numerics"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
dependencies = [
"windows-core",
- "windows-link",
+ "windows-link 0.1.3",
]
[[package]]
@@ -2947,7 +2968,7 @@ version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
dependencies = [
- "windows-link",
+ "windows-link 0.1.3",
]
[[package]]
@@ -2956,16 +2977,7 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
dependencies = [
- "windows-link",
-]
-
-[[package]]
-name = "windows-sys"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
-dependencies = [
- "windows-targets 0.48.5",
+ "windows-link 0.1.3",
]
[[package]]
@@ -2992,22 +3004,16 @@ version = "0.60.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
dependencies = [
- "windows-targets 0.53.2",
+ "windows-targets 0.53.3",
]
[[package]]
-name = "windows-targets"
-version = "0.48.5"
+name = "windows-sys"
+version = "0.61.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa"
dependencies = [
- "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 0.48.5",
- "windows_x86_64_msvc 0.48.5",
+ "windows-link 0.2.0",
]
[[package]]
@@ -3028,10 +3034,11 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.53.2"
+version = "0.53.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef"
+checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
dependencies = [
+ "windows-link 0.1.3",
"windows_aarch64_gnullvm 0.53.0",
"windows_aarch64_msvc 0.53.0",
"windows_i686_gnu 0.53.0",
@@ -3048,17 +3055,11 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
dependencies = [
- "windows-link",
+ "windows-link 0.1.3",
]
[[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.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
@@ -3071,12 +3072,6 @@ checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
-
-[[package]]
-name = "windows_aarch64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
@@ -3089,12 +3084,6 @@ checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
[[package]]
name = "windows_i686_gnu"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
-
-[[package]]
-name = "windows_i686_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
@@ -3119,12 +3108,6 @@ checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
[[package]]
name = "windows_i686_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
-
-[[package]]
-name = "windows_i686_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
@@ -3137,12 +3120,6 @@ checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
[[package]]
name = "windows_x86_64_gnu"
-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.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
@@ -3155,12 +3132,6 @@ checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
[[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.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
@@ -3173,12 +3144,6 @@ checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
[[package]]
name = "windows_x86_64_msvc"
-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.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
@@ -3191,9 +3156,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
[[package]]
name = "winnow"
-version = "0.7.11"
+version = "0.7.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd"
+checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
dependencies = [
"memchr",
]
@@ -3318,9 +3283,9 @@ dependencies = [
[[package]]
name = "zerovec"
-version = "0.11.2"
+version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
+checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
dependencies = [
"yoke",
"zerofrom",
@@ -3340,9 +3305,9 @@ dependencies = [
[[package]]
name = "zip"
-version = "4.0.0"
+version = "4.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "153a6fff49d264c4babdcfa6b4d534747f520e56e8f0f384f3b808c4b64cc1fd"
+checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1"
dependencies = [
"arbitrary",
"crc32fast",
diff --git a/Cargo.toml b/Cargo.toml
index d3a4e37561..1438d46389 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -137,12 +137,12 @@ rayon = "1.10.0"
rowan = "=0.15.15"
# Ideally we'd not enable the macros feature but unfortunately the `tracked` attribute does not work
# on impls without it
-salsa = { version = "0.23.0", default-features = true, features = [
+salsa = { version = "0.24.0", default-features = true, features = [
"rayon",
"salsa_unstable",
"macros",
] }
-salsa-macros = "0.23.0"
+salsa-macros = "0.24.0"
semver = "1.0.26"
serde = { version = "1.0.219" }
serde_derive = { version = "1.0.219" }
diff --git a/crates/cfg/Cargo.toml b/crates/cfg/Cargo.toml
index ba34966614..af95f86c83 100644
--- a/crates/cfg/Cargo.toml
+++ b/crates/cfg/Cargo.toml
@@ -23,11 +23,7 @@ intern.workspace = true
[dev-dependencies]
expect-test = "1.5.1"
oorandom = "11.1.5"
-# We depend on both individually instead of using `features = ["derive"]` to microoptimize the
-# build graph: if the feature was enabled, syn would be built early on in the graph if `smolstr`
-# supports `arbitrary`. This way, we avoid feature unification.
-arbitrary = "1.4.1"
-derive_arbitrary = "1.4.1"
+arbitrary = { version = "1.4.1", features = ["derive"] }
# local deps
syntax-bridge.workspace = true
diff --git a/crates/cfg/src/cfg_expr.rs b/crates/cfg/src/cfg_expr.rs
index f83c21eb8d..7a21015e14 100644
--- a/crates/cfg/src/cfg_expr.rs
+++ b/crates/cfg/src/cfg_expr.rs
@@ -47,7 +47,7 @@ impl fmt::Display for CfgAtom {
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
-#[cfg_attr(test, derive(derive_arbitrary::Arbitrary))]
+#[cfg_attr(test, derive(arbitrary::Arbitrary))]
pub enum CfgExpr {
Invalid,
Atom(CfgAtom),
diff --git a/crates/hir-def/src/test_db.rs b/crates/hir-def/src/test_db.rs
index 1e2f354f97..12a1c1554c 100644
--- a/crates/hir-def/src/test_db.rs
+++ b/crates/hir-def/src/test_db.rs
@@ -7,7 +7,7 @@ use base_db::{
SourceDatabase, SourceRoot, SourceRootId, SourceRootInput,
};
use hir_expand::{InFile, files::FilePosition};
-use salsa::{AsDynDatabase, Durability};
+use salsa::Durability;
use span::FileId;
use syntax::{AstNode, algo, ast};
use triomphe::Arc;
@@ -303,8 +303,7 @@ impl TestDB {
// This is pretty horrible, but `Debug` is the only way to inspect
// QueryDescriptor at the moment.
salsa::EventKind::WillExecute { database_key } => {
- let ingredient = self
- .as_dyn_database()
+ let ingredient = (self as &dyn salsa::Database)
.ingredient_debug_name(database_key.ingredient_index());
Some(ingredient.to_string())
}
diff --git a/crates/hir-ty/src/consteval/tests.rs b/crates/hir-ty/src/consteval/tests.rs
index 5a214eabcd..70a8ae766c 100644
--- a/crates/hir-ty/src/consteval/tests.rs
+++ b/crates/hir-ty/src/consteval/tests.rs
@@ -36,7 +36,7 @@ fn check_fail(
error: impl FnOnce(ConstEvalError<'_>) -> bool,
) {
let (db, file_id) = TestDB::with_single_file(ra_fixture);
- salsa::attach(&db, || match eval_goal(&db, file_id) {
+ crate::attach_db(&db, || match eval_goal(&db, file_id) {
Ok(_) => panic!("Expected fail, but it succeeded"),
Err(e) => {
assert!(error(simplify(e.clone())), "Actual error was: {}", pretty_print_err(e, &db))
@@ -79,7 +79,7 @@ fn check_answer(
check: impl FnOnce(&[u8], &MemoryMap<'_>),
) {
let (db, file_ids) = TestDB::with_many_files(ra_fixture);
- salsa::attach(&db, || {
+ crate::attach_db(&db, || {
let file_id = *file_ids.last().unwrap();
let r = match eval_goal(&db, file_id) {
Ok(t) => t,
@@ -2506,8 +2506,10 @@ fn enums() {
const GOAL: E = E::A;
"#,
);
- let r = eval_goal(&db, file_id).unwrap();
- assert_eq!(try_const_usize(&db, &r), Some(1));
+ crate::attach_db(&db, || {
+ let r = eval_goal(&db, file_id).unwrap();
+ assert_eq!(try_const_usize(&db, &r), Some(1));
+ })
}
#[test]
diff --git a/crates/hir-ty/src/dyn_compatibility/tests.rs b/crates/hir-ty/src/dyn_compatibility/tests.rs
index 04a9ba7992..f90cd608e9 100644
--- a/crates/hir-ty/src/dyn_compatibility/tests.rs
+++ b/crates/hir-ty/src/dyn_compatibility/tests.rs
@@ -57,7 +57,7 @@ fn check_dyn_compatibility<'a>(
};
let mut osvs = FxHashSet::default();
let db = &db;
- salsa::attach(db, || {
+ crate::attach_db(db, || {
_ = dyn_compatibility_with_callback(db, trait_id, &mut |osv| {
osvs.insert(match osv {
DynCompatibilityViolation::SizedSelf => SizedSelf,
diff --git a/crates/hir-ty/src/infer/cast.rs b/crates/hir-ty/src/infer/cast.rs
index 017f45f43d..990281a7c8 100644
--- a/crates/hir-ty/src/infer/cast.rs
+++ b/crates/hir-ty/src/infer/cast.rs
@@ -400,7 +400,7 @@ fn pointer_kind<'db>(
Ok(Some(PointerKind::Thin))
}
}
- TyKind::Tuple(subst) => match subst.iter().last() {
+ TyKind::Tuple(subst) => match subst.iter().next_back() {
None => Ok(Some(PointerKind::Thin)),
Some(ty) => pointer_kind(ty, ctx),
},
diff --git a/crates/hir-ty/src/layout.rs b/crates/hir-ty/src/layout.rs
index d97d2af080..eed36b1bb7 100644
--- a/crates/hir-ty/src/layout.rs
+++ b/crates/hir-ty/src/layout.rs
@@ -385,7 +385,7 @@ fn struct_tail_erasing_lifetimes<'a>(db: &'a dyn HirDatabase, pointee: Ty<'a>) -
}
}
TyKind::Tuple(tys) => {
- if let Some(last_field_ty) = tys.iter().last() {
+ if let Some(last_field_ty) = tys.iter().next_back() {
struct_tail_erasing_lifetimes(db, last_field_ty)
} else {
pointee
diff --git a/crates/hir-ty/src/layout/tests.rs b/crates/hir-ty/src/layout/tests.rs
index 712f5a89a2..f0fed83597 100644
--- a/crates/hir-ty/src/layout/tests.rs
+++ b/crates/hir-ty/src/layout/tests.rs
@@ -79,7 +79,7 @@ fn eval_goal(
Some(adt_or_type_alias_id)
})
.unwrap();
- salsa::attach(&db, || {
+ crate::attach_db(&db, || {
let interner = DbInterner::new_with(&db, None, None);
let goal_ty = match adt_or_type_alias_id {
Either::Left(adt_id) => crate::next_solver::Ty::new_adt(
@@ -112,29 +112,34 @@ fn eval_expr(
);
let (db, file_id) = TestDB::with_single_file(&ra_fixture);
- let module_id = db.module_for_file(file_id.file_id(&db));
- let def_map = module_id.def_map(&db);
- let scope = &def_map[module_id.local_id].scope;
- let function_id = scope
- .declarations()
- .find_map(|x| match x {
- hir_def::ModuleDefId::FunctionId(x) => {
- let name =
- db.function_signature(x).name.display_no_db(file_id.edition(&db)).to_smolstr();
- (name == "main").then_some(x)
- }
- _ => None,
- })
- .unwrap();
- let hir_body = db.body(function_id.into());
- let b = hir_body
- .bindings()
- .find(|x| x.1.name.display_no_db(file_id.edition(&db)).to_smolstr() == "goal")
- .unwrap()
- .0;
- let infer = db.infer(function_id.into());
- let goal_ty = infer.type_of_binding[b];
- salsa::attach(&db, || db.layout_of_ty(goal_ty, db.trait_environment(function_id.into())))
+ crate::attach_db(&db, || {
+ let module_id = db.module_for_file(file_id.file_id(&db));
+ let def_map = module_id.def_map(&db);
+ let scope = &def_map[module_id.local_id].scope;
+ let function_id = scope
+ .declarations()
+ .find_map(|x| match x {
+ hir_def::ModuleDefId::FunctionId(x) => {
+ let name = db
+ .function_signature(x)
+ .name
+ .display_no_db(file_id.edition(&db))
+ .to_smolstr();
+ (name == "main").then_some(x)
+ }
+ _ => None,
+ })
+ .unwrap();
+ let hir_body = db.body(function_id.into());
+ let b = hir_body
+ .bindings()
+ .find(|x| x.1.name.display_no_db(file_id.edition(&db)).to_smolstr() == "goal")
+ .unwrap()
+ .0;
+ let infer = db.infer(function_id.into());
+ let goal_ty = infer.type_of_binding[b];
+ db.layout_of_ty(goal_ty, db.trait_environment(function_id.into()))
+ })
}
#[track_caller]
diff --git a/crates/hir-ty/src/lib.rs b/crates/hir-ty/src/lib.rs
index 2aa9b8fa19..2add66d02d 100644
--- a/crates/hir-ty/src/lib.rs
+++ b/crates/hir-ty/src/lib.rs
@@ -114,6 +114,7 @@ pub use mapping::{
to_foreign_def_id, to_placeholder_idx, to_placeholder_idx_no_index,
};
pub use method_resolution::check_orphan_rules;
+pub use next_solver::interner::{attach_db, attach_db_allow_change, with_attached_db};
pub use target_feature::TargetFeatures;
pub use traits::TraitEnvironment;
pub use utils::{
diff --git a/crates/hir-ty/src/mir/eval/tests.rs b/crates/hir-ty/src/mir/eval/tests.rs
index 9e948d1b43..82c0a8070c 100644
--- a/crates/hir-ty/src/mir/eval/tests.rs
+++ b/crates/hir-ty/src/mir/eval/tests.rs
@@ -12,7 +12,7 @@ use crate::{
use super::{MirEvalError, interpret_mir};
fn eval_main(db: &TestDB, file_id: EditionedFileId) -> Result<(String, String), MirEvalError<'_>> {
- salsa::attach(db, || {
+ crate::attach_db(db, || {
let module_id = db.module_for_file(file_id.file_id(db));
let def_map = module_id.def_map(db);
let scope = &def_map[module_id.local_id].scope;
@@ -56,7 +56,7 @@ fn check_pass_and_stdio(
) {
let _tracing = setup_tracing();
let (db, file_ids) = TestDB::with_many_files(ra_fixture);
- salsa::attach(&db, || {
+ crate::attach_db(&db, || {
let file_id = *file_ids.last().unwrap();
let x = eval_main(&db, file_id);
match x {
@@ -102,7 +102,7 @@ fn check_pass_and_stdio(
fn check_panic(#[rust_analyzer::rust_fixture] ra_fixture: &str, expected_panic: &str) {
let (db, file_ids) = TestDB::with_many_files(ra_fixture);
- salsa::attach(&db, || {
+ crate::attach_db(&db, || {
let file_id = *file_ids.last().unwrap();
let e = eval_main(&db, file_id).unwrap_err();
assert_eq!(
@@ -117,7 +117,7 @@ fn check_error_with(
expect_err: impl FnOnce(MirEvalError<'_>) -> bool,
) {
let (db, file_ids) = TestDB::with_many_files(ra_fixture);
- salsa::attach(&db, || {
+ crate::attach_db(&db, || {
let file_id = *file_ids.last().unwrap();
let e = eval_main(&db, file_id).unwrap_err();
assert!(expect_err(e));
diff --git a/crates/hir-ty/src/mir/lower/tests.rs b/crates/hir-ty/src/mir/lower/tests.rs
index bac694eabb..ee088bd06c 100644
--- a/crates/hir-ty/src/mir/lower/tests.rs
+++ b/crates/hir-ty/src/mir/lower/tests.rs
@@ -11,21 +11,24 @@ fn lower_mir(
) -> FxHashMap<String, Result<Arc<MirBody>, ()>> {
let _tracing = setup_tracing();
let (db, file_ids) = TestDB::with_many_files(ra_fixture);
- let file_id = *file_ids.last().unwrap();
- let module_id = db.module_for_file(file_id.file_id(&db));
- let def_map = module_id.def_map(&db);
- let scope = &def_map[module_id.local_id].scope;
- let funcs = scope.declarations().filter_map(|x| match x {
- hir_def::ModuleDefId::FunctionId(it) => Some(it),
- _ => None,
- });
- funcs
- .map(|func| {
- let name = db.function_signature(func).name.display(&db, Edition::CURRENT).to_string();
- let mir = db.mir_body(func.into());
- (name, mir.map_err(drop))
- })
- .collect()
+ crate::attach_db(&db, || {
+ let file_id = *file_ids.last().unwrap();
+ let module_id = db.module_for_file(file_id.file_id(&db));
+ let def_map = module_id.def_map(&db);
+ let scope = &def_map[module_id.local_id].scope;
+ let funcs = scope.declarations().filter_map(|x| match x {
+ hir_def::ModuleDefId::FunctionId(it) => Some(it),
+ _ => None,
+ });
+ funcs
+ .map(|func| {
+ let name =
+ db.function_signature(func).name.display(&db, Edition::CURRENT).to_string();
+ let mir = db.mir_body(func.into());
+ (name, mir.map_err(drop))
+ })
+ .collect()
+ })
}
#[test]
diff --git a/crates/hir-ty/src/next_solver/consts.rs b/crates/hir-ty/src/next_solver/consts.rs
index 0b3582051b..aae48eeaf9 100644
--- a/crates/hir-ty/src/next_solver/consts.rs
+++ b/crates/hir-ty/src/next_solver/consts.rs
@@ -41,13 +41,12 @@ impl<'db> Const<'db> {
}
pub fn inner(&self) -> &WithCachedTypeInfo<ConstKind<'db>> {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = &self.kind_(db).0;
// SAFETY: The caller already has access to a `Const<'db>`, so borrowchecking will
// make sure that our returned value is valid for the lifetime `'db`.
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
pub fn error(interner: DbInterner<'db>) -> Self {
@@ -197,21 +196,19 @@ pub struct Valtree<'db> {
impl<'db> Valtree<'db> {
pub fn new(bytes: ConstBytes<'db>) -> Self {
- salsa::with_attached_database(|db| unsafe {
+ crate::with_attached_db(|db| unsafe {
// SAFETY: ¯\_(ツ)_/¯
std::mem::transmute(Valtree::new_(db, bytes))
})
- .unwrap()
}
pub fn inner(&self) -> &ConstBytes<'db> {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = self.bytes_(db);
// SAFETY: The caller already has access to a `Valtree<'db>`, so borrowchecking will
// make sure that our returned value is valid for the lifetime `'db`.
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
}
diff --git a/crates/hir-ty/src/next_solver/interner.rs b/crates/hir-ty/src/next_solver/interner.rs
index 6b91ee35eb..4a0ede35ac 100644
--- a/crates/hir-ty/src/next_solver/interner.rs
+++ b/crates/hir-ty/src/next_solver/interner.rs
@@ -1,6 +1,8 @@
//! Things related to the Interner in the next-trait-solver.
#![allow(unused)]
+pub use tls_db::{attach_db, attach_db_allow_change, with_attached_db};
+
use base_db::Crate;
use chalk_ir::{ProgramClauseImplication, SeparatorTraitRef, Variances};
use hir_def::lang_item::LangItem;
@@ -127,11 +129,10 @@ macro_rules! _interned_vec_nolifetime_salsa {
pub fn inner(&self) -> &smallvec::SmallVec<[$ty; 2]> {
// SAFETY: ¯\_(ツ)_/¯
- salsa::with_attached_database(|db| {
+ $crate::with_attached_db(|db| {
let inner = self.inner_(db);
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
}
@@ -230,11 +231,10 @@ macro_rules! _interned_vec_db {
pub fn inner(&self) -> &smallvec::SmallVec<[$ty<'db>; 2]> {
// SAFETY: ¯\_(ツ)_/¯
- salsa::with_attached_database(|db| {
+ $crate::with_attached_db(|db| {
let inner = self.inner_(db);
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
}
@@ -285,14 +285,11 @@ unsafe impl Sync for DbInterner<'_> {}
impl<'db> DbInterner<'db> {
// FIXME(next-solver): remove this method
pub fn conjure() -> DbInterner<'db> {
- salsa::with_attached_database(|db| DbInterner {
- db: unsafe {
- std::mem::transmute::<&dyn HirDatabase, &'db dyn HirDatabase>(db.as_view())
- },
+ crate::with_attached_db(|db| DbInterner {
+ db: unsafe { std::mem::transmute::<&dyn HirDatabase, &'db dyn HirDatabase>(db) },
krate: None,
block: None,
})
- .expect("db is expected to be attached")
}
pub fn new_with(
@@ -585,12 +582,11 @@ impl AdtDef {
}
pub fn inner(&self) -> &AdtDefInner {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = self.data_(db);
// SAFETY: ¯\_(ツ)_/¯
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
pub fn is_enum(&self) -> bool {
@@ -708,21 +704,20 @@ impl<'db> inherent::AdtDef<DbInterner<'db>> for AdtDef {
impl fmt::Debug for AdtDef {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- salsa::with_attached_database(|db| match self.inner().id {
+ crate::with_attached_db(|db| match self.inner().id {
AdtId::StructId(struct_id) => {
- let data = db.as_view::<dyn HirDatabase>().struct_signature(struct_id);
+ let data = db.struct_signature(struct_id);
f.write_str(data.name.as_str())
}
AdtId::UnionId(union_id) => {
- let data = db.as_view::<dyn HirDatabase>().union_signature(union_id);
+ let data = db.union_signature(union_id);
f.write_str(data.name.as_str())
}
AdtId::EnumId(enum_id) => {
- let data = db.as_view::<dyn HirDatabase>().enum_signature(enum_id);
+ let data = db.enum_signature(enum_id);
f.write_str(data.name.as_str())
}
})
- .unwrap_or_else(|| f.write_str(&format!("AdtDef({:?})", self.inner().id)))
}
}
@@ -778,13 +773,12 @@ impl<'db> Pattern<'db> {
}
pub fn inner(&self) -> &PatternKind<'db> {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = &self.kind_(db).0;
// SAFETY: The caller already has access to a `Ty<'db>`, so borrowchecking will
// make sure that our returned value is valid for the lifetime `'db`.
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
}
@@ -1020,17 +1014,7 @@ impl<'db> rustc_type_ir::Interner for DbInterner<'db> {
self,
f: impl FnOnce(&mut rustc_type_ir::search_graph::GlobalCache<Self>) -> R,
) -> R {
- salsa::with_attached_database(|db| {
- tls_cache::with_cache(
- unsafe {
- std::mem::transmute::<&dyn HirDatabase, &'db dyn HirDatabase>(
- db.as_view::<dyn HirDatabase>(),
- )
- },
- f,
- )
- })
- .unwrap()
+ tls_cache::with_cache(self.db, f)
}
fn canonical_param_env_cache_get_or_insert<R>(
@@ -2106,6 +2090,117 @@ TrivialTypeTraversalImpls! {
Placeholder<BoundVar>,
}
+mod tls_db {
+ use std::{cell::Cell, ptr::NonNull};
+
+ use crate::db::HirDatabase;
+
+ struct Attached {
+ database: Cell<Option<NonNull<dyn HirDatabase>>>,
+ }
+
+ impl Attached {
+ #[inline]
+ fn attach<R>(&self, db: &dyn HirDatabase, op: impl FnOnce() -> R) -> R {
+ struct DbGuard<'s> {
+ state: Option<&'s Attached>,
+ }
+
+ impl<'s> DbGuard<'s> {
+ #[inline]
+ fn new(attached: &'s Attached, db: &dyn HirDatabase) -> Self {
+ match attached.database.get() {
+ Some(current_db) => {
+ let new_db = NonNull::from(db);
+ if !std::ptr::addr_eq(current_db.as_ptr(), new_db.as_ptr()) {
+ panic!(
+ "Cannot change attached database. This is likely a bug.\n\
+ If this is not a bug, you can use `attach_db_allow_change()`."
+ );
+ }
+ Self { state: None }
+ }
+ None => {
+ // Otherwise, set the database.
+ attached.database.set(Some(NonNull::from(db)));
+ Self { state: Some(attached) }
+ }
+ }
+ }
+ }
+
+ impl Drop for DbGuard<'_> {
+ #[inline]
+ fn drop(&mut self) {
+ // Reset database to null if we did anything in `DbGuard::new`.
+ if let Some(attached) = self.state {
+ attached.database.set(None);
+ }
+ }
+ }
+
+ let _guard = DbGuard::new(self, db);
+ op()
+ }
+
+ #[inline]
+ fn attach_allow_change<R>(&self, db: &dyn HirDatabase, op: impl FnOnce() -> R) -> R {
+ struct DbGuard<'s> {
+ state: &'s Attached,
+ prev: Option<NonNull<dyn HirDatabase>>,
+ }
+
+ impl<'s> DbGuard<'s> {
+ #[inline]
+ fn new(attached: &'s Attached, db: &dyn HirDatabase) -> Self {
+ let prev = attached.database.replace(Some(NonNull::from(db)));
+ Self { state: attached, prev }
+ }
+ }
+
+ impl Drop for DbGuard<'_> {
+ #[inline]
+ fn drop(&mut self) {
+ self.state.database.set(self.prev);
+ }
+ }
+
+ let _guard = DbGuard::new(self, db);
+ op()
+ }
+
+ #[inline]
+ fn with<R>(&self, op: impl FnOnce(&dyn HirDatabase) -> R) -> R {
+ let db = self.database.get().expect("Try to use attached db, but not db is attached");
+
+ // SAFETY: The db is attached, so it must be valid.
+ op(unsafe { db.as_ref() })
+ }
+ }
+
+ thread_local! {
+ static GLOBAL_DB: Attached = const { Attached { database: Cell::new(None) } };
+ }
+
+ #[inline]
+ pub fn attach_db<R>(db: &dyn HirDatabase, op: impl FnOnce() -> R) -> R {
+ GLOBAL_DB.with(|global_db| global_db.attach(db, op))
+ }
+
+ #[inline]
+ pub fn attach_db_allow_change<R>(db: &dyn HirDatabase, op: impl FnOnce() -> R) -> R {
+ GLOBAL_DB.with(|global_db| global_db.attach_allow_change(db, op))
+ }
+
+ #[inline]
+ pub fn with_attached_db<R>(op: impl FnOnce(&dyn HirDatabase) -> R) -> R {
+ GLOBAL_DB.with(
+ #[inline]
+ |a| a.with(op),
+ )
+ }
+}
+
mod tls_cache {
use crate::db::HirDatabase;
diff --git a/crates/hir-ty/src/next_solver/ir_print.rs b/crates/hir-ty/src/next_solver/ir_print.rs
index 407e157564..69afcf5dde 100644
--- a/crates/hir-ty/src/next_solver/ir_print.rs
+++ b/crates/hir-ty/src/next_solver/ir_print.rs
@@ -16,10 +16,10 @@ impl<'db> IrPrint<ty::AliasTy<Self>> for DbInterner<'db> {
}
fn print_debug(t: &ty::AliasTy<Self>, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- salsa::with_attached_database(|db| match t.def_id {
+ crate::with_attached_db(|db| match t.def_id {
SolverDefId::TypeAliasId(id) => fmt.write_str(&format!(
"AliasTy({:?}[{:?}])",
- db.as_view::<dyn HirDatabase>().type_alias_signature(id).name.as_str(),
+ db.type_alias_signature(id).name.as_str(),
t.args
)),
SolverDefId::InternedOpaqueTyId(id) => {
@@ -27,7 +27,6 @@ impl<'db> IrPrint<ty::AliasTy<Self>> for DbInterner<'db> {
}
_ => panic!("Expected TypeAlias or OpaqueTy."),
})
- .unwrap_or_else(|| fmt.write_str(&format!("AliasTy({:?}[{:?}])", t.def_id, t.args)))
}
}
@@ -37,10 +36,10 @@ impl<'db> IrPrint<ty::AliasTerm<Self>> for DbInterner<'db> {
}
fn print_debug(t: &ty::AliasTerm<Self>, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- salsa::with_attached_database(|db| match t.def_id {
+ crate::with_attached_db(|db| match t.def_id {
SolverDefId::TypeAliasId(id) => fmt.write_str(&format!(
"AliasTerm({:?}[{:?}])",
- db.as_view::<dyn HirDatabase>().type_alias_signature(id).name.as_str(),
+ db.type_alias_signature(id).name.as_str(),
t.args
)),
SolverDefId::InternedOpaqueTyId(id) => {
@@ -48,7 +47,6 @@ impl<'db> IrPrint<ty::AliasTerm<Self>> for DbInterner<'db> {
}
_ => panic!("Expected TypeAlias or OpaqueTy."),
})
- .unwrap_or_else(|| fmt.write_str(&format!("AliasTerm({:?}[{:?}])", t.def_id, t.args)))
}
}
impl<'db> IrPrint<ty::TraitRef<Self>> for DbInterner<'db> {
@@ -57,7 +55,7 @@ impl<'db> IrPrint<ty::TraitRef<Self>> for DbInterner<'db> {
}
fn print_debug(t: &ty::TraitRef<Self>, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let trait_ = t.def_id.0;
let self_ty = &t.args.as_slice()[0];
let trait_args = &t.args.as_slice()[1..];
@@ -65,18 +63,17 @@ impl<'db> IrPrint<ty::TraitRef<Self>> for DbInterner<'db> {
fmt.write_str(&format!(
"{:?}: {}",
self_ty,
- db.as_view::<dyn HirDatabase>().trait_signature(trait_).name.as_str()
+ db.trait_signature(trait_).name.as_str()
))
} else {
fmt.write_str(&format!(
"{:?}: {}<{:?}>",
self_ty,
- db.as_view::<dyn HirDatabase>().trait_signature(trait_).name.as_str(),
+ db.trait_signature(trait_).name.as_str(),
trait_args
))
}
})
- .unwrap_or_else(|| fmt.write_str(&format!("TraitRef({:?}[{:?}])", t.def_id, t.args)))
}
}
impl<'db> IrPrint<ty::TraitPredicate<Self>> for DbInterner<'db> {
@@ -118,17 +115,14 @@ impl<'db> IrPrint<ty::ExistentialTraitRef<Self>> for DbInterner<'db> {
t: &ty::ExistentialTraitRef<Self>,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let trait_ = t.def_id.0;
fmt.write_str(&format!(
"ExistentialTraitRef({:?}[{:?}])",
- db.as_view::<dyn HirDatabase>().trait_signature(trait_).name.as_str(),
+ db.trait_signature(trait_).name.as_str(),
t.args
))
})
- .unwrap_or_else(|| {
- fmt.write_str(&format!("ExistentialTraitRef({:?}[{:?}])", t.def_id, t.args))
- })
}
}
impl<'db> IrPrint<ty::ExistentialProjection<Self>> for DbInterner<'db> {
@@ -143,24 +137,18 @@ impl<'db> IrPrint<ty::ExistentialProjection<Self>> for DbInterner<'db> {
t: &ty::ExistentialProjection<Self>,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let id = match t.def_id {
SolverDefId::TypeAliasId(id) => id,
_ => panic!("Expected trait."),
};
fmt.write_str(&format!(
"ExistentialProjection(({:?}[{:?}]) -> {:?})",
- db.as_view::<dyn HirDatabase>().type_alias_signature(id).name.as_str(),
+ db.type_alias_signature(id).name.as_str(),
t.args,
t.term
))
})
- .unwrap_or_else(|| {
- fmt.write_str(&format!(
- "ExistentialProjection(({:?}[{:?}]) -> {:?})",
- t.def_id, t.args, t.term
- ))
- })
}
}
impl<'db> IrPrint<ty::ProjectionPredicate<Self>> for DbInterner<'db> {
@@ -175,24 +163,18 @@ impl<'db> IrPrint<ty::ProjectionPredicate<Self>> for DbInterner<'db> {
t: &ty::ProjectionPredicate<Self>,
fmt: &mut std::fmt::Formatter<'_>,
) -> std::fmt::Result {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let id = match t.projection_term.def_id {
SolverDefId::TypeAliasId(id) => id,
_ => panic!("Expected trait."),
};
fmt.write_str(&format!(
"ProjectionPredicate(({:?}[{:?}]) -> {:?})",
- db.as_view::<dyn HirDatabase>().type_alias_signature(id).name.as_str(),
+ db.type_alias_signature(id).name.as_str(),
t.projection_term.args,
t.term
))
})
- .unwrap_or_else(|| {
- fmt.write_str(&format!(
- "ProjectionPredicate(({:?}[{:?}]) -> {:?})",
- t.projection_term.def_id, t.projection_term.args, t.term
- ))
- })
}
}
impl<'db> IrPrint<ty::NormalizesTo<Self>> for DbInterner<'db> {
diff --git a/crates/hir-ty/src/next_solver/opaques.rs b/crates/hir-ty/src/next_solver/opaques.rs
index 43589ab2ef..0aee779ed0 100644
--- a/crates/hir-ty/src/next_solver/opaques.rs
+++ b/crates/hir-ty/src/next_solver/opaques.rs
@@ -24,12 +24,11 @@ impl<'db> PredefinedOpaques<'db> {
}
pub fn inner(&self) -> &PredefinedOpaquesData<'db> {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = self.kind_(db);
// SAFETY: ¯\_(ツ)_/¯
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
}
@@ -96,12 +95,11 @@ impl<'db> ExternalConstraints<'db> {
}
pub fn inner(&self) -> &ExternalConstraintsData<'db> {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = self.kind_(db);
// SAFETY: ¯\_(ツ)_/¯
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
}
diff --git a/crates/hir-ty/src/next_solver/predicate.rs b/crates/hir-ty/src/next_solver/predicate.rs
index 99b1354b63..1623fa342a 100644
--- a/crates/hir-ty/src/next_solver/predicate.rs
+++ b/crates/hir-ty/src/next_solver/predicate.rs
@@ -232,13 +232,12 @@ impl<'db> Predicate<'db> {
}
pub fn inner(&self) -> &WithCachedTypeInfo<Binder<'db, PredicateKind<'db>>> {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = &self.kind_(db).0;
// SAFETY: The caller already has access to a `Predicate<'db>`, so borrowchecking will
// make sure that our returned value is valid for the lifetime `'db`.
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
/// Flips the polarity of a Predicate.
@@ -303,13 +302,12 @@ impl<'db> Clauses<'db> {
}
pub fn inner(&self) -> &InternedClausesWrapper<'db> {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = self.inner_(db);
// SAFETY: The caller already has access to a `Clauses<'db>`, so borrowchecking will
// make sure that our returned value is valid for the lifetime `'db`.
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
}
diff --git a/crates/hir-ty/src/next_solver/region.rs b/crates/hir-ty/src/next_solver/region.rs
index 32c30d19c7..13c333b9d5 100644
--- a/crates/hir-ty/src/next_solver/region.rs
+++ b/crates/hir-ty/src/next_solver/region.rs
@@ -35,13 +35,12 @@ impl<'db> Region<'db> {
}
pub fn inner(&self) -> &RegionKind<'db> {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = self.kind_(db);
// SAFETY: The caller already has access to a `Region<'db>`, so borrowchecking will
// make sure that our returned value is valid for the lifetime `'db`.
unsafe { std::mem::transmute::<&RegionKind<'_>, &RegionKind<'db>>(inner) }
})
- .unwrap()
}
pub fn new_early_param(
diff --git a/crates/hir-ty/src/next_solver/ty.rs b/crates/hir-ty/src/next_solver/ty.rs
index 5ccd84af8d..11ca0b03eb 100644
--- a/crates/hir-ty/src/next_solver/ty.rs
+++ b/crates/hir-ty/src/next_solver/ty.rs
@@ -68,13 +68,12 @@ impl<'db> Ty<'db> {
}
pub fn inner(&self) -> &WithCachedTypeInfo<TyKind<'db>> {
- salsa::with_attached_database(|db| {
+ crate::with_attached_db(|db| {
let inner = &self.kind_(db).0;
// SAFETY: The caller already has access to a `Ty<'db>`, so borrowchecking will
// make sure that our returned value is valid for the lifetime `'db`.
unsafe { std::mem::transmute(inner) }
})
- .unwrap()
}
pub fn new_adt(interner: DbInterner<'db>, adt_id: AdtId, args: GenericArgs<'db>) -> Self {
diff --git a/crates/hir-ty/src/next_solver/util.rs b/crates/hir-ty/src/next_solver/util.rs
index 750d09e1a7..ae240a942f 100644
--- a/crates/hir-ty/src/next_solver/util.rs
+++ b/crates/hir-ty/src/next_solver/util.rs
@@ -486,7 +486,7 @@ pub fn sizedness_constraint_for_ty<'db>(
Tuple(tys) => tys
.into_iter()
- .last()
+ .next_back()
.and_then(|ty| sizedness_constraint_for_ty(interner, sizedness, ty)),
Adt(adt, args) => {
diff --git a/crates/hir-ty/src/test_db.rs b/crates/hir-ty/src/test_db.rs
index 2a92aa52e0..7044ca5d23 100644
--- a/crates/hir-ty/src/test_db.rs
+++ b/crates/hir-ty/src/test_db.rs
@@ -10,7 +10,7 @@ use base_db::{
use hir_def::{ModuleId, db::DefDatabase, nameres::crate_def_map};
use hir_expand::EditionedFileId;
use rustc_hash::FxHashMap;
-use salsa::{AsDynDatabase, Durability};
+use salsa::Durability;
use span::FileId;
use syntax::TextRange;
use test_utils::extract_annotations;
@@ -191,8 +191,7 @@ impl TestDB {
// This is pretty horrible, but `Debug` is the only way to inspect
// QueryDescriptor at the moment.
salsa::EventKind::WillExecute { database_key } => {
- let ingredient = self
- .as_dyn_database()
+ let ingredient = (self as &dyn salsa::Database)
.ingredient_debug_name(database_key.ingredient_index());
Some(ingredient.to_string())
}
diff --git a/crates/hir-ty/src/tests.rs b/crates/hir-ty/src/tests.rs
index 5dd9ab7532..95a02d534b 100644
--- a/crates/hir-ty/src/tests.rs
+++ b/crates/hir-ty/src/tests.rs
@@ -79,7 +79,7 @@ fn check_impl(
let _tracing = setup_tracing();
let (db, files) = TestDB::with_many_files(ra_fixture);
- salsa::attach(&db, || {
+ crate::attach_db(&db, || {
let mut had_annotations = false;
let mut mismatches = FxHashMap::default();
let mut types = FxHashMap::default();
@@ -283,7 +283,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
let _tracing = setup_tracing();
let (db, file_id) = TestDB::with_single_file(content);
- salsa::attach(&db, || {
+ crate::attach_db(&db, || {
let mut buf = String::new();
let mut infer_def = |inference_result: Arc<InferenceResult<'_>>,
@@ -558,15 +558,17 @@ fn salsa_bug() {
",
);
- let module = db.module_for_file(pos.file_id.file_id(&db));
- let crate_def_map = module.def_map(&db);
- visit_module(&db, crate_def_map, module.local_id, &mut |def| {
- db.infer(match def {
- ModuleDefId::FunctionId(it) => it.into(),
- ModuleDefId::EnumVariantId(it) => it.into(),
- ModuleDefId::ConstId(it) => it.into(),
- ModuleDefId::StaticId(it) => it.into(),
- _ => return,
+ crate::attach_db(&db, || {
+ let module = db.module_for_file(pos.file_id.file_id(&db));
+ let crate_def_map = module.def_map(&db);
+ visit_module(&db, crate_def_map, module.local_id, &mut |def| {
+ db.infer(match def {
+ ModuleDefId::FunctionId(it) => it.into(),
+ ModuleDefId::EnumVariantId(it) => it.into(),
+ ModuleDefId::ConstId(it) => it.into(),
+ ModuleDefId::StaticId(it) => it.into(),
+ _ => return,
+ });
});
});
@@ -597,15 +599,17 @@ fn salsa_bug() {
db.set_file_text(pos.file_id.file_id(&db), new_text);
- let module = db.module_for_file(pos.file_id.file_id(&db));
- let crate_def_map = module.def_map(&db);
- visit_module(&db, crate_def_map, module.local_id, &mut |def| {
- db.infer(match def {
- ModuleDefId::FunctionId(it) => it.into(),
- ModuleDefId::EnumVariantId(it) => it.into(),
- ModuleDefId::ConstId(it) => it.into(),
- ModuleDefId::StaticId(it) => it.into(),
- _ => return,
+ crate::attach_db(&db, || {
+ let module = db.module_for_file(pos.file_id.file_id(&db));
+ let crate_def_map = module.def_map(&db);
+ visit_module(&db, crate_def_map, module.local_id, &mut |def| {
+ db.infer(match def {
+ ModuleDefId::FunctionId(it) => it.into(),
+ ModuleDefId::EnumVariantId(it) => it.into(),
+ ModuleDefId::ConstId(it) => it.into(),
+ ModuleDefId::StaticId(it) => it.into(),
+ _ => return,
+ });
});
- });
+ })
}
diff --git a/crates/hir-ty/src/tests/closure_captures.rs b/crates/hir-ty/src/tests/closure_captures.rs
index d3bc26abd7..8425c0dd89 100644
--- a/crates/hir-ty/src/tests/closure_captures.rs
+++ b/crates/hir-ty/src/tests/closure_captures.rs
@@ -18,96 +18,105 @@ use super::{setup_tracing, visit_module};
fn check_closure_captures(#[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expect) {
let _tracing = setup_tracing();
let (db, file_id) = TestDB::with_single_file(ra_fixture);
- let module = db.module_for_file(file_id.file_id(&db));
- let def_map = module.def_map(&db);
+ crate::attach_db(&db, || {
+ let module = db.module_for_file(file_id.file_id(&db));
+ let def_map = module.def_map(&db);
- let mut defs = Vec::new();
- visit_module(&db, def_map, module.local_id, &mut |it| defs.push(it));
+ let mut defs = Vec::new();
+ visit_module(&db, def_map, module.local_id, &mut |it| defs.push(it));
- let mut captures_info = Vec::new();
- for def in defs {
- let def = match def {
- hir_def::ModuleDefId::FunctionId(it) => it.into(),
- hir_def::ModuleDefId::EnumVariantId(it) => it.into(),
- hir_def::ModuleDefId::ConstId(it) => it.into(),
- hir_def::ModuleDefId::StaticId(it) => it.into(),
- _ => continue,
- };
- let infer = db.infer(def);
- let db = &db;
- captures_info.extend(infer.closure_info.iter().flat_map(|(closure_id, (captures, _))| {
- let closure = db.lookup_intern_closure(*closure_id);
- let source_map = db.body_with_source_map(closure.0).1;
- let closure_text_range = source_map
- .expr_syntax(closure.1)
- .expect("failed to map closure to SyntaxNode")
- .value
- .text_range();
- captures.iter().map(move |capture| {
- fn text_range<N: AstNode>(
- db: &TestDB,
- syntax: InFileWrapper<HirFileId, AstPtr<N>>,
- ) -> TextRange {
- let root = syntax.file_syntax(db);
- syntax.value.to_node(&root).syntax().text_range()
- }
-
- // FIXME: Deduplicate this with hir::Local::sources().
- let (body, source_map) = db.body_with_source_map(closure.0);
- let local_text_range = match body.self_param.zip(source_map.self_param_syntax()) {
- Some((param, source)) if param == capture.local() => {
- format!("{:?}", text_range(db, source))
- }
- _ => source_map
- .patterns_for_binding(capture.local())
- .iter()
- .map(|&definition| {
- text_range(db, source_map.pat_syntax(definition).unwrap())
- })
- .map(|it| format!("{it:?}"))
- .join(", "),
- };
- let place = capture.display_place(closure.0, db);
- let capture_ty = salsa::attach(db, || {
- capture
- .ty
- .skip_binder()
- .display_test(db, DisplayTarget::from_crate(db, module.krate()))
- .to_string()
- });
- let spans = capture
- .spans()
- .iter()
- .flat_map(|span| match *span {
- MirSpan::ExprId(expr) => {
- vec![text_range(db, source_map.expr_syntax(expr).unwrap())]
- }
- MirSpan::PatId(pat) => {
- vec![text_range(db, source_map.pat_syntax(pat).unwrap())]
+ let mut captures_info = Vec::new();
+ for def in defs {
+ let def = match def {
+ hir_def::ModuleDefId::FunctionId(it) => it.into(),
+ hir_def::ModuleDefId::EnumVariantId(it) => it.into(),
+ hir_def::ModuleDefId::ConstId(it) => it.into(),
+ hir_def::ModuleDefId::StaticId(it) => it.into(),
+ _ => continue,
+ };
+ let infer = db.infer(def);
+ let db = &db;
+ captures_info.extend(infer.closure_info.iter().flat_map(
+ |(closure_id, (captures, _))| {
+ let closure = db.lookup_intern_closure(*closure_id);
+ let source_map = db.body_with_source_map(closure.0).1;
+ let closure_text_range = source_map
+ .expr_syntax(closure.1)
+ .expect("failed to map closure to SyntaxNode")
+ .value
+ .text_range();
+ captures.iter().map(move |capture| {
+ fn text_range<N: AstNode>(
+ db: &TestDB,
+ syntax: InFileWrapper<HirFileId, AstPtr<N>>,
+ ) -> TextRange {
+ let root = syntax.file_syntax(db);
+ syntax.value.to_node(&root).syntax().text_range()
}
- MirSpan::BindingId(binding) => source_map
- .patterns_for_binding(binding)
+
+ // FIXME: Deduplicate this with hir::Local::sources().
+ let (body, source_map) = db.body_with_source_map(closure.0);
+ let local_text_range =
+ match body.self_param.zip(source_map.self_param_syntax()) {
+ Some((param, source)) if param == capture.local() => {
+ format!("{:?}", text_range(db, source))
+ }
+ _ => source_map
+ .patterns_for_binding(capture.local())
+ .iter()
+ .map(|&definition| {
+ text_range(db, source_map.pat_syntax(definition).unwrap())
+ })
+ .map(|it| format!("{it:?}"))
+ .join(", "),
+ };
+ let place = capture.display_place(closure.0, db);
+ let capture_ty = capture
+ .ty
+ .skip_binder()
+ .display_test(db, DisplayTarget::from_crate(db, module.krate()))
+ .to_string();
+ let spans = capture
+ .spans()
.iter()
- .map(|pat| text_range(db, source_map.pat_syntax(*pat).unwrap()))
- .collect(),
- MirSpan::SelfParam => {
- vec![text_range(db, source_map.self_param_syntax().unwrap())]
- }
- MirSpan::Unknown => Vec::new(),
- })
- .sorted_by_key(|it| it.start())
- .map(|it| format!("{it:?}"))
- .join(",");
+ .flat_map(|span| match *span {
+ MirSpan::ExprId(expr) => {
+ vec![text_range(db, source_map.expr_syntax(expr).unwrap())]
+ }
+ MirSpan::PatId(pat) => {
+ vec![text_range(db, source_map.pat_syntax(pat).unwrap())]
+ }
+ MirSpan::BindingId(binding) => source_map
+ .patterns_for_binding(binding)
+ .iter()
+ .map(|pat| text_range(db, source_map.pat_syntax(*pat).unwrap()))
+ .collect(),
+ MirSpan::SelfParam => {
+ vec![text_range(db, source_map.self_param_syntax().unwrap())]
+ }
+ MirSpan::Unknown => Vec::new(),
+ })
+ .sorted_by_key(|it| it.start())
+ .map(|it| format!("{it:?}"))
+ .join(",");
- (closure_text_range, local_text_range, spans, place, capture_ty, capture.kind())
- })
- }));
- }
- captures_info.sort_unstable_by_key(|(closure_text_range, local_text_range, ..)| {
- (closure_text_range.start(), local_text_range.clone())
- });
+ (
+ closure_text_range,
+ local_text_range,
+ spans,
+ place,
+ capture_ty,
+ capture.kind(),
+ )
+ })
+ },
+ ));
+ }
+ captures_info.sort_unstable_by_key(|(closure_text_range, local_text_range, ..)| {
+ (closure_text_range.start(), local_text_range.clone())
+ });
- let rendered = captures_info
+ let rendered = captures_info
.iter()
.map(|(closure_text_range, local_text_range, spans, place, capture_ty, capture_kind)| {
format!(
@@ -116,7 +125,8 @@ fn check_closure_captures(#[rust_analyzer::rust_fixture] ra_fixture: &str, expec
})
.join("\n");
- expect.assert_eq(&rendered);
+ expect.assert_eq(&rendered);
+ })
}
#[test]
diff --git a/crates/hir-ty/src/tests/incremental.rs b/crates/hir-ty/src/tests/incremental.rs
index ce3de06127..76cd5f7ab3 100644
--- a/crates/hir-ty/src/tests/incremental.rs
+++ b/crates/hir-ty/src/tests/incremental.rs
@@ -710,8 +710,8 @@ fn execute_assert_events(
required: &[(&str, usize)],
expect: Expect,
) {
- let (executed, events) = db.log_executed(f);
- salsa::attach(db, || {
+ crate::attach_db(db, || {
+ let (executed, events) = db.log_executed(f);
for (event, count) in required {
let n = executed.iter().filter(|it| it.contains(event)).count();
assert_eq!(
diff --git a/crates/hir-ty/src/variance.rs b/crates/hir-ty/src/variance.rs
index a17cf37827..0ff110106e 100644
--- a/crates/hir-ty/src/variance.rs
+++ b/crates/hir-ty/src/variance.rs
@@ -1001,84 +1001,86 @@ struct FixedPoint<T, U, V>(&'static FixedPoint<(), T, U>, V);
// ));
let (db, file_id) = TestDB::with_single_file(ra_fixture);
- let mut defs: Vec<GenericDefId> = Vec::new();
- let module = db.module_for_file_opt(file_id.file_id(&db)).unwrap();
- let def_map = module.def_map(&db);
- crate::tests::visit_module(&db, def_map, module.local_id, &mut |it| {
- defs.push(match it {
- ModuleDefId::FunctionId(it) => it.into(),
- ModuleDefId::AdtId(it) => it.into(),
- ModuleDefId::ConstId(it) => it.into(),
- ModuleDefId::TraitId(it) => it.into(),
- ModuleDefId::TypeAliasId(it) => it.into(),
- _ => return,
- })
- });
- let defs = defs
- .into_iter()
- .filter_map(|def| {
- Some((
- def,
- match def {
- GenericDefId::FunctionId(it) => {
- let loc = it.lookup(&db);
- loc.source(&db).value.name().unwrap()
- }
- GenericDefId::AdtId(AdtId::EnumId(it)) => {
- let loc = it.lookup(&db);
- loc.source(&db).value.name().unwrap()
- }
- GenericDefId::AdtId(AdtId::StructId(it)) => {
- let loc = it.lookup(&db);
- loc.source(&db).value.name().unwrap()
- }
- GenericDefId::AdtId(AdtId::UnionId(it)) => {
- let loc = it.lookup(&db);
- loc.source(&db).value.name().unwrap()
- }
- GenericDefId::TraitId(it) => {
- let loc = it.lookup(&db);
- loc.source(&db).value.name().unwrap()
- }
- GenericDefId::TypeAliasId(it) => {
- let loc = it.lookup(&db);
- loc.source(&db).value.name().unwrap()
- }
- GenericDefId::ImplId(_) => return None,
- GenericDefId::ConstId(_) => return None,
- GenericDefId::StaticId(_) => return None,
- },
- ))
- })
- .sorted_by_key(|(_, n)| n.syntax().text_range().start());
- let mut res = String::new();
- for (def, name) in defs {
- let Some(variances) = db.variances_of(def) else {
- continue;
- };
- format_to!(
- res,
- "{name}[{}]\n",
- generics(&db, def)
- .iter()
- .map(|(_, param)| match param {
- GenericParamDataRef::TypeParamData(type_param_data) => {
- type_param_data.name.as_ref().unwrap()
- }
- GenericParamDataRef::ConstParamData(const_param_data) =>
- &const_param_data.name,
- GenericParamDataRef::LifetimeParamData(lifetime_param_data) => {
- &lifetime_param_data.name
- }
- })
- .zip_eq(&*variances)
- .format_with(", ", |(name, var), f| f(&format_args!(
- "{}: {var}",
- name.as_str()
- )))
- );
- }
+ crate::attach_db(&db, || {
+ let mut defs: Vec<GenericDefId> = Vec::new();
+ let module = db.module_for_file_opt(file_id.file_id(&db)).unwrap();
+ let def_map = module.def_map(&db);
+ crate::tests::visit_module(&db, def_map, module.local_id, &mut |it| {
+ defs.push(match it {
+ ModuleDefId::FunctionId(it) => it.into(),
+ ModuleDefId::AdtId(it) => it.into(),
+ ModuleDefId::ConstId(it) => it.into(),
+ ModuleDefId::TraitId(it) => it.into(),
+ ModuleDefId::TypeAliasId(it) => it.into(),
+ _ => return,
+ })
+ });
+ let defs = defs
+ .into_iter()
+ .filter_map(|def| {
+ Some((
+ def,
+ match def {
+ GenericDefId::FunctionId(it) => {
+ let loc = it.lookup(&db);
+ loc.source(&db).value.name().unwrap()
+ }
+ GenericDefId::AdtId(AdtId::EnumId(it)) => {
+ let loc = it.lookup(&db);
+ loc.source(&db).value.name().unwrap()
+ }
+ GenericDefId::AdtId(AdtId::StructId(it)) => {
+ let loc = it.lookup(&db);
+ loc.source(&db).value.name().unwrap()
+ }
+ GenericDefId::AdtId(AdtId::UnionId(it)) => {
+ let loc = it.lookup(&db);
+ loc.source(&db).value.name().unwrap()
+ }
+ GenericDefId::TraitId(it) => {
+ let loc = it.lookup(&db);
+ loc.source(&db).value.name().unwrap()
+ }
+ GenericDefId::TypeAliasId(it) => {
+ let loc = it.lookup(&db);
+ loc.source(&db).value.name().unwrap()
+ }
+ GenericDefId::ImplId(_) => return None,
+ GenericDefId::ConstId(_) => return None,
+ GenericDefId::StaticId(_) => return None,
+ },
+ ))
+ })
+ .sorted_by_key(|(_, n)| n.syntax().text_range().start());
+ let mut res = String::new();
+ for (def, name) in defs {
+ let Some(variances) = db.variances_of(def) else {
+ continue;
+ };
+ format_to!(
+ res,
+ "{name}[{}]\n",
+ generics(&db, def)
+ .iter()
+ .map(|(_, param)| match param {
+ GenericParamDataRef::TypeParamData(type_param_data) => {
+ type_param_data.name.as_ref().unwrap()
+ }
+ GenericParamDataRef::ConstParamData(const_param_data) =>
+ &const_param_data.name,
+ GenericParamDataRef::LifetimeParamData(lifetime_param_data) => {
+ &lifetime_param_data.name
+ }
+ })
+ .zip_eq(&*variances)
+ .format_with(", ", |(name, var), f| f(&format_args!(
+ "{}: {var}",
+ name.as_str()
+ )))
+ );
+ }
- expected.assert_eq(&res);
+ expected.assert_eq(&res);
+ })
}
}
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index c36a8677dd..ae52986008 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -157,7 +157,7 @@ pub use {
tt,
},
hir_ty::{
- CastError, DropGlue, FnAbi, PointerCast, Variance,
+ CastError, DropGlue, FnAbi, PointerCast, Variance, attach_db, attach_db_allow_change,
consteval::ConstEvalError,
diagnostics::UnsafetyReason,
display::{ClosureStyle, DisplayTarget, HirDisplay, HirDisplayError, HirWrite},
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs
index 5a2849220e..1faa3c4165 100644
--- a/crates/hir/src/source_analyzer.rs
+++ b/crates/hir/src/source_analyzer.rs
@@ -14,7 +14,6 @@ use crate::{
db::HirDatabase,
semantics::{PathResolution, PathResolutionPerNs},
};
-use base_db::salsa;
use either::Either;
use hir_def::{
AdtId, AssocItemId, CallableDefId, ConstId, DefWithBodyId, FieldId, FunctionId, GenericDefId,
@@ -1637,7 +1636,7 @@ fn resolve_hir_path_(
Some(unresolved) => resolver
.generic_def()
.and_then(|def| {
- salsa::attach(db, || {
+ hir_ty::attach_db(db, || {
hir_ty::associated_type_shorthand_candidates(
db,
def,
diff --git a/crates/ide-assists/src/tests.rs b/crates/ide-assists/src/tests.rs
index c0637a7470..ade60691b5 100644
--- a/crates/ide-assists/src/tests.rs
+++ b/crates/ide-assists/src/tests.rs
@@ -5,7 +5,7 @@ use hir::{Semantics, db::HirDatabase, setup_tracing};
use ide_db::{
EditionedFileId, FileRange, RootDatabase, SnippetCap,
assists::ExprFillDefaultMode,
- base_db::{SourceDatabase, salsa},
+ base_db::SourceDatabase,
imports::insert_use::{ImportGranularity, InsertUseConfig},
source_change::FileSystemEdit,
};
@@ -109,7 +109,7 @@ fn assists(
resolve: AssistResolveStrategy,
range: ide_db::FileRange,
) -> Vec<Assist> {
- salsa::attach(db, || {
+ hir::attach_db(db, || {
HirDatabase::zalsa_register_downcaster(db);
crate::assists(db, config, resolve, range)
})
@@ -332,7 +332,7 @@ fn check_with_config(
_ => AssistResolveStrategy::All,
};
let mut acc = Assists::new(&ctx, resolve);
- salsa::attach(&db, || {
+ hir::attach_db(&db, || {
HirDatabase::zalsa_register_downcaster(&db);
handler(&mut acc, &ctx);
});
diff --git a/crates/ide-completion/src/context/analysis.rs b/crates/ide-completion/src/context/analysis.rs
index 77a94403ab..9ab7b7c82e 100644
--- a/crates/ide-completion/src/context/analysis.rs
+++ b/crates/ide-completion/src/context/analysis.rs
@@ -1,7 +1,6 @@
//! Module responsible for analyzing the code surrounding the cursor for completion.
use std::iter;
-use base_db::salsa;
use hir::{ExpandResult, InFile, Semantics, Type, TypeInfo, Variant};
use ide_db::{RootDatabase, active_parameter::ActiveParameter};
use itertools::Either;
@@ -86,7 +85,7 @@ pub(super) fn expand_and_analyze<'db>(
let original_offset = expansion.original_offset + relative_offset;
let token = expansion.original_file.token_at_offset(original_offset).left_biased()?;
- salsa::attach(sema.db, || analyze(sema, expansion, original_token, &token)).map(
+ hir::attach_db(sema.db, || analyze(sema, expansion, original_token, &token)).map(
|(analysis, expected, qualifier_ctx)| AnalysisResult {
analysis,
expected,
diff --git a/crates/ide-completion/src/context/tests.rs b/crates/ide-completion/src/context/tests.rs
index d9ec7915e3..24647ab627 100644
--- a/crates/ide-completion/src/context/tests.rs
+++ b/crates/ide-completion/src/context/tests.rs
@@ -1,4 +1,3 @@
-use base_db::salsa;
use expect_test::{Expect, expect};
use hir::HirDisplay;
@@ -11,12 +10,12 @@ fn check_expected_type_and_name(#[rust_analyzer::rust_fixture] ra_fixture: &str,
let (db, pos) = position(ra_fixture);
let config = TEST_CONFIG;
let (completion_context, _analysis) =
- salsa::attach(&db, || CompletionContext::new(&db, pos, &config).unwrap());
+ hir::attach_db(&db, || CompletionContext::new(&db, pos, &config).unwrap());
let ty = completion_context
.expected_type
.map(|t| {
- salsa::attach(&db, || {
+ hir::attach_db(&db, || {
t.display_test(&db, completion_context.krate.to_display_target(&db)).to_string()
})
})
diff --git a/crates/ide-completion/src/tests.rs b/crates/ide-completion/src/tests.rs
index b20b570c2b..ec9cd9fdf3 100644
--- a/crates/ide-completion/src/tests.rs
+++ b/crates/ide-completion/src/tests.rs
@@ -24,7 +24,7 @@ mod type_pos;
mod use_tree;
mod visibility;
-use base_db::{SourceDatabase, salsa};
+use base_db::SourceDatabase;
use expect_test::Expect;
use hir::db::HirDatabase;
use hir::{PrefixKind, setup_tracing};
@@ -244,7 +244,7 @@ pub(crate) fn check_edit_with_config(
let ra_fixture_after = trim_indent(ra_fixture_after);
let (db, position) = position(ra_fixture_before);
let completions: Vec<CompletionItem> =
- salsa::attach(&db, || crate::completions(&db, &config, position, None).unwrap());
+ hir::attach_db(&db, || crate::completions(&db, &config, position, None).unwrap());
let (completion,) = completions
.iter()
.filter(|it| it.lookup() == what)
@@ -307,7 +307,7 @@ pub(crate) fn get_all_items(
trigger_character: Option<char>,
) -> Vec<CompletionItem> {
let (db, position) = position(code);
- let res = salsa::attach(&db, || {
+ let res = hir::attach_db(&db, || {
HirDatabase::zalsa_register_downcaster(&db);
crate::completions(&db, &config, position, trigger_character)
})
diff --git a/crates/ide-completion/src/tests/flyimport.rs b/crates/ide-completion/src/tests/flyimport.rs
index d78a373101..2d3ebad934 100644
--- a/crates/ide-completion/src/tests/flyimport.rs
+++ b/crates/ide-completion/src/tests/flyimport.rs
@@ -1,4 +1,3 @@
-use base_db::salsa;
use expect_test::{Expect, expect};
use crate::{
@@ -20,7 +19,7 @@ fn check_with_config(
let (ctx, analysis) = crate::context::CompletionContext::new(&db, position, &config).unwrap();
let mut acc = crate::completions::Completions::default();
- salsa::attach(ctx.db, || {
+ hir::attach_db(ctx.db, || {
if let CompletionAnalysis::Name(NameContext { kind: NameKind::IdentPat(pat_ctx), .. }) =
&analysis
{
diff --git a/crates/ide-db/src/symbol_index.rs b/crates/ide-db/src/symbol_index.rs
index 76b647f8e9..c5ea9bcf5f 100644
--- a/crates/ide-db/src/symbol_index.rs
+++ b/crates/ide-db/src/symbol_index.rs
@@ -134,7 +134,7 @@ fn library_symbols(db: &dyn SymbolsDatabase, source_root_id: SourceRootId) -> Ar
let _p = tracing::info_span!("library_symbols").entered();
// We call this without attaching because this runs in parallel, so we need to attach here.
- salsa::attach(db, || {
+ hir::attach_db(db, || {
let mut symbol_collector = SymbolCollector::new(db);
db.source_root_crates(source_root_id)
@@ -153,7 +153,7 @@ fn module_symbols(db: &dyn SymbolsDatabase, module: Module) -> Arc<SymbolIndex>
let _p = tracing::info_span!("module_symbols").entered();
// We call this without attaching because this runs in parallel, so we need to attach here.
- salsa::attach(db, || Arc::new(SymbolIndex::new(SymbolCollector::new_module(db, module))))
+ hir::attach_db(db, || Arc::new(SymbolIndex::new(SymbolCollector::new_module(db, module))))
}
pub fn crate_symbols(db: &dyn SymbolsDatabase, krate: Crate) -> Box<[Arc<SymbolIndex>]> {
diff --git a/crates/ide-db/src/syntax_helpers/suggest_name.rs b/crates/ide-db/src/syntax_helpers/suggest_name.rs
index 2e03665765..1a0ef55a8b 100644
--- a/crates/ide-db/src/syntax_helpers/suggest_name.rs
+++ b/crates/ide-db/src/syntax_helpers/suggest_name.rs
@@ -473,7 +473,7 @@ mod tests {
frange.range,
"selection is not an expression(yet contained in one)"
);
- let name = salsa::attach(sema.db, || NameGenerator::default().for_variable(&expr, &sema));
+ let name = hir::attach_db(sema.db, || NameGenerator::default().for_variable(&expr, &sema));
assert_eq!(&name, expected);
}
diff --git a/crates/ide-diagnostics/src/tests.rs b/crates/ide-diagnostics/src/tests.rs
index 1839ab1c58..37af05e0d1 100644
--- a/crates/ide-diagnostics/src/tests.rs
+++ b/crates/ide-diagnostics/src/tests.rs
@@ -6,7 +6,7 @@ use hir::setup_tracing;
use ide_db::{
LineIndexDatabase, RootDatabase,
assists::{AssistResolveStrategy, ExprFillDefaultMode},
- base_db::{SourceDatabase, salsa},
+ base_db::SourceDatabase,
};
use itertools::Itertools;
use stdx::trim_indent;
@@ -74,7 +74,7 @@ fn check_nth_fix_with_config(
let after = trim_indent(ra_fixture_after);
let (db, file_position) = RootDatabase::with_position(ra_fixture_before);
- let diagnostic = salsa::attach(&db, || {
+ let diagnostic = hir::attach_db(&db, || {
super::full_diagnostics(
&db,
&config,
@@ -129,7 +129,7 @@ pub(crate) fn check_has_fix(
let (db, file_position) = RootDatabase::with_position(ra_fixture_before);
let mut conf = DiagnosticsConfig::test_sample();
conf.expr_fill_default = ExprFillDefaultMode::Default;
- let fix = salsa::attach(&db, || {
+ let fix = hir::attach_db(&db, || {
super::full_diagnostics(
&db,
&conf,
@@ -170,7 +170,7 @@ pub(crate) fn check_has_fix(
/// Checks that there's a diagnostic *without* fix at `$0`.
pub(crate) fn check_no_fix(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
let (db, file_position) = RootDatabase::with_position(ra_fixture);
- let diagnostic = salsa::attach(&db, || {
+ let diagnostic = hir::attach_db(&db, || {
super::full_diagnostics(
&db,
&DiagnosticsConfig::test_sample(),
@@ -212,7 +212,7 @@ pub(crate) fn check_diagnostics_with_config(
.iter()
.copied()
.flat_map(|file_id| {
- salsa::attach(&db, || {
+ hir::attach_db(&db, || {
super::full_diagnostics(
&db,
&config,
@@ -288,12 +288,12 @@ fn test_disabled_diagnostics() {
let (db, file_id) = RootDatabase::with_single_file(r#"mod foo;"#);
let file_id = file_id.file_id(&db);
- let diagnostics = salsa::attach(&db, || {
+ let diagnostics = hir::attach_db(&db, || {
super::full_diagnostics(&db, &config, &AssistResolveStrategy::All, file_id)
});
assert!(diagnostics.is_empty());
- let diagnostics = salsa::attach(&db, || {
+ let diagnostics = hir::attach_db(&db, || {
super::full_diagnostics(
&db,
&DiagnosticsConfig::test_sample(),
diff --git a/crates/ide-ssr/src/matching.rs b/crates/ide-ssr/src/matching.rs
index 9c0b9a6ff9..264f0660d7 100644
--- a/crates/ide-ssr/src/matching.rs
+++ b/crates/ide-ssr/src/matching.rs
@@ -791,8 +791,6 @@ impl PatternIterator {
#[cfg(test)]
mod tests {
- use ide_db::base_db::salsa;
-
use crate::{MatchFinder, SsrRule};
#[test]
@@ -801,7 +799,7 @@ mod tests {
let input = "fn foo() {} fn bar() {} fn main() { foo(1+2); }";
let (db, position, selections) = crate::tests::single_file(input);
- salsa::attach(&db, || {
+ hir::attach_db(&db, || {
let position = ide_db::FilePosition {
file_id: position.file_id.file_id(&db),
offset: position.offset,
diff --git a/crates/ide-ssr/src/resolving.rs b/crates/ide-ssr/src/resolving.rs
index 1d5f5adf2e..a48c0f8a57 100644
--- a/crates/ide-ssr/src/resolving.rs
+++ b/crates/ide-ssr/src/resolving.rs
@@ -1,7 +1,7 @@
//! This module is responsible for resolving paths within rules.
use hir::AsAssocItem;
-use ide_db::{FxHashMap, base_db::salsa};
+use ide_db::FxHashMap;
use parsing::Placeholder;
use syntax::{
SmolStr, SyntaxKind, SyntaxNode, SyntaxToken,
@@ -48,7 +48,7 @@ impl<'db> ResolvedRule<'db> {
resolution_scope: &ResolutionScope<'db>,
index: usize,
) -> Result<ResolvedRule<'db>, SsrError> {
- salsa::attach(resolution_scope.scope.db, || {
+ hir::attach_db(resolution_scope.scope.db, || {
let resolver = Resolver {
resolution_scope,
placeholders_by_stand_in: rule.placeholders_by_stand_in,
diff --git a/crates/ide-ssr/src/tests.rs b/crates/ide-ssr/src/tests.rs
index 24ad3ba7ef..1bb435f31f 100644
--- a/crates/ide-ssr/src/tests.rs
+++ b/crates/ide-ssr/src/tests.rs
@@ -2,10 +2,7 @@ use expect_test::{Expect, expect};
use hir::{FilePosition, FileRange};
use ide_db::{
EditionedFileId, FxHashSet,
- base_db::{
- SourceDatabase,
- salsa::{self, Durability},
- },
+ base_db::{SourceDatabase, salsa::Durability},
};
use test_utils::RangeOrOffset;
use triomphe::Arc;
@@ -101,7 +98,7 @@ fn assert_ssr_transform(rule: &str, input: &str, expected: Expect) {
fn assert_ssr_transforms(rules: &[&str], input: &str, expected: Expect) {
let (db, position, selections) = single_file(input);
- salsa::attach(&db, || {
+ hir::attach_db(&db, || {
let position = ide_db::FilePosition {
file_id: position.file_id.file_id(&db),
offset: position.offset,
@@ -149,7 +146,7 @@ fn print_match_debug_info(match_finder: &MatchFinder<'_>, file_id: EditionedFile
fn assert_matches(pattern: &str, code: &str, expected: &[&str]) {
let (db, position, selections) = single_file(code);
- salsa::attach(&db, || {
+ hir::attach_db(&db, || {
let mut match_finder = MatchFinder::in_context(
&db,
ide_db::FilePosition {
@@ -177,7 +174,7 @@ fn assert_matches(pattern: &str, code: &str, expected: &[&str]) {
fn assert_no_match(pattern: &str, code: &str) {
let (db, position, selections) = single_file(code);
- salsa::attach(&db, || {
+ hir::attach_db(&db, || {
let mut match_finder = MatchFinder::in_context(
&db,
ide_db::FilePosition {
diff --git a/crates/ide/src/doc_links/tests.rs b/crates/ide/src/doc_links/tests.rs
index 72436307d2..3fd885535a 100644
--- a/crates/ide/src/doc_links/tests.rs
+++ b/crates/ide/src/doc_links/tests.rs
@@ -4,7 +4,6 @@ use expect_test::{Expect, expect};
use hir::Semantics;
use ide_db::{
FilePosition, FileRange, RootDatabase,
- base_db::salsa,
defs::Definition,
documentation::{DocsRangeMap, Documentation, HasDocs},
};
@@ -48,7 +47,7 @@ fn check_rewrite(#[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expect
let sema = &Semantics::new(&analysis.db);
let (cursor_def, docs, range) = def_under_cursor(sema, &position);
let res =
- salsa::attach(sema.db, || rewrite_links(sema.db, docs.as_str(), cursor_def, Some(range)));
+ hir::attach_db(sema.db, || rewrite_links(sema.db, docs.as_str(), cursor_def, Some(range)));
expect.assert_eq(&res)
}
@@ -65,7 +64,7 @@ fn check_doc_links(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
.flat_map(|(text_range, link, ns)| {
let attr = range.map(text_range);
let is_inner_attr = attr.map(|(_file, attr)| attr.is_inner_attr()).unwrap_or(false);
- let def = salsa::attach(sema.db, || {
+ let def = hir::attach_db(sema.db, || {
resolve_doc_path_for_def(sema.db, cursor_def, &link, ns, is_inner_attr)
.unwrap_or_else(|| panic!("Failed to resolve {link}"))
});
diff --git a/crates/ide/src/inlay_hints.rs b/crates/ide/src/inlay_hints.rs
index 507af41d84..f7b09b4381 100644
--- a/crates/ide/src/inlay_hints.rs
+++ b/crates/ide/src/inlay_hints.rs
@@ -8,9 +8,7 @@ use hir::{
ClosureStyle, DisplayTarget, EditionedFileId, HasVisibility, HirDisplay, HirDisplayError,
HirWrite, InRealFile, ModuleDef, ModuleDefId, Semantics, sym,
};
-use ide_db::{
- FileRange, RootDatabase, base_db::salsa, famous_defs::FamousDefs, text_edit::TextEditBuilder,
-};
+use ide_db::{FileRange, RootDatabase, famous_defs::FamousDefs, text_edit::TextEditBuilder};
use ide_db::{FxHashSet, text_edit::TextEdit};
use itertools::Itertools;
use smallvec::{SmallVec, smallvec};
@@ -107,7 +105,7 @@ pub(crate) fn inlay_hints(
}
};
let mut preorder = file.preorder();
- salsa::attach(sema.db, || {
+ hir::attach_db(sema.db, || {
while let Some(event) = preorder.next() {
if matches!((&event, range_limit), (WalkEvent::Enter(node), Some(range)) if range.intersect(node.text_range()).is_none())
{
@@ -739,7 +737,7 @@ fn label_of_ty(
config: &InlayHintsConfig,
display_target: DisplayTarget,
) -> Result<(), HirDisplayError> {
- salsa::attach(sema.db, || {
+ hir::attach_db(sema.db, || {
let iter_item_type = hint_iterator(sema, famous_defs, ty);
match iter_item_type {
Some((iter_trait, item, ty)) => {
diff --git a/crates/ide/src/inlay_hints/adjustment.rs b/crates/ide/src/inlay_hints/adjustment.rs
index 0fd587a728..7231a3194d 100644
--- a/crates/ide/src/inlay_hints/adjustment.rs
+++ b/crates/ide/src/inlay_hints/adjustment.rs
@@ -10,7 +10,7 @@ use hir::{
Adjust, Adjustment, AutoBorrow, DisplayTarget, HirDisplay, Mutability, OverloadedDeref,
PointerCast, Safety,
};
-use ide_db::{base_db::salsa, famous_defs::FamousDefs};
+use ide_db::famous_defs::FamousDefs;
use ide_db::text_edit::TextEditBuilder;
use syntax::ast::{self, AstNode, prec::ExprPrecedence};
@@ -216,7 +216,7 @@ pub(super) fn hints(
text: if postfix { format!(".{}", text.trim_end()) } else { text.to_owned() },
linked_location: None,
tooltip: Some(config.lazy_tooltip(|| {
- salsa::attach(sema.db, || {
+ hir::attach_db(sema.db, || {
InlayTooltip::Markdown(format!(
"`{}` → `{}`\n\n**{}**\n\n{}",
source.display(sema.db, display_target),
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 5febe4ee20..f7d21c9479 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -67,7 +67,7 @@ use ide_db::{
FxHashMap, FxIndexSet, LineIndexDatabase,
base_db::{
CrateOrigin, CrateWorkspaceData, Env, FileSet, RootQueryDb, SourceDatabase, VfsPath,
- salsa::{self, Cancelled},
+ salsa::Cancelled,
},
prime_caches, symbol_index,
};
@@ -480,7 +480,7 @@ impl Analysis {
// if we were to attach it here.
Cancelled::catch(|| {
let symbols = symbol_index::world_symbols(&self.db, query);
- salsa::attach(&self.db, || {
+ hir::attach_db(&self.db, || {
symbols
.into_iter()
.filter_map(|s| s.try_to_nav(&Semantics::new(&self.db)))
@@ -899,7 +899,7 @@ impl Analysis {
where
F: FnOnce(&RootDatabase) -> T + std::panic::UnwindSafe,
{
- salsa::attach(&self.db, || {
+ hir::attach_db(&self.db, || {
// the trait solver code may invoke `as_view<HirDatabase>` outside of queries,
// so technically we might run into a panic in salsa if the downcaster has not yet been registered.
HirDatabase::zalsa_register_downcaster(&self.db);
diff --git a/crates/ide/src/navigation_target.rs b/crates/ide/src/navigation_target.rs
index 46ff16f972..db1298385b 100644
--- a/crates/ide/src/navigation_target.rs
+++ b/crates/ide/src/navigation_target.rs
@@ -10,7 +10,7 @@ use hir::{
};
use ide_db::{
FileId, FileRange, RootDatabase, SymbolKind,
- base_db::{CrateOrigin, LangCrateOrigin, RootQueryDb, salsa},
+ base_db::{CrateOrigin, LangCrateOrigin, RootQueryDb},
defs::{Definition, find_std_module},
documentation::{Documentation, HasDocs},
famous_defs::FamousDefs,
@@ -399,7 +399,7 @@ where
)
.map(|mut res| {
res.docs = self.docs(db);
- res.description = salsa::attach(db, || {
+ res.description = hir::attach_db(db, || {
Some(self.display(db, self.krate(db).to_display_target(db)).to_string())
});
res.container_name = self.container_name(db);
@@ -520,7 +520,7 @@ impl TryToNav for hir::Field {
NavigationTarget::from_named(db, src.with_value(it), SymbolKind::Field).map(
|mut res| {
res.docs = self.docs(db);
- res.description = salsa::attach(db, || {
+ res.description = hir::attach_db(db, || {
Some(self.display(db, krate.to_display_target(db)).to_string())
});
res
diff --git a/crates/ide/src/runnables.rs b/crates/ide/src/runnables.rs
index ec13ba0fde..cc1bbfbe20 100644
--- a/crates/ide/src/runnables.rs
+++ b/crates/ide/src/runnables.rs
@@ -10,7 +10,7 @@ use hir::{
use ide_assists::utils::{has_test_related_attribute, test_related_attribute_syn};
use ide_db::{
FilePosition, FxHashMap, FxIndexMap, FxIndexSet, RootDatabase, SymbolKind,
- base_db::{RootQueryDb, salsa},
+ base_db::RootQueryDb,
defs::Definition,
documentation::docs_from_attrs,
helpers::visit_file_defs,
@@ -413,7 +413,7 @@ pub(crate) fn runnable_impl(
let ty = def.self_ty(sema.db);
let adt_name = ty.as_adt()?.name(sema.db);
let mut ty_args = ty.generic_parameters(sema.db, display_target).peekable();
- let params = salsa::attach(sema.db, || {
+ let params = hir::attach_db(sema.db, || {
if ty_args.peek().is_some() {
format!("<{}>", ty_args.format_with(",", |ty, cb| cb(&ty)))
} else {
@@ -522,7 +522,7 @@ fn module_def_doctest(sema: &Semantics<'_, RootDatabase>, def: Definition) -> Op
let mut ty_args = ty.generic_parameters(db, display_target).peekable();
format_to!(path, "{}", name.display(db, edition));
if ty_args.peek().is_some() {
- salsa::attach(db, || {
+ hir::attach_db(db, || {
format_to!(path, "<{}>", ty_args.format_with(",", |ty, cb| cb(&ty)));
});
}
diff --git a/crates/ide/src/signature_help.rs b/crates/ide/src/signature_help.rs
index e74d997e97..5f7e12cf53 100644
--- a/crates/ide/src/signature_help.rs
+++ b/crates/ide/src/signature_help.rs
@@ -11,7 +11,6 @@ use hir::{
use ide_db::{
FilePosition, FxIndexMap,
active_parameter::{callable_for_arg_list, generic_def_for_node},
- base_db::salsa,
documentation::{Documentation, HasDocs},
};
use itertools::Itertools;
@@ -267,7 +266,7 @@ fn signature_help_for_call(
// In that case, fall back to render definitions of the respective parameters.
// This is overly conservative: we do not substitute known type vars
// (see FIXME in tests::impl_trait) and falling back on any unknowns.
- salsa::attach(db, || match (p.ty().contains_unknown(), fn_params.as_deref()) {
+ hir::attach_db(db, || match (p.ty().contains_unknown(), fn_params.as_deref()) {
(true, Some(fn_params)) => {
format_to!(buf, "{}", fn_params[idx].ty().display(db, display_target))
}
@@ -730,7 +729,7 @@ fn signature_help_for_tuple_pat_ish<'db>(
mod tests {
use expect_test::{Expect, expect};
- use ide_db::{FilePosition, base_db::salsa};
+ use ide_db::FilePosition;
use stdx::format_to;
use test_fixture::ChangeFixture;
@@ -759,7 +758,7 @@ mod tests {
"#
);
let (db, position) = position(&fixture);
- let sig_help = salsa::attach(&db, || crate::signature_help::signature_help(&db, position));
+ let sig_help = hir::attach_db(&db, || crate::signature_help::signature_help(&db, position));
let actual = match sig_help {
Some(sig_help) => {
let mut rendered = String::new();
diff --git a/crates/ide/src/static_index.rs b/crates/ide/src/static_index.rs
index 3f3d36bde2..453d6f537a 100644
--- a/crates/ide/src/static_index.rs
+++ b/crates/ide/src/static_index.rs
@@ -5,7 +5,7 @@ use arrayvec::ArrayVec;
use hir::{Crate, Module, Semantics, db::HirDatabase};
use ide_db::{
FileId, FileRange, FxHashMap, FxHashSet, RootDatabase,
- base_db::{RootQueryDb, SourceDatabase, VfsPath, salsa},
+ base_db::{RootQueryDb, SourceDatabase, VfsPath},
defs::{Definition, IdentClass},
documentation::Documentation,
famous_defs::FamousDefs,
@@ -276,7 +276,7 @@ impl StaticIndex<'_> {
for token in tokens {
let range = token.text_range();
let node = token.parent().unwrap();
- match salsa::attach(self.db, || get_definitions(&sema, token.clone())) {
+ match hir::attach_db(self.db, || get_definitions(&sema, token.clone())) {
Some(it) => {
for i in it {
add_token(i, range, &node);
@@ -293,7 +293,7 @@ impl StaticIndex<'_> {
vendored_libs_config: VendoredLibrariesConfig<'_>,
) -> StaticIndex<'a> {
let db = &analysis.db;
- salsa::attach(db, || {
+ hir::attach_db(db, || {
let work = all_modules(db).into_iter().filter(|module| {
let file_id = module.definition_source_file_id(db).original_file(db);
let source_root =
diff --git a/crates/ide/src/syntax_highlighting.rs b/crates/ide/src/syntax_highlighting.rs
index 720183ac54..079dedda00 100644
--- a/crates/ide/src/syntax_highlighting.rs
+++ b/crates/ide/src/syntax_highlighting.rs
@@ -16,7 +16,7 @@ use std::ops::ControlFlow;
use either::Either;
use hir::{DefWithBody, EditionedFileId, InFile, InRealFile, MacroKind, Name, Semantics};
-use ide_db::{FxHashMap, FxHashSet, Ranker, RootDatabase, SymbolKind, base_db::salsa};
+use ide_db::{FxHashMap, FxHashSet, Ranker, RootDatabase, SymbolKind};
use syntax::{
AstNode, AstToken, NodeOrToken,
SyntaxKind::*,
@@ -428,7 +428,7 @@ fn traverse(
Some(current_body) => {
let (ops, bindings) = per_body_cache.entry(current_body).or_insert_with(|| {
(
- salsa::attach(sema.db, || sema.get_unsafe_ops(current_body)),
+ hir::attach_db(sema.db, || sema.get_unsafe_ops(current_body)),
Default::default(),
)
});
@@ -440,7 +440,7 @@ fn traverse(
|node| unsafe_ops.contains(&InFile::new(descended_element.file_id, node));
let element = match descended_element.value {
NodeOrToken::Node(name_like) => {
- let hl = salsa::attach(sema.db, || {
+ let hl = hir::attach_db(sema.db, || {
highlight::name_like(
sema,
krate,
@@ -458,7 +458,7 @@ fn traverse(
}
hl
}
- NodeOrToken::Token(token) => salsa::attach(sema.db, || {
+ NodeOrToken::Token(token) => hir::attach_db(sema.db, || {
highlight::token(sema, token, edition, &is_unsafe_node, tt_level > 0)
.zip(Some(None))
}),
diff --git a/crates/ide/src/syntax_highlighting/inject.rs b/crates/ide/src/syntax_highlighting/inject.rs
index 4bb7308024..efc77823a2 100644
--- a/crates/ide/src/syntax_highlighting/inject.rs
+++ b/crates/ide/src/syntax_highlighting/inject.rs
@@ -5,7 +5,7 @@ use std::mem;
use either::Either;
use hir::{EditionedFileId, HirFileId, InFile, Semantics, sym};
use ide_db::{
- SymbolKind, active_parameter::ActiveParameter, base_db::salsa, defs::Definition,
+ SymbolKind, active_parameter::ActiveParameter, defs::Definition,
documentation::docs_with_rangemap, rust_doc::is_rust_fence,
};
use syntax::{
@@ -27,7 +27,7 @@ pub(super) fn ra_fixture(
expanded: &ast::String,
) -> Option<()> {
let active_parameter =
- salsa::attach(sema.db, || ActiveParameter::at_token(sema, expanded.syntax().clone()))?;
+ hir::attach_db(sema.db, || ActiveParameter::at_token(sema, expanded.syntax().clone()))?;
let has_rust_fixture_attr = active_parameter.attrs().is_some_and(|attrs| {
attrs.filter_map(|attr| attr.as_simple_path()).any(|path| {
path.segments()
@@ -128,7 +128,7 @@ pub(super) fn doc_comment(
// Extract intra-doc links and emit highlights for them.
if let Some((docs, doc_mapping)) = docs_with_rangemap(sema.db, &attributes) {
- salsa::attach(sema.db, || {
+ hir::attach_db(sema.db, || {
extract_definitions_from_docs(&docs)
.into_iter()
.filter_map(|(range, link, ns)| {
diff --git a/crates/ide/src/view_memory_layout.rs b/crates/ide/src/view_memory_layout.rs
index b014261981..47ca616f31 100644
--- a/crates/ide/src/view_memory_layout.rs
+++ b/crates/ide/src/view_memory_layout.rs
@@ -213,14 +213,13 @@ mod tests {
use crate::fixture;
use expect_test::expect;
- use ide_db::base_db::salsa;
fn make_memory_layout(
#[rust_analyzer::rust_fixture] ra_fixture: &str,
) -> Option<RecursiveMemoryLayout> {
let (analysis, position, _) = fixture::annotations(ra_fixture);
- salsa::attach(&analysis.db, || view_memory_layout(&analysis.db, position))
+ hir::attach_db(&analysis.db, || view_memory_layout(&analysis.db, position))
}
#[test]
diff --git a/crates/query-group-macro/src/queries.rs b/crates/query-group-macro/src/queries.rs
index 22a26c49fa..7698ce5fff 100644
--- a/crates/query-group-macro/src/queries.rs
+++ b/crates/query-group-macro/src/queries.rs
@@ -327,7 +327,8 @@ impl ToTokens for Lookup {
let wrapper_struct = self.interned_struct_path.to_token_stream();
let method = quote! {
#sig {
- #wrapper_struct::ingredient(self).data(self.as_dyn_database(), id.as_id()).0.clone()
+ let zalsa = self.zalsa();
+ #wrapper_struct::ingredient(zalsa).data(zalsa, id.as_id()).0.clone()
}
};
diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs
index d365c56edb..2a9ef98129 100644
--- a/crates/rust-analyzer/src/cli/analysis_stats.rs
+++ b/crates/rust-analyzer/src/cli/analysis_stats.rs
@@ -26,10 +26,7 @@ use ide::{
};
use ide_db::{
EditionedFileId, LineIndexDatabase, SnippetCap,
- base_db::{
- SourceDatabase,
- salsa::{self, Database},
- },
+ base_db::{SourceDatabase, salsa::Database},
};
use itertools::Itertools;
use load_cargo::{LoadCargoConfig, ProcMacroServerChoice, load_workspace};
@@ -315,7 +312,7 @@ impl flags::AnalysisStats {
shuffle(&mut rng, &mut bodies);
}
- salsa::attach(db, || {
+ hir::attach_db(db, || {
if !self.skip_lowering {
self.run_body_lowering(db, &vfs, &bodies, verbosity);
}
diff --git a/crates/span/src/hygiene.rs b/crates/span/src/hygiene.rs
index aef3fbf051..6c363825aa 100644
--- a/crates/span/src/hygiene.rs
+++ b/crates/span/src/hygiene.rs
@@ -67,6 +67,16 @@ const _: () = {
self.parent.hash(state);
}
}
+
+ impl zalsa_::HasJar for SyntaxContext {
+ type Jar = zalsa_struct_::JarImpl<SyntaxContext>;
+ const KIND: zalsa_::JarKind = zalsa_::JarKind::Struct;
+ }
+
+ zalsa_::register_jar! {
+ zalsa_::ErasedJar::erase::<SyntaxContext>()
+ }
+
/// Key to use during hash lookups. Each field is some type that implements `Lookup<T>`
/// for the owned type. This permits interning with an `&str` when a `String` is required and so forth.
#[derive(Hash)]
@@ -98,21 +108,38 @@ const _: () = {
salsa::plumbing::Location { file: file!(), line: line!() };
const DEBUG_NAME: &'static str = "SyntaxContextData";
const REVISIONS: std::num::NonZeroUsize = std::num::NonZeroUsize::MAX;
+ const PERSIST: bool = false;
+
type Fields<'a> = SyntaxContextData;
type Struct<'a> = SyntaxContext;
- }
- impl SyntaxContext {
- pub fn ingredient<Db>(db: &Db) -> &zalsa_struct_::IngredientImpl<Self>
+
+ fn serialize<S>(_: &Self::Fields<'_>, _: S) -> Result<S::Ok, S::Error>
where
- Db: ?Sized + zalsa_::Database,
+ S: zalsa_::serde::Serializer,
+ {
+ unimplemented!("attempted to serialize value that set `PERSIST` to false")
+ }
+
+ fn deserialize<'de, D>(_: D) -> Result<Self::Fields<'static>, D::Error>
+ where
+ D: zalsa_::serde::Deserializer<'de>,
{
+ unimplemented!("attempted to deserialize value that cannot set `PERSIST` to false");
+ }
+ }
+
+ impl SyntaxContext {
+ pub fn ingredient(zalsa: &zalsa_::Zalsa) -> &zalsa_struct_::IngredientImpl<Self> {
static CACHE: zalsa_::IngredientCache<zalsa_struct_::IngredientImpl<SyntaxContext>> =
zalsa_::IngredientCache::new();
- CACHE.get_or_create(db.zalsa(), || {
- db.zalsa()
- .lookup_jar_by_type::<zalsa_struct_::JarImpl<SyntaxContext>>()
- .get_or_create()
- })
+
+ // SAFETY: `lookup_jar_by_type` returns a valid ingredient index, and the only
+ // ingredient created by our jar is the struct ingredient.
+ unsafe {
+ CACHE.get_or_create(zalsa, || {
+ zalsa.lookup_jar_by_type::<zalsa_struct_::JarImpl<SyntaxContext>>()
+ })
+ }
}
}
impl zalsa_::AsId for SyntaxContext {
@@ -132,13 +159,14 @@ const _: () = {
impl zalsa_::SalsaStructInDb for SyntaxContext {
type MemoIngredientMap = salsa::plumbing::MemoIngredientSingletonIndex;
- fn lookup_or_create_ingredient_index(
- zalsa: &salsa::plumbing::Zalsa,
- ) -> salsa::plumbing::IngredientIndices {
- zalsa
- .lookup_jar_by_type::<zalsa_struct_::JarImpl<SyntaxContext>>()
- .get_or_create()
- .into()
+ fn lookup_ingredient_index(aux: &zalsa_::Zalsa) -> salsa::plumbing::IngredientIndices {
+ aux.lookup_jar_by_type::<zalsa_struct_::JarImpl<SyntaxContext>>().into()
+ }
+
+ fn entries(zalsa: &zalsa_::Zalsa) -> impl Iterator<Item = zalsa_::DatabaseKeyIndex> + '_ {
+ let _ingredient_index =
+ zalsa.lookup_jar_by_type::<zalsa_struct_::JarImpl<SyntaxContext>>();
+ <SyntaxContext>::ingredient(zalsa).entries(zalsa).map(|entry| entry.key())
}
#[inline]
@@ -149,6 +177,18 @@ const _: () = {
None
}
}
+
+ #[inline]
+ unsafe fn memo_table(
+ zalsa: &zalsa_::Zalsa,
+ id: zalsa_::Id,
+ current_revision: zalsa_::Revision,
+ ) -> zalsa_::MemoTableWithTypes<'_> {
+ // SAFETY: Guaranteed by caller.
+ unsafe {
+ zalsa.table().memos::<zalsa_struct_::Value<SyntaxContext>>(id, current_revision)
+ }
+ }
}
unsafe impl salsa::plumbing::Update for SyntaxContext {
@@ -184,8 +224,11 @@ const _: () = {
Edition: zalsa_::interned::HashEqLike<T2>,
SyntaxContext: zalsa_::interned::HashEqLike<T3>,
{
- SyntaxContext::ingredient(db).intern(
- db.as_dyn_database(),
+ let (zalsa, zalsa_local) = db.zalsas();
+
+ SyntaxContext::ingredient(zalsa).intern(
+ zalsa,
+ zalsa_local,
StructKey::<'db>(
outer_expn,
outer_transparency,
@@ -216,7 +259,8 @@ const _: () = {
Db: ?Sized + zalsa_::Database,
{
let id = self.as_salsa_id()?;
- let fields = SyntaxContext::ingredient(db).data(db.as_dyn_database(), id);
+ let zalsa = db.zalsa();
+ let fields = SyntaxContext::ingredient(zalsa).data(zalsa, id);
fields.outer_expn
}
@@ -225,7 +269,8 @@ const _: () = {
Db: ?Sized + zalsa_::Database,
{
let Some(id) = self.as_salsa_id() else { return Transparency::Opaque };
- let fields = SyntaxContext::ingredient(db).data(db.as_dyn_database(), id);
+ let zalsa = db.zalsa();
+ let fields = SyntaxContext::ingredient(zalsa).data(zalsa, id);
fields.outer_transparency
}
@@ -235,7 +280,8 @@ const _: () = {
{
match self.as_salsa_id() {
Some(id) => {
- let fields = SyntaxContext::ingredient(db).data(db.as_dyn_database(), id);
+ let zalsa = db.zalsa();
+ let fields = SyntaxContext::ingredient(zalsa).data(zalsa, id);
fields.edition
}
None => Edition::from_u32(SyntaxContext::MAX_ID - self.into_u32()),
@@ -248,7 +294,8 @@ const _: () = {
{
match self.as_salsa_id() {
Some(id) => {
- let fields = SyntaxContext::ingredient(db).data(db.as_dyn_database(), id);
+ let zalsa = db.zalsa();
+ let fields = SyntaxContext::ingredient(zalsa).data(zalsa, id);
fields.parent
}
None => self,
@@ -262,7 +309,8 @@ const _: () = {
{
match self.as_salsa_id() {
Some(id) => {
- let fields = SyntaxContext::ingredient(db).data(db.as_dyn_database(), id);
+ let zalsa = db.zalsa();
+ let fields = SyntaxContext::ingredient(zalsa).data(zalsa, id);
fields.opaque
}
None => self,
@@ -276,7 +324,8 @@ const _: () = {
{
match self.as_salsa_id() {
Some(id) => {
- let fields = SyntaxContext::ingredient(db).data(db.as_dyn_database(), id);
+ let zalsa = db.zalsa();
+ let fields = SyntaxContext::ingredient(zalsa).data(zalsa, id);
fields.opaque_and_semitransparent
}
None => self,