Skip to content

Commit 1c0f46a

Browse files
committed
Use NameGenerator
1 parent f5d2df6 commit 1c0f46a

File tree

2 files changed

+22
-36
lines changed

2 files changed

+22
-36
lines changed

crates/ide-assists/src/handlers/generate_blanket_trait_impl.rs

Lines changed: 21 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
};
710
use 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

209212
fn 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

247233
fn 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
320306
where
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
742728
where
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
786772
where
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
832818
where
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
}

crates/ide-assists/src/tests/generated.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1339,7 +1339,7 @@ where
13391339
}
13401340
}
13411341
1342-
impl<T: Send, This: ToOwned + ?Sized> Foo<T> for $0This
1342+
impl<T: Send, T1: ToOwned + ?Sized> Foo<T> for $0T1
13431343
where
13441344
Self::Owned: Default,
13451345
{

0 commit comments

Comments
 (0)