Skip to main content

squawk_ide/
db.rs

1use ::line_index::LineIndex;
2use salsa::Database as Db;
3use salsa::Storage;
4use squawk_syntax::{Parse, SourceFile};
5use std::sync::Arc;
6
7use crate::binder;
8use crate::binder::Binder;
9
10#[salsa::input]
11pub struct File {
12    #[returns(ref)]
13    pub content: Arc<str>,
14}
15
16#[salsa::tracked]
17pub fn parse(db: &dyn Db, file: File) -> Parse<SourceFile> {
18    SourceFile::parse(file.content(db))
19}
20
21#[salsa::tracked]
22pub fn line_index(db: &dyn Db, file: File) -> LineIndex {
23    LineIndex::new(file.content(db))
24}
25
26#[salsa::tracked]
27pub fn bind(db: &dyn Db, file: File) -> Binder {
28    let result = parse(db, file);
29    let source_file = result.tree();
30    binder::bind(&source_file)
31}
32
33#[salsa::db]
34#[derive(Clone, Default)]
35pub struct Database {
36    storage: Storage<Self>,
37}
38
39impl salsa::Database for Database {}