@@ -12,7 +12,7 @@ use rustc_hir::{
1212use  rustc_lint:: { EarlyContext ,  EarlyLintPass ,  LateContext ,  LateLintPass } ; 
1313use  rustc_session:: declare_lint_pass; 
1414use  rustc_span:: edition:: Edition ; 
15- use  rustc_span:: { BytePos ,  Span ,  sym} ; 
15+ use  rustc_span:: { BytePos ,  Pos   as  _ ,   Span ,  sym} ; 
1616
1717declare_clippy_lint !  { 
1818    /// ### What it does 
@@ -97,16 +97,13 @@ impl<'tcx> LateLintPass<'tcx> for UnusedUnit {
9797    } 
9898
9999    fn  check_poly_trait_ref ( & mut  self ,  cx :  & LateContext < ' tcx > ,  poly :  & ' tcx  PolyTraitRef < ' tcx > )  { 
100-         let  segments = & poly. trait_ref . path . segments ; 
101- 
102-         if  segments. len ( )  == 1 
103-             && matches ! ( segments[ 0 ] . ident. name,  sym:: Fn  | sym:: FnMut  | sym:: FnOnce ) 
104-             && let  Some ( args)  = segments[ 0 ] . args 
100+         if  let  [ segment]  = & poly. trait_ref . path . segments 
101+             && matches ! ( segment. ident. name,  sym:: Fn  | sym:: FnMut  | sym:: FnOnce ) 
102+             && let  Some ( args)  = segment. args 
105103            && args. parenthesized  == GenericArgsParentheses :: ParenSugar 
106-             && let  constraints = & args. constraints 
107-             && constraints. len ( )  == 1 
108-             && constraints[ 0 ] . ident . name  == sym:: Output 
109-             && let  AssocItemConstraintKind :: Equality  {  term :  Term :: Ty ( hir_ty)  }  = constraints[ 0 ] . kind 
104+             && let  [ constraint]  = & args. constraints 
105+             && constraint. ident . name  == sym:: Output 
106+             && let  AssocItemConstraintKind :: Equality  {  term :  Term :: Ty ( hir_ty)  }  = constraint. kind 
110107            && args. span_ext . hi ( )  != poly. span . hi ( ) 
111108            && !hir_ty. span . from_expansion ( ) 
112109            && args. span_ext . hi ( )  != hir_ty. span . hi ( ) 
@@ -160,17 +157,15 @@ fn get_def(span: Span) -> Option<Span> {
160157
161158fn  lint_unneeded_unit_return ( cx :  & LateContext < ' _ > ,  ty_span :  Span ,  span :  Span )  { 
162159    let  ( ret_span,  appl)  =
163-         span. with_hi ( ty_span. hi ( ) ) 
164-             . get_source_text ( cx) 
165-             . map_or ( ( ty_span,  Applicability :: MaybeIncorrect ) ,  |src| { 
166-                 position_before_rarrow ( & src) . map_or ( ( ty_span,  Applicability :: MaybeIncorrect ) ,  |rpos| { 
167-                     ( 
168-                         #[ expect( clippy:: cast_possible_truncation) ]  
169-                         ty_span. with_lo ( BytePos ( span. lo ( ) . 0  + rpos as  u32 ) ) , 
170-                         Applicability :: MachineApplicable , 
171-                     ) 
172-                 } ) 
173-             } ) ; 
160+         if  let  Some ( Some ( rpos) )  = span. with_hi ( ty_span. hi ( ) ) . with_source_text ( cx,  position_before_rarrow)  { 
161+             ( 
162+                 ty_span. with_lo ( span. lo ( )  + BytePos :: from_usize ( rpos) ) , 
163+                 Applicability :: MachineApplicable , 
164+             ) 
165+         }  else  { 
166+             ( ty_span,  Applicability :: MaybeIncorrect ) 
167+         } ; 
168+ 
174169    span_lint_and_sugg ( 
175170        cx, 
176171        UNUSED_UNIT , 
0 commit comments