Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 21 additions & 4 deletions crates/cairo-lang-compiler/src/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ use cairo_lang_defs::db::{init_defs_group, init_external_files};
use cairo_lang_diagnostics::Maybe;
use cairo_lang_filesystem::cfg::CfgSet;
use cairo_lang_filesystem::db::{
CORELIB_VERSION, FileContentStorage, FileContentView, FilesGroup, init_dev_corelib,
init_files_group, register_files_group_view,
CORELIB_VERSION, CrateConfigStorage, CrateConfigView, FileContentStorage, FileContentView,
FilesGroup, init_dev_corelib, init_files_group, register_crate_config_view,
register_files_group_view,
};
use cairo_lang_filesystem::detect::detect_corelib;
use cairo_lang_filesystem::flag::{Flag, FlagsGroup};
Expand Down Expand Up @@ -73,6 +74,7 @@ fn estimate_code_size(
pub struct RootDatabase {
storage: salsa::Storage<RootDatabase>,
file_contents: FileContentStorage,
crate_configs: CrateConfigStorage,
}
#[salsa::db]
impl salsa::Database for RootDatabase {}
Expand All @@ -81,6 +83,11 @@ impl FileContentView for RootDatabase {
Some(&self.file_contents)
}
}
impl CrateConfigView for RootDatabase {
fn crate_config_storage(&self) -> Option<&CrateConfigStorage> {
Some(&self.crate_configs)
}
}
impl CloneableDatabase for RootDatabase {
fn dyn_clone(&self) -> Box<dyn CloneableDatabase> {
Box::new(self.clone())
Expand All @@ -89,8 +96,14 @@ impl CloneableDatabase for RootDatabase {

impl RootDatabase {
fn new(default_plugin_suite: PluginSuite, optimizations: Optimizations) -> Self {
let mut res = Self { storage: Default::default(), file_contents: Default::default() };
let mut res = Self {
storage: Default::default(),
file_contents: Default::default(),
crate_configs: Default::default(),
};

register_files_group_view(&res);
register_crate_config_view(&res);
init_external_files(&mut res);
init_files_group(&mut res);
init_lowering_group(&mut res, optimizations, Some(estimate_code_size));
Expand All @@ -113,7 +126,11 @@ impl RootDatabase {

/// Snapshots the db for read only.
pub fn snapshot(&self) -> RootDatabase {
RootDatabase { storage: self.storage.clone(), file_contents: self.file_contents.clone() }
RootDatabase {
storage: self.storage.clone(),
file_contents: self.file_contents.clone(),
crate_configs: self.crate_configs.clone(),
}
}
}

Expand Down
39 changes: 19 additions & 20 deletions crates/cairo-lang-compiler/src/project.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ use cairo_lang_defs::db::DefsGroup;
use cairo_lang_defs::ids::ModuleId;
use cairo_lang_filesystem::db::{
CORELIB_CRATE_NAME, CrateConfiguration, CrateIdentifier, CrateSettings, FilesGroup,
set_generated_file_content_for_input,
set_crate_config_for_input, set_generated_file_content_for_input,
};
use cairo_lang_filesystem::ids::{CrateId, CrateInput, CrateLongId, Directory, SmolStrId};
use cairo_lang_filesystem::set_crate_config;
pub use cairo_lang_project::*;
use cairo_lang_utils::Intern;
use salsa::Database;
Expand Down Expand Up @@ -45,24 +44,25 @@ pub fn setup_single_file_project(
let file_dir = canonical.parent().ok_or_else(bad_path_err)?;
let file_stem = path.file_stem().and_then(OsStr::to_str).ok_or_else(bad_path_err)?;
if file_stem == "lib" {
let crate_name = file_dir.to_str().ok_or_else(bad_path_err)?;
let crate_id = CrateId::plain(db, SmolStrId::from(db, crate_name));
set_crate_config!(
db,
crate_id,
Some(CrateConfiguration::default_for_root(Directory::Real(file_dir.to_path_buf())))
);
let crate_name = file_dir.to_str().ok_or_else(bad_path_err)?.to_string();
let crate_input =
CrateInput::Real { name: crate_name.clone(), discriminator: Some(crate_name.clone()) };
let config = CrateConfiguration::default_for_root(Directory::Real(file_dir.to_path_buf()))
.into_crate_configuration_input(db);
set_crate_config_for_input(db, crate_input, Some(config));
let crate_id = CrateId::plain(db, SmolStrId::from(db, crate_name));
Ok(crate_id.long(db).clone().into_crate_input(db))
} else {
// If file_stem is not lib, create a fake lib file.
{
let crate_id = CrateId::plain(db, SmolStrId::from(db, file_stem));
set_crate_config!(
db,
crate_id,
Some(CrateConfiguration::default_for_root(Directory::Real(file_dir.to_path_buf())))
);
let crate_input = CrateInput::Real {
name: file_stem.to_string(),
discriminator: Some(file_stem.to_string()),
};
let config =
CrateConfiguration::default_for_root(Directory::Real(file_dir.to_path_buf()))
.into_crate_configuration_input(db);
set_crate_config_for_input(db, crate_input, Some(config));
}
let file_input = {
let crate_id = CrateId::plain(db, SmolStrId::from(db, file_stem));
Expand Down Expand Up @@ -98,11 +98,10 @@ pub fn update_crate_root(
root: Directory<'_>,
) {
let (crate_id, crate_settings) = get_crate_id_and_settings(db, crate_identifier, config);
set_crate_config!(
db,
crate_id,
Some(CrateConfiguration { root, settings: crate_settings.clone(), cache_file: None })
);
let crate_input = db.crate_input(crate_id).clone();
let config = CrateConfiguration { root, settings: crate_settings.clone(), cache_file: None }
.into_crate_configuration_input(db);
set_crate_config_for_input(db, crate_input, Some(config));
}

/// Sets up the DB to compile the project at the given path.
Expand Down
19 changes: 16 additions & 3 deletions crates/cairo-lang-defs/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ use std::sync::Arc;

use cairo_lang_debug::debug::DebugWithDb;
use cairo_lang_filesystem::db::{
CrateConfiguration, FileContentStorage, FileContentView, FilesGroup, init_files_group,
override_file_content_for_input, register_files_group_view,
CrateConfigStorage, CrateConfigView, CrateConfiguration, FileContentStorage, FileContentView,
FilesGroup, init_files_group, override_file_content_for_input, register_crate_config_view,
register_files_group_view,
};
use cairo_lang_filesystem::ids::{CrateId, Directory, FileLongId, SmolStrId};
use cairo_lang_filesystem::set_crate_config;
Expand Down Expand Up @@ -32,6 +33,7 @@ use crate::plugin::{
pub struct DatabaseForTesting {
storage: salsa::Storage<DatabaseForTesting>,
file_contents: FileContentStorage,
crate_configs: CrateConfigStorage,
}
#[salsa::db]
impl salsa::Database for DatabaseForTesting {}
Expand All @@ -40,11 +42,22 @@ impl FileContentView for DatabaseForTesting {
Some(&self.file_contents)
}
}
impl CrateConfigView for DatabaseForTesting {
fn crate_config_storage(&self) -> Option<&CrateConfigStorage> {
Some(&self.crate_configs)
}
}

impl Default for DatabaseForTesting {
fn default() -> Self {
let mut res = Self { storage: Default::default(), file_contents: Default::default() };
let mut res = Self {
storage: Default::default(),
file_contents: Default::default(),
crate_configs: Default::default(),
};

register_files_group_view(&res);
register_crate_config_view(&res);
init_external_files(&mut res);
init_files_group(&mut res);
init_defs_group(&mut res);
Expand Down
19 changes: 16 additions & 3 deletions crates/cairo-lang-doc/src/tests/test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ use anyhow::{Result, anyhow};
use cairo_lang_defs::db::{DefsGroup, init_defs_group};
use cairo_lang_defs::ids::ModuleId;
use cairo_lang_filesystem::db::{
CrateConfiguration, FileContentStorage, FileContentView, FilesGroup, init_dev_corelib,
init_files_group, override_file_content_for_input, register_files_group_view,
CrateConfigStorage, CrateConfigView, CrateConfiguration, FileContentStorage, FileContentView,
FilesGroup, init_dev_corelib, init_files_group, override_file_content_for_input,
register_crate_config_view, register_files_group_view,
};
use cairo_lang_filesystem::detect::detect_corelib;
use cairo_lang_filesystem::ids::{CrateId, Directory, FileLongId, SmolStrId};
Expand All @@ -19,6 +20,7 @@ use salsa::Database;
pub struct TestDatabase {
storage: salsa::Storage<TestDatabase>,
file_contents: FileContentStorage,
crate_configs: CrateConfigStorage,
}
#[salsa::db]
impl salsa::Database for TestDatabase {}
Expand All @@ -27,11 +29,22 @@ impl FileContentView for TestDatabase {
Some(&self.file_contents)
}
}
impl CrateConfigView for TestDatabase {
fn crate_config_storage(&self) -> Option<&CrateConfigStorage> {
Some(&self.crate_configs)
}
}

impl Default for TestDatabase {
fn default() -> Self {
let mut res = Self { storage: Default::default(), file_contents: Default::default() };
let mut res = Self {
storage: Default::default(),
file_contents: Default::default(),
crate_configs: Default::default(),
};

register_files_group_view(&res);
register_crate_config_view(&res);
init_files_group(&mut res);
init_defs_group(&mut res);
init_semantic_group(&mut res);
Expand Down
Loading
Loading