Skip to content

Commit 6522eb8

Browse files
authored
Merge pull request #21734 from Shourya742/2026-03-02-migrate-already-migrated-assist-to-syntaxFactory
Replace make to syntax factory from already migrated syntax factory assist
2 parents fad5c3d + 0e510d9 commit 6522eb8

10 files changed

Lines changed: 296 additions & 107 deletions

File tree

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use either::Either;
22
use ide_db::defs::{Definition, NameRefClass};
33
use syntax::{
44
AstNode,
5-
ast::{self, HasArgList, HasGenericArgs, make, syntax_factory::SyntaxFactory},
5+
ast::{self, HasArgList, HasGenericArgs, syntax_factory::SyntaxFactory},
66
syntax_editor::Position,
77
};
88

@@ -94,20 +94,21 @@ pub(crate) fn add_turbo_fish(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
9494
ident.text_range(),
9595
|builder| {
9696
let mut editor = builder.make_editor(let_stmt.syntax());
97+
let make = SyntaxFactory::without_mappings();
9798

9899
if let_stmt.semicolon_token().is_none() {
99100
editor.insert(
100101
Position::last_child_of(let_stmt.syntax()),
101-
make::tokens::semicolon(),
102+
make.token(syntax::SyntaxKind::SEMICOLON),
102103
);
103104
}
104105

105-
let placeholder_ty = make::ty_placeholder().clone_for_update();
106+
let placeholder_ty = make.ty_placeholder();
106107

107108
if let Some(pat) = let_stmt.pat() {
108109
let elements = vec![
109-
make::token(syntax::SyntaxKind::COLON).into(),
110-
make::token(syntax::SyntaxKind::WHITESPACE).into(),
110+
make.token(syntax::SyntaxKind::COLON).into(),
111+
make.whitespace(" ").into(),
111112
placeholder_ty.syntax().clone().into(),
112113
];
113114
editor.insert_all(Position::after(pat.syntax()), elements);
@@ -188,7 +189,7 @@ pub(crate) fn add_turbo_fish(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opti
188189

189190
/// This will create a turbofish generic arg list corresponding to the number of arguments
190191
fn get_fish_head(make: &SyntaxFactory, number_of_arguments: usize) -> ast::GenericArgList {
191-
let args = (0..number_of_arguments).map(|_| make::type_arg(make::ty_placeholder()).into());
192+
let args = (0..number_of_arguments).map(|_| make.type_arg(make.ty_placeholder()).into());
192193
make.generic_arg_list(args, true)
193194
}
194195

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

Lines changed: 52 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ use ide_db::{
1212
};
1313
use itertools::Itertools;
1414
use syntax::ast::edit::AstNodeEdit;
15+
use syntax::ast::syntax_factory::SyntaxFactory;
1516
use syntax::{
1617
AstNode, NodeOrToken, SyntaxKind, SyntaxNode, T,
17-
ast::{self, HasName, edit::IndentLevel, make},
18+
ast::{self, HasName, edit::IndentLevel},
1819
};
1920

2021
use crate::{
@@ -62,19 +63,28 @@ pub(crate) fn convert_bool_to_enum(acc: &mut Assists, ctx: &AssistContext<'_>) -
6263
"Convert boolean to enum",
6364
target,
6465
|edit| {
66+
let make = SyntaxFactory::without_mappings();
6567
if let Some(ty) = &ty_annotation {
6668
cov_mark::hit!(replaces_ty_annotation);
6769
edit.replace(ty.syntax().text_range(), "Bool");
6870
}
6971

7072
if let Some(initializer) = initializer {
71-
replace_bool_expr(edit, initializer);
73+
replace_bool_expr(edit, initializer, &make);
7274
}
7375

7476
let usages = definition.usages(&ctx.sema).all();
75-
add_enum_def(edit, ctx, &usages, target_node, &target_module);
77+
add_enum_def(edit, ctx, &usages, target_node, &target_module, &make);
7678
let mut delayed_mutations = Vec::new();
77-
replace_usages(edit, ctx, usages, definition, &target_module, &mut delayed_mutations);
79+
replace_usages(
80+
edit,
81+
ctx,
82+
usages,
83+
definition,
84+
&target_module,
85+
&mut delayed_mutations,
86+
&make,
87+
);
7888
for (scope, path) in delayed_mutations {
7989
insert_use(&scope, path, &ctx.config.insert_use);
8090
}
@@ -168,16 +178,16 @@ fn find_bool_node(ctx: &AssistContext<'_>) -> Option<BoolNodeData> {
168178
}
169179
}
170180

171-
fn replace_bool_expr(edit: &mut SourceChangeBuilder, expr: ast::Expr) {
181+
fn replace_bool_expr(edit: &mut SourceChangeBuilder, expr: ast::Expr, make: &SyntaxFactory) {
172182
let expr_range = expr.syntax().text_range();
173-
let enum_expr = bool_expr_to_enum_expr(expr);
183+
let enum_expr = bool_expr_to_enum_expr(expr, make);
174184
edit.replace(expr_range, enum_expr.syntax().text())
175185
}
176186

177187
/// Converts an expression of type `bool` to one of the new enum type.
178-
fn bool_expr_to_enum_expr(expr: ast::Expr) -> ast::Expr {
179-
let true_expr = make::expr_path(make::path_from_text("Bool::True"));
180-
let false_expr = make::expr_path(make::path_from_text("Bool::False"));
188+
fn bool_expr_to_enum_expr(expr: ast::Expr, make: &SyntaxFactory) -> ast::Expr {
189+
let true_expr = make.expr_path(make.path_from_text("Bool::True"));
190+
let false_expr = make.expr_path(make.path_from_text("Bool::False"));
181191

182192
if let ast::Expr::Literal(literal) = &expr {
183193
match literal.kind() {
@@ -186,10 +196,10 @@ fn bool_expr_to_enum_expr(expr: ast::Expr) -> ast::Expr {
186196
_ => expr,
187197
}
188198
} else {
189-
make::expr_if(
199+
make.expr_if(
190200
expr,
191-
make::tail_only_block_expr(true_expr),
192-
Some(ast::ElseBranch::Block(make::tail_only_block_expr(false_expr))),
201+
make.tail_only_block_expr(true_expr),
202+
Some(ast::ElseBranch::Block(make.tail_only_block_expr(false_expr))),
193203
)
194204
.into()
195205
}
@@ -203,11 +213,13 @@ fn replace_usages(
203213
target_definition: Definition,
204214
target_module: &hir::Module,
205215
delayed_mutations: &mut Vec<(ImportScope, ast::Path)>,
216+
make: &SyntaxFactory,
206217
) {
207218
for (file_id, references) in usages {
208219
edit.edit_file(file_id.file_id(ctx.db()));
209220

210-
let refs_with_imports = augment_references_with_imports(ctx, references, target_module);
221+
let refs_with_imports =
222+
augment_references_with_imports(ctx, references, target_module, make);
211223

212224
refs_with_imports.into_iter().rev().for_each(
213225
|FileReferenceWithImport { range, name, import_data }| {
@@ -224,12 +236,13 @@ fn replace_usages(
224236
target_definition,
225237
target_module,
226238
delayed_mutations,
239+
make,
227240
)
228241
}
229242
} else if let Some(initializer) = find_assignment_usage(&name) {
230243
cov_mark::hit!(replaces_assignment);
231244

232-
replace_bool_expr(edit, initializer);
245+
replace_bool_expr(edit, initializer, make);
233246
} else if let Some((prefix_expr, inner_expr)) = find_negated_usage(&name) {
234247
cov_mark::hit!(replaces_negation);
235248

@@ -247,7 +260,7 @@ fn replace_usages(
247260
{
248261
cov_mark::hit!(replaces_record_expr);
249262

250-
let enum_expr = bool_expr_to_enum_expr(initializer);
263+
let enum_expr = bool_expr_to_enum_expr(initializer, make);
251264
utils::replace_record_field_expr(ctx, edit, record_field, enum_expr);
252265
} else if let Some(pat) = find_record_pat_field_usage(&name) {
253266
match pat {
@@ -263,6 +276,7 @@ fn replace_usages(
263276
target_definition,
264277
target_module,
265278
delayed_mutations,
279+
make,
266280
)
267281
}
268282
}
@@ -272,14 +286,14 @@ fn replace_usages(
272286
if let Some(expr) = literal_pat.literal().and_then(|literal| {
273287
literal.syntax().ancestors().find_map(ast::Expr::cast)
274288
}) {
275-
replace_bool_expr(edit, expr);
289+
replace_bool_expr(edit, expr, make);
276290
}
277291
}
278292
_ => (),
279293
}
280294
} else if let Some((ty_annotation, initializer)) = find_assoc_const_usage(&name) {
281295
edit.replace(ty_annotation.syntax().text_range(), "Bool");
282-
replace_bool_expr(edit, initializer);
296+
replace_bool_expr(edit, initializer, make);
283297
} else if let Some(receiver) = find_method_call_expr_usage(&name) {
284298
edit.replace(
285299
receiver.syntax().text_range(),
@@ -296,10 +310,10 @@ fn replace_usages(
296310
ctx,
297311
edit,
298312
record_field,
299-
make::expr_bin_op(
313+
make.expr_bin_op(
300314
expr,
301315
ast::BinaryOp::CmpOp(ast::CmpOp::Eq { negated: false }),
302-
make::expr_path(make::path_from_text("Bool::True")),
316+
make.expr_path(make.path_from_text("Bool::True")),
303317
),
304318
);
305319
} else {
@@ -327,6 +341,7 @@ fn augment_references_with_imports(
327341
ctx: &AssistContext<'_>,
328342
references: Vec<FileReference>,
329343
target_module: &hir::Module,
344+
make: &SyntaxFactory,
330345
) -> Vec<FileReferenceWithImport> {
331346
let mut visited_modules = FxHashSet::default();
332347

@@ -357,9 +372,9 @@ fn augment_references_with_imports(
357372
cfg,
358373
)
359374
.map(|mod_path| {
360-
make::path_concat(
375+
make.path_concat(
361376
mod_path_to_ast(&mod_path, edition),
362-
make::path_from_text("Bool"),
377+
make.path_from_text("Bool"),
363378
)
364379
})?;
365380

@@ -458,6 +473,7 @@ fn add_enum_def(
458473
usages: &UsageSearchResult,
459474
target_node: SyntaxNode,
460475
target_module: &hir::Module,
476+
make: &SyntaxFactory,
461477
) -> Option<()> {
462478
let insert_before = node_to_insert_before(target_node);
463479

@@ -482,7 +498,7 @@ fn add_enum_def(
482498
.any(|module| module.nearest_non_block_module(ctx.db()) != *target_module);
483499

484500
let indent = IndentLevel::from_node(&insert_before);
485-
let enum_def = make_bool_enum(make_enum_pub).reset_indent().indent(indent);
501+
let enum_def = make_bool_enum(make_enum_pub, make).reset_indent().indent(indent);
486502

487503
edit.insert(
488504
insert_before.text_range().start(),
@@ -504,31 +520,30 @@ fn node_to_insert_before(target_node: SyntaxNode) -> SyntaxNode {
504520
.unwrap_or(target_node)
505521
}
506522

507-
fn make_bool_enum(make_pub: bool) -> ast::Enum {
508-
let derive_eq = make::attr_outer(make::meta_token_tree(
509-
make::ext::ident_path("derive"),
510-
make::token_tree(
523+
fn make_bool_enum(make_pub: bool, make: &SyntaxFactory) -> ast::Enum {
524+
let derive_eq = make.attr_outer(make.meta_token_tree(
525+
make.ident_path("derive"),
526+
make.token_tree(
511527
T!['('],
512528
vec![
513-
NodeOrToken::Token(make::tokens::ident("PartialEq")),
514-
NodeOrToken::Token(make::token(T![,])),
515-
NodeOrToken::Token(make::tokens::single_space()),
516-
NodeOrToken::Token(make::tokens::ident("Eq")),
529+
NodeOrToken::Token(make.ident("PartialEq")),
530+
NodeOrToken::Token(make.token(T![,])),
531+
NodeOrToken::Token(make.whitespace(" ")),
532+
NodeOrToken::Token(make.ident("Eq")),
517533
],
518534
),
519535
));
520-
make::enum_(
536+
make.enum_(
521537
[derive_eq],
522-
if make_pub { Some(make::visibility_pub()) } else { None },
523-
make::name("Bool"),
538+
if make_pub { Some(make.visibility_pub()) } else { None },
539+
make.name("Bool"),
524540
None,
525541
None,
526-
make::variant_list(vec![
527-
make::variant(None, make::name("True"), None, None),
528-
make::variant(None, make::name("False"), None, None),
542+
make.variant_list(vec![
543+
make.variant(None, make.name("True"), None, None),
544+
make.variant(None, make.name("False"), None, None),
529545
]),
530546
)
531-
.clone_for_update()
532547
}
533548

534549
#[cfg(test)]

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ use either::Either;
22
use hir::HirDisplay;
33
use ide_db::syntax_helpers::node_ext::walk_ty;
44
use syntax::{
5-
ast::{self, AstNode, HasGenericArgs, HasGenericParams, HasName, edit::IndentLevel, make},
5+
ast::{
6+
self, AstNode, HasGenericArgs, HasGenericParams, HasName, edit::IndentLevel,
7+
syntax_factory::SyntaxFactory,
8+
},
69
syntax_editor,
710
};
811

@@ -43,10 +46,9 @@ pub(crate) fn extract_type_alias(acc: &mut Assists, ctx: &AssistContext<'_>) ->
4346
let resolved_ty = ctx.sema.resolve_type(&ty)?;
4447
let resolved_ty = if !resolved_ty.contains_unknown() {
4548
let module = ctx.sema.scope(ty.syntax())?.module();
46-
let resolved_ty = resolved_ty.display_source_code(ctx.db(), module.into(), false).ok()?;
47-
make::ty(&resolved_ty)
49+
resolved_ty.display_source_code(ctx.db(), module.into(), false).ok()?
4850
} else {
49-
ty.clone()
51+
ty.to_string()
5052
};
5153

5254
acc.add(
@@ -55,6 +57,9 @@ pub(crate) fn extract_type_alias(acc: &mut Assists, ctx: &AssistContext<'_>) ->
5557
target,
5658
|builder| {
5759
let mut edit = builder.make_editor(node);
60+
let make = SyntaxFactory::without_mappings();
61+
62+
let resolved_ty = make.ty(&resolved_ty);
5863

5964
let mut known_generics = match item.generic_param_list() {
6065
Some(it) => it.generic_params().collect(),
@@ -68,22 +73,20 @@ pub(crate) fn extract_type_alias(acc: &mut Assists, ctx: &AssistContext<'_>) ->
6873
}
6974
let generics = collect_used_generics(&ty, &known_generics);
7075
let generic_params =
71-
generics.map(|it| make::generic_param_list(it.into_iter().cloned()));
76+
generics.map(|it| make.generic_param_list(it.into_iter().cloned()));
7277

7378
// Replace original type with the alias
7479
let ty_args = generic_params.as_ref().map(|it| it.to_generic_args().generic_args());
7580
let new_ty = if let Some(ty_args) = ty_args {
76-
make::generic_ty_path_segment(make::name_ref("Type"), ty_args)
81+
make.generic_ty_path_segment(make.name_ref("Type"), ty_args)
7782
} else {
78-
make::path_segment(make::name_ref("Type"))
79-
}
80-
.clone_for_update();
83+
make.path_segment(make.name_ref("Type"))
84+
};
8185
edit.replace(ty.syntax(), new_ty.syntax());
8286

8387
// Insert new alias
8488
let ty_alias =
85-
make::ty_alias(None, "Type", generic_params, None, None, Some((resolved_ty, None)))
86-
.clone_for_update();
89+
make.ty_alias(None, "Type", generic_params, None, None, Some((resolved_ty, None)));
8790

8891
if let Some(cap) = ctx.config.snippet_cap
8992
&& let Some(name) = ty_alias.name()
@@ -96,7 +99,7 @@ pub(crate) fn extract_type_alias(acc: &mut Assists, ctx: &AssistContext<'_>) ->
9699
syntax_editor::Position::before(node),
97100
vec![
98101
ty_alias.syntax().clone().into(),
99-
make::tokens::whitespace(&format!("\n\n{indent}")).into(),
102+
make.whitespace(&format!("\n\n{indent}")).into(),
100103
],
101104
);
102105

0 commit comments

Comments
 (0)