diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2025-01-10 11:02:54 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-10 11:02:54 +0000 |
| commit | 65a97e6475b00b3d343708b22602acfce27657e6 (patch) | |
| tree | 95aaeadcc5bdf18082ccff62f2ad46d5309b3cf9 | |
| parent | 78213905bc591a6c94869e307f96b3d2667bfecb (diff) | |
| parent | c9f75a0b2fec6dc615bb260ad01c39eaef7d1cdc (diff) | |
| download | rust-65a97e6475b00b3d343708b22602acfce27657e6.tar.gz rust-65a97e6475b00b3d343708b22602acfce27657e6.zip | |
Merge pull request #18900 from ChayimFriedman2/stupid-hang
fix: Do not compute `prettify_macro_expansion()` unless the "Inline macro" assist has actually been invoked
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/handlers/inline_macro.rs | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/inline_macro.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/inline_macro.rs index d558ec3bec7..df56f8904b2 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/inline_macro.rs +++ b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/inline_macro.rs @@ -40,19 +40,19 @@ pub(crate) fn inline_macro(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option let macro_call = ctx.sema.to_def(&unexpanded)?; let expanded = ctx.sema.parse_or_expand(macro_call.as_file()); let span_map = ctx.sema.db.expansion_span_map(macro_call.as_macro_file()); - let expanded = prettify_macro_expansion( - ctx.db(), - expanded, - &span_map, - ctx.sema.file_to_module_def(ctx.file_id())?.krate().into(), - ); + let target_crate_id = ctx.sema.file_to_module_def(ctx.file_id())?.krate().into(); let text_range = unexpanded.syntax().text_range(); acc.add( AssistId("inline_macro", AssistKind::RefactorInline), "Inline macro".to_owned(), text_range, - |builder| builder.replace(text_range, expanded.to_string()), + |builder| { + // Don't call `prettify_macro_expansion()` outside the actual assist action; it does some heavy rowan tree manipulation, + // which can be very costly for big macros when it is done *even without the assist being invoked*. + let expanded = prettify_macro_expansion(ctx.db(), expanded, &span_map, target_crate_id); + builder.replace(text_range, expanded.to_string()) + }, ) } |
