mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-13 13:48:50 +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]
|
||||
fn assoc_type_bindings() {
|
||||
assert_snapshot!(
|
||||
|
|
|
@ -129,12 +129,22 @@ impl ToChalk for Ty {
|
|||
Ty::Bound(idx) => chalk_ir::TyData::BoundVar(idx as usize).intern(),
|
||||
Ty::Infer(_infer_ty) => panic!("uncanonicalized infer ty"),
|
||||
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) };
|
||||
chalk_ir::TyData::Dyn(bounded_ty).intern()
|
||||
}
|
||||
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) };
|
||||
chalk_ir::TyData::Opaque(bounded_ty).intern()
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue