Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 0519414

Browse files
committed
Make ReferenceConversion methods return ast types
1 parent 039b3d0 commit 0519414

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1033,7 +1033,7 @@ fn fn_arg_type(
10331033
if ty.is_reference() || ty.is_mutable_reference() {
10341034
let famous_defs = &FamousDefs(&ctx.sema, ctx.sema.scope(fn_arg.syntax())?.krate());
10351035
convert_reference_type(ty.strip_references(), ctx.db(), famous_defs)
1036-
.map(|conversion| conversion.convert_type(ctx.db()))
1036+
.map(|conversion| conversion.convert_type(ctx.db()).to_string())
10371037
.or_else(|| ty.display_source_code(ctx.db(), target_module.into(), true).ok())
10381038
} else {
10391039
ty.display_source_code(ctx.db(), target_module.into(), true).ok()

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,8 @@ fn generate_getter_from_info(
233233
.map(|conversion| {
234234
cov_mark::hit!(convert_reference_type);
235235
(
236-
conversion.convert_type(ctx.db()),
237-
conversion.getter(record_field_info.field_name.to_string()),
236+
conversion.convert_type(ctx.db()).to_string(),
237+
conversion.getter(record_field_info.field_name.to_string()).to_string(),
238238
)
239239
})
240240
})()

crates/ide-assists/src/utils.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -718,8 +718,8 @@ enum ReferenceConversionType {
718718
}
719719

720720
impl ReferenceConversion {
721-
pub(crate) fn convert_type(&self, db: &dyn HirDatabase) -> String {
722-
match self.conversion {
721+
pub(crate) fn convert_type(&self, db: &dyn HirDatabase) -> ast::Type {
722+
let ty = match self.conversion {
723723
ReferenceConversionType::Copy => self.ty.display(db).to_string(),
724724
ReferenceConversionType::AsRefStr => "&str".to_string(),
725725
ReferenceConversionType::AsRefSlice => {
@@ -745,21 +745,25 @@ impl ReferenceConversion {
745745
type_arguments.next().unwrap().display(db).to_string();
746746
format!("Result<&{first_type_argument_name}, &{second_type_argument_name}>")
747747
}
748-
}
748+
};
749+
750+
make::ty(&ty)
749751
}
750752

751-
pub(crate) fn getter(&self, field_name: String) -> String {
753+
pub(crate) fn getter(&self, field_name: String) -> ast::Expr {
754+
let expr = make::expr_field(make::ext::expr_self(), &field_name);
755+
752756
match self.conversion {
753-
ReferenceConversionType::Copy => format!("self.{field_name}"),
757+
ReferenceConversionType::Copy => expr,
754758
ReferenceConversionType::AsRefStr
755759
| ReferenceConversionType::AsRefSlice
756760
| ReferenceConversionType::Dereferenced
757761
| ReferenceConversionType::Option
758762
| ReferenceConversionType::Result => {
759763
if self.impls_deref {
760-
format!("&self.{field_name}")
764+
make::expr_ref(expr, false)
761765
} else {
762-
format!("self.{field_name}.as_ref()")
766+
make::expr_method_call(expr, make::name_ref("as_ref"), make::arg_list([]))
763767
}
764768
}
765769
}

0 commit comments

Comments
 (0)