Skip to content

Commit ed7534a

Browse files
Merge pull request #21884 from Shourya742/2026-03-26-remove-getter-make-variant
Remove getter make variant
2 parents 6e97128 + aadb5a1 commit ed7534a

3 files changed

Lines changed: 57 additions & 44 deletions

File tree

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

Lines changed: 32 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -218,14 +218,14 @@ fn generate_getter_from_info(
218218
ctx: &AssistContext<'_>,
219219
info: &AssistInfo,
220220
record_field_info: &RecordFieldInfo,
221-
syntax_factory: &SyntaxFactory,
221+
make: &SyntaxFactory,
222222
) -> ast::Fn {
223223
let (ty, body) = if matches!(info.assist_type, AssistType::MutGet) {
224-
let self_expr = syntax_factory.expr_path(syntax_factory.ident_path("self"));
224+
let self_expr = make.expr_path(make.ident_path("self"));
225225
(
226-
syntax_factory.ty_ref(record_field_info.field_ty.clone(), true),
227-
syntax_factory.expr_ref(
228-
syntax_factory.expr_field(self_expr, &record_field_info.field_name.text()).into(),
226+
make.ty_ref(record_field_info.field_ty.clone(), true),
227+
make.expr_ref(
228+
make.expr_field(self_expr, &record_field_info.field_name.text()).into(),
229229
true,
230230
),
231231
)
@@ -239,40 +239,39 @@ fn generate_getter_from_info(
239239
.map(|conversion| {
240240
cov_mark::hit!(convert_reference_type);
241241
(
242-
conversion.convert_type(ctx.db(), module),
243-
conversion.getter(record_field_info.field_name.to_string()),
242+
conversion.convert_type_with_factory(make, ctx.db(), module),
243+
conversion.getter(make, record_field_info.field_name.to_string()),
244244
)
245245
})
246246
})()
247247
.unwrap_or_else(|| {
248248
(
249-
syntax_factory.ty_ref(record_field_info.field_ty.clone(), false),
250-
syntax_factory.expr_ref(
251-
syntax_factory
252-
.expr_field(
253-
syntax_factory.expr_path(syntax_factory.ident_path("self")),
254-
&record_field_info.field_name.text(),
255-
)
256-
.into(),
249+
make.ty_ref(record_field_info.field_ty.clone(), false),
250+
make.expr_ref(
251+
make.expr_field(
252+
make.expr_path(make.ident_path("self")),
253+
&record_field_info.field_name.text(),
254+
)
255+
.into(),
257256
false,
258257
),
259258
)
260259
})
261260
};
262261

263262
let self_param = if matches!(info.assist_type, AssistType::MutGet) {
264-
syntax_factory.mut_self_param()
263+
make.mut_self_param()
265264
} else {
266-
syntax_factory.self_param()
265+
make.self_param()
267266
};
268267

269268
let strukt = &info.strukt;
270-
let fn_name = syntax_factory.name(&record_field_info.fn_name);
271-
let params = syntax_factory.param_list(Some(self_param), []);
272-
let ret_type = Some(syntax_factory.ret_type(ty));
273-
let body = syntax_factory.block_expr([], Some(body));
269+
let fn_name = make.name(&record_field_info.fn_name);
270+
let params = make.param_list(Some(self_param), []);
271+
let ret_type = Some(make.ret_type(ty));
272+
let body = make.block_expr([], Some(body));
274273

275-
syntax_factory.fn_(
274+
make.fn_(
276275
None,
277276
strukt.visibility(),
278277
fn_name,
@@ -291,32 +290,29 @@ fn generate_getter_from_info(
291290
fn generate_setter_from_info(
292291
info: &AssistInfo,
293292
record_field_info: &RecordFieldInfo,
294-
syntax_factory: &SyntaxFactory,
293+
make: &SyntaxFactory,
295294
) -> ast::Fn {
296295
let strukt = &info.strukt;
297296
let field_name = &record_field_info.fn_name;
298-
let fn_name = syntax_factory.name(&format!("set_{field_name}"));
297+
let fn_name = make.name(&format!("set_{field_name}"));
299298
let field_ty = &record_field_info.field_ty;
300299

301300
// Make the param list
302301
// `(&mut self, $field_name: $field_ty)`
303-
let field_param = syntax_factory.param(
304-
syntax_factory.ident_pat(false, false, syntax_factory.name(field_name)).into(),
305-
field_ty.clone(),
306-
);
307-
let params = syntax_factory.param_list(Some(syntax_factory.mut_self_param()), [field_param]);
302+
let field_param =
303+
make.param(make.ident_pat(false, false, make.name(field_name)).into(), field_ty.clone());
304+
let params = make.param_list(Some(make.mut_self_param()), [field_param]);
308305

309306
// Make the assignment body
310307
// `self.$field_name = $field_name`
311-
let self_expr = syntax_factory.expr_path(syntax_factory.ident_path("self"));
312-
let lhs = syntax_factory.expr_field(self_expr, field_name);
313-
let rhs = syntax_factory.expr_path(syntax_factory.ident_path(field_name));
314-
let assign_stmt =
315-
syntax_factory.expr_stmt(syntax_factory.expr_assignment(lhs.into(), rhs).into());
316-
let body = syntax_factory.block_expr([assign_stmt.into()], None);
308+
let self_expr = make.expr_path(make.ident_path("self"));
309+
let lhs = make.expr_field(self_expr, field_name);
310+
let rhs = make.expr_path(make.ident_path(field_name));
311+
let assign_stmt = make.expr_stmt(make.expr_assignment(lhs.into(), rhs).into());
312+
let body = make.block_expr([assign_stmt.into()], None);
317313

318314
// Make the setter fn
319-
syntax_factory.fn_(
315+
make.fn_(
320316
None,
321317
strukt.visibility(),
322318
fn_name,

crates/ide-assists/src/utils.rs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,8 +1035,8 @@ enum ReferenceConversionType {
10351035
}
10361036

10371037
impl<'db> ReferenceConversion<'db> {
1038-
pub(crate) fn convert_type(&self, db: &'db dyn HirDatabase, module: hir::Module) -> ast::Type {
1039-
let ty = match self.conversion {
1038+
fn type_to_string(&self, db: &'db dyn HirDatabase, module: hir::Module) -> String {
1039+
match self.conversion {
10401040
ReferenceConversionType::Copy => self
10411041
.ty
10421042
.display_source_code(db, module.into(), true)
@@ -1086,25 +1086,38 @@ impl<'db> ReferenceConversion<'db> {
10861086
.unwrap_or_else(|_| "_".to_owned());
10871087
format!("Result<&{first_type_argument_name}, &{second_type_argument_name}>")
10881088
}
1089-
};
1089+
}
1090+
}
10901091

1092+
pub(crate) fn convert_type(&self, db: &'db dyn HirDatabase, module: hir::Module) -> ast::Type {
1093+
let ty = self.type_to_string(db, module);
10911094
make::ty(&ty)
10921095
}
10931096

1094-
pub(crate) fn getter(&self, field_name: String) -> ast::Expr {
1095-
let expr = make::expr_field(make::ext::expr_self(), &field_name);
1097+
pub(crate) fn convert_type_with_factory(
1098+
&self,
1099+
make: &SyntaxFactory,
1100+
db: &'db dyn HirDatabase,
1101+
module: hir::Module,
1102+
) -> ast::Type {
1103+
let ty = self.type_to_string(db, module);
1104+
make.ty(&ty)
1105+
}
1106+
1107+
pub(crate) fn getter(&self, make: &SyntaxFactory, field_name: String) -> ast::Expr {
1108+
let expr = make.expr_field(make.expr_self(), &field_name);
10961109

10971110
match self.conversion {
1098-
ReferenceConversionType::Copy => expr,
1111+
ReferenceConversionType::Copy => expr.into(),
10991112
ReferenceConversionType::AsRefStr
11001113
| ReferenceConversionType::AsRefSlice
11011114
| ReferenceConversionType::Dereferenced
11021115
| ReferenceConversionType::Option
11031116
| ReferenceConversionType::Result => {
11041117
if self.impls_deref {
1105-
make::expr_ref(expr, false)
1118+
make.expr_ref(expr.into(), false)
11061119
} else {
1107-
make::expr_method_call(expr, make::name_ref("as_ref"), make::arg_list([]))
1120+
make.expr_method_call(expr.into(), make.name_ref("as_ref"), make.arg_list([]))
11081121
.into()
11091122
}
11101123
}

crates/syntax/src/ast/syntax_factory/constructors.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ impl SyntaxFactory {
2929
make::ext::expr_todo().clone_for_update()
3030
}
3131

32+
pub fn expr_self(&self) -> ast::Expr {
33+
make::ext::expr_self().clone_for_update()
34+
}
35+
3236
pub fn lifetime(&self, text: &str) -> ast::Lifetime {
3337
make::lifetime(text).clone_for_update()
3438
}

0 commit comments

Comments
 (0)