Skip to main content

squawk_ide/
builtins.rs

1#[cfg(not(target_arch = "wasm32"))]
2use etcetera::BaseStrategy;
3use salsa::Database as Db;
4#[cfg(not(target_arch = "wasm32"))]
5use url::Url;
6
7use crate::db::File;
8
9const BUILTINS_SQL: &str = include_str!("generated/builtins.sql");
10
11#[salsa::tracked]
12pub fn builtins_file(db: &dyn Db) -> File {
13    File::new(db, BUILTINS_SQL.into())
14}
15
16#[cfg(not(target_arch = "wasm32"))]
17#[salsa::tracked]
18pub fn builtins_url(db: &dyn Db) -> Option<Url> {
19    let strategy = etcetera::base_strategy::choose_base_strategy().ok()?;
20    let config_dir = strategy.config_dir();
21    let cache_dir = config_dir.join("squawk/stubs");
22    let path = cache_dir.join("builtins.sql");
23    std::fs::create_dir_all(&cache_dir).ok()?;
24    let builtins = builtins_file(db);
25    let builtins_sql = builtins.content(db);
26    std::fs::write(&path, builtins_sql.as_ref()).ok()?;
27    Url::from_file_path(path).ok()
28}
29
30#[cfg(test)]
31mod test {
32    use squawk_syntax::ast;
33
34    use crate::builtins::BUILTINS_SQL;
35
36    #[test]
37    fn no_errors() {
38        let parse = ast::SourceFile::parse(BUILTINS_SQL);
39        assert_eq!(parse.errors(), vec![]);
40    }
41}