@@ -749,23 +749,45 @@ impl<'a, 'tcx> WrongNumberOfGenericArgs<'a, 'tcx> {
749
749
fn suggest_moving_args_from_assoc_fn_to_trait_for_method_call (
750
750
& self ,
751
751
err : & mut Diagnostic ,
752
- trait_ : DefId ,
752
+ trait_def_id : DefId ,
753
753
expr : & ' tcx hir:: Expr < ' tcx > ,
754
754
msg : String ,
755
755
num_assoc_fn_excess_args : usize ,
756
756
num_trait_generics_except_self : usize ,
757
757
) {
758
- if let hir:: ExprKind :: MethodCall ( _, receiver, args, ..) = expr. kind {
759
- assert_eq ! ( args. len( ) , 0 ) ;
760
- if num_assoc_fn_excess_args == num_trait_generics_except_self {
761
- if let Some ( gen_args) = self . gen_args . span_ext ( )
762
- && let Ok ( gen_args) = self . tcx . sess . source_map ( ) . span_to_snippet ( gen_args)
763
- && let Ok ( receiver) = self . tcx . sess . source_map ( ) . span_to_snippet ( receiver. span ) {
764
- let sugg = format ! ( "{}::{}::{}({})" , self . tcx. item_name( trait_) , gen_args, self . tcx. item_name( self . def_id) , receiver) ;
765
- err. span_suggestion ( expr. span , msg, sugg, Applicability :: MaybeIncorrect ) ;
766
- }
767
- }
758
+ let sm = self . tcx . sess . source_map ( ) ;
759
+ let hir:: ExprKind :: MethodCall ( _, rcvr, args, _) = expr. kind else { return ; } ;
760
+ if num_assoc_fn_excess_args != num_trait_generics_except_self {
761
+ return ;
768
762
}
763
+ let Some ( gen_args) = self . gen_args . span_ext ( ) else { return ; } ;
764
+ let Ok ( generics) = sm. span_to_snippet ( gen_args) else { return ; } ;
765
+ let Ok ( rcvr) = sm. span_to_snippet (
766
+ rcvr. span . find_ancestor_inside ( expr. span ) . unwrap_or ( rcvr. span )
767
+ ) else { return ; } ;
768
+ let Ok ( rest) =
769
+ ( match args {
770
+ [ ] => Ok ( String :: new ( ) ) ,
771
+ [ arg] => sm. span_to_snippet (
772
+ arg. span . find_ancestor_inside ( expr. span ) . unwrap_or ( arg. span ) ,
773
+ ) ,
774
+ [ first, .., last] => {
775
+ let first_span =
776
+ first. span . find_ancestor_inside ( expr. span ) . unwrap_or ( first. span ) ;
777
+ let last_span =
778
+ last. span . find_ancestor_inside ( expr. span ) . unwrap_or ( last. span ) ;
779
+ sm. span_to_snippet ( first_span. to ( last_span) )
780
+ }
781
+ } ) else { return ; } ;
782
+ let comma = if args. len ( ) > 0 { ", " } else { "" } ;
783
+ let trait_path = self . tcx . def_path_str ( trait_def_id) ;
784
+ let method_name = self . tcx . item_name ( self . def_id ) ;
785
+ err. span_suggestion (
786
+ expr. span ,
787
+ msg,
788
+ format ! ( "{trait_path}::{generics}::{method_name}({rcvr}{comma}{rest})" ) ,
789
+ Applicability :: MaybeIncorrect ,
790
+ ) ;
769
791
}
770
792
771
793
/// Suggests to remove redundant argument(s):
0 commit comments