mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-08-04 10:50:15 +00:00
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:
parent
02ade79631
commit
c58ddafe90
195 changed files with 1473 additions and 1525 deletions
|
@ -136,7 +136,7 @@ pub(crate) fn query_group_impl(
|
|||
|
||||
let (_attrs, salsa_attrs) = filter_attrs(method.attrs.clone());
|
||||
|
||||
let mut query_kind = QueryKind::Tracked;
|
||||
let mut query_kind = QueryKind::TrackedWithSalsaStruct;
|
||||
let mut invoke = None;
|
||||
let mut cycle = None;
|
||||
let mut interned_struct_path = None;
|
||||
|
@ -183,14 +183,17 @@ pub(crate) fn query_group_impl(
|
|||
interned_struct_path = Some(path.path.clone());
|
||||
query_kind = QueryKind::Interned;
|
||||
}
|
||||
"invoke_interned" => {
|
||||
let path = syn::parse::<Parenthesized<Path>>(tts)?;
|
||||
invoke = Some(path.0.clone());
|
||||
query_kind = QueryKind::Tracked;
|
||||
}
|
||||
"invoke" => {
|
||||
let path = syn::parse::<Parenthesized<Path>>(tts)?;
|
||||
invoke = Some(path.0.clone());
|
||||
}
|
||||
"invoke_actual" => {
|
||||
let path = syn::parse::<Parenthesized<Path>>(tts)?;
|
||||
invoke = Some(path.0.clone());
|
||||
query_kind = QueryKind::TrackedWithSalsaStruct;
|
||||
if query_kind != QueryKind::Transparent {
|
||||
query_kind = QueryKind::TrackedWithSalsaStruct;
|
||||
}
|
||||
}
|
||||
"tracked" if method.default.is_some() => {
|
||||
query_kind = QueryKind::TrackedWithSalsaStruct;
|
||||
|
@ -292,10 +295,6 @@ pub(crate) fn query_group_impl(
|
|||
trait_methods.push(Queries::TrackedQuery(method));
|
||||
}
|
||||
(QueryKind::TrackedWithSalsaStruct, invoke) => {
|
||||
// while it is possible to make this reachable, it's not really worthwhile for a migration aid.
|
||||
// doing this would require attaching an attribute to the salsa struct parameter
|
||||
// in the query.
|
||||
assert_ne!(invoke.is_none(), method.default.is_none());
|
||||
let method = TrackedQuery {
|
||||
trait_name: trait_name_ident.clone(),
|
||||
generated_struct: None,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)",
|
||||
]"#]]);
|
||||
}
|
||||
|
|
|
@ -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)) })",
|
||||
]"#]]);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)) })",
|
||||
]"#]]);
|
||||
|
|
|
@ -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>;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue