mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-07 19:10:53 +00:00
109 lines
2.9 KiB
Rust
109 lines
2.9 KiB
Rust
use expect_test::expect;
|
|
|
|
mod logger_db;
|
|
use logger_db::LoggerDb;
|
|
use query_group_macro::query_group;
|
|
|
|
#[salsa_macros::input]
|
|
struct Input {
|
|
str: String,
|
|
}
|
|
|
|
#[query_group]
|
|
trait PartialMigrationDatabase: salsa::Database {
|
|
fn length_query(&self, input: Input) -> usize;
|
|
|
|
// renamed/invoke query
|
|
#[salsa::invoke(invoke_length_query_actual)]
|
|
fn invoke_length_query(&self, input: Input) -> usize;
|
|
|
|
// invoke tracked function
|
|
#[salsa::invoke(invoke_length_tracked_actual)]
|
|
fn invoke_length_tracked(&self, input: Input) -> usize;
|
|
}
|
|
|
|
fn length_query(db: &dyn PartialMigrationDatabase, input: Input) -> usize {
|
|
input.str(db).len()
|
|
}
|
|
|
|
fn invoke_length_query_actual(db: &dyn PartialMigrationDatabase, input: Input) -> usize {
|
|
input.str(db).len()
|
|
}
|
|
|
|
#[salsa_macros::tracked]
|
|
fn invoke_length_tracked_actual(db: &dyn PartialMigrationDatabase, input: Input) -> usize {
|
|
input.str(db).len()
|
|
}
|
|
|
|
#[test]
|
|
fn unadorned_query() {
|
|
let db = LoggerDb::default();
|
|
|
|
let input = Input::new(&db, String::from("Hello, world!"));
|
|
let len = db.length_query(input);
|
|
|
|
assert_eq!(len, 13);
|
|
db.assert_logs(expect![[r#"
|
|
[
|
|
"salsa_event(WillCheckCancellation)",
|
|
"salsa_event(WillExecute { database_key: length_query_shim(Id(0)) })",
|
|
]"#]]);
|
|
}
|
|
|
|
#[test]
|
|
fn invoke_query() {
|
|
let db = LoggerDb::default();
|
|
|
|
let input = Input::new(&db, String::from("Hello, world!"));
|
|
let len = db.invoke_length_query(input);
|
|
|
|
assert_eq!(len, 13);
|
|
db.assert_logs(expect![[r#"
|
|
[
|
|
"salsa_event(WillCheckCancellation)",
|
|
"salsa_event(WillExecute { database_key: invoke_length_query_shim(Id(0)) })",
|
|
]"#]]);
|
|
}
|
|
|
|
// todo: does this even make sense?
|
|
#[test]
|
|
fn invoke_tracked_query() {
|
|
let db = LoggerDb::default();
|
|
|
|
let input = Input::new(&db, String::from("Hello, world!"));
|
|
let len = db.invoke_length_tracked(input);
|
|
|
|
assert_eq!(len, 13);
|
|
db.assert_logs(expect![[r#"
|
|
[
|
|
"salsa_event(WillCheckCancellation)",
|
|
"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)) })",
|
|
]"#]]);
|
|
}
|
|
|
|
#[test]
|
|
fn new_salsa_baseline() {
|
|
let db = LoggerDb::default();
|
|
|
|
#[salsa_macros::input]
|
|
struct Input {
|
|
str: String,
|
|
}
|
|
|
|
#[salsa_macros::tracked]
|
|
fn new_salsa_length_query(db: &dyn PartialMigrationDatabase, input: Input) -> usize {
|
|
input.str(db).len()
|
|
}
|
|
|
|
let input = Input::new(&db, String::from("Hello, world!"));
|
|
let len = new_salsa_length_query(&db, input);
|
|
|
|
assert_eq!(len, 13);
|
|
db.assert_logs(expect![[r#"
|
|
[
|
|
"salsa_event(WillCheckCancellation)",
|
|
"salsa_event(WillExecute { database_key: new_salsa_length_query(Id(0)) })",
|
|
]"#]]);
|
|
}
|