From 92b87b0fd56477f00a2e3af83444e5d2d88e2962 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Tue, 4 Apr 2023 12:55:17 +0200 Subject: [PATCH] [html] files.insertFinalNewline affects embedded styles (#179118) --- .../html-language-features/server/src/modes/formatting.ts | 6 +++++- .../html-language-features/server/src/modes/htmlMode.ts | 3 --- .../server/src/test/formatting.test.ts | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/extensions/html-language-features/server/src/modes/formatting.ts b/extensions/html-language-features/server/src/modes/formatting.ts index aca8ee3b3c2..6b8c669a6cb 100644 --- a/extensions/html-language-features/server/src/modes/formatting.ts +++ b/extensions/html-language-features/server/src/modes/formatting.ts @@ -54,7 +54,11 @@ export async function format(languageModes: LanguageModes, document: TextDocumen // perform a html format and apply changes to a new document const htmlMode = languageModes.getMode('html')!; const htmlEdits = await htmlMode.format!(document, formatRange, formattingOptions, settings); - const htmlFormattedContent = TextDocument.applyEdits(document, htmlEdits); + let htmlFormattedContent = TextDocument.applyEdits(document, htmlEdits); + if (formattingOptions.insertFinalNewline && endOffset === content.length && !htmlFormattedContent.endsWith('\n')) { + htmlFormattedContent = htmlFormattedContent + '\n'; + htmlEdits.push(TextEdit.insert(endPos, '\n')); + } const newDocument = TextDocument.create(document.uri + '.tmp', document.languageId, document.version, htmlFormattedContent); try { // run embedded formatters on html formatted content: - formatters see correct initial indent diff --git a/extensions/html-language-features/server/src/modes/htmlMode.ts b/extensions/html-language-features/server/src/modes/htmlMode.ts index baca7e0369f..58a3ded2bee 100644 --- a/extensions/html-language-features/server/src/modes/htmlMode.ts +++ b/extensions/html-language-features/server/src/modes/htmlMode.ts @@ -49,9 +49,6 @@ export function getHTMLMode(htmlLanguageService: HTMLLanguageService, workspace: } else { formatSettings.contentUnformatted = 'script'; } - if (formatParams.insertFinalNewline) { - formatSettings.endWithNewline = true; - } merge(formatParams, formatSettings); return htmlLanguageService.format(document, range, formatSettings); }, diff --git a/extensions/html-language-features/server/src/test/formatting.test.ts b/extensions/html-language-features/server/src/test/formatting.test.ts index ebc319d20b6..adf9b21e177 100644 --- a/extensions/html-language-features/server/src/test/formatting.test.ts +++ b/extensions/html-language-features/server/src/test/formatting.test.ts @@ -85,11 +85,12 @@ suite('HTML Embedded Formatting', () => { }); test('EndWithNewline', async () => { - const options : FormattingOptions = FormattingOptions.create(2, true); + const options: FormattingOptions = FormattingOptions.create(2, true); options.insertFinalNewline = true; - + await assertFormat('

Hello

', '\n\n\n

Hello

\n\n\n\n', {}, options); await assertFormat('|

Hello

|', '\n

Hello

\n', {}, options); + await assertFormat('|

Hello

|', '\n

Hello

\n\n\n\n', {}, options); await assertFormat('', '\n\n\n \n\n\n\n', {}, options); });