[extensions] Add disable command (#7001)

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This commit is contained in:
christine betts
2025-08-26 14:36:55 +00:00
committed by GitHub
parent d77391b3cd
commit dff175c4f4
11 changed files with 291 additions and 29 deletions

View File

@@ -9,6 +9,7 @@ import { installCommand } from './extensions/install.js';
import { uninstallCommand } from './extensions/uninstall.js';
import { listCommand } from './extensions/list.js';
import { updateCommand } from './extensions/update.js';
import { disableCommand } from './extensions/disable.js';
export const extensionsCommand: CommandModule = {
command: 'extensions <command>',
@@ -19,6 +20,7 @@ export const extensionsCommand: CommandModule = {
.command(uninstallCommand)
.command(listCommand)
.command(updateCommand)
.command(disableCommand)
.demandCommand(1, 'You need at least one command before continuing.')
.version(false),
handler: () => {

View File

@@ -0,0 +1,51 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { type CommandModule } from 'yargs';
import { disableExtension } from '../../config/extension.js';
import { SettingScope } from '../../config/settings.js';
import { getErrorMessage } from '../../utils/errors.js';
interface DisableArgs {
name: string;
scope: SettingScope;
}
export async function handleDisable(args: DisableArgs) {
try {
disableExtension(args.name, args.scope);
console.log(
`Extension "${args.name}" successfully disabled for scope "${args.scope}".`,
);
} catch (error) {
console.error(getErrorMessage(error));
process.exit(1);
}
}
export const disableCommand: CommandModule = {
command: 'disable [--scope] <name>',
describe: 'Disables an extension.',
builder: (yargs) =>
yargs
.positional('name', {
describe: 'The name of the extension to disable.',
type: 'string',
})
.option('scope', {
describe: 'The scope to disable the extenison in.',
type: 'string',
default: SettingScope.User,
choices: [SettingScope.User, SettingScope.Workspace],
})
.check((_argv) => true),
handler: async (argv) => {
await handleDisable({
name: argv['name'] as string,
scope: argv['scope'] as SettingScope,
});
},
};

View File

@@ -10,6 +10,8 @@ import {
type ExtensionInstallMetadata,
} from '../../config/extension.js';
import { getErrorMessage } from '../../utils/errors.js';
interface InstallArgs {
source?: string;
path?: string;
@@ -26,7 +28,7 @@ export async function handleInstall(args: InstallArgs) {
`Extension "${extensionName}" installed successfully and enabled.`,
);
} catch (error) {
console.error((error as Error).message);
console.error(getErrorMessage(error));
process.exit(1);
}
}

View File

@@ -6,6 +6,7 @@
import type { CommandModule } from 'yargs';
import { loadUserExtensions, toOutputString } from '../../config/extension.js';
import { getErrorMessage } from '../../utils/errors.js';
export async function handleList() {
try {
@@ -20,7 +21,7 @@ export async function handleList() {
.join('\n\n'),
);
} catch (error) {
console.error((error as Error).message);
console.error(getErrorMessage(error));
process.exit(1);
}
}

View File

@@ -6,6 +6,7 @@
import type { CommandModule } from 'yargs';
import { uninstallExtension } from '../../config/extension.js';
import { getErrorMessage } from '../../utils/errors.js';
interface UninstallArgs {
name: string;
@@ -16,7 +17,7 @@ export async function handleUninstall(args: UninstallArgs) {
await uninstallExtension(args.name);
console.log(`Extension "${args.name}" successfully uninstalled.`);
} catch (error) {
console.error((error as Error).message);
console.error(getErrorMessage(error));
process.exit(1);
}
}

View File

@@ -6,6 +6,7 @@
import type { CommandModule } from 'yargs';
import { updateExtension } from '../../config/extension.js';
import { getErrorMessage } from '../../utils/errors.js';
interface UpdateArgs {
name: string;
@@ -23,7 +24,7 @@ export async function handleUpdate(args: UpdateArgs) {
`Extension "${args.name}" successfully updated: ${updatedExtensionInfo.originalVersion}${updatedExtensionInfo.updatedVersion}.`,
);
} catch (error) {
console.error((error as Error).message);
console.error(getErrorMessage(error));
process.exit(1);
}
}