diff --git a/package.json b/package.json index 5c73335d..03f3ad07 100644 --- a/package.json +++ b/package.json @@ -209,6 +209,12 @@ "title": "%python-envs.terminal.deactivate.title%", "category": "Python Envs", "icon": "$(circle-slash)" + }, + { + "command": "python-envs.uninstallPackage", + "title": "%python-envs.uninstallPackage.title%", + "category": "Python Envs", + "icon": "$(trash)" } ], "menus": { @@ -272,6 +278,10 @@ { "command": "python-envs.terminal.deactivate", "when": "pythonTerminalActivation" + }, + { + "command": "python-envs.uninstallPackage", + "when": "false" } ], "view/item/context": [ @@ -309,6 +319,11 @@ "group": "inline", "when": "view == env-managers && viewItem =~ /.*pythonEnvironment.*/" }, + { + "command": "python-envs.uninstallPackage", + "group": "inline", + "when": "view == env-managers && viewItem == python-package" + }, { "command": "python-envs.packages", "group": "inline", @@ -336,6 +351,11 @@ "command": "python-envs.createTerminal", "group": "inline", "when": "view == python-projects && viewItem =~ /.*python-workspace.*/" + }, + { + "command": "python-envs.uninstallPackage", + "group": "inline", + "when": "view == python-projects && viewItem == python-package" } ], "view/title": [ diff --git a/package.nls.json b/package.nls.json index d51e29e0..5e1fdb12 100644 --- a/package.nls.json +++ b/package.nls.json @@ -6,7 +6,6 @@ "python-envs.pythonProjects.envManager.description": "The environment manager for creating and managing environments for this project.", "python-envs.pythonProjects.packageManager.description": "The package manager for managing packages in environments for this project.", "python-envs.terminal.showActivateButton.description": "Whether to show the 'Activate' button in the terminal menu", - "python-envs.setEnvManager.title": "Set Environment Manager", "python-envs.setPkgManager.title": "Set Package Manager", "python-envs.addPythonProject.title": "Add Python Project", @@ -26,5 +25,6 @@ "python-envs.createTerminal.title": "Create Python Terminal", "python-envs.runAsTask.title": "Run as Task", "python-envs.terminal.activate.title": "Activate Environment in Current Terminal", - "python-envs.terminal.deactivate.title": "Deactivate Environment in Current Terminal" + "python-envs.terminal.deactivate.title": "Deactivate Environment in Current Terminal", + "python-envs.uninstallPackage.title": "Uninstall Package" } diff --git a/src/extension.ts b/src/extension.ts index c23ea9d3..f70ca4b5 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -21,6 +21,7 @@ import { refreshPackagesCommand, createAnyEnvironmentCommand, runInDedicatedTerminalCommand, + handlePackageUninstall, } from './features/envCommands'; import { registerCondaFeatures } from './managers/conda/main'; import { registerSystemPythonFeatures } from './managers/builtin/main'; @@ -133,6 +134,9 @@ export async function activate(context: ExtensionContext): Promise { + await handlePackageUninstall(context, envManagers); + }), commands.registerCommand('python-envs.set', async (item) => { await setEnvironmentCommand(item, envManagers, projectManager); }), diff --git a/src/features/envCommands.ts b/src/features/envCommands.ts index 2dff42c4..b6a70600 100644 --- a/src/features/envCommands.ts +++ b/src/features/envCommands.ts @@ -30,6 +30,8 @@ import { ProjectPackageRootTreeItem, GlobalProjectItem, EnvTreeItemKind, + PackageTreeItem, + ProjectPackage, } from './views/treeViewItems'; import { Common } from '../common/localize'; import { pickEnvironment } from '../common/pickers/environments'; @@ -187,6 +189,17 @@ export async function handlePackagesCommand( } } +export async function handlePackageUninstall(context: unknown, em: EnvironmentManagers) { + if (context instanceof PackageTreeItem || context instanceof ProjectPackage) { + const moduleName = context.pkg.name; + const environment = context.parent.environment; + const packageManager = em.getPackageManager(environment); + await packageManager?.uninstall(environment, [moduleName]); + return; + } + traceError(`Invalid context for uninstall command: ${typeof context}`); +} + export async function setEnvironmentCommand( context: unknown, em: EnvironmentManagers,