Skip to content

Commit cd4fadb

Browse files
committed
use name_generator
Signed-off-by: Hayashi Mikihiro <[email protected]>
1 parent 720f9f1 commit cd4fadb

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

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

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use ide_db::{
2-
imports::import_assets::item_for_path_search, use_trivial_constructor::use_trivial_constructor,
2+
imports::import_assets::item_for_path_search, syntax_helpers::suggest_name::NameGenerator,
3+
use_trivial_constructor::use_trivial_constructor,
34
};
45
use syntax::{
56
ast::{self, AstNode, HasName, HasVisibility, StructKind, edit_in_place::Indent, make},
@@ -39,11 +40,25 @@ pub(crate) fn generate_new(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option
3940
StructKind::Record(named) => {
4041
named.fields().filter_map(|f| Some((f.name()?, f.ty()?))).collect::<Vec<_>>()
4142
}
42-
StructKind::Tuple(tuple) => tuple
43-
.fields()
44-
.enumerate()
45-
.filter_map(|(i, f)| Some((make::name(&format!("_{}", i)), f.ty()?)))
46-
.collect::<Vec<_>>(),
43+
StructKind::Tuple(tuple) => {
44+
let mut name_generator = NameGenerator::default();
45+
tuple
46+
.fields()
47+
.enumerate()
48+
.filter_map(|(i, f)| {
49+
let ty = f.ty()?;
50+
let name = match name_generator.for_type(
51+
&ctx.sema.resolve_type(&ty)?,
52+
ctx.db(),
53+
ctx.edition(),
54+
) {
55+
Some(name) => name,
56+
None => name_generator.suggest_name(&format!("_{i}")),
57+
};
58+
Some((make::name(name.as_str()), f.ty()?))
59+
})
60+
.collect::<Vec<_>>()
61+
}
4762
StructKind::Unit => return None,
4863
};
4964

0 commit comments

Comments
 (0)