Split out salsa_macros
Does not do much yet due to tracing pulling syn but oh well
diff --git a/Cargo.lock b/Cargo.lock
index 1542084..d257988 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -85,6 +85,7 @@
"query-group-macro",
"rustc-hash 2.1.1",
"salsa",
+ "salsa-macros",
"semver",
"span",
"syntax",
@@ -630,6 +631,7 @@
"rustc-hash 2.1.1",
"rustc_apfloat",
"salsa",
+ "salsa-macros",
"smallvec",
"span",
"stdx",
@@ -660,6 +662,7 @@
"query-group-macro",
"rustc-hash 2.1.1",
"salsa",
+ "salsa-macros",
"smallvec",
"span",
"stdx",
@@ -700,6 +703,7 @@
"rustc-hash 2.1.1",
"rustc_apfloat",
"salsa",
+ "salsa-macros",
"scoped-tls",
"smallvec",
"span",
@@ -936,6 +940,7 @@
"rayon",
"rustc-hash 2.1.1",
"salsa",
+ "salsa-macros",
"span",
"stdx",
"syntax",
@@ -1729,6 +1734,7 @@
"proc-macro2",
"quote",
"salsa",
+ "salsa-macros",
"syn",
]
diff --git a/Cargo.toml b/Cargo.toml
index 191820d..a29717d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -131,7 +131,8 @@
pulldown-cmark-to-cmark = "10.0.4"
pulldown-cmark = { version = "0.9.6", default-features = false }
rayon = "1.10.0"
-salsa = "0.21.0"
+salsa = { version = "0.21.0", default-features = false, features = ["rayon","salsa_unstable"] }
+salsa-macros = "0.21.0"
semver = "1.0.26"
serde = { version = "1.0.219" }
serde_derive = { version = "1.0.219" }
diff --git a/crates/base-db/Cargo.toml b/crates/base-db/Cargo.toml
index 4414345..e2e3253 100644
--- a/crates/base-db/Cargo.toml
+++ b/crates/base-db/Cargo.toml
@@ -15,6 +15,7 @@
la-arena.workspace = true
dashmap.workspace = true
salsa.workspace = true
+salsa-macros.workspace = true
query-group.workspace = true
rustc-hash.workspace = true
triomphe.workspace = true
diff --git a/crates/base-db/src/input.rs b/crates/base-db/src/input.rs
index 499c9b3..9660e6e 100644
--- a/crates/base-db/src/input.rs
+++ b/crates/base-db/src/input.rs
@@ -392,7 +392,7 @@
pub type CratesIdMap = FxHashMap<CrateBuilderId, Crate>;
-#[salsa::input]
+#[salsa_macros::input]
#[derive(Debug)]
pub struct Crate {
#[return_ref]
diff --git a/crates/base-db/src/lib.rs b/crates/base-db/src/lib.rs
index 9275a58..f7f4e02 100644
--- a/crates/base-db/src/lib.rs
+++ b/crates/base-db/src/lib.rs
@@ -1,4 +1,8 @@
//! base_db defines basic database traits. The concrete DB is defined by ide.
+
+pub use salsa;
+pub use salsa_macros;
+
// FIXME: Rename this crate, base db is non descriptive
mod change;
mod input;
@@ -17,7 +21,6 @@
use dashmap::{DashMap, mapref::entry::Entry};
pub use query_group::{self};
use rustc_hash::{FxHashSet, FxHasher};
-pub use salsa::{self};
use salsa::{Durability, Setter};
pub use semver::{BuildMetadata, Prerelease, Version, VersionReq};
use span::Edition;
@@ -28,7 +31,7 @@
#[macro_export]
macro_rules! impl_intern_key {
($id:ident, $loc:ident) => {
- #[salsa::interned(no_lifetime)]
+ #[salsa_macros::interned(no_lifetime)]
pub struct $id {
pub loc: $loc,
}
@@ -161,7 +164,7 @@
}
}
-#[salsa::interned(no_lifetime, debug, constructor=from_span)]
+#[salsa_macros::interned(no_lifetime, debug, constructor=from_span)]
pub struct EditionedFileId {
pub editioned_file_id: span::EditionedFileId,
}
@@ -196,18 +199,18 @@
}
}
-#[salsa::input(debug)]
+#[salsa_macros::input(debug)]
pub struct FileText {
pub text: Arc<str>,
pub file_id: vfs::FileId,
}
-#[salsa::input(debug)]
+#[salsa_macros::input(debug)]
pub struct FileSourceRootInput {
pub source_root_id: SourceRootId,
}
-#[salsa::input(debug)]
+#[salsa_macros::input(debug)]
pub struct SourceRootInput {
pub source_root: Arc<SourceRoot>,
}
@@ -274,7 +277,7 @@
deps
}
-#[salsa::db]
+#[salsa_macros::db]
pub trait SourceDatabase: salsa::Database {
/// Text of the file.
fn file_text(&self, file_id: vfs::FileId) -> FileText;
@@ -353,7 +356,7 @@
}
fn parse_errors(db: &dyn RootQueryDb, file_id: EditionedFileId) -> Option<&[SyntaxError]> {
- #[salsa::tracked(return_ref)]
+ #[salsa_macros::tracked(return_ref)]
fn parse_errors(db: &dyn RootQueryDb, file_id: EditionedFileId) -> Option<Box<[SyntaxError]>> {
let errors = db.parse(file_id).errors();
match &*errors {
diff --git a/crates/hir-def/Cargo.toml b/crates/hir-def/Cargo.toml
index f97597f..c1c89e8 100644
--- a/crates/hir-def/Cargo.toml
+++ b/crates/hir-def/Cargo.toml
@@ -28,6 +28,7 @@
rustc_apfloat = "0.2.2"
text-size.workspace = true
salsa.workspace = true
+salsa-macros.workspace = true
query-group.workspace = true
ra-ap-rustc_parse_format.workspace = true
diff --git a/crates/hir-def/src/lang_item.rs b/crates/hir-def/src/lang_item.rs
index 6a4ac19..51a833b 100644
--- a/crates/hir-def/src/lang_item.rs
+++ b/crates/hir-def/src/lang_item.rs
@@ -84,7 +84,7 @@
}
/// Salsa query. This will look for lang items in a specific crate.
-#[salsa::tracked(return_ref)]
+#[salsa_macros::tracked(return_ref)]
pub fn crate_lang_items(db: &dyn DefDatabase, krate: Crate) -> Option<Box<LangItems>> {
let _p = tracing::info_span!("crate_lang_items_query").entered();
@@ -153,7 +153,7 @@
/// Salsa query. Look for a lang item, starting from the specified crate and recursively
/// traversing its dependencies.
-#[salsa::tracked]
+#[salsa_macros::tracked]
pub fn lang_item(
db: &dyn DefDatabase,
start_crate: Crate,
diff --git a/crates/hir-def/src/lib.rs b/crates/hir-def/src/lib.rs
index 737941d..cf65e63 100644
--- a/crates/hir-def/src/lib.rs
+++ b/crates/hir-def/src/lib.rs
@@ -554,7 +554,7 @@
impl_from!(ModuleId for ItemContainerId);
/// A Data Type
-#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
+#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum AdtId {
StructId(StructId),
UnionId(UnionId),
@@ -563,7 +563,7 @@
impl_from!(StructId, UnionId, EnumId for AdtId);
/// A macro
-#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
+#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum MacroId {
Macro2Id(Macro2Id),
MacroRulesId(MacroRulesId),
@@ -619,7 +619,7 @@
/// A constant, which might appears as a const item, an anonymous const block in expressions
/// or patterns, or as a constant in types with const generics.
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum GeneralConstId {
ConstId(ConstId),
StaticId(StaticId),
@@ -656,7 +656,7 @@
}
/// The defs which have a body (have root expressions for type inference).
-#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
+#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum DefWithBodyId {
FunctionId(FunctionId),
StaticId(StaticId),
@@ -701,7 +701,7 @@
// casting them, and somehow making the constructors private, which would be annoying.
impl_from!(FunctionId, ConstId, TypeAliasId for AssocItemId);
-#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
+#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum GenericDefId {
AdtId(AdtId),
// consts can have type parameters from their parents (i.e. associated consts of traits)
@@ -790,7 +790,7 @@
}
}
-#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
+#[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum CallableDefId {
FunctionId(FunctionId),
StructId(StructId),
@@ -906,7 +906,7 @@
}
}
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum VariantId {
EnumVariantId(EnumVariantId),
StructId(StructId),
diff --git a/crates/hir-def/src/test_db.rs b/crates/hir-def/src/test_db.rs
index 2f76751..4709754 100644
--- a/crates/hir-def/src/test_db.rs
+++ b/crates/hir-def/src/test_db.rs
@@ -19,7 +19,7 @@
src::HasSource,
};
-#[salsa::db]
+#[salsa_macros::db]
#[derive(Clone)]
pub(crate) struct TestDB {
storage: salsa::Storage<Self>,
@@ -44,7 +44,7 @@
}
}
-#[salsa::db]
+#[salsa_macros::db]
impl salsa::Database for TestDB {
fn salsa_event(&self, event: &dyn std::ops::Fn() -> salsa::Event) {
let mut events = self.events.lock().unwrap();
@@ -63,7 +63,7 @@
impl panic::RefUnwindSafe for TestDB {}
-#[salsa::db]
+#[salsa_macros::db]
impl SourceDatabase for TestDB {
fn file_text(&self, file_id: base_db::FileId) -> FileText {
self.files.file_text(file_id)
diff --git a/crates/hir-expand/Cargo.toml b/crates/hir-expand/Cargo.toml
index b83efca..ed818c5 100644
--- a/crates/hir-expand/Cargo.toml
+++ b/crates/hir-expand/Cargo.toml
@@ -21,6 +21,7 @@
triomphe.workspace = true
query-group.workspace = true
salsa.workspace = true
+salsa-macros.workspace = true
# local deps
stdx.workspace = true
diff --git a/crates/hir-expand/src/change.rs b/crates/hir-expand/src/change.rs
index 6873cb7..3959741 100644
--- a/crates/hir-expand/src/change.rs
+++ b/crates/hir-expand/src/change.rs
@@ -1,7 +1,6 @@
//! Defines a unit of change that can applied to the database to get the next
//! state. Changes are transactional.
-use base_db::{CrateGraphBuilder, FileChange, SourceRoot};
-use salsa::Durability;
+use base_db::{CrateGraphBuilder, FileChange, SourceRoot, salsa::Durability};
use span::FileId;
use triomphe::Arc;
diff --git a/crates/hir-expand/src/db.rs b/crates/hir-expand/src/db.rs
index 67391db..7cb1b6c 100644
--- a/crates/hir-expand/src/db.rs
+++ b/crates/hir-expand/src/db.rs
@@ -144,7 +144,7 @@
fn syntax_context(&self, file: HirFileId, edition: Edition) -> SyntaxContext;
}
-#[salsa::interned(no_lifetime, id = span::SyntaxContext)]
+#[salsa_macros::interned(no_lifetime, id = span::SyntaxContext)]
pub struct SyntaxContextWrapper {
pub data: SyntaxContext,
}
diff --git a/crates/hir-expand/src/lib.rs b/crates/hir-expand/src/lib.rs
index ad35f70..d844d8f 100644
--- a/crates/hir-expand/src/lib.rs
+++ b/crates/hir-expand/src/lib.rs
@@ -1050,7 +1050,7 @@
intern::impl_internable!(ModPath, attrs::AttrInput);
-#[salsa::interned(no_lifetime, debug)]
+#[salsa_macros::interned(no_lifetime, debug)]
#[doc(alias = "MacroFileId")]
pub struct MacroCallId {
pub loc: MacroCallLoc,
@@ -1070,7 +1070,7 @@
}
}
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum HirFileId {
FileId(EditionedFileId),
MacroFile(MacroCallId),
diff --git a/crates/hir-ty/Cargo.toml b/crates/hir-ty/Cargo.toml
index 69ad770..efa544c 100644
--- a/crates/hir-ty/Cargo.toml
+++ b/crates/hir-ty/Cargo.toml
@@ -34,6 +34,7 @@
rustc_apfloat = "0.2.2"
query-group.workspace = true
salsa.workspace = true
+salsa-macros.workspace = true
ra-ap-rustc_abi.workspace = true
ra-ap-rustc_index.workspace = true
diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs
index 6d7e58b..9def39d 100644
--- a/crates/hir-ty/src/lower.rs
+++ b/crates/hir-ty/src/lower.rs
@@ -1468,7 +1468,7 @@
}
}
-#[salsa::tracked(cycle_result = type_for_adt_cycle_result)]
+#[salsa_macros::tracked(cycle_result = type_for_adt_cycle_result)]
fn type_for_adt_tracked(db: &dyn HirDatabase, adt: AdtId) -> Binders<Ty> {
type_for_adt(db, adt)
}
@@ -1533,7 +1533,7 @@
}
impl_from!(BuiltinType, AdtId(StructId, EnumId, UnionId), TypeAliasId for TyDefId);
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa::Supertype)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)]
pub enum ValueTyDefId {
FunctionId(FunctionId),
StructId(StructId),
diff --git a/crates/hir-ty/src/test_db.rs b/crates/hir-ty/src/test_db.rs
index d2bba12..bcd8aa6 100644
--- a/crates/hir-ty/src/test_db.rs
+++ b/crates/hir-ty/src/test_db.rs
@@ -16,7 +16,7 @@
use test_utils::extract_annotations;
use triomphe::Arc;
-#[salsa::db]
+#[salsa_macros::db]
#[derive(Clone)]
pub(crate) struct TestDB {
storage: salsa::Storage<Self>,
@@ -47,7 +47,7 @@
}
}
-#[salsa::db]
+#[salsa_macros::db]
impl SourceDatabase for TestDB {
fn file_text(&self, file_id: base_db::FileId) -> FileText {
self.files.file_text(file_id)
@@ -102,7 +102,7 @@
}
}
-#[salsa::db]
+#[salsa_macros::db]
impl salsa::Database for TestDB {
fn salsa_event(&self, event: &dyn std::ops::Fn() -> salsa::Event) {
let mut events = self.events.lock().unwrap();
diff --git a/crates/ide-db/Cargo.toml b/crates/ide-db/Cargo.toml
index f1d6b60..583318d 100644
--- a/crates/ide-db/Cargo.toml
+++ b/crates/ide-db/Cargo.toml
@@ -24,6 +24,7 @@
indexmap.workspace = true
memchr = "2.7.4"
salsa.workspace = true
+salsa-macros.workspace = true
query-group.workspace = true
triomphe.workspace = true
nohash-hasher.workspace = true
diff --git a/crates/ide-db/src/lib.rs b/crates/ide-db/src/lib.rs
index a433f18..63cc7cd 100644
--- a/crates/ide-db/src/lib.rs
+++ b/crates/ide-db/src/lib.rs
@@ -76,7 +76,7 @@
pub type FilePosition = FilePositionWrapper<FileId>;
pub type FileRange = FileRangeWrapper<FileId>;
-#[salsa::db]
+#[salsa_macros::db]
pub struct RootDatabase {
// FIXME: Revisit this commit now that we migrated to the new salsa, given we store arcs in this
// db directly now
@@ -91,7 +91,7 @@
impl std::panic::RefUnwindSafe for RootDatabase {}
-#[salsa::db]
+#[salsa_macros::db]
impl salsa::Database for RootDatabase {
fn salsa_event(&self, _event: &dyn Fn() -> salsa::Event) {}
}
@@ -118,7 +118,7 @@
}
}
-#[salsa::db]
+#[salsa_macros::db]
impl SourceDatabase for RootDatabase {
fn file_text(&self, file_id: vfs::FileId) -> FileText {
self.files.file_text(file_id)
diff --git a/crates/query-group-macro/Cargo.toml b/crates/query-group-macro/Cargo.toml
index 8aeb262..8b03d8f 100644
--- a/crates/query-group-macro/Cargo.toml
+++ b/crates/query-group-macro/Cargo.toml
@@ -20,3 +20,4 @@
[dev-dependencies]
expect-test = "1.5.1"
salsa.workspace = true
+salsa-macros.workspace = true
diff --git a/crates/query-group-macro/src/lib.rs b/crates/query-group-macro/src/lib.rs
index 3ade127..6b81928 100644
--- a/crates/query-group-macro/src/lib.rs
+++ b/crates/query-group-macro/src/lib.rs
@@ -178,7 +178,7 @@
let supertraits = &item_trait.supertraits;
let db_attr: Attribute = parse_quote! {
- #[salsa::db]
+ #[salsa_macros::db]
};
item_trait.attrs.push(db_attr);
@@ -407,7 +407,7 @@
.collect::<Vec<proc_macro2::TokenStream>>();
let input_struct = quote! {
- #[salsa::input]
+ #[salsa_macros::input]
pub(crate) struct #input_struct_name {
#(#fields),*
}
@@ -418,7 +418,7 @@
let create_data_method = quote! {
#[allow(non_snake_case)]
- #[salsa::tracked]
+ #[salsa_macros::tracked]
fn #create_data_ident(db: &dyn #trait_name_ident) -> #input_struct_name {
#input_struct_name::new(db, #(#field_params),*)
}
@@ -443,7 +443,7 @@
item_trait.items.append(&mut lookup_signatures);
let trait_impl = quote! {
- #[salsa::db]
+ #[salsa_macros::db]
impl<DB> #trait_name_ident for DB
where
DB: #supertraits,
diff --git a/crates/query-group-macro/src/queries.rs b/crates/query-group-macro/src/queries.rs
index d4d4058..baac3e8 100644
--- a/crates/query-group-macro/src/queries.rs
+++ b/crates/query-group-macro/src/queries.rs
@@ -49,7 +49,7 @@
})
.into_iter()
.chain(self.lru.map(|lru| quote!(lru = #lru)));
- let annotation = quote!(#[salsa::tracked( #(#options),* )]);
+ let annotation = quote!(#[salsa_macros::tracked( #(#options),* )]);
let pat_and_tys = &self.pat_and_tys;
let params = self
diff --git a/crates/query-group-macro/tests/interned.rs b/crates/query-group-macro/tests/interned.rs
index 26ed316..f738185 100644
--- a/crates/query-group-macro/tests/interned.rs
+++ b/crates/query-group-macro/tests/interned.rs
@@ -6,7 +6,7 @@
mod logger_db;
use logger_db::LoggerDb;
-#[salsa::interned(no_lifetime)]
+#[salsa_macros::interned(no_lifetime)]
pub struct InternedString {
data: String,
}
diff --git a/crates/query-group-macro/tests/logger_db.rs b/crates/query-group-macro/tests/logger_db.rs
index 0bb8646..bade0c2 100644
--- a/crates/query-group-macro/tests/logger_db.rs
+++ b/crates/query-group-macro/tests/logger_db.rs
@@ -1,6 +1,6 @@
use std::sync::{Arc, Mutex};
-#[salsa::db]
+#[salsa_macros::db]
#[derive(Default, Clone)]
pub(crate) struct LoggerDb {
storage: salsa::Storage<Self>,
@@ -12,7 +12,7 @@
logs: Arc<Mutex<Vec<String>>>,
}
-#[salsa::db]
+#[salsa_macros::db]
impl salsa::Database for LoggerDb {
fn salsa_event(&self, event: &dyn Fn() -> salsa::Event) {
let event = event();
diff --git a/crates/query-group-macro/tests/old_and_new.rs b/crates/query-group-macro/tests/old_and_new.rs
index a18b23a..cc57ba7 100644
--- a/crates/query-group-macro/tests/old_and_new.rs
+++ b/crates/query-group-macro/tests/old_and_new.rs
@@ -4,7 +4,7 @@
use logger_db::LoggerDb;
use query_group_macro::query_group;
-#[salsa::input]
+#[salsa_macros::input]
struct Input {
str: String,
}
@@ -30,7 +30,7 @@
input.str(db).len()
}
-#[salsa::tracked]
+#[salsa_macros::tracked]
fn invoke_length_tracked_actual(db: &dyn PartialMigrationDatabase, input: Input) -> usize {
input.str(db).len()
}
@@ -87,12 +87,12 @@
fn new_salsa_baseline() {
let db = LoggerDb::default();
- #[salsa::input]
+ #[salsa_macros::input]
struct Input {
str: String,
}
- #[salsa::tracked]
+ #[salsa_macros::tracked]
fn new_salsa_length_query(db: &dyn PartialMigrationDatabase, input: Input) -> usize {
input.str(db).len()
}
diff --git a/crates/query-group-macro/tests/supertrait.rs b/crates/query-group-macro/tests/supertrait.rs
index 70073ac..ad8ada3 100644
--- a/crates/query-group-macro/tests/supertrait.rs
+++ b/crates/query-group-macro/tests/supertrait.rs
@@ -1,6 +1,6 @@
use query_group_macro::query_group;
-#[salsa::db]
+#[salsa_macros::db]
pub trait SourceDb: salsa::Database {
/// Text of the file.
fn file_text(&self, id: usize) -> String;