Make HirFileId, EditionedFileId and macro files Salsa struct

And make more queries non-interned.

Also flip the default for queries, now the default is to not intern and to intern a query you need to say `invoke_interned`.
This commit is contained in:
Chayim Refael Friedman 2025-04-18 12:10:29 +03:00
parent 02ade79631
commit c58ddafe90
195 changed files with 1473 additions and 1525 deletions

View file

@ -2,12 +2,16 @@ use query_group_macro::query_group;
#[query_group]
pub trait ArityDb: salsa::Database {
#[salsa::invoke_interned(one)]
fn one(&self, a: ()) -> String;
#[salsa::invoke_interned(two)]
fn two(&self, a: (), b: ()) -> String;
#[salsa::invoke_interned(three)]
fn three(&self, a: (), b: (), c: ()) -> String;
#[salsa::invoke_interned(none)]
fn none(&self) -> String;
}

View file

@ -94,12 +94,7 @@ fn cycle_a(db: &dyn CycleDatabase, abc: ABC) -> Result<(), Error> {
abc.a(db).invoke(db, abc)
}
fn recover_a(
_db: &dyn CycleDatabase,
cycle: &salsa::Cycle,
_: CycleDatabaseData,
_abc: ABC,
) -> Result<(), Error> {
fn recover_a(_db: &dyn CycleDatabase, cycle: &salsa::Cycle, _abc: ABC) -> Result<(), Error> {
Err(Error { cycle: cycle.participant_keys().map(|k| format!("{k:?}")).collect() })
}
@ -107,12 +102,7 @@ fn cycle_b(db: &dyn CycleDatabase, abc: ABC) -> Result<(), Error> {
abc.b(db).invoke(db, abc)
}
fn recover_b(
_db: &dyn CycleDatabase,
cycle: &salsa::Cycle,
_: CycleDatabaseData,
_abc: ABC,
) -> Result<(), Error> {
fn recover_b(_db: &dyn CycleDatabase, cycle: &salsa::Cycle, _abc: ABC) -> Result<(), Error> {
Err(Error { cycle: cycle.participant_keys().map(|k| format!("{k:?}")).collect() })
}
@ -156,11 +146,11 @@ fn inner_cycle() {
let err = db.cycle_c(abc);
assert!(err.is_err());
let expected = expect![[r#"
[
"cycle_a_shim(Id(1400))",
"cycle_b_shim(Id(1000))",
]
"#]];
[
"cycle_a_shim(Id(0))",
"cycle_b_shim(Id(0))",
]
"#]];
expected.assert_debug_eq(&err.unwrap_err().cycle);
}
@ -241,16 +231,16 @@ fn cycle_multiple() {
let expected = expect![[r#"
(
[
"cycle_a_shim(Id(1000))",
"cycle_b_shim(Id(1400))",
"cycle_a_shim(Id(0))",
"cycle_b_shim(Id(0))",
],
[
"cycle_a_shim(Id(1000))",
"cycle_b_shim(Id(1400))",
"cycle_a_shim(Id(0))",
"cycle_b_shim(Id(0))",
],
[
"cycle_a_shim(Id(1000))",
"cycle_b_shim(Id(1400))",
"cycle_a_shim(Id(0))",
"cycle_b_shim(Id(0))",
],
)
"#]];
@ -267,8 +257,8 @@ fn cycle_mixed_1() {
let expected = expect![[r#"
[
"cycle_b_shim(Id(1000))",
"cycle_c_shim(Id(c00))",
"cycle_b_shim(Id(0))",
"cycle_c_shim(Id(0))",
]
"#]];
expected.assert_debug_eq(&db.cycle_c(abc).unwrap_err().cycle);

View file

@ -12,13 +12,14 @@ pub trait HelloWorldDatabase: salsa::Database {
fn input_string(&self) -> String;
// unadorned query
#[salsa::invoke_interned(length_query)]
fn length_query(&self, key: ()) -> usize;
// unadorned query
fn length_query_with_no_params(&self) -> usize;
// renamed/invoke query
#[salsa::invoke(invoke_length_query_actual)]
#[salsa::invoke_interned(invoke_length_query_actual)]
fn invoke_length_query(&self, key: ()) -> usize;
// not a query. should not invoked
@ -26,7 +27,7 @@ pub trait HelloWorldDatabase: salsa::Database {
fn transparent_length(&self, key: ()) -> usize;
#[salsa::transparent]
#[salsa::invoke(transparent_and_invoke_length_actual)]
#[salsa::invoke_interned(transparent_and_invoke_length_actual)]
fn transparent_and_invoke_length(&self, key: ()) -> usize;
}
@ -121,5 +122,8 @@ fn transparent_invoke() {
"salsa_event(WillExecute { database_key: create_data_HelloWorldDatabase(Id(0)) })",
"salsa_event(WillCheckCancellation)",
"salsa_event(DidValidateMemoizedValue { database_key: create_data_HelloWorldDatabase(Id(0)) })",
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: transparent_and_invoke_length_shim(Id(800)) })",
"salsa_event(WillCheckCancellation)",
]"#]]);
}

View file

@ -45,8 +45,6 @@ fn intern_with_query() {
db.assert_logs(expect![[r#"
[
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: create_data_InternedDB(Id(400)) })",
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: interned_len_shim(Id(c00)) })",
"salsa_event(WillExecute { database_key: interned_len_shim(Id(0)) })",
]"#]]);
}

View file

@ -11,10 +11,11 @@ pub trait LruDB: salsa::Database {
fn input_string(&self) -> String;
#[salsa::lru(16)]
#[salsa::invoke_interned(length_query)]
fn length_query(&self, key: ()) -> usize;
#[salsa::lru(16)]
#[salsa::invoke(invoked_query)]
#[salsa::invoke_interned(invoked_query)]
fn length_query_invoke(&self, key: ()) -> usize;
}

View file

@ -6,11 +6,13 @@ pub trait DatabaseOne: salsa::Database {
fn input_string(&self) -> String;
// unadorned query
#[salsa::invoke_interned(length)]
fn length(&self, key: ()) -> usize;
}
#[query_group]
pub trait DatabaseTwo: DatabaseOne {
#[salsa::invoke_interned(second_length)]
fn second_length(&self, key: ()) -> usize;
}

View file

@ -46,9 +46,7 @@ fn unadorned_query() {
db.assert_logs(expect![[r#"
[
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: create_data_PartialMigrationDatabase(Id(400)) })",
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: length_query_shim(Id(c00)) })",
"salsa_event(WillExecute { database_key: length_query_shim(Id(0)) })",
]"#]]);
}
@ -63,9 +61,7 @@ fn invoke_query() {
db.assert_logs(expect![[r#"
[
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: create_data_PartialMigrationDatabase(Id(400)) })",
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: invoke_length_query_shim(Id(c00)) })",
"salsa_event(WillExecute { database_key: invoke_length_query_shim(Id(0)) })",
]"#]]);
}
@ -81,9 +77,7 @@ fn invoke_tracked_query() {
db.assert_logs(expect![[r#"
[
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: create_data_PartialMigrationDatabase(Id(400)) })",
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: invoke_length_tracked_shim(Id(c00)) })",
"salsa_event(WillExecute { database_key: invoke_length_tracked_shim(Id(0)) })",
"salsa_event(WillCheckCancellation)",
"salsa_event(WillExecute { database_key: invoke_length_tracked_actual(Id(0)) })",
]"#]]);

View file

@ -12,8 +12,10 @@ pub trait ResultDatabase: salsa::Database {
#[salsa::input]
fn input_string(&self) -> String;
#[salsa::invoke_interned(length)]
fn length(&self, key: ()) -> Result<usize, Error>;
#[salsa::invoke_interned(length2)]
fn length2(&self, key: ()) -> Result<usize, Error>;
}

View file

@ -8,6 +8,7 @@ pub trait SourceDb: salsa::Database {
#[query_group]
pub trait RootDb: SourceDb {
#[salsa::invoke_interned(parse)]
fn parse(&self, id: usize) -> String;
}

View file

@ -9,6 +9,7 @@ pub trait HelloWorldDatabase: salsa::Database {
#[salsa::input]
fn input_string(&self) -> String;
#[salsa::invoke_interned(length_query)]
fn length_query(&self, key: ()) -> (usize, usize);
}