Skip to content

Commit 8078c3d

Browse files
committed
Bump chalk
1 parent a82e028 commit 8078c3d

File tree

15 files changed

+102
-88
lines changed

15 files changed

+102
-88
lines changed

Cargo.lock

Lines changed: 8 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ arrayvec = "0.7.4"
106106
bitflags = "2.4.1"
107107
cargo_metadata = "0.18.1"
108108
camino = "1.1.6"
109-
chalk-solve = { version = "0.96.0", default-features = false }
110-
chalk-ir = "0.96.0"
111-
chalk-recursive = { version = "0.96.0", default-features = false }
112-
chalk-derive = "0.96.0"
109+
chalk-solve = { version = "0.97.0", default-features = false }
110+
chalk-ir = "0.97.0"
111+
chalk-recursive = { version = "0.97.0", default-features = false }
112+
chalk-derive = "0.97.0"
113113
command-group = "2.0.1"
114114
crossbeam-channel = "0.5.8"
115115
dissimilar = "1.0.7"

crates/hir-ty/src/display.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@ use crate::{
4242
primitive, to_assoc_type_id,
4343
utils::{self, detect_variant_from_bytes, generics, ClosureSubst},
4444
AdtId, AliasEq, AliasTy, Binders, CallableDefId, CallableSig, Const, ConstScalar, ConstValue,
45-
DomainGoal, FnAbi, GenericArg, ImplTraitId, Interner, Lifetime, LifetimeData, LifetimeOutlives,
46-
MemoryMap, Mutability, OpaqueTy, ProjectionTy, ProjectionTyExt, QuantifiedWhereClause, Scalar,
47-
Substitution, TraitEnvironment, TraitRef, TraitRefExt, Ty, TyExt, WhereClause,
45+
DomainGoal, FnAbi, GenericArg, GenericArgData, ImplTraitId, Interner, Lifetime, LifetimeData,
46+
LifetimeOutlives, MemoryMap, Mutability, OpaqueTy, ProjectionTy, ProjectionTyExt,
47+
QuantifiedWhereClause, Scalar, Substitution, TraitEnvironment, TraitRef, TraitRefExt, Ty,
48+
TyExt, WhereClause,
4849
};
4950

5051
pub trait HirWrite: fmt::Write {
@@ -1367,8 +1368,8 @@ fn hir_fmt_generics(
13671368
return true;
13681369
}
13691370
}
1370-
if parameter.lifetime(Interner).map(|it| it.data(Interner))
1371-
== Some(&crate::LifetimeData::Static)
1371+
if let Some(crate::LifetimeData::Static | crate::LifetimeData::Error) =
1372+
parameter.lifetime(Interner).map(|it| it.data(Interner))
13721373
{
13731374
return true;
13741375
}
@@ -1403,10 +1404,18 @@ fn hir_fmt_generics(
14031404
write!(f, ", ")?;
14041405
}
14051406
first = false;
1406-
if f.display_target.is_source_code()
1407-
&& generic_arg.ty(Interner).map(|ty| ty.kind(Interner)) == Some(&TyKind::Error)
1408-
{
1409-
write!(f, "_")?;
1407+
if f.display_target.is_source_code() {
1408+
match generic_arg.data(Interner) {
1409+
GenericArgData::Lifetime(l)
1410+
if matches!(l.data(Interner), LifetimeData::Error) =>
1411+
{
1412+
write!(f, "'_")
1413+
}
1414+
GenericArgData::Ty(t) if matches!(t.kind(Interner), TyKind::Error) => {
1415+
write!(f, "_")
1416+
}
1417+
_ => generic_arg.hir_fmt(f),
1418+
}?
14101419
} else {
14111420
generic_arg.hir_fmt(f)?;
14121421
}
@@ -1729,6 +1738,7 @@ impl HirDisplay for LifetimeData {
17291738
Ok(())
17301739
}
17311740
LifetimeData::Static => write!(f, "'static"),
1741+
LifetimeData::Error => write!(f, "'{{error}}"),
17321742
LifetimeData::Erased => Ok(()),
17331743
LifetimeData::Phantom(_, _) => Ok(()),
17341744
}

crates/hir-ty/src/lib.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -612,8 +612,6 @@ has_interner!(ImplTraits);
612612

613613
#[derive(PartialEq, Eq, Debug, Hash)]
614614
pub struct ImplTrait {
615-
// FIXME: Should be Arc<[QuantifiedWhereClause]>, but the HasInterner impl for Arc is missing a
616-
// ?Sized bound
617615
pub(crate) bounds: Binders<Vec<QuantifiedWhereClause>>,
618616
}
619617

@@ -624,7 +622,7 @@ pub fn static_lifetime() -> Lifetime {
624622
}
625623

626624
pub fn error_lifetime() -> Lifetime {
627-
LifetimeData::Static.intern(Interner)
625+
LifetimeData::Error.intern(Interner)
628626
}
629627

630628
pub(crate) fn fold_free_vars<T: HasInterner<Interner = Interner> + TypeFoldable<Interner>>(

crates/hir-ty/src/lower.rs

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ use crate::{
6767
},
6868
AliasEq, AliasTy, Binders, BoundVar, CallableSig, Const, ConstScalar, DebruijnIndex, DynTy,
6969
FnAbi, FnPointer, FnSig, FnSubst, ImplTrait, ImplTraitId, ImplTraits, Interner, Lifetime,
70-
LifetimeData, LifetimeOutlives, ParamKind, PolyFnSig, ProjectionTy, QuantifiedWhereClause,
71-
QuantifiedWhereClauses, Substitution, TraitEnvironment, TraitRef, TraitRefExt, Ty, TyBuilder,
72-
TyKind, WhereClause,
70+
LifetimeData, LifetimeOutlives, ParamKind, PolyFnSig, ProgramClause, ProjectionTy,
71+
QuantifiedWhereClause, QuantifiedWhereClauses, Substitution, TraitEnvironment, TraitRef,
72+
TraitRefExt, Ty, TyBuilder, TyKind, WhereClause,
7373
};
7474

7575
#[derive(Debug)]
@@ -1052,11 +1052,11 @@ impl<'a> TyLoweringContext<'a> {
10521052
self_ty: Ty,
10531053
ignore_bindings: bool,
10541054
) -> impl Iterator<Item = QuantifiedWhereClause> + 'a {
1055-
let mut bindings = None;
1056-
let trait_ref = match bound.as_ref() {
1055+
let mut trait_ref = None;
1056+
let clause = match bound.as_ref() {
10571057
TypeBound::Path(path, TraitBoundModifier::None) => {
1058-
bindings = self.lower_trait_ref_from_path(path, Some(self_ty));
1059-
bindings
1058+
trait_ref = self.lower_trait_ref_from_path(path, Some(self_ty));
1059+
trait_ref
10601060
.clone()
10611061
.filter(|tr| {
10621062
// ignore `T: Drop` or `T: Destruct` bounds.
@@ -1092,8 +1092,8 @@ impl<'a> TyLoweringContext<'a> {
10921092
}
10931093
TypeBound::ForLifetime(_, path) => {
10941094
// FIXME Don't silently drop the hrtb lifetimes here
1095-
bindings = self.lower_trait_ref_from_path(path, Some(self_ty));
1096-
bindings.clone().map(WhereClause::Implemented).map(crate::wrap_empty_binders)
1095+
trait_ref = self.lower_trait_ref_from_path(path, Some(self_ty));
1096+
trait_ref.clone().map(WhereClause::Implemented).map(crate::wrap_empty_binders)
10971097
}
10981098
TypeBound::Lifetime(l) => {
10991099
let lifetime = self.lower_lifetime(l);
@@ -1104,8 +1104,8 @@ impl<'a> TyLoweringContext<'a> {
11041104
}
11051105
TypeBound::Error => None,
11061106
};
1107-
trait_ref.into_iter().chain(
1108-
bindings
1107+
clause.into_iter().chain(
1108+
trait_ref
11091109
.into_iter()
11101110
.filter(move |_| !ignore_bindings)
11111111
.flat_map(move |tr| self.assoc_type_bindings_from_type_bound(bound, tr)),
@@ -1624,10 +1624,14 @@ pub(crate) fn generic_predicates_for_param_query(
16241624

16251625
let subst = generics.bound_vars_subst(db, DebruijnIndex::INNERMOST);
16261626
let explicitly_unsized_tys = ctx.unsized_types.into_inner();
1627-
let implicitly_sized_predicates =
1627+
if let Some(implicitly_sized_predicates) =
16281628
implicitly_sized_clauses(db, param_id.parent, &explicitly_unsized_tys, &subst, &resolver)
1629-
.map(|p| make_binders(db, &generics, crate::wrap_empty_binders(p)));
1630-
predicates.extend(implicitly_sized_predicates);
1629+
{
1630+
predicates.extend(
1631+
implicitly_sized_predicates
1632+
.map(|p| make_binders(db, &generics, crate::wrap_empty_binders(p))),
1633+
);
1634+
}
16311635
predicates.into()
16321636
}
16331637

@@ -1685,24 +1689,23 @@ pub(crate) fn trait_environment_query(
16851689
let substs = TyBuilder::placeholder_subst(db, trait_id);
16861690
let trait_ref = TraitRef { trait_id: to_chalk_trait_id(trait_id), substitution: substs };
16871691
let pred = WhereClause::Implemented(trait_ref);
1688-
let program_clause: chalk_ir::ProgramClause<Interner> = pred.cast(Interner);
1689-
clauses.push(program_clause.into_from_env_clause(Interner));
1692+
clauses.push(pred.cast::<ProgramClause>(Interner).into_from_env_clause(Interner));
16901693
}
16911694

16921695
let subst = generics(db.upcast(), def).placeholder_subst(db);
16931696
let explicitly_unsized_tys = ctx.unsized_types.into_inner();
1694-
let implicitly_sized_clauses =
1695-
implicitly_sized_clauses(db, def, &explicitly_unsized_tys, &subst, &resolver).map(|pred| {
1696-
let program_clause: chalk_ir::ProgramClause<Interner> = pred.cast(Interner);
1697-
program_clause.into_from_env_clause(Interner)
1698-
});
1699-
clauses.extend(implicitly_sized_clauses);
1700-
1701-
let krate = def.module(db.upcast()).krate();
1697+
if let Some(implicitly_sized_clauses) =
1698+
implicitly_sized_clauses(db, def, &explicitly_unsized_tys, &subst, &resolver)
1699+
{
1700+
clauses.extend(
1701+
implicitly_sized_clauses
1702+
.map(|pred| pred.cast::<ProgramClause>(Interner).into_from_env_clause(Interner)),
1703+
);
1704+
}
17021705

17031706
let env = chalk_ir::Environment::new(Interner).add_clauses(Interner, clauses);
17041707

1705-
TraitEnvironment::new(krate, None, traits_in_scope.into_boxed_slice(), env)
1708+
TraitEnvironment::new(resolver.krate(), None, traits_in_scope.into_boxed_slice(), env)
17061709
}
17071710

17081711
/// Resolve the where clause(s) of an item with generics.
@@ -1730,10 +1733,14 @@ pub(crate) fn generic_predicates_query(
17301733

17311734
let subst = generics.bound_vars_subst(db, DebruijnIndex::INNERMOST);
17321735
let explicitly_unsized_tys = ctx.unsized_types.into_inner();
1733-
let implicitly_sized_predicates =
1736+
if let Some(implicitly_sized_predicates) =
17341737
implicitly_sized_clauses(db, def, &explicitly_unsized_tys, &subst, &resolver)
1735-
.map(|p| make_binders(db, &generics, crate::wrap_empty_binders(p)));
1736-
predicates.extend(implicitly_sized_predicates);
1738+
{
1739+
predicates.extend(
1740+
implicitly_sized_predicates
1741+
.map(|p| make_binders(db, &generics, crate::wrap_empty_binders(p))),
1742+
);
1743+
}
17371744
predicates.into()
17381745
}
17391746

@@ -1745,24 +1752,24 @@ fn implicitly_sized_clauses<'a>(
17451752
explicitly_unsized_tys: &'a FxHashSet<Ty>,
17461753
substitution: &'a Substitution,
17471754
resolver: &Resolver,
1748-
) -> impl Iterator<Item = WhereClause> + 'a {
1755+
) -> Option<impl Iterator<Item = WhereClause> + 'a> {
17491756
let is_trait_def = matches!(def, GenericDefId::TraitId(..));
17501757
let generic_args = &substitution.as_slice(Interner)[is_trait_def as usize..];
17511758
let sized_trait = db
17521759
.lang_item(resolver.krate(), LangItem::Sized)
17531760
.and_then(|lang_item| lang_item.as_trait().map(to_chalk_trait_id));
17541761

1755-
sized_trait.into_iter().flat_map(move |sized_trait| {
1756-
let implicitly_sized_tys = generic_args
1762+
sized_trait.map(move |sized_trait| {
1763+
generic_args
17571764
.iter()
17581765
.filter_map(|generic_arg| generic_arg.ty(Interner))
1759-
.filter(move |&self_ty| !explicitly_unsized_tys.contains(self_ty));
1760-
implicitly_sized_tys.map(move |self_ty| {
1761-
WhereClause::Implemented(TraitRef {
1762-
trait_id: sized_trait,
1763-
substitution: Substitution::from1(Interner, self_ty.clone()),
1766+
.filter(move |&self_ty| !explicitly_unsized_tys.contains(self_ty))
1767+
.map(move |self_ty| {
1768+
WhereClause::Implemented(TraitRef {
1769+
trait_id: sized_trait,
1770+
substitution: Substitution::from1(Interner, self_ty.clone()),
1771+
})
17641772
})
1765-
})
17661773
})
17671774
}
17681775

crates/hir-ty/src/tests/display_source_code.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ fn render_dyn_for_ty() {
8585
trait Foo<'a> {}
8686
8787
fn foo(foo: &dyn for<'a> Foo<'a>) {}
88-
// ^^^ &dyn Foo<'static>
88+
// ^^^ &dyn Foo<'{error}>
8989
"#,
9090
);
9191
}

crates/hir-ty/src/tests/patterns.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1109,7 +1109,7 @@ fn var_args() {
11091109
#[lang = "va_list"]
11101110
pub struct VaListImpl<'f>;
11111111
fn my_fn(foo: ...) {}
1112-
//^^^ VaListImpl<'static>
1112+
//^^^ VaListImpl<'{error}>
11131113
"#,
11141114
);
11151115
}

crates/hir-ty/src/tests/regression.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -896,13 +896,13 @@ fn flush(&self) {
896896
"#,
897897
expect![[r#"
898898
123..127 'self': &Mutex<T>
899-
150..152 '{}': MutexGuard<'static, T>
899+
150..152 '{}': MutexGuard<'{error}, T>
900900
234..238 'self': &{unknown}
901901
240..290 '{ ...()); }': ()
902902
250..251 'w': &Mutex<BufWriter>
903903
276..287 '*(w.lock())': BufWriter
904904
278..279 'w': &Mutex<BufWriter>
905-
278..286 'w.lock()': MutexGuard<'static, BufWriter>
905+
278..286 'w.lock()': MutexGuard<'{error}, BufWriter>
906906
"#]],
907907
);
908908
}

crates/hir-ty/src/tests/simple.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3092,15 +3092,15 @@ fn main() {
30923092
389..394 'boxed': Box<Foo<i32>>
30933093
389..406 'boxed....nner()': &i32
30943094
416..421 'good1': &i32
3095-
424..438 'Foo::get_inner': fn get_inner<i32, 'static>(&Box<Foo<i32>>) -> &i32
3095+
424..438 'Foo::get_inner': fn get_inner<i32, '{error}>(&Box<Foo<i32>>) -> &i32
30963096
424..446 'Foo::g...boxed)': &i32
30973097
439..445 '&boxed': &Box<Foo<i32>>
30983098
440..445 'boxed': Box<Foo<i32>>
30993099
457..461 'bad2': &Foo<i32>
31003100
464..469 'boxed': Box<Foo<i32>>
31013101
464..480 'boxed....self()': &Foo<i32>
31023102
490..495 'good2': &Foo<i32>
3103-
498..511 'Foo::get_self': fn get_self<i32, 'static>(&Box<Foo<i32>>) -> &Foo<i32>
3103+
498..511 'Foo::get_self': fn get_self<i32, '{error}>(&Box<Foo<i32>>) -> &Foo<i32>
31043104
498..519 'Foo::g...boxed)': &Foo<i32>
31053105
512..518 '&boxed': &Box<Foo<i32>>
31063106
513..518 'boxed': Box<Foo<i32>>
@@ -3659,7 +3659,7 @@ fn main() {
36593659
let are = "are";
36603660
let count = 10;
36613661
builtin#format_args("hello {count:02} {} friends, we {are:?} {0}{last}", "fancy", last = "!");
3662-
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type: Arguments<'static>
3662+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type: Arguments<'{error}>
36633663
}
36643664
"#,
36653665
);

crates/hir-ty/src/tests/traits.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,7 +1602,7 @@ fn weird_bounds() {
16021602
r#"
16031603
//- minicore: sized
16041604
trait Trait {}
1605-
fn test(
1605+
fn test<'lifetime>(
16061606
a: impl Trait + 'lifetime,
16071607
b: impl 'lifetime,
16081608
c: impl (Trait),
@@ -1612,13 +1612,13 @@ fn test(
16121612
) {}
16131613
"#,
16141614
expect![[r#"
1615-
28..29 'a': impl Trait + 'static
1616-
59..60 'b': impl 'static
1617-
82..83 'c': impl Trait
1618-
103..104 'd': impl 'static
1619-
128..129 'e': impl ?Sized
1620-
148..149 'f': impl Trait + ?Sized
1621-
173..175 '{}': ()
1615+
39..40 'a': impl Trait + 'lifetime
1616+
70..71 'b': impl 'lifetime
1617+
93..94 'c': impl Trait
1618+
114..115 'd': impl 'lifetime
1619+
139..140 'e': impl ?Sized
1620+
159..160 'f': impl Trait + ?Sized
1621+
184..186 '{}': ()
16221622
"#]],
16231623
);
16241624
}

crates/ide-assists/src/handlers/extract_function.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5617,7 +5617,7 @@ fn func<T: Debug>(i: Struct<'_, T>) {
56175617
fun_name(i);
56185618
}
56195619
5620-
fn $0fun_name(i: Struct<'static, T>) {
5620+
fn $0fun_name(i: Struct<'_, T>) {
56215621
foo(i);
56225622
}
56235623
"#,

0 commit comments

Comments
 (0)