From 662ee292dbffb82e2e91f435af9959d24c3acbb4 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Wed, 20 Jul 2022 03:09:06 +0800 Subject: [PATCH] fix: update imports on file move not working close #1599 --- .../src/languageFeatures/fileRename.ts | 10 +++++++++- packages/vue-language-service/src/utils/dedupe.ts | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/vue-language-service/src/languageFeatures/fileRename.ts b/packages/vue-language-service/src/languageFeatures/fileRename.ts index 0acee1840..a38f4aa3d 100644 --- a/packages/vue-language-service/src/languageFeatures/fileRename.ts +++ b/packages/vue-language-service/src/languageFeatures/fileRename.ts @@ -1,6 +1,7 @@ import type { LanguageServiceRuntimeContext } from '../types'; import { embeddedEditToSourceEdit } from './rename'; import type * as _ from 'vscode-languageserver-protocol'; +import * as dedupe from '../utils/dedupe'; export function register(context: LanguageServiceRuntimeContext) { @@ -23,10 +24,17 @@ export function register(context: LanguageServiceRuntimeContext) { const workspaceEdit = await plugin.doFileRename(oldUri, newUri); if (workspaceEdit) { - return embeddedEditToSourceEdit( + + const result = embeddedEditToSourceEdit( workspaceEdit, context.vueDocuments, ); + + if (result?.documentChanges) { + result.documentChanges = dedupe.withDocumentChanges(result.documentChanges); + } + + return result; } } }; diff --git a/packages/vue-language-service/src/utils/dedupe.ts b/packages/vue-language-service/src/utils/dedupe.ts index d73baf5b5..85f94a234 100644 --- a/packages/vue-language-service/src/utils/dedupe.ts +++ b/packages/vue-language-service/src/utils/dedupe.ts @@ -43,6 +43,9 @@ export function withTextEdits(items: T[]): T[] { item.newText, ].join(':')); } +export function withDocumentChanges(items: NonNullable) { + return dedupe(items, item => JSON.stringify(item)); // TODO: improve this +} export function withDiagnostics(items: T[]): T[] { return dedupe(items, item => [ item.range.start.line,