From 90735179b12ec0eb5f6373fa8ed5e9929525c379 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Sun, 10 Apr 2022 14:42:37 +0800 Subject: [PATCH] fix: css format should not trimmed new lines close #1155 --- .../src/commonPlugins/css.ts | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/vue-language-service/src/commonPlugins/css.ts b/packages/vue-language-service/src/commonPlugins/css.ts index b37c36952..0a6b565cc 100644 --- a/packages/vue-language-service/src/commonPlugins/css.ts +++ b/packages/vue-language-service/src/commonPlugins/css.ts @@ -1,6 +1,6 @@ import { EmbeddedLanguageServicePlugin, useConfigurationHost } from '@volar/vue-language-service-types'; import * as css from 'vscode-css-languageservice'; -import type { TextDocument } from 'vscode-languageserver-textdocument'; +import { TextDocument } from 'vscode-languageserver-textdocument'; import * as shared from '@volar/shared'; import * as vscode from 'vscode-languageserver-protocol'; @@ -179,11 +179,26 @@ export default function (options: { return worker(document, async (stylesheet, cssLs) => { const options_2 = await useConfigurationHost()?.getConfiguration('css.format', document.uri); - - return cssLs.format(document, range, { + const edits = cssLs.format(document, range, { ...options_2, ...options, }); + let newText = TextDocument.applyEdits(document, edits); + + // fix https://github.com/johnsoncodehk/volar/issues/1155 + if (!newText.startsWith('\n')) + newText = '\n' + newText; + + if (!newText.endsWith('\n')) + newText = newText + '\n'; + + if (newText === document.getText()) + return []; + + return [vscode.TextEdit.replace({ + start: document.positionAt(0), + end: document.positionAt(document.getText().length), + }, newText)]; }); }, };