Trait ra_ap_hir_ty::db::HirDatabase
source · pub trait HirDatabase: Database + HasQueryGroup<HirDatabaseStorage> + DefDatabase + Upcast<dyn DefDatabase> {
Show 56 methods
// Required methods
fn infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>;
fn mir_body(
&self,
def: DefWithBodyId
) -> Result<Arc<MirBody>, MirLowerError>;
fn mir_body_for_closure(
&self,
def: ClosureId
) -> Result<Arc<MirBody>, MirLowerError>;
fn monomorphized_mir_body(
&self,
def: DefWithBodyId,
subst: Substitution,
env: Arc<TraitEnvironment>
) -> Result<Arc<MirBody>, MirLowerError>;
fn monomorphized_mir_body_for_closure(
&self,
def: ClosureId,
subst: Substitution,
env: Arc<TraitEnvironment>
) -> Result<Arc<MirBody>, MirLowerError>;
fn borrowck(
&self,
def: DefWithBodyId
) -> Result<Arc<[BorrowckResult]>, MirLowerError>;
fn const_eval(
&self,
def: GeneralConstId,
subst: Substitution,
trait_env: Option<Arc<TraitEnvironment>>
) -> Result<Const, ConstEvalError>;
fn const_eval_static(&self, def: StaticId) -> Result<Const, ConstEvalError>;
fn const_eval_discriminant(
&self,
def: EnumVariantId
) -> Result<i128, ConstEvalError>;
fn ty(&self, def: TyDefId) -> Binders<Ty>;
fn value_ty(&self, def: ValueTyDefId) -> Option<Binders<Ty>>;
fn impl_self_ty(&self, def: ImplId) -> Binders<Ty>;
fn const_param_ty(&self, def: ConstParamId) -> Ty;
fn impl_trait(&self, def: ImplId) -> Option<Binders<TraitRef>>;
fn field_types(
&self,
var: VariantId
) -> Arc<ArenaMap<LocalFieldId, Binders<Ty>>>;
fn layout_of_adt(
&self,
def: AdtId,
subst: Substitution,
env: Arc<TraitEnvironment>
) -> Result<Arc<Layout>, LayoutError>;
fn layout_of_ty(
&self,
ty: Ty,
env: Arc<TraitEnvironment>
) -> Result<Arc<Layout>, LayoutError>;
fn target_data_layout(
&self,
krate: CrateId
) -> Result<Arc<TargetDataLayout>, Arc<str>>;
fn lookup_impl_method(
&self,
env: Arc<TraitEnvironment>,
func: FunctionId,
fn_subst: Substitution
) -> (FunctionId, Substitution);
fn callable_item_signature(&self, def: CallableDefId) -> PolyFnSig;
fn return_type_impl_traits(
&self,
def: FunctionId
) -> Option<Arc<Binders<ImplTraits>>>;
fn type_alias_impl_traits(
&self,
def: TypeAliasId
) -> Option<Arc<Binders<ImplTraits>>>;
fn generic_predicates_for_param(
&self,
def: GenericDefId,
param_id: TypeOrConstParamId,
assoc_name: Option<Name>
) -> Arc<[Binders<QuantifiedWhereClause>]>;
fn generic_predicates(
&self,
def: GenericDefId
) -> Arc<[Binders<QuantifiedWhereClause>]>;
fn trait_environment_for_body(
&self,
def: DefWithBodyId
) -> Arc<TraitEnvironment>;
fn trait_environment(&self, def: GenericDefId) -> Arc<TraitEnvironment>;
fn generic_defaults(&self, def: GenericDefId) -> Arc<[Binders<GenericArg>]>;
fn inherent_impls_in_crate(&self, krate: CrateId) -> Arc<InherentImpls>;
fn inherent_impls_in_block(
&self,
block: BlockId
) -> Option<Arc<InherentImpls>>;
fn incoherent_inherent_impl_crates(
&self,
krate: CrateId,
fp: TyFingerprint
) -> SmallVec<[CrateId; 2]>;
fn trait_impls_in_crate(&self, krate: CrateId) -> Arc<TraitImpls>;
fn trait_impls_in_block(&self, block: BlockId) -> Option<Arc<TraitImpls>>;
fn trait_impls_in_deps(&self, krate: CrateId) -> Arc<[Arc<TraitImpls>]>;
fn intern_callable_def(
&self,
callable_def: CallableDefId
) -> InternedCallableDefId;
fn lookup_intern_callable_def(
&self,
key: InternedCallableDefId
) -> CallableDefId;
fn intern_type_or_const_param_id(
&self,
param_id: TypeOrConstParamId
) -> InternedTypeOrConstParamId;
fn lookup_intern_type_or_const_param_id(
&self,
key: InternedTypeOrConstParamId
) -> TypeOrConstParamId;
fn intern_lifetime_param_id(
&self,
param_id: LifetimeParamId
) -> InternedLifetimeParamId;
fn lookup_intern_lifetime_param_id(
&self,
key: InternedLifetimeParamId
) -> LifetimeParamId;
fn intern_impl_trait_id(&self, id: ImplTraitId) -> InternedOpaqueTyId;
fn lookup_intern_impl_trait_id(
&self,
key: InternedOpaqueTyId
) -> ImplTraitId;
fn intern_closure(&self, id: InternedClosure) -> InternedClosureId;
fn lookup_intern_closure(&self, key: InternedClosureId) -> InternedClosure;
fn intern_coroutine(&self, id: InternedCoroutine) -> InternedCoroutineId;
fn lookup_intern_coroutine(
&self,
key: InternedCoroutineId
) -> InternedCoroutine;
fn associated_ty_data(
&self,
id: AssocTypeId<Interner>
) -> Arc<AssociatedTyDatum<Interner>>;
fn trait_datum(
&self,
krate: CrateId,
trait_id: TraitId<Interner>
) -> Arc<TraitDatum<Interner>>;
fn adt_datum(
&self,
krate: CrateId,
struct_id: AdtId<Interner>
) -> Arc<AdtDatum<Interner>>;
fn impl_datum(
&self,
krate: CrateId,
impl_id: ImplId<Interner>
) -> Arc<ImplDatum<Interner>>;
fn fn_def_datum(
&self,
krate: CrateId,
fn_def_id: FnDefId
) -> Arc<FnDefDatum<Interner>>;
fn fn_def_variance(&self, fn_def_id: FnDefId) -> Variances<Interner>;
fn adt_variance(&self, adt_id: AdtId<Interner>) -> Variances<Interner>;
fn associated_ty_value(
&self,
krate: CrateId,
id: AssociatedTyValueId<Interner>
) -> Arc<AssociatedTyValue<Interner>>;
fn normalize_projection(
&self,
projection: ProjectionTy,
env: Arc<TraitEnvironment>
) -> Ty;
fn trait_solve(
&self,
krate: CrateId,
block: Option<BlockId>,
goal: Canonical<InEnvironment<Goal>>
) -> Option<Solution>;
fn program_clauses_for_chalk_env(
&self,
krate: CrateId,
block: Option<BlockId>,
env: Environment<Interner>
) -> ProgramClauses<Interner>;
}
Required Methods§
fn infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>
fn mir_body(&self, def: DefWithBodyId) -> Result<Arc<MirBody>, MirLowerError>
fn mir_body_for_closure( &self, def: ClosureId ) -> Result<Arc<MirBody>, MirLowerError>
fn monomorphized_mir_body( &self, def: DefWithBodyId, subst: Substitution, env: Arc<TraitEnvironment> ) -> Result<Arc<MirBody>, MirLowerError>
fn monomorphized_mir_body_for_closure( &self, def: ClosureId, subst: Substitution, env: Arc<TraitEnvironment> ) -> Result<Arc<MirBody>, MirLowerError>
fn borrowck( &self, def: DefWithBodyId ) -> Result<Arc<[BorrowckResult]>, MirLowerError>
fn const_eval( &self, def: GeneralConstId, subst: Substitution, trait_env: Option<Arc<TraitEnvironment>> ) -> Result<Const, ConstEvalError>
fn const_eval_static(&self, def: StaticId) -> Result<Const, ConstEvalError>
fn const_eval_discriminant( &self, def: EnumVariantId ) -> Result<i128, ConstEvalError>
fn ty(&self, def: TyDefId) -> Binders<Ty>
sourcefn value_ty(&self, def: ValueTyDefId) -> Option<Binders<Ty>>
fn value_ty(&self, def: ValueTyDefId) -> Option<Binders<Ty>>
Returns the type of the value of the given constant, or None
if the ValueTyDefId
is
a StructId
or EnumVariantId
with a record constructor.
fn impl_self_ty(&self, def: ImplId) -> Binders<Ty>
fn const_param_ty(&self, def: ConstParamId) -> Ty
fn impl_trait(&self, def: ImplId) -> Option<Binders<TraitRef>>
fn field_types( &self, var: VariantId ) -> Arc<ArenaMap<LocalFieldId, Binders<Ty>>>
fn layout_of_adt( &self, def: AdtId, subst: Substitution, env: Arc<TraitEnvironment> ) -> Result<Arc<Layout>, LayoutError>
fn layout_of_ty( &self, ty: Ty, env: Arc<TraitEnvironment> ) -> Result<Arc<Layout>, LayoutError>
fn target_data_layout( &self, krate: CrateId ) -> Result<Arc<TargetDataLayout>, Arc<str>>
fn lookup_impl_method( &self, env: Arc<TraitEnvironment>, func: FunctionId, fn_subst: Substitution ) -> (FunctionId, Substitution)
fn callable_item_signature(&self, def: CallableDefId) -> PolyFnSig
fn return_type_impl_traits( &self, def: FunctionId ) -> Option<Arc<Binders<ImplTraits>>>
fn type_alias_impl_traits( &self, def: TypeAliasId ) -> Option<Arc<Binders<ImplTraits>>>
fn generic_predicates_for_param( &self, def: GenericDefId, param_id: TypeOrConstParamId, assoc_name: Option<Name> ) -> Arc<[Binders<QuantifiedWhereClause>]>
fn generic_predicates( &self, def: GenericDefId ) -> Arc<[Binders<QuantifiedWhereClause>]>
fn trait_environment_for_body( &self, def: DefWithBodyId ) -> Arc<TraitEnvironment>
fn trait_environment(&self, def: GenericDefId) -> Arc<TraitEnvironment>
fn generic_defaults(&self, def: GenericDefId) -> Arc<[Binders<GenericArg>]>
fn inherent_impls_in_crate(&self, krate: CrateId) -> Arc<InherentImpls>
fn inherent_impls_in_block(&self, block: BlockId) -> Option<Arc<InherentImpls>>
sourcefn incoherent_inherent_impl_crates(
&self,
krate: CrateId,
fp: TyFingerprint
) -> SmallVec<[CrateId; 2]>
fn incoherent_inherent_impl_crates( &self, krate: CrateId, fp: TyFingerprint ) -> SmallVec<[CrateId; 2]>
Collects all crates in the dependency graph that have impls for the
given fingerprint. This is only used for primitive types and types
annotated with rustc_has_incoherent_inherent_impls
; for other types
we just look at the crate where the type is defined.