adjust hir_def::TypeBound::as_path

This commit is contained in:
Dawer 2021-06-14 17:36:56 +05:00
parent b217e9cc50
commit d9e6377b91
3 changed files with 13 additions and 6 deletions

View File

@ -304,7 +304,7 @@ struct S<'a, 'b: 'a, T: Copy + 'a + 'b, const K: u8 = 0> {
field: &'a &'b T,
}
struct Tuple<T: Copy>(T);
struct Tuple<T: Copy, U: ?Sized>(T, U);
impl<'a, 'b: 'a, T: Copy + 'a + 'b, const K: u8 = 0> S<'a, 'b, T, K> {
fn f<G: 'a>(arg: impl Copy) -> impl Copy {}
@ -325,11 +325,13 @@ trait Tr<'a, T: 'a>: Super where Self: for<'a> Tr<'a, T> {}
pub(self) field: &'a &'b T,
}
pub(self) struct Tuple<T>(
pub(self) struct Tuple<T, U>(
pub(self) 0: T,
pub(self) 1: U,
)
where
T: Copy;
T: Copy,
U: ?Sized;
impl<'a, 'b, T, const K: u8> S<'a, 'b, T, K>
where

View File

@ -332,9 +332,10 @@ impl TypeBound {
}
}
pub fn as_path(&self) -> Option<&Path> {
pub fn as_path(&self) -> Option<(&Path, &TraitBoundModifier)> {
match self {
TypeBound::Path(p, _) | TypeBound::ForLifetime(_, p) => Some(p),
TypeBound::Path(p, m) => Some((p, m)),
TypeBound::ForLifetime(_, p) => Some((p, &TraitBoundModifier::None)),
TypeBound::Lifetime(_) | TypeBound::Error => None,
}
}

View File

@ -13,7 +13,7 @@ use hir_def::{
intern::Interned,
path::Path,
resolver::{HasResolver, TypeNs},
type_ref::TypeRef,
type_ref::{TraitBoundModifier, TypeRef},
AssocContainerId, GenericDefId, Lookup, TraitId, TypeAliasId, TypeParamId,
};
use hir_expand::name::{name, Name};
@ -58,6 +58,10 @@ fn direct_super_traits(db: &dyn DefDatabase, trait_: TraitId) -> Vec<TraitId> {
},
WherePredicate::Lifetime { .. } => None,
})
.filter_map(|(path, bound_modifier)| match bound_modifier {
TraitBoundModifier::None => Some(path),
TraitBoundModifier::Maybe => None,
})
.filter_map(|path| match resolver.resolve_path_in_type_ns_fully(db, path.mod_path()) {
Some(TypeNs::TraitId(t)) => Some(t),
_ => None,