Skip to content

Commit 743faa2

Browse files
committed
Reorganize hir_ty modules
Chalk isn't really a 'traits' thing anymore, so it doesn't make sense to have all the Chalk-related stuff in submodules of `traits`.
1 parent 99ed68a commit 743faa2

File tree

10 files changed

+73
-100
lines changed

10 files changed

+73
-100
lines changed

crates/hir_ty/src/traits/chalk.rs renamed to crates/hir_ty/src/chalk_db.rs

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,23 @@ use hir_def::{
1313
};
1414
use hir_expand::name::name;
1515

16-
use super::ChalkContext;
17-
use crate::{
18-
db::HirDatabase,
19-
display::HirDisplay,
20-
from_assoc_type_id, make_only_type_binders,
21-
method_resolution::{TyFingerprint, ALL_FLOAT_FPS, ALL_INT_FPS},
22-
to_assoc_type_id, to_chalk_trait_id,
23-
utils::generics,
24-
AliasEq, AliasTy, BoundVar, CallableDefId, DebruijnIndex, FnDefId, ProjectionTy, Substitution,
25-
TraitRef, TraitRefExt, Ty, TyBuilder, TyExt, TyKind, WhereClause,
26-
};
27-
use mapping::{convert_where_clauses, generic_predicate_to_inline_bound, TypeAliasAsValue};
28-
29-
pub use self::interner::Interner;
30-
pub(crate) use self::interner::*;
31-
32-
pub(super) mod tls;
33-
mod interner;
34-
mod mapping;
16+
use crate::{AliasEq, AliasTy, BoundVar, CallableDefId, DebruijnIndex, FnDefId, Interner, ProjectionTy, Substitution, TraitRef, TraitRefExt, Ty, TyBuilder, TyExt, TyKind, WhereClause, traits::ChalkContext, db::HirDatabase, display::HirDisplay, from_assoc_type_id, make_only_type_binders, mapping::{convert_where_clauses, generic_predicate_to_inline_bound, TypeAliasAsValue}, method_resolution::{TyFingerprint, ALL_FLOAT_FPS, ALL_INT_FPS}, to_assoc_type_id, to_chalk_trait_id, utils::generics};
17+
18+
pub(crate) type AssociatedTyDatum = chalk_solve::rust_ir::AssociatedTyDatum<Interner>;
19+
pub(crate) type TraitDatum = chalk_solve::rust_ir::TraitDatum<Interner>;
20+
pub(crate) type StructDatum = chalk_solve::rust_ir::AdtDatum<Interner>;
21+
pub(crate) type ImplDatum = chalk_solve::rust_ir::ImplDatum<Interner>;
22+
pub(crate) type OpaqueTyDatum = chalk_solve::rust_ir::OpaqueTyDatum<Interner>;
23+
24+
pub(crate) type AssocTypeId = chalk_ir::AssocTypeId<Interner>;
25+
pub(crate) type TraitId = chalk_ir::TraitId<Interner>;
26+
pub(crate) type AdtId = chalk_ir::AdtId<Interner>;
27+
pub(crate) type OpaqueTyId = chalk_ir::OpaqueTyId<Interner>;
28+
pub(crate) type ImplId = chalk_ir::ImplId<Interner>;
29+
pub(crate) type AssociatedTyValueId = chalk_solve::rust_ir::AssociatedTyValueId<Interner>;
30+
pub(crate) type AssociatedTyValue = chalk_solve::rust_ir::AssociatedTyValue<Interner>;
31+
pub(crate) type FnDefDatum = chalk_solve::rust_ir::FnDefDatum<Interner>;
32+
pub(crate) type Variances = chalk_ir::Variances<Interner>;
3533

3634
pub(crate) trait ToChalk {
3735
type Chalk;

crates/hir_ty/src/db.rs

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,7 @@ use hir_def::{
99
};
1010
use la_arena::ArenaMap;
1111

12-
use crate::{
13-
method_resolution::{InherentImpls, TraitImpls},
14-
traits::chalk,
15-
Binders, CallableDefId, FnDefId, ImplTraitId, InferenceResult, PolyFnSig,
16-
QuantifiedWhereClause, ReturnTypeImplTraits, TraitRef, Ty, TyDefId, ValueTyDefId,
17-
};
12+
use crate::{Binders, CallableDefId, FnDefId, ImplTraitId, InferenceResult, Interner, PolyFnSig, QuantifiedWhereClause, ReturnTypeImplTraits, TraitRef, Ty, TyDefId, ValueTyDefId, chalk_db, method_resolution::{InherentImpls, TraitImpls}};
1813
use hir_expand::name::Name;
1914

2015
#[salsa::query_group(HirDatabaseStorage)]
@@ -94,33 +89,33 @@ pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
9489
#[salsa::interned]
9590
fn intern_closure(&self, id: (DefWithBodyId, ExprId)) -> InternedClosureId;
9691

97-
#[salsa::invoke(chalk::associated_ty_data_query)]
98-
fn associated_ty_data(&self, id: chalk::AssocTypeId) -> Arc<chalk::AssociatedTyDatum>;
92+
#[salsa::invoke(chalk_db::associated_ty_data_query)]
93+
fn associated_ty_data(&self, id: chalk_db::AssocTypeId) -> Arc<chalk_db::AssociatedTyDatum>;
9994

100-
#[salsa::invoke(chalk::trait_datum_query)]
101-
fn trait_datum(&self, krate: CrateId, trait_id: chalk::TraitId) -> Arc<chalk::TraitDatum>;
95+
#[salsa::invoke(chalk_db::trait_datum_query)]
96+
fn trait_datum(&self, krate: CrateId, trait_id: chalk_db::TraitId) -> Arc<chalk_db::TraitDatum>;
10297

103-
#[salsa::invoke(chalk::struct_datum_query)]
104-
fn struct_datum(&self, krate: CrateId, struct_id: chalk::AdtId) -> Arc<chalk::StructDatum>;
98+
#[salsa::invoke(chalk_db::struct_datum_query)]
99+
fn struct_datum(&self, krate: CrateId, struct_id: chalk_db::AdtId) -> Arc<chalk_db::StructDatum>;
105100

106-
#[salsa::invoke(crate::traits::chalk::impl_datum_query)]
107-
fn impl_datum(&self, krate: CrateId, impl_id: chalk::ImplId) -> Arc<chalk::ImplDatum>;
101+
#[salsa::invoke(chalk_db::impl_datum_query)]
102+
fn impl_datum(&self, krate: CrateId, impl_id: chalk_db::ImplId) -> Arc<chalk_db::ImplDatum>;
108103

109-
#[salsa::invoke(crate::traits::chalk::fn_def_datum_query)]
110-
fn fn_def_datum(&self, krate: CrateId, fn_def_id: FnDefId) -> Arc<chalk::FnDefDatum>;
104+
#[salsa::invoke(chalk_db::fn_def_datum_query)]
105+
fn fn_def_datum(&self, krate: CrateId, fn_def_id: FnDefId) -> Arc<chalk_db::FnDefDatum>;
111106

112-
#[salsa::invoke(crate::traits::chalk::fn_def_variance_query)]
113-
fn fn_def_variance(&self, krate: CrateId, fn_def_id: FnDefId) -> chalk::Variances;
107+
#[salsa::invoke(chalk_db::fn_def_variance_query)]
108+
fn fn_def_variance(&self, krate: CrateId, fn_def_id: FnDefId) -> chalk_db::Variances;
114109

115-
#[salsa::invoke(crate::traits::chalk::adt_variance_query)]
116-
fn adt_variance(&self, krate: CrateId, adt_id: chalk::AdtId) -> chalk::Variances;
110+
#[salsa::invoke(chalk_db::adt_variance_query)]
111+
fn adt_variance(&self, krate: CrateId, adt_id: chalk_db::AdtId) -> chalk_db::Variances;
117112

118-
#[salsa::invoke(crate::traits::chalk::associated_ty_value_query)]
113+
#[salsa::invoke(chalk_db::associated_ty_value_query)]
119114
fn associated_ty_value(
120115
&self,
121116
krate: CrateId,
122-
id: chalk::AssociatedTyValueId,
123-
) -> Arc<chalk::AssociatedTyValue>;
117+
id: chalk_db::AssociatedTyValueId,
118+
) -> Arc<chalk_db::AssociatedTyValue>;
124119

125120
#[salsa::invoke(crate::traits::trait_solve_query)]
126121
fn trait_solve(
@@ -129,12 +124,12 @@ pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
129124
goal: crate::Canonical<crate::InEnvironment<crate::DomainGoal>>,
130125
) -> Option<crate::Solution>;
131126

132-
#[salsa::invoke(crate::traits::chalk::program_clauses_for_chalk_env_query)]
127+
#[salsa::invoke(chalk_db::program_clauses_for_chalk_env_query)]
133128
fn program_clauses_for_chalk_env(
134129
&self,
135130
krate: CrateId,
136-
env: chalk_ir::Environment<chalk::Interner>,
137-
) -> chalk_ir::ProgramClauses<chalk::Interner>;
131+
env: chalk_ir::Environment<Interner>,
132+
) -> chalk_ir::ProgramClauses<Interner>;
138133
}
139134

140135
fn infer_wait(db: &dyn HirDatabase, def: DefWithBodyId) -> Arc<InferenceResult> {

crates/hir_ty/src/display.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use hir_expand::name::Name;
2121
use crate::{
2222
const_from_placeholder_idx, db::HirDatabase, from_assoc_type_id, from_foreign_def_id,
2323
from_placeholder_idx, lt_from_placeholder_idx, primitive, subst_prefix, to_assoc_type_id,
24-
traits::chalk::from_chalk, utils::generics, AdtId, AliasEq, AliasTy, CallableDefId,
24+
chalk_db::from_chalk, utils::generics, AdtId, AliasEq, AliasTy, CallableDefId,
2525
CallableSig, Const, ConstValue, DomainGoal, GenericArg, ImplTraitId, Interner, Lifetime,
2626
LifetimeData, LifetimeOutlives, Mutability, OpaqueTy, ProjectionTy, ProjectionTyExt,
2727
QuantifiedWhereClause, Scalar, TraitRef, TraitRefExt, Ty, TyExt, TyKind, WhereClause,

crates/hir_ty/src/infer/expr.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ use crate::{
2020
method_resolution, op,
2121
primitive::{self, UintTy},
2222
static_lifetime, to_chalk_trait_id,
23-
traits::{chalk::from_chalk, FnTrait},
23+
traits::FnTrait,
24+
chalk_db::from_chalk,
2425
utils::{generics, Generics},
2526
AdtId, Binders, CallableDefId, FnPointer, FnSig, FnSubst, InEnvironment, Interner,
2627
ProjectionTyExt, Rawness, Scalar, Substitution, TraitRef, Ty, TyBuilder, TyExt, TyKind,

crates/hir_ty/src/traits/chalk/interner.rs renamed to crates/hir_ty/src/interner.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
//! Implementation of the Chalk `Interner` trait, which allows customizing the
22
//! representation of the various objects Chalk deals with (types, goals etc.).
33
4-
use super::tls;
5-
use crate::GenericArg;
4+
use crate::{GenericArg, tls, chalk_db};
65
use base_db::salsa::InternId;
76
use chalk_ir::{Goal, GoalData};
87
use hir_def::{
@@ -15,21 +14,6 @@ use std::{fmt, sync::Arc};
1514
#[derive(Debug, Copy, Clone, Hash, PartialOrd, Ord, PartialEq, Eq)]
1615
pub struct Interner;
1716

18-
pub(crate) type AssocTypeId = chalk_ir::AssocTypeId<Interner>;
19-
pub(crate) type AssociatedTyDatum = chalk_solve::rust_ir::AssociatedTyDatum<Interner>;
20-
pub(crate) type TraitId = chalk_ir::TraitId<Interner>;
21-
pub(crate) type TraitDatum = chalk_solve::rust_ir::TraitDatum<Interner>;
22-
pub(crate) type AdtId = chalk_ir::AdtId<Interner>;
23-
pub(crate) type StructDatum = chalk_solve::rust_ir::AdtDatum<Interner>;
24-
pub(crate) type ImplId = chalk_ir::ImplId<Interner>;
25-
pub(crate) type ImplDatum = chalk_solve::rust_ir::ImplDatum<Interner>;
26-
pub(crate) type AssociatedTyValueId = chalk_solve::rust_ir::AssociatedTyValueId<Interner>;
27-
pub(crate) type AssociatedTyValue = chalk_solve::rust_ir::AssociatedTyValue<Interner>;
28-
pub(crate) type FnDefDatum = chalk_solve::rust_ir::FnDefDatum<Interner>;
29-
pub(crate) type OpaqueTyId = chalk_ir::OpaqueTyId<Interner>;
30-
pub(crate) type OpaqueTyDatum = chalk_solve::rust_ir::OpaqueTyDatum<Interner>;
31-
pub(crate) type Variances = chalk_ir::Variances<Interner>;
32-
3317
#[derive(PartialEq, Eq, Hash, Debug)]
3418
pub struct InternedWrapper<T>(T);
3519

@@ -76,15 +60,15 @@ impl chalk_ir::interner::Interner for Interner {
7660
type Identifier = TypeAliasId;
7761
type FnAbi = ();
7862

79-
fn debug_adt_id(type_kind_id: AdtId, fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
63+
fn debug_adt_id(type_kind_id: chalk_db::AdtId, fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
8064
tls::with_current_program(|prog| Some(prog?.debug_struct_id(type_kind_id, fmt)))
8165
}
8266

83-
fn debug_trait_id(type_kind_id: TraitId, fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
67+
fn debug_trait_id(type_kind_id: chalk_db::TraitId, fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
8468
tls::with_current_program(|prog| Some(prog?.debug_trait_id(type_kind_id, fmt)))
8569
}
8670

87-
fn debug_assoc_type_id(id: AssocTypeId, fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
71+
fn debug_assoc_type_id(id: chalk_db::AssocTypeId, fmt: &mut fmt::Formatter<'_>) -> Option<fmt::Result> {
8872
tls::with_current_program(|prog| Some(prog?.debug_assoc_type_id(id, fmt)))
8973
}
9074

crates/hir_ty/src/lib.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ mod chalk_cast;
1818
mod chalk_ext;
1919
mod builder;
2020
mod walk;
21+
mod tls;
22+
mod interner;
23+
mod mapping;
24+
mod chalk_db;
2125

2226
pub mod display;
2327
pub mod db;
@@ -51,8 +55,9 @@ pub use lower::{
5155
associated_type_shorthand_candidates, callable_item_sig, CallableDefId, ImplTraitLoweringMode,
5256
TyDefId, TyLoweringContext, ValueTyDefId,
5357
};
54-
pub use traits::{chalk::Interner, TraitEnvironment};
58+
pub use traits::TraitEnvironment;
5559
pub use walk::TypeWalk;
60+
pub use interner::Interner;
5661

5762
pub use chalk_ir::{
5863
cast::Cast, AdtId, BoundVar, DebruijnIndex, Mutability, Safety, Scalar, TyVariableKind,

crates/hir_ty/src/lower.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ use stdx::impl_from;
2828
use crate::{
2929
db::HirDatabase,
3030
dummy_usize_const, static_lifetime, to_assoc_type_id, to_chalk_trait_id, to_placeholder_idx,
31-
traits::chalk::{Interner, ToChalk},
31+
chalk_db::ToChalk,
32+
Interner,
3233
utils::{
3334
all_super_trait_refs, associated_type_by_name_including_super_traits, generics, Generics,
3435
},

crates/hir_ty/src/traits/chalk/mapping.rs renamed to crates/hir_ty/src/mapping.rs

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,34 @@
33
//! Chalk (in both directions); plus some helper functions for more specialized
44
//! conversions.
55
6-
use chalk_ir::cast::Cast;
6+
use chalk_ir::{DebruijnIndex, cast::Cast, fold::Shift};
77
use chalk_solve::rust_ir;
88

99
use base_db::salsa::InternKey;
1010
use hir_def::{GenericDefId, TypeAliasId};
1111

12-
use crate::{
13-
db::HirDatabase, AliasTy, CallableDefId, ProjectionTyExt, QuantifiedWhereClause, Substitution,
14-
Ty, WhereClause,
15-
};
16-
17-
use super::interner::*;
18-
use super::*;
12+
use crate::{AliasEq, AliasTy, CallableDefId, FnDefId, Interner, ProjectionTyExt, QuantifiedWhereClause, Substitution, Ty, WhereClause, chalk_db::{self, ToChalk}, db::HirDatabase};
1913

2014
impl ToChalk for hir_def::TraitId {
21-
type Chalk = TraitId;
15+
type Chalk = chalk_db::TraitId;
2216

23-
fn to_chalk(self, _db: &dyn HirDatabase) -> TraitId {
17+
fn to_chalk(self, _db: &dyn HirDatabase) -> chalk_db::TraitId {
2418
chalk_ir::TraitId(self.as_intern_id())
2519
}
2620

27-
fn from_chalk(_db: &dyn HirDatabase, trait_id: TraitId) -> hir_def::TraitId {
21+
fn from_chalk(_db: &dyn HirDatabase, trait_id: chalk_db::TraitId) -> hir_def::TraitId {
2822
InternKey::from_intern_id(trait_id.0)
2923
}
3024
}
3125

3226
impl ToChalk for hir_def::ImplId {
33-
type Chalk = ImplId;
27+
type Chalk = chalk_db::ImplId;
3428

35-
fn to_chalk(self, _db: &dyn HirDatabase) -> ImplId {
29+
fn to_chalk(self, _db: &dyn HirDatabase) -> chalk_db::ImplId {
3630
chalk_ir::ImplId(self.as_intern_id())
3731
}
3832

39-
fn from_chalk(_db: &dyn HirDatabase, impl_id: ImplId) -> hir_def::ImplId {
33+
fn from_chalk(_db: &dyn HirDatabase, impl_id: chalk_db::ImplId) -> hir_def::ImplId {
4034
InternKey::from_intern_id(impl_id.0)
4135
}
4236
}
@@ -56,15 +50,15 @@ impl ToChalk for CallableDefId {
5650
pub(crate) struct TypeAliasAsValue(pub(crate) TypeAliasId);
5751

5852
impl ToChalk for TypeAliasAsValue {
59-
type Chalk = AssociatedTyValueId;
53+
type Chalk = chalk_db::AssociatedTyValueId;
6054

61-
fn to_chalk(self, _db: &dyn HirDatabase) -> AssociatedTyValueId {
55+
fn to_chalk(self, _db: &dyn HirDatabase) -> chalk_db::AssociatedTyValueId {
6256
rust_ir::AssociatedTyValueId(self.0.as_intern_id())
6357
}
6458

6559
fn from_chalk(
6660
_db: &dyn HirDatabase,
67-
assoc_ty_value_id: AssociatedTyValueId,
61+
assoc_ty_value_id: chalk_db::AssociatedTyValueId,
6862
) -> TypeAliasAsValue {
6963
TypeAliasAsValue(TypeAliasId::from_intern_id(assoc_ty_value_id.0))
7064
}

crates/hir_ty/src/traits/chalk/tls.rs renamed to crates/hir_ty/src/tls.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ use std::fmt;
44
use chalk_ir::{AliasTy, GenericArg, Goal, Goals, Lifetime, ProgramClauseImplication};
55
use itertools::Itertools;
66

7-
use super::{from_chalk, Interner};
8-
use crate::{db::HirDatabase, from_assoc_type_id, CallableDefId};
7+
use crate::{db::HirDatabase, from_assoc_type_id, CallableDefId, chalk_db::{from_chalk, self}, Interner};
98
use hir_def::{AdtId, AssocContainerId, Lookup, TypeAliasId};
109

1110
pub(crate) use unsafe_tls::{set_current_program, with_current_program};
@@ -15,7 +14,7 @@ pub(crate) struct DebugContext<'a>(&'a dyn HirDatabase);
1514
impl DebugContext<'_> {
1615
pub(crate) fn debug_struct_id(
1716
&self,
18-
id: super::AdtId,
17+
id: chalk_db::AdtId,
1918
f: &mut fmt::Formatter<'_>,
2019
) -> Result<(), fmt::Error> {
2120
let name = match id.0 {
@@ -28,7 +27,7 @@ impl DebugContext<'_> {
2827

2928
pub(crate) fn debug_trait_id(
3029
&self,
31-
id: super::TraitId,
30+
id: chalk_db::TraitId,
3231
fmt: &mut fmt::Formatter<'_>,
3332
) -> Result<(), fmt::Error> {
3433
let trait_: hir_def::TraitId = from_chalk(self.0, id);
@@ -38,7 +37,7 @@ impl DebugContext<'_> {
3837

3938
pub(crate) fn debug_assoc_type_id(
4039
&self,
41-
id: super::AssocTypeId,
40+
id: chalk_db::AssocTypeId,
4241
fmt: &mut fmt::Formatter<'_>,
4342
) -> Result<(), fmt::Error> {
4443
let type_alias: TypeAliasId = from_assoc_type_id(id);

crates/hir_ty/src/traits.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,16 @@ use stdx::panic_context;
99

1010
use crate::{
1111
db::HirDatabase, AliasEq, AliasTy, Canonical, DomainGoal, Guidance, HirDisplay, InEnvironment,
12-
Solution, TraitRefExt, Ty, TyKind, WhereClause,
12+
Solution, TraitRefExt, Ty, TyKind, WhereClause, Interner,
1313
};
1414

15-
use self::chalk::Interner;
16-
17-
pub(crate) mod chalk;
18-
1915
/// This controls how much 'time' we give the Chalk solver before giving up.
2016
const CHALK_SOLVER_FUEL: i32 = 100;
2117

2218
#[derive(Debug, Copy, Clone)]
23-
struct ChalkContext<'a> {
24-
db: &'a dyn HirDatabase,
25-
krate: CrateId,
19+
pub(crate) struct ChalkContext<'a> {
20+
pub(crate) db: &'a dyn HirDatabase,
21+
pub(crate) krate: CrateId,
2622
}
2723

2824
fn create_chalk_solver() -> chalk_recursive::RecursiveSolver<Interner> {
@@ -148,7 +144,7 @@ fn solve(
148144
// don't set the TLS for Chalk unless Chalk debugging is active, to make
149145
// extra sure we only use it for debugging
150146
let solution =
151-
if is_chalk_debug() { chalk::tls::set_current_program(db, solve) } else { solve() };
147+
if is_chalk_debug() { crate::tls::set_current_program(db, solve) } else { solve() };
152148

153149
solution
154150
}

0 commit comments

Comments
 (0)