diff --git a/extensions/typescript-language-features/src/commands/useTsgo.ts b/extensions/typescript-language-features/src/commands/useTsgo.ts index 1dbe94bb46646..40df826d7fff2 100644 --- a/extensions/typescript-language-features/src/commands/useTsgo.ts +++ b/extensions/typescript-language-features/src/commands/useTsgo.ts @@ -8,7 +8,11 @@ import { readUnifiedConfig, unifiedConfigSection } from '../utils/configuration' import { Command } from './commandManager'; export const tsNativeExtensionOldId = 'typescriptteam.native-preview'; -export const tsNativeExtensionIds = ['typescriptteam.vscode-typescript', tsNativeExtensionOldId] as const; +export const tsNativeExtensionIds = [ + 'typescriptteam.vscode-typescript', + 'typescriptteam.vscode-typescript-nightly', + tsNativeExtensionOldId +] as const; export function getTsNativeExtension(): vscode.Extension | undefined { for (const extensionId of tsNativeExtensionIds) { diff --git a/extensions/typescript-language-features/src/experimentationService.ts b/extensions/typescript-language-features/src/experimentationService.ts index 9bb49c8926210..027e653413538 100644 --- a/extensions/typescript-language-features/src/experimentationService.ts +++ b/extensions/typescript-language-features/src/experimentationService.ts @@ -9,7 +9,7 @@ import * as tas from 'vscode-tas-client'; import { IExperimentationTelemetryReporter } from './experimentTelemetryReporter'; interface ExperimentTypes { - suggestNativePreview: boolean; + suggestTS7IfNoPlugins: boolean; } export class ExperimentationService { diff --git a/extensions/typescript-language-features/src/extension.ts b/extensions/typescript-language-features/src/extension.ts index cc8dd436ca9cb..9131dfcd1392e 100644 --- a/extensions/typescript-language-features/src/extension.ts +++ b/extensions/typescript-language-features/src/extension.ts @@ -50,7 +50,7 @@ export function activate( context.subscriptions.push(experimentTelemetryReporter); const experimentationService = new ExperimentationService(experimentTelemetryReporter, id, version, context.globalState); - suggestNativePreview(context, experimentationService); + suggestNativePreview(context, experimentationService, pluginManager); } // Register features that work in both TSGO and non-TSGO modes diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts index 677721c2774cc..a036219c687c1 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -100,7 +100,7 @@ export const emptyAuthority = 'ts-nul-authority'; export const inMemoryResourcePrefix = '^'; -const copilotChatExtensionId = 'github.copilot-chat'; +export const copilotChatExtensionId = 'github.copilot-chat'; interface WatchEvent { updated?: Set; diff --git a/extensions/typescript-language-features/src/ui/suggestNativePreview.ts b/extensions/typescript-language-features/src/ui/suggestNativePreview.ts index 4e06a56e090e4..f5b18cd2279c5 100644 --- a/extensions/typescript-language-features/src/ui/suggestNativePreview.ts +++ b/extensions/typescript-language-features/src/ui/suggestNativePreview.ts @@ -6,12 +6,15 @@ import * as vscode from 'vscode'; import { getTsNativeExtension, tsNativeExtensionOldId } from '../commands/useTsgo'; import { ExperimentationService } from '../experimentationService'; +import { PluginManager } from '../tsServer/plugins'; +import { copilotChatExtensionId } from '../typescriptServiceClient'; const suggestNativePreviewStorageKey = 'typescript.suggestNativePreview.dismissed'; export async function suggestNativePreview( context: vscode.ExtensionContext, experimentationService: ExperimentationService, + pluginManager: PluginManager, ): Promise { if (context.globalState.get(suggestNativePreviewStorageKey)) { return; @@ -22,8 +25,8 @@ export async function suggestNativePreview( return; } - // Only show when the nightly extension is installed - if (!vscode.extensions.getExtension('ms-vscode.vscode-typescript-next')) { + // TSServer plugins are not supported by TypeScript 7 + if (pluginManager.plugins.some(plugin => plugin.extension.id.toLowerCase() !== copilotChatExtensionId)) { return; } @@ -34,7 +37,7 @@ export async function suggestNativePreview( return; } - const inExperiment = await experimentationService.getTreatmentVariable('suggestNativePreview', false); + const inExperiment = await experimentationService.getTreatmentVariable('suggestTS7IfNoPlugins', false); if (!inExperiment) { return; }