@@ -3,7 +3,10 @@ use crate::{
33 assist_context:: { AssistContext , Assists } ,
44 utils:: add_cfg_attrs_to,
55} ;
6- use ide_db:: assists:: { AssistId , AssistKind , ExprFillDefaultMode } ;
6+ use ide_db:: {
7+ assists:: { AssistId , AssistKind , ExprFillDefaultMode } ,
8+ syntax_helpers:: suggest_name,
9+ } ;
710use syntax:: {
811 AstNode ,
912 ast:: {
@@ -42,7 +45,7 @@ use syntax::{
4245// }
4346// }
4447//
45- // impl<T: Send, This : ToOwned + ?Sized> Foo<T> for $0This
48+ // impl<T: Send, T1 : ToOwned + ?Sized> Foo<T> for $0T1
4649// where
4750// Self::Owned: Default,
4851// {
@@ -207,13 +210,9 @@ fn exlucde_sized(bounds: ast::TypeBoundList) -> Option<ast::TypeBoundList> {
207210}
208211
209212fn this_name ( traitd : & ast:: Trait ) -> ast:: Name {
210- let mut use_t = false ;
211- let mut use_i = false ;
212- let mut use_this = false ;
213-
214213 let has_iter = find_bound ( "Iterator" , traitd. type_bound_list ( ) ) . is_some ( ) ;
215214
216- traitd
215+ let params = traitd
217216 . generic_param_list ( )
218217 . into_iter ( )
219218 . flat_map ( |param_list| param_list. generic_params ( ) )
@@ -222,26 +221,13 @@ fn this_name(traitd: &ast::Trait) -> ast::Name {
222221 GenericParam :: ConstParam ( cp) => cp. name ( ) ,
223222 GenericParam :: TypeParam ( tp) => tp. name ( ) ,
224223 } )
225- . for_each ( |name| match & * name. text ( ) {
226- "T" => use_t = true ,
227- "I" => use_i = true ,
228- "This" => use_this = true ,
229- _ => ( ) ,
230- } ) ;
231-
232- make:: name ( if has_iter {
233- if !use_i {
234- "I"
235- } else if !use_t {
236- "T"
237- } else {
238- "This"
239- }
240- } else if !use_t {
241- "T"
242- } else {
243- "This"
244- } )
224+ . map ( |name| name. to_string ( ) )
225+ . collect :: < Vec < _ > > ( ) ;
226+
227+ let mut name_gen =
228+ suggest_name:: NameGenerator :: new_with_names ( params. iter ( ) . map ( String :: as_str) ) ;
229+
230+ make:: name ( & name_gen. suggest_name ( if has_iter { "I" } else { "T" } ) )
245231}
246232
247233fn find_bound ( s : & str , bounds : Option < ast:: TypeBoundList > ) -> Option < ast:: TypeBound > {
@@ -316,7 +302,7 @@ where
316302 }
317303}
318304
319- impl<T: Send, This : ToOwned + ?Sized> Foo<T> for $0This
305+ impl<T: Send, T1 : ToOwned + ?Sized> Foo<T> for $0T1
320306where
321307 Self::Owned: Default,
322308{
@@ -499,7 +485,7 @@ mod foo {
499485 }
500486 }
501487
502- impl<T: Send, This : ToOwned + ?Sized> Foo<T> for $0This
488+ impl<T: Send, T1 : ToOwned + ?Sized> Foo<T> for $0T1
503489 where
504490 Self::Owned: Default,
505491 {
@@ -541,7 +527,7 @@ mod foo {
541527 }
542528 }
543529
544- impl<T: Send, This : ToOwned + ?Sized> Foo<T> for $0This
530+ impl<T: Send, T1 : ToOwned + ?Sized> Foo<T> for $0T1
545531 where
546532 Self::Owned: Default,
547533 Self: Send,
@@ -587,7 +573,7 @@ mod foo {
587573 }
588574 }
589575
590- impl<T: Send, This : ToOwned + ?Sized> Foo<T> for $0This
576+ impl<T: Send, T1 : ToOwned + ?Sized> Foo<T> for $0T1
591577 where
592578 Self::Owned: Default,
593579 Self: Send,
@@ -738,7 +724,7 @@ where
738724 }
739725}
740726
741- impl<T: Send, This : ToOwned + ?Sized> Foo<T> for $0This
727+ impl<T: Send, T1 : ToOwned + ?Sized> Foo<T> for $0T1
742728where
743729 Self::Owned: Default,
744730{
@@ -782,7 +768,7 @@ where
782768 }
783769}
784770
785- impl<T: Send, This : ToOwned + ?Sized> Foo<T> for $0This
771+ impl<T: Send, T1 : ToOwned + ?Sized> Foo<T> for $0T1
786772where
787773 Self::Owned: Default,
788774{
@@ -828,7 +814,7 @@ where
828814 }
829815}
830816
831- impl<T: Send, This : ?Sized> Foo<T> for $0This
817+ impl<T: Send, T1 : ?Sized> Foo<T> for $0T1
832818where
833819 Self: ToOwned,
834820 Self::Owned: Default,
@@ -867,7 +853,7 @@ trait Foo<T: Send> {
867853 }
868854}
869855
870- impl<T: Send, This : ?Sized> Foo<T> for $0This {
856+ impl<T: Send, T1 : ?Sized> Foo<T> for $0T1 {
871857 fn foo(&self, x: Self::X) -> T {
872858 todo!()
873859 }
0 commit comments