Skip to content

Commit

Permalink
Small refactor to align trait/impl queries further
Browse files Browse the repository at this point in the history
commit-id:de61dfdb
  • Loading branch information
yuvalsw committed Feb 12, 2024
1 parent 98092cb commit d8aa316
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 28 deletions.
9 changes: 5 additions & 4 deletions crates/cairo-lang-semantic/src/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -344,11 +344,12 @@ pub trait SemanticGroup:
#[salsa::invoke(items::trt::trait_resolver_data)]
fn trait_resolver_data(&self, trait_id: TraitId) -> Maybe<Arc<ResolverData>>;
/// Private query to compute declaration data about a trait.
#[salsa::invoke(items::trt::priv_trait_semantic_declaration_data)]
fn priv_trait_semantic_declaration_data(
#[salsa::invoke(items::trt::priv_trait_declaration_data)]
fn priv_trait_declaration_data(
&self,
trait_id: TraitId,
) -> Maybe<items::trt::TraitDeclarationData>;

/// Returns the semantic definition diagnostics of a trait.
#[salsa::invoke(items::trt::trait_semantic_definition_diagnostics)]
fn trait_semantic_definition_diagnostics(
Expand Down Expand Up @@ -376,8 +377,8 @@ pub trait SemanticGroup:
#[salsa::invoke(items::trt::trait_type_by_name)]
fn trait_type_by_name(&self, trait_id: TraitId, name: SmolStr) -> Maybe<Option<TraitTypeId>>;
/// Private query to compute definition data about a trait.
#[salsa::invoke(items::trt::priv_trait_semantic_definition_data)]
fn priv_trait_semantic_definition_data(
#[salsa::invoke(items::trt::priv_trait_definition_data)]
fn priv_trait_definition_data(
&self,
trait_id: TraitId,
) -> Maybe<items::trt::TraitDefinitionData>;
Expand Down
40 changes: 16 additions & 24 deletions crates/cairo-lang-semantic/src/items/trt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,15 +171,7 @@ pub fn trait_semantic_declaration_diagnostics(
db: &dyn SemanticGroup,
trait_id: TraitId,
) -> Diagnostics<SemanticDiagnostic> {
let mut diagnostics = DiagnosticsBuilder::default();

let Ok(data) = db.priv_trait_semantic_declaration_data(trait_id) else {
return Diagnostics::default();
};

diagnostics.extend(data.diagnostics);

diagnostics.build()
db.priv_trait_declaration_data(trait_id).map(|data| data.diagnostics).unwrap_or_default()
}

/// Query implementation of [crate::db::SemanticGroup::trait_generic_params].
Expand Down Expand Up @@ -219,18 +211,18 @@ pub fn trait_generic_params_data(

/// Query implementation of [crate::db::SemanticGroup::trait_attributes].
pub fn trait_attributes(db: &dyn SemanticGroup, trait_id: TraitId) -> Maybe<Vec<Attribute>> {
Ok(db.priv_trait_semantic_declaration_data(trait_id)?.attributes)
Ok(db.priv_trait_declaration_data(trait_id)?.attributes)
}

/// Query implementation of [crate::db::SemanticGroup::trait_resolver_data].
pub fn trait_resolver_data(db: &dyn SemanticGroup, trait_id: TraitId) -> Maybe<Arc<ResolverData>> {
Ok(db.priv_trait_semantic_declaration_data(trait_id)?.resolver_data)
Ok(db.priv_trait_declaration_data(trait_id)?.resolver_data)
}

// --- Computation ---

/// Query implementation of [crate::db::SemanticGroup::priv_trait_semantic_declaration_data].
pub fn priv_trait_semantic_declaration_data(
/// Query implementation of [crate::db::SemanticGroup::priv_trait_declaration_data].
pub fn priv_trait_declaration_data(
db: &dyn SemanticGroup,
trait_id: TraitId,
) -> Maybe<TraitDeclarationData> {
Expand Down Expand Up @@ -290,11 +282,11 @@ pub fn trait_semantic_definition_diagnostics(
) -> Diagnostics<SemanticDiagnostic> {
let mut diagnostics = DiagnosticsBuilder::default();

let Ok(data) = db.priv_trait_semantic_definition_data(trait_id) else {
let Ok(data) = db.priv_trait_definition_data(trait_id) else {
return Diagnostics::default();
};

// TODO(yuval): move these into priv_trait_semantic_definition_data.
// TODO(yuval): move these into priv_trait_definition_data.
diagnostics.extend(data.diagnostics);
for trait_function_id in data.function_asts.keys() {
diagnostics.extend(db.trait_function_declaration_diagnostics(*trait_function_id));
Expand Down Expand Up @@ -322,7 +314,7 @@ pub fn trait_functions(
trait_id: TraitId,
) -> Maybe<OrderedHashMap<SmolStr, TraitFunctionId>> {
Ok(db
.priv_trait_semantic_definition_data(trait_id)?
.priv_trait_definition_data(trait_id)?
.function_asts
.keys()
.map(|function_id| {
Expand All @@ -347,7 +339,7 @@ pub fn trait_types(
trait_id: TraitId,
) -> Maybe<OrderedHashMap<SmolStr, TraitTypeId>> {
Ok(db
.priv_trait_semantic_definition_data(trait_id)?
.priv_trait_definition_data(trait_id)?
.item_type_asts
.keys()
.map(|type_id| {
Expand All @@ -368,8 +360,8 @@ pub fn trait_type_by_name(

// --- Computation ---

/// Query implementation of [crate::db::SemanticGroup::priv_trait_semantic_definition_data].
pub fn priv_trait_semantic_definition_data(
/// Query implementation of [crate::db::SemanticGroup::priv_trait_definition_data].
pub fn priv_trait_definition_data(
db: &dyn SemanticGroup,
trait_id: TraitId,
) -> Maybe<TraitDefinitionData> {
Expand Down Expand Up @@ -487,7 +479,7 @@ pub fn priv_trait_type_generic_params_data(
let module_file_id = trait_type_id.module_file_id(db.upcast());
let mut diagnostics = SemanticDiagnostics::new(module_file_id.file_id(db.upcast())?);
let trait_id = trait_type_id.trait_id(db.upcast());
let data = db.priv_trait_semantic_definition_data(trait_id)?;
let data = db.priv_trait_definition_data(trait_id)?;
let trait_type_ast = &data.item_type_asts[&trait_type_id];
let inference_id =
InferenceId::LookupItemGenerics(LookupItemId::TraitItem(TraitItemId::Type(trait_type_id)));
Expand Down Expand Up @@ -533,7 +525,7 @@ pub fn priv_trait_type_data(
let module_file_id = trait_type_id.module_file_id(db.upcast());
let mut diagnostics = SemanticDiagnostics::new(module_file_id.file_id(db.upcast())?);
let trait_id = trait_type_id.trait_id(db.upcast());
let data = db.priv_trait_semantic_definition_data(trait_id)?;
let data = db.priv_trait_definition_data(trait_id)?;
let type_syntax = &data.item_type_asts[&trait_type_id];

let type_generic_params_data = db.priv_trait_type_generic_params_data(trait_type_id)?;
Expand Down Expand Up @@ -597,7 +589,7 @@ pub fn priv_trait_function_generic_params_data(
let module_file_id = trait_function_id.module_file_id(db.upcast());
let mut diagnostics = SemanticDiagnostics::new(module_file_id.file_id(db.upcast())?);
let trait_id = trait_function_id.trait_id(db.upcast());
let data = db.priv_trait_semantic_definition_data(trait_id)?;
let data = db.priv_trait_definition_data(trait_id)?;
let function_syntax = &data.function_asts[&trait_function_id];
let declaration = function_syntax.declaration(syntax_db);
let inference_id = InferenceId::LookupItemGenerics(LookupItemId::TraitItem(
Expand Down Expand Up @@ -677,7 +669,7 @@ pub fn priv_trait_function_declaration_data(
let module_file_id = trait_function_id.module_file_id(db.upcast());
let mut diagnostics = SemanticDiagnostics::new(module_file_id.file_id(db.upcast())?);
let trait_id = trait_function_id.trait_id(db.upcast());
let data = db.priv_trait_semantic_definition_data(trait_id)?;
let data = db.priv_trait_definition_data(trait_id)?;
let function_syntax = &data.function_asts[&trait_function_id];
let declaration = function_syntax.declaration(syntax_db);
let function_generic_params_data =
Expand Down Expand Up @@ -830,7 +822,7 @@ pub fn priv_trait_function_body_data(
let module_file_id = trait_function_id.module_file_id(defs_db);
let mut diagnostics = SemanticDiagnostics::new(module_file_id.file_id(db.upcast())?);
let trait_id = trait_function_id.trait_id(defs_db);
let data = db.priv_trait_semantic_definition_data(trait_id)?;
let data = db.priv_trait_definition_data(trait_id)?;
let function_syntax = &data.function_asts[&trait_function_id];
// Compute declaration semantic.
let trait_function_declaration_data =
Expand Down

0 comments on commit d8aa316

Please sign in to comment.