diff --git a/extensions/html-language-features/client/src/htmlMain.ts b/extensions/html-language-features/client/src/htmlMain.ts index ad1aa45f310..50f6c126af5 100644 --- a/extensions/html-language-features/client/src/htmlMain.ts +++ b/extensions/html-language-features/client/src/htmlMain.ts @@ -9,9 +9,9 @@ import * as nls from 'vscode-nls'; const localize = nls.loadMessageBundle(); import { - languages, ExtensionContext, IndentAction, Position, TextDocument, Range, CompletionItem, CompletionItemKind, SnippetString, workspace, + languages, ExtensionContext, IndentAction, Position, TextDocument, Range, CompletionItem, CompletionItemKind, SnippetString, workspace, extensions, Disposable, FormattingOptions, CancellationToken, ProviderResult, TextEdit, CompletionContext, CompletionList, SemanticTokensLegend, - DocumentSemanticTokensProvider, DocumentRangeSemanticTokensProvider, SemanticTokens + DocumentSemanticTokensProvider, DocumentRangeSemanticTokensProvider, SemanticTokens, window, commands } from 'vscode'; import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, RequestType, TextDocumentPositionParams, DocumentRangeFormattingParams, @@ -41,6 +41,12 @@ namespace SemanticTokenLegendRequest { export const type: RequestType0<{ types: string[]; modifiers: string[] } | null, any, any> = new RequestType0('html/semanticTokenLegend'); } +namespace SettingIds { + export const renameOnType = 'editor.renameOnType'; + export const formatEnable = 'html.format.enable'; + +} + interface IPackageInfo { name: string; version: string; @@ -140,7 +146,7 @@ export function activate(context: ExtensionContext) { // manually register / deregister format provider based on the `html.format.enable` setting avoiding issues with late registration. See #71652. updateFormatterRegistration(); toDispose.push({ dispose: () => rangeFormatting && rangeFormatting.dispose() }); - toDispose.push(workspace.onDidChangeConfiguration(e => e.affectsConfiguration('html.format.enable') && updateFormatterRegistration())); + toDispose.push(workspace.onDidChangeConfiguration(e => e.affectsConfiguration(SettingIds.formatEnable) && updateFormatterRegistration())); client.sendRequest(SemanticTokenLegendRequest.type).then(legend => { if (legend) { @@ -180,7 +186,7 @@ export function activate(context: ExtensionContext) { }); function updateFormatterRegistration() { - const formatEnabled = workspace.getConfiguration().get('html.format.enable'); + const formatEnabled = workspace.getConfiguration().get(SettingIds.formatEnable); if (!formatEnabled && rangeFormatting) { rangeFormatting.dispose(); rangeFormatting = undefined; @@ -290,6 +296,23 @@ export function activate(context: ExtensionContext) { return results; } }); + + const promptForTypeOnRenameKey = 'html.promptForTypeOnRename'; + const promptForTypeOnRename = + !workspace.getConfiguration().get(SettingIds.renameOnType, { languageId: 'html' }) && + extensions.getExtension('formulahendry.auto-rename-tag') && + (context.globalState.get(promptForTypeOnRenameKey) !== false); + + toDispose.push(window.onDidChangeActiveTextEditor(async e => { + if (e && promptForTypeOnRename && documentSelector.indexOf(e.document.languageId) !== -1) { + context.globalState.update(promptForTypeOnRenameKey, false); + const configure = localize('configureButton', 'Configure'); + const res = await window.showInformationMessage(localize('renameOnTypeQuestion', 'VS Code now has built-in support for auto-renaming tags. Do you want to enable it?'), configure); + if (res === configure) { + commands.executeCommand('workbench.action.openSettings', SettingIds.renameOnType); + } + } + })); } function getPackageInfo(context: ExtensionContext): IPackageInfo | null {