#[salsa::query_group(InputsStorage)]
pub trait MyQueryGroup {
#[salsa::input] // `set_manifest` is auto-generated
fn manifest(&self) -> Manifest;
#[salsa::input] // `set_source_text` is auto-generated
fn source_text(&self, name: String) -> String;
fn ast(&self, name: String) -> Ast;
fn whole_program_ast(&self) -> Ast;
}
fn ast(db: &dyn MyQueryGroup, name: String) -> Ast {
let source_text: String = db.source_text(name);
// do the actual parser on `source_text`
return ast;
fn whole_program_ast(db: &dyn MyQueryGroup, name: String) -> Ast {
let mut ast = Ast::default();
for source_file in db.manifest() {
let ast_source_file = db.ast(name);
ast.extend(ast_source_file);
}
#[salsa::query_group(InputsStorage)]
pub trait MyQueryGroup {
#[salsa::input] // `set_manifest` is auto-generated
fn manifest(&self) -> Manifest;
#[salsa::input] // `set_source_text` is auto-generated
fn source_text(&self, name: String) -> String;
fn ast(&self, name: String) -> Ast;
fn whole_program_ast(&self) -> Ast;
}
fn ast(db: &dyn MyQueryGroup, name: String) -> Ast {
let source_text: String = db.source_text(name);
// do the actual parser on `source_text`
return ast;
}
fn whole_program_ast(db: &dyn MyQueryGroup, name: String) -> Ast {
let mut ast = Ast::default();
for source_file in db.manifest() {
let ast_source_file = db.ast(name);
ast.extend(ast_source_file);
}
return ast;
}
Database storage
Query storage