diff --git a/crates/ide_assists/src/handlers/generate_getter.rs b/crates/ide_assists/src/handlers/generate_getter.rs index 81cf72dd71..653e448cbb 100644 --- a/crates/ide_assists/src/handlers/generate_getter.rs +++ b/crates/ide_assists/src/handlers/generate_getter.rs @@ -112,8 +112,12 @@ pub(crate) fn generate_getter_impl( } let vis = strukt.visibility().map_or(String::new(), |v| format!("{} ", v)); - let (ty, body) = if mutable { - (format!("&mut {}", field_ty), format!("&mut self.{}", field_name)) + let (ty, body, description) = if mutable { + ( + format!("&mut {}", field_ty), + format!("&mut self.{}", field_name), + "a mutable reference to ", + ) } else { let famous_defs = &FamousDefs(&ctx.sema, ctx.sema.scope(field_ty.syntax()).krate()); ctx.sema @@ -124,18 +128,25 @@ pub(crate) fn generate_getter_impl( ( conversion.convert_type(ctx.db()), conversion.getter(field_name.to_string()), + if conversion.is_copy() { "" } else { "a reference to " }, + ) + }) + .unwrap_or_else(|| { + ( + format!("&{}", field_ty), + format!("&self.{}", field_name), + "a reference to ", ) }) - .unwrap_or_else(|| (format!("&{}", field_ty), format!("&self.{}", field_name))) }; format_to!( buf, - " /// Get a {}reference to the {}'s {}. + " /// Get {}the {}'s {}. {}fn {}(&{}self) -> {} {{ {} }}", - mutable.then(|| "mutable ").unwrap_or_default(), + description, to_lower_snake_case(&strukt_name.to_string()).replace('_', " "), fn_name.trim_end_matches("_mut").replace('_', " "), vis, @@ -349,7 +360,7 @@ struct S { foo: $0bool } struct S { foo: bool } impl S { - /// Get a reference to the s's foo. + /// Get the s's foo. fn $0foo(&self) -> bool { self.foo } diff --git a/crates/ide_assists/src/utils.rs b/crates/ide_assists/src/utils.rs index 8a443ab089..e1ee3f3ad4 100644 --- a/crates/ide_assists/src/utils.rs +++ b/crates/ide_assists/src/utils.rs @@ -571,6 +571,10 @@ impl ReferenceConversion { | ReferenceConversionType::Result => format!("self.{}.as_ref()", field_name), } } + + pub(crate) fn is_copy(&self) -> bool { + matches!(self.conversion, ReferenceConversionType::Copy) + } } // FIXME: It should return a new hir::Type, but currently constructing new types is too cumbersome