mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-07 13:25:45 +00:00
adjust hir_def::TypeBound::as_path
This commit is contained in:
parent
b217e9cc50
commit
d9e6377b91
@ -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
|
||||
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user