Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/inline_macro.rs')
-rw-r--r--crates/ide-assists/src/handlers/inline_macro.rs18
1 files changed, 9 insertions, 9 deletions
diff --git a/crates/ide-assists/src/handlers/inline_macro.rs b/crates/ide-assists/src/handlers/inline_macro.rs
index d558ec3bec..cd6f900ba1 100644
--- a/crates/ide-assists/src/handlers/inline_macro.rs
+++ b/crates/ide-assists/src/handlers/inline_macro.rs
@@ -38,21 +38,21 @@ use crate::{AssistContext, AssistId, AssistKind, Assists};
pub(crate) fn inline_macro(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
let unexpanded = ctx.find_node_at_offset::<ast::MacroCall>()?;
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| {
+ 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());
+ // 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())
+ },
)
}