From 2e55e84d5050357befce450e3f5dacb6545a5713 Mon Sep 17 00:00:00 2001 From: Denis Bezrukov Date: Fri, 22 Aug 2025 12:09:24 +0300 Subject: [PATCH] [code style] [prettier] WEB-74445: Add `prepareForFormatting` to PrettierFormattingService, avoid unnecessary file saves (cherry picked from commit 51d6dc4ffdfcb565cb1edb12084d35babe3a122b) IJ-CR-173729 GitOrigin-RevId: 917bbc7ca1f9ccbdb70b48b556666a5966df5fda --- platform/code-style-api/api-dump.txt | 1 + .../service/AsyncDocumentFormattingService.java | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/platform/code-style-api/api-dump.txt b/platform/code-style-api/api-dump.txt index 3df28260de60..1ba0cf035f28 100644 --- a/platform/code-style-api/api-dump.txt +++ b/platform/code-style-api/api-dump.txt @@ -303,6 +303,7 @@ a:com.intellij.formatting.service.AsyncDocumentFormattingService - p:getTimeout():java.time.Duration - p:getTimeoutActions(com.intellij.formatting.FormattingContext):com.intellij.openapi.actionSystem.AnAction[] - p:needToUpdate():Z +- p:prepareForFormatting(com.intellij.openapi.editor.Document,com.intellij.formatting.FormattingContext):V p:com.intellij.formatting.service.AsyncDocumentFormattingService$FormattingTask - java.lang.Runnable - a:cancel():Z diff --git a/platform/code-style-api/src/com/intellij/formatting/service/AsyncDocumentFormattingService.java b/platform/code-style-api/src/com/intellij/formatting/service/AsyncDocumentFormattingService.java index bb1ec09b476d..552e9be58735 100644 --- a/platform/code-style-api/src/com/intellij/formatting/service/AsyncDocumentFormattingService.java +++ b/platform/code-style-api/src/com/intellij/formatting/service/AsyncDocumentFormattingService.java @@ -72,6 +72,7 @@ public abstract class AsyncDocumentFormattingService extends AbstractDocumentFor return; } } + prepareForFormatting(document, formattingContext); FormattingRequestImpl formattingRequest = new FormattingRequestImpl(formattingContext, document, formattingRanges, canChangeWhiteSpaceOnly, quickFormat); FormattingTask formattingTask = createFormattingTask(formattingRequest); @@ -134,6 +135,14 @@ public abstract class AsyncDocumentFormattingService extends AbstractDocumentFor */ protected abstract @NotNull @NlsSafe String getName(); + /** + * Hook called before creating a formatting request. Default implementation saves the document + * to ensure external formatters working with IO files see the latest content. + */ + protected void prepareForFormatting(@NotNull Document document, @NotNull FormattingContext formattingContext) { + FileDocumentManager.getInstance().saveDocument(document); + } + /** * @return A duration to wait for the service to respond (call either {@code onTextReady()} or {@code onError()}). */ @@ -177,7 +186,6 @@ public abstract class AsyncDocumentFormattingService extends AbstractDocumentFor myRanges = ranges; myCanChangeWhitespaceOnly = canChangeWhitespaceOnly; myQuickFormat = quickFormat; - FileDocumentManager.getInstance().saveDocument(myDocument); myInitialModificationStamp = document.getModificationStamp(); }