mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-14 22:24:14 +00:00
Filter out error predicates in type bounds as well
This commit is contained in:
parent
4053fcfca0
commit
1f7f4578f7
2 changed files with 29 additions and 2 deletions
|
@ -958,6 +958,23 @@ fn test() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn error_bound_chalk() {
|
||||||
|
let t = type_at(
|
||||||
|
r#"
|
||||||
|
//- /main.rs
|
||||||
|
trait Trait {
|
||||||
|
fn foo(&self) -> u32 {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test(x: (impl Trait + UnknownTrait)) {
|
||||||
|
x.foo()<|>;
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
assert_eq!(t, "u32");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn assoc_type_bindings() {
|
fn assoc_type_bindings() {
|
||||||
assert_snapshot!(
|
assert_snapshot!(
|
||||||
|
|
|
@ -129,12 +129,22 @@ impl ToChalk for Ty {
|
||||||
Ty::Bound(idx) => chalk_ir::TyData::BoundVar(idx as usize).intern(),
|
Ty::Bound(idx) => chalk_ir::TyData::BoundVar(idx as usize).intern(),
|
||||||
Ty::Infer(_infer_ty) => panic!("uncanonicalized infer ty"),
|
Ty::Infer(_infer_ty) => panic!("uncanonicalized infer ty"),
|
||||||
Ty::Dyn(predicates) => {
|
Ty::Dyn(predicates) => {
|
||||||
let where_clauses = predicates.iter().cloned().map(|p| p.to_chalk(db)).collect();
|
let where_clauses = predicates
|
||||||
|
.iter()
|
||||||
|
.filter(|p| !p.is_error())
|
||||||
|
.cloned()
|
||||||
|
.map(|p| p.to_chalk(db))
|
||||||
|
.collect();
|
||||||
let bounded_ty = chalk_ir::BoundedTy { bounds: make_binders(where_clauses, 1) };
|
let bounded_ty = chalk_ir::BoundedTy { bounds: make_binders(where_clauses, 1) };
|
||||||
chalk_ir::TyData::Dyn(bounded_ty).intern()
|
chalk_ir::TyData::Dyn(bounded_ty).intern()
|
||||||
}
|
}
|
||||||
Ty::Opaque(predicates) => {
|
Ty::Opaque(predicates) => {
|
||||||
let where_clauses = predicates.iter().cloned().map(|p| p.to_chalk(db)).collect();
|
let where_clauses = predicates
|
||||||
|
.iter()
|
||||||
|
.filter(|p| !p.is_error())
|
||||||
|
.cloned()
|
||||||
|
.map(|p| p.to_chalk(db))
|
||||||
|
.collect();
|
||||||
let bounded_ty = chalk_ir::BoundedTy { bounds: make_binders(where_clauses, 1) };
|
let bounded_ty = chalk_ir::BoundedTy { bounds: make_binders(where_clauses, 1) };
|
||||||
chalk_ir::TyData::Opaque(bounded_ty).intern()
|
chalk_ir::TyData::Opaque(bounded_ty).intern()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue