Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #22484 from Shourya742/2026-05-29-remove-make-from-rename-and-prettify_macro_expansion
Remove make from rename and prettify macro expansion
| -rw-r--r-- | crates/hir-expand/src/prettify_macro_expansion_.rs | 18 | ||||
| -rw-r--r-- | crates/ide/src/rename.rs | 7 | ||||
| -rw-r--r-- | crates/mbe/src/tests.rs | 2 | ||||
| -rw-r--r-- | crates/syntax-bridge/src/prettify_macro_expansion.rs | 7 | ||||
| -rw-r--r-- | crates/syntax/src/ast/syntax_factory/constructors.rs | 12 |
5 files changed, 27 insertions, 19 deletions
diff --git a/crates/hir-expand/src/prettify_macro_expansion_.rs b/crates/hir-expand/src/prettify_macro_expansion_.rs index 79e6f0f5b7..687bd1a714 100644 --- a/crates/hir-expand/src/prettify_macro_expansion_.rs +++ b/crates/hir-expand/src/prettify_macro_expansion_.rs @@ -2,8 +2,7 @@ use base_db::Crate; use rustc_hash::FxHashMap; -use syntax::NodeOrToken; -use syntax::{SyntaxNode, ast::make}; +use syntax::SyntaxNode; use crate::{db::ExpandDatabase, span_map::ExpansionSpanMap}; @@ -22,7 +21,7 @@ pub fn prettify_macro_expansion( let mut syntax_ctx_id_to_dollar_crate_replacement = FxHashMap::default(); syntax_bridge::prettify_macro_expansion::prettify_macro_expansion( syn, - &mut |dollar_crate| { + &mut |dollar_crate, make| { let ctx = span_map.span_at(dollar_crate.text_range().start() + span_offset).ctx; let replacement = syntax_ctx_id_to_dollar_crate_replacement.entry(ctx).or_insert_with(|| { @@ -38,13 +37,13 @@ pub fn prettify_macro_expansion( // is inserted, and also understandable to the user. // Lastly, if nothing else found, resort to leaving `$crate`. if target_crate_id == macro_def_crate { - make::tokens::crate_kw() + make.token(syntax::SyntaxKind::CRATE_KW) } else if let Some(dep) = target_crate.dependencies.iter().find(|dep| dep.crate_id == macro_def_crate) { - make::tokens::ident(dep.name.as_str()) + make.ident(dep.name.as_str()) } else if let Some(crate_name) = ¯o_def_crate.extra_data(db).display_name { - make::tokens::ident(crate_name.crate_name().as_str()) + make.ident(crate_name.crate_name().as_str()) } else { dollar_crate.clone() } @@ -53,12 +52,7 @@ pub fn prettify_macro_expansion( // The parent may have many children, and looking for the token may yield incorrect results. return None; } - // We need to `clone_subtree()` but rowan doesn't provide such operation for tokens. - let parent = replacement.parent().unwrap().clone_subtree().clone_for_update(); - parent - .children_with_tokens() - .filter_map(NodeOrToken::into_token) - .find(|it| it.kind() == replacement.kind()) + Some(replacement.clone()) }, |_| (), ) diff --git a/crates/ide/src/rename.rs b/crates/ide/src/rename.rs index e220cbdce8..26c6776107 100644 --- a/crates/ide/src/rename.rs +++ b/crates/ide/src/rename.rs @@ -16,7 +16,7 @@ use std::fmt::Write; use stdx::{always, format_to, never}; use syntax::{ AstNode, SyntaxKind, SyntaxNode, TextRange, TextSize, - ast::{self, HasArgList, make, prec::ExprPrecedence}, + ast::{self, HasArgList, prec::ExprPrecedence}, }; use ide_db::text_edit::TextEdit; @@ -818,11 +818,12 @@ fn rename_elided_lifetime( let mut builder = SourceChangeBuilder::new(position.file_id); let editor = builder.make_editor(&root); + let make = editor.make(); - editor.replace(lifetime_token, make::lifetime(new_name).syntax().clone()); + editor.replace(lifetime_token, make.lifetime(new_name).syntax().clone()); if let Some(has_generic_params) = parent.ancestors().find_map(ast::AnyHasGenericParams::cast) { - let lifetime_param = make::lifetime_param(make::lifetime(new_name)); + let lifetime_param = make.lifetime_param(make.lifetime(new_name)); editor.add_generic_param(&has_generic_params, lifetime_param.into()); } diff --git a/crates/mbe/src/tests.rs b/crates/mbe/src/tests.rs index 271dfc877b..f3ebb663d9 100644 --- a/crates/mbe/src/tests.rs +++ b/crates/mbe/src/tests.rs @@ -74,7 +74,7 @@ fn check_( "{}", syntax_bridge::prettify_macro_expansion::prettify_macro_expansion( node.syntax_node(), - &mut |_| None, + &mut |_, _| None, |_| () ) ); diff --git a/crates/syntax-bridge/src/prettify_macro_expansion.rs b/crates/syntax-bridge/src/prettify_macro_expansion.rs index 648119ed70..001c920c9b 100644 --- a/crates/syntax-bridge/src/prettify_macro_expansion.rs +++ b/crates/syntax-bridge/src/prettify_macro_expansion.rs @@ -3,6 +3,7 @@ use syntax::{ NodeOrToken, SyntaxKind::{self, *}, SyntaxNode, SyntaxToken, T, WalkEvent, + ast::syntax_factory::SyntaxFactory, syntax_editor::{Position, SyntaxEditor}, }; @@ -21,7 +22,7 @@ pub enum PrettifyWsKind { #[deprecated = "use `hir_expand::prettify_macro_expansion()` instead"] pub fn prettify_macro_expansion( syn: SyntaxNode, - dollar_crate_replacement: &mut dyn FnMut(&SyntaxToken) -> Option<SyntaxToken>, + dollar_crate_replacement: &mut dyn FnMut(&SyntaxToken, &SyntaxFactory) -> Option<SyntaxToken>, inspect_mods: impl FnOnce(&[(Position, PrettifyWsKind)]), ) -> SyntaxNode { let mut indent = 0; @@ -66,7 +67,7 @@ pub fn prettify_macro_expansion( }; if token.kind() == SyntaxKind::IDENT && token.text() == "$crate" - && let Some(replacement) = dollar_crate_replacement(&token) + && let Some(replacement) = dollar_crate_replacement(&token, editor.make()) { dollar_crate_replacements.push((token.clone(), replacement)); } @@ -191,7 +192,7 @@ mod tests { let source_file = syntax::ast::SourceFile::parse(&ra_fixture, span::Edition::CURRENT); let syn = remove_whitespaces(&source_file.syntax_node()); - let pretty = prettify_macro_expansion(syn, &mut |_| None, |_| ()); + let pretty = prettify_macro_expansion(syn, &mut |_, _| None, |_| ()); let mut pretty = pretty.to_string(); if pretty.contains('\n') { pretty.push('\n'); diff --git a/crates/syntax/src/ast/syntax_factory/constructors.rs b/crates/syntax/src/ast/syntax_factory/constructors.rs index 1070af65e7..2f7eab2423 100644 --- a/crates/syntax/src/ast/syntax_factory/constructors.rs +++ b/crates/syntax/src/ast/syntax_factory/constructors.rs @@ -479,6 +479,18 @@ impl SyntaxFactory { ast } + pub fn lifetime_param(&self, lifetime: ast::Lifetime) -> ast::LifetimeParam { + let ast = make::lifetime_param(lifetime.clone()).clone_for_update(); + + if let Some(mut mapping) = self.mappings() { + let mut builder = SyntaxMappingBuilder::new(ast.syntax().clone()); + builder.map_node(lifetime.syntax().clone(), ast.lifetime().unwrap().syntax().clone()); + builder.finish(&mut mapping); + } + + ast + } + pub fn generic_param_list( &self, params: impl IntoIterator<Item = ast::GenericParam>, |