Only disable built-in TS if TS go is installed

Fixes #269036

We should check both the setting that the native extension is actually installed
This commit is contained in:
Matt Bierner
2025-10-01 10:41:09 -07:00
parent c9715f9218
commit 4151d4bc5e
3 changed files with 18 additions and 3 deletions

View File

@@ -6,6 +6,8 @@
import * as vscode from 'vscode';
import { Command } from './commandManager';
export const tsNativeExtensionId = 'typescriptteam.native-preview';
export class EnableTsgoCommand implements Command {
public readonly id = 'typescript.experimental.enableTsgo';
@@ -27,7 +29,7 @@ export class DisableTsgoCommand implements Command {
* @param enable Whether to enable or disable TypeScript Go
*/
async function updateTsgoSetting(enable: boolean): Promise<void> {
const tsgoExtension = vscode.extensions.getExtension('typescriptteam.native-preview');
const tsgoExtension = vscode.extensions.getExtension(tsNativeExtensionId);
// Error if the TypeScript Go extension is not installed with a button to open the GitHub repo
if (!tsgoExtension) {
const selection = await vscode.window.showErrorMessage(

View File

@@ -8,7 +8,7 @@ import * as fs from 'fs';
import * as vscode from 'vscode';
import { Api, getExtensionApi } from './api';
import { CommandManager } from './commands/commandManager';
import { DisableTsgoCommand } from './commands/useTsgo';
import { DisableTsgoCommand, tsNativeExtensionId } from './commands/useTsgo';
import { registerBaseCommands } from './commands/index';
import { ElectronServiceConfigurationProvider } from './configuration/configuration.electron';
import { ExperimentationTelemetryReporter, IExperimentationTelemetryReporter } from './experimentTelemetryReporter';
@@ -25,7 +25,7 @@ import { onCaseInsensitiveFileSystem } from './utils/fs.electron';
import { Lazy } from './utils/lazy';
import { getPackageInfo } from './utils/packageInfo';
import * as temp from './utils/temp.electron';
import { conditionalRegistration, requireGlobalConfiguration } from './languageFeatures/util/dependentRegistration';
import { conditionalRegistration, requireGlobalConfiguration, requireHasVsCodeExtension } from './languageFeatures/util/dependentRegistration';
import { DisposableStore } from './utils/dispose';
export function activate(
@@ -55,6 +55,7 @@ export function activate(
context.subscriptions.push(conditionalRegistration([
requireGlobalConfiguration('typescript', 'experimental.useTsgo'),
requireHasVsCodeExtension(tsNativeExtensionId),
], () => {
// TSGO. Only register a small set of features that don't use TS Server
const disposables = new DisposableStore();

View File

@@ -111,3 +111,15 @@ export function requireSomeCapability(
client.onDidChangeCapabilities
);
}
export function requireHasVsCodeExtension(
extensionId: string
) {
return new Condition(
() => {
return !!vscode.extensions.getExtension(extensionId);
},
vscode.extensions.onDidChange
);
}