Skip to content

Commit 91401c8

Browse files
committed
Use parentheses to disambiguate impl Trait
1 parent c69d605 commit 91401c8

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/lifetime.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
use proc_macro2::Span;
1+
use proc_macro2::{Span, TokenStream};
2+
use std::mem;
23
use syn::visit_mut::{self, VisitMut};
34
use syn::{
4-
parse_quote_spanned, Expr, GenericArgument, Lifetime, Receiver, TypeImplTrait, TypeReference,
5+
parse_quote_spanned, token, Expr, GenericArgument, Lifetime, Receiver, Type, TypeImplTrait,
6+
TypeParen, TypeReference,
57
};
68

79
pub struct CollectLifetimes {
@@ -78,6 +80,17 @@ impl VisitMut for AddLifetimeToImplTrait {
7880
visit_mut::visit_type_impl_trait_mut(self, ty);
7981
}
8082

83+
fn visit_type_reference_mut(&mut self, ty: &mut TypeReference) {
84+
if let Type::ImplTrait(_) = *ty.elem {
85+
let elem = mem::replace(&mut *ty.elem, Type::Verbatim(TokenStream::new()));
86+
*ty.elem = Type::Paren(TypeParen {
87+
paren_token: token::Paren(ty.and_token.span),
88+
elem: Box::new(elem),
89+
});
90+
}
91+
visit_mut::visit_type_reference_mut(self, ty);
92+
}
93+
8194
fn visit_expr_mut(&mut self, _e: &mut Expr) {
8295
// Do not recurse into impl Traits inside of an array length expression.
8396
//

0 commit comments

Comments
 (0)