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\nHello
\n\n\n\n', {}, options); await assertFormat('|Hello
|', '\nHello
\n', {}, options); + await assertFormat('|Hello
|', '\nHello
\n\n\n\n', {}, options); await assertFormat('', '\n\n\n \n\n\n\n', {}, options); });