From 71f74366393350d15e5c4fb0575680fc84ca5792 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Tue, 10 May 2022 14:14:45 +0800 Subject: [PATCH] fix: cannot rename html tag in some cases close #1272 --- .../src/languageFeatures/renamePrepare.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/vue-language-service/src/languageFeatures/renamePrepare.ts b/packages/vue-language-service/src/languageFeatures/renamePrepare.ts index 8e1eb4618..f9e799234 100644 --- a/packages/vue-language-service/src/languageFeatures/renamePrepare.ts +++ b/packages/vue-language-service/src/languageFeatures/renamePrepare.ts @@ -1,12 +1,17 @@ +import { getWordRange } from '@volar/shared'; import * as vscode from 'vscode-languageserver-protocol'; import type { LanguageServiceRuntimeContext } from '../types'; import { languageFeatureWorker } from '../utils/featureWorkers'; +// https://github.com/microsoft/vscode/blob/dcf27391b7dd7c1cece483806af75b4f87188e70/extensions/html/language-configuration.json#L35 +const htmlWordPatterns = /(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\\"\,\.\<\>\/\s]+)/g; + export function register(context: LanguageServiceRuntimeContext) { - return (uri: string, position: vscode.Position) => { + return async (uri: string, position: vscode.Position) => { - return languageFeatureWorker( + const document = context.getTextDocument(uri); + const result = await languageFeatureWorker( context, uri, position, @@ -14,7 +19,7 @@ export function register(context: LanguageServiceRuntimeContext) { for (const [mappedRange] of sourceMap.getMappedRanges( position, position, - data => !!data.capabilities.rename, + data => typeof data.capabilities.rename === 'object' ? data.capabilities.rename.in : !!data.capabilities.rename, )) { yield mappedRange.start; } @@ -38,5 +43,7 @@ export function register(context: LanguageServiceRuntimeContext) { return prepares[0]; }, ); + + return result ?? (document ? getWordRange(htmlWordPatterns, position, document) : undefined); }; }