mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-08-31 07:37:30 +00:00
Remove SolverDefId::ForeignId
Replace it with normal `SolverDefId::TypeAliasId`. The split caused a very funny bug where code was getting `TypeAliasId` where it expected `ForeignId`, because `TypeAliasId` had a `From` impl from `hir_def::TypeAliasId` and `ForeignId` had not, plus a careless `into()`. I could've fixed this specific bug but opted to remove the split instead; currently, it just provides more room for bugs, as we don't have typed IDs for the solver anyway, and even when we'll have (hopefully), that doesn't seem like a very useful distinction, for example in hir-def foreign types are just `TypeAliasId` with some flags. Constructing a test for this isn't trivial; the trivial test (creating a foreign type, even proving a trait bound for it) fails to fail before the change, probably because we don't use the new solver everywhere yet so we don't trigger this specific code path.
This commit is contained in:
parent
12604577dd
commit
6bcfbbe8f9
5 changed files with 4 additions and 7 deletions
|
@ -1473,7 +1473,7 @@ impl<'db> HirDisplay for crate::next_solver::Ty<'db> {
|
|||
}
|
||||
TyKind::Foreign(type_alias) => {
|
||||
let alias = match type_alias {
|
||||
SolverDefId::ForeignId(id) => id,
|
||||
SolverDefId::TypeAliasId(id) => id,
|
||||
_ => unreachable!(),
|
||||
};
|
||||
let type_alias = db.type_alias_signature(alias);
|
||||
|
|
|
@ -155,7 +155,7 @@ impl TyFingerprint {
|
|||
rustc_ast_ir::Mutability::Not => TyFingerprint::RawPtr(Mutability::Not),
|
||||
},
|
||||
TyKind::Foreign(def) => {
|
||||
let SolverDefId::ForeignId(def) = def else { unreachable!() };
|
||||
let SolverDefId::TypeAliasId(def) = def else { unreachable!() };
|
||||
TyFingerprint::ForeignType(crate::to_foreign_def_id(def))
|
||||
}
|
||||
TyKind::Dynamic(bounds, _, _) => {
|
||||
|
|
|
@ -26,7 +26,6 @@ pub enum SolverDefId {
|
|||
StaticId(StaticId),
|
||||
TraitId(TraitId),
|
||||
TypeAliasId(TypeAliasId),
|
||||
ForeignId(TypeAliasId),
|
||||
InternedClosureId(InternedClosureId),
|
||||
InternedCoroutineId(InternedCoroutineId),
|
||||
InternedOpaqueTyId(InternedOpaqueTyId),
|
||||
|
@ -73,7 +72,6 @@ impl TryFrom<SolverDefId> for GenericDefId {
|
|||
SolverDefId::StaticId(static_id) => GenericDefId::StaticId(static_id),
|
||||
SolverDefId::TraitId(trait_id) => GenericDefId::TraitId(trait_id),
|
||||
SolverDefId::TypeAliasId(type_alias_id) => GenericDefId::TypeAliasId(type_alias_id),
|
||||
SolverDefId::ForeignId(_) => return Err(value),
|
||||
SolverDefId::InternedClosureId(_) => return Err(value),
|
||||
SolverDefId::InternedCoroutineId(_) => return Err(value),
|
||||
SolverDefId::InternedOpaqueTyId(_) => return Err(value),
|
||||
|
|
|
@ -1148,7 +1148,6 @@ impl<'db> rustc_type_ir::Interner for DbInterner<'db> {
|
|||
let container = match def_id {
|
||||
SolverDefId::FunctionId(it) => it.lookup(self.db()).container,
|
||||
SolverDefId::TypeAliasId(it) => it.lookup(self.db()).container,
|
||||
SolverDefId::ForeignId(it) => it.lookup(self.db()).container,
|
||||
SolverDefId::ConstId(it) => it.lookup(self.db()).container,
|
||||
SolverDefId::InternedClosureId(it) => {
|
||||
return self
|
||||
|
|
|
@ -271,7 +271,7 @@ impl<'db> ChalkToNextSolver<'db, Ty<'db>> for chalk_ir::Ty<Interner> {
|
|||
)
|
||||
}
|
||||
chalk_ir::TyKind::Foreign(foreign_def_id) => rustc_type_ir::TyKind::Foreign(
|
||||
SolverDefId::ForeignId(crate::from_foreign_def_id(*foreign_def_id)),
|
||||
SolverDefId::TypeAliasId(crate::from_foreign_def_id(*foreign_def_id)),
|
||||
),
|
||||
chalk_ir::TyKind::Error => rustc_type_ir::TyKind::Error(ErrorGuaranteed),
|
||||
chalk_ir::TyKind::Placeholder(placeholder_index) => {
|
||||
|
@ -1262,7 +1262,7 @@ pub(crate) fn convert_ty_for_result<'db>(interner: DbInterner<'db>, ty: Ty<'db>)
|
|||
|
||||
rustc_type_ir::TyKind::Foreign(foreign) => {
|
||||
let def_id = match foreign {
|
||||
SolverDefId::ForeignId(id) => id,
|
||||
SolverDefId::TypeAliasId(id) => id,
|
||||
_ => unreachable!(),
|
||||
};
|
||||
TyKind::Foreign(to_foreign_def_id(def_id))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue