Move ty lowering diagnostic definitions into a separate module

To keep them organized.
This commit is contained in:
Chayim Refael Friedman 2024-12-04 15:52:15 +02:00
parent 15d2d509d0
commit 82896b2cc4
4 changed files with 34 additions and 29 deletions

View file

@ -58,7 +58,7 @@ use crate::{
fold_tys, fold_tys,
generics::Generics, generics::Generics,
infer::{coerce::CoerceMany, expr::ExprIsRead, unify::InferenceTable}, infer::{coerce::CoerceMany, expr::ExprIsRead, unify::InferenceTable},
lower::{ImplTraitLoweringMode, TyLoweringDiagnostic}, lower::{diagnostics::TyLoweringDiagnostic, ImplTraitLoweringMode},
mir::MirSpan, mir::MirSpan,
to_assoc_type_id, to_assoc_type_id,
traits::FnTrait, traits::FnTrait,

View file

@ -88,10 +88,10 @@ pub use infer::{
PointerCast, PointerCast,
}; };
pub use interner::Interner; pub use interner::Interner;
pub use lower::diagnostics::*;
pub use lower::{ pub use lower::{
associated_type_shorthand_candidates, GenericArgsProhibitedReason, ImplTraitLoweringMode, associated_type_shorthand_candidates, ImplTraitLoweringMode, ParamLoweringMode, TyDefId,
ParamLoweringMode, TyDefId, TyLoweringContext, TyLoweringDiagnostic, TyLoweringDiagnosticKind, TyLoweringContext, ValueTyDefId,
ValueTyDefId,
}; };
pub use mapping::{ pub use mapping::{
from_assoc_type_id, from_chalk_trait_id, from_foreign_def_id, from_placeholder_idx, from_assoc_type_id, from_chalk_trait_id, from_foreign_def_id, from_placeholder_idx,

View file

@ -5,6 +5,8 @@
//! - Building the type for an item: This happens through the `ty` query. //! - Building the type for an item: This happens through the `ty` query.
//! //!
//! This usually involves resolving names, collecting generic arguments etc. //! This usually involves resolving names, collecting generic arguments etc.
pub(crate) mod diagnostics;
use std::{ use std::{
cell::OnceCell, cell::OnceCell,
iter, mem, iter, mem,
@ -59,6 +61,7 @@ use crate::{
db::HirDatabase, db::HirDatabase,
error_lifetime, error_lifetime,
generics::{generics, trait_self_param_idx, Generics}, generics::{generics, trait_self_param_idx, Generics},
lower::diagnostics::*,
make_binders, make_binders,
mapping::{from_chalk_trait_id, lt_to_placeholder_idx, ToChalk}, mapping::{from_chalk_trait_id, lt_to_placeholder_idx, ToChalk},
static_lifetime, to_assoc_type_id, to_chalk_trait_id, to_placeholder_idx, static_lifetime, to_assoc_type_id, to_chalk_trait_id, to_placeholder_idx,
@ -102,31 +105,6 @@ impl ImplTraitLoweringState {
} }
} }
type TypeSource = Either<TypeRefId, hir_def::type_ref::TypeSource>;
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct TyLoweringDiagnostic {
pub source: TypeSource,
pub kind: TyLoweringDiagnosticKind,
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum TyLoweringDiagnosticKind {
GenericArgsProhibited { segment: u32, reason: GenericArgsProhibitedReason },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GenericArgsProhibitedReason {
Module,
TyParam,
SelfTy,
PrimitiveTy,
/// When there is a generic enum, within the expression `Enum::Variant`,
/// either `Enum` or `Variant` are allowed to have generic arguments, but not both.
// FIXME: This is not used now but it should be.
EnumVariant,
}
#[derive(Debug)] #[derive(Debug)]
pub struct TyLoweringContext<'a> { pub struct TyLoweringContext<'a> {
pub db: &'a dyn HirDatabase, pub db: &'a dyn HirDatabase,

View file

@ -0,0 +1,27 @@
use either::Either;
use hir_def::type_ref::TypeRefId;
type TypeSource = Either<TypeRefId, hir_def::type_ref::TypeSource>;
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct TyLoweringDiagnostic {
pub source: TypeSource,
pub kind: TyLoweringDiagnosticKind,
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum TyLoweringDiagnosticKind {
GenericArgsProhibited { segment: u32, reason: GenericArgsProhibitedReason },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GenericArgsProhibitedReason {
Module,
TyParam,
SelfTy,
PrimitiveTy,
/// When there is a generic enum, within the expression `Enum::Variant`,
/// either `Enum` or `Variant` are allowed to have generic arguments, but not both.
// FIXME: This is not used now but it should be.
EnumVariant,
}