Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/generate_delegate_trait.rs')
-rw-r--r--crates/ide-assists/src/handlers/generate_delegate_trait.rs24
1 files changed, 15 insertions, 9 deletions
diff --git a/crates/ide-assists/src/handlers/generate_delegate_trait.rs b/crates/ide-assists/src/handlers/generate_delegate_trait.rs
index 5a3457e5b7..bf4ce5c907 100644
--- a/crates/ide-assists/src/handlers/generate_delegate_trait.rs
+++ b/crates/ide-assists/src/handlers/generate_delegate_trait.rs
@@ -22,7 +22,7 @@ use syntax::{
WherePred,
},
ted::{self, Position},
- AstNode, NodeOrToken, SmolStr, SyntaxKind, ToSmolStr,
+ AstNode, Edition, NodeOrToken, SmolStr, SyntaxKind, ToSmolStr,
};
// Assist: generate_delegate_trait
@@ -109,6 +109,7 @@ struct Field {
ty: ast::Type,
range: syntax::TextRange,
impls: Vec<Delegee>,
+ edition: Edition,
}
impl Field {
@@ -119,6 +120,7 @@ impl Field {
let db = ctx.sema.db;
let module = ctx.sema.file_to_module_def(ctx.file_id())?;
+ let edition = module.krate().edition(ctx.db());
let (name, range, ty) = match f {
Either::Left(f) => {
@@ -147,7 +149,7 @@ impl Field {
}
}
- Some(Field { name, ty, range, impls })
+ Some(Field { name, ty, range, impls, edition })
}
}
@@ -163,18 +165,18 @@ enum Delegee {
}
impl Delegee {
- fn signature(&self, db: &dyn HirDatabase) -> String {
+ fn signature(&self, db: &dyn HirDatabase, edition: Edition) -> String {
let mut s = String::new();
let (Delegee::Bound(it) | Delegee::Impls(it, _)) = self;
for m in it.module(db).path_to_root(db).iter().rev() {
if let Some(name) = m.name(db) {
- s.push_str(&format!("{}::", name.display_no_db().to_smolstr()));
+ s.push_str(&format!("{}::", name.display_no_db(edition).to_smolstr()));
}
}
- s.push_str(&it.name(db).display_no_db().to_smolstr());
+ s.push_str(&it.name(db).display_no_db(edition).to_smolstr());
s
}
}
@@ -212,9 +214,11 @@ impl Struct {
// if self.hir_ty.impls_trait(db, trait_, &[]) {
// continue;
// }
- let signature = delegee.signature(db);
+ let signature = delegee.signature(db, field.edition);
- let Some(delegate) = generate_impl(ctx, self, &field.ty, &field.name, delegee) else {
+ let Some(delegate) =
+ generate_impl(ctx, self, &field.ty, &field.name, delegee, field.edition)
+ else {
continue;
};
@@ -240,6 +244,7 @@ fn generate_impl(
field_ty: &ast::Type,
field_name: &str,
delegee: &Delegee,
+ edition: Edition,
) -> Option<ast::Impl> {
let delegate: ast::Impl;
let db = ctx.db();
@@ -259,7 +264,7 @@ fn generate_impl(
strukt_params.clone(),
strukt_params.map(|params| params.to_generic_args()),
delegee.is_auto(db),
- make::ty(&delegee.name(db).display_no_db().to_smolstr()),
+ make::ty(&delegee.name(db).display_no_db(edition).to_smolstr()),
strukt_ty,
bound_def.where_clause(),
ast_strukt.where_clause(),
@@ -350,7 +355,7 @@ fn generate_impl(
let type_gen_args = strukt_params.clone().map(|params| params.to_generic_args());
let path_type =
- make::ty(&trait_.name(db).display_no_db().to_smolstr()).clone_for_update();
+ make::ty(&trait_.name(db).display_no_db(edition).to_smolstr()).clone_for_update();
transform_impl(ctx, ast_strukt, &old_impl, &transform_args, path_type.syntax())?;
// 3) Generate delegate trait impl
@@ -735,6 +740,7 @@ fn func_assoc_item(
item.async_token().is_some(),
item.const_token().is_some(),
item.unsafe_token().is_some(),
+ item.gen_token().is_some(),
)
.clone_for_update();