Display elided lifetime for external paths

This commit is contained in:
Gary Guo 2020-08-07 23:34:44 +01:00
parent 63c0d9ca51
commit 505d157814
2 changed files with 20 additions and 4 deletions

View File

@ -2,9 +2,9 @@ use crate::clean::auto_trait::AutoTraitFinder;
use crate::clean::blanket_impl::BlanketImplFinder; use crate::clean::blanket_impl::BlanketImplFinder;
use crate::clean::{ use crate::clean::{
inline, Clean, Crate, Deprecation, ExternalCrate, FnDecl, FnRetTy, Generic, GenericArg, inline, Clean, Crate, Deprecation, ExternalCrate, FnDecl, FnRetTy, Generic, GenericArg,
GenericArgs, GenericBound, Generics, GetDefId, ImportSource, Item, ItemEnum, MacroKind, Path, GenericArgs, GenericBound, Generics, GetDefId, ImportSource, Item, ItemEnum, Lifetime,
PathSegment, Primitive, PrimitiveType, ResolvedPath, Span, Stability, Type, TypeBinding, MacroKind, Path, PathSegment, Primitive, PrimitiveType, ResolvedPath, Span, Stability, Type,
TypeKind, Visibility, WherePredicate, TypeBinding, TypeKind, Visibility, WherePredicate,
}; };
use crate::core::DocContext; use crate::core::DocContext;
@ -121,7 +121,10 @@ pub fn external_generic_args(
let args: Vec<_> = substs let args: Vec<_> = substs
.iter() .iter()
.filter_map(|kind| match kind.unpack() { .filter_map(|kind| match kind.unpack() {
GenericArgKind::Lifetime(lt) => lt.clean(cx).map(GenericArg::Lifetime), GenericArgKind::Lifetime(lt) => match lt {
ty::ReLateBound(_, ty::BrAnon(_)) => Some(GenericArg::Lifetime(Lifetime::elided())),
_ => lt.clean(cx).map(GenericArg::Lifetime),
},
GenericArgKind::Type(_) if skip_self => { GenericArgKind::Type(_) if skip_self => {
skip_self = false; skip_self = false;
None None

View File

@ -31,3 +31,16 @@ pub fn test3(a: &u32) -> ARef {
pub fn test4(a: &u32) -> ARef<'_> { pub fn test4(a: &u32) -> ARef<'_> {
Ref(a) Ref(a)
} }
// Ensure external paths also display elided lifetime
// @has foo/fn.test5.html
// @matches - "Iter</a>&lt;'_"
pub fn test5(a: &Option<u32>) -> std::option::Iter<u32> {
a.iter()
}
// @has foo/fn.test6.html
// @matches - "Iter</a>&lt;'_"
pub fn test6(a: &Option<u32>) -> std::option::Iter<'_, u32> {
a.iter()
}