Skip to content

Commit bcb6c9b

Browse files
authored
1 parent c4c4814 commit bcb6c9b

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,11 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
249249
continue;
250250
}
251251

252+
// Skip if dependency extension is disabled by extension kind
253+
if (enablementStateOfExtension === EnablementState.DisabledByExtensionKind) {
254+
continue;
255+
}
256+
252257
// Check if the extension is a dependency or in extension pack
253258
if (extensions.some(e =>
254259
(options.dependencies && e.manifest.extensionDependencies?.some(id => areSameExtensions({ id }, extension.identifier)))

src/vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,22 @@ suite('ExtensionEnablementService Test', () => {
412412
assert.strictEqual(testObject.getEnablementState(target), EnablementState.EnabledWorkspace);
413413
});
414414

415+
test('test enable an extension with a dependency extension that cannot be enabled', async () => {
416+
instantiationService.stub(IExtensionManagementServerService, anExtensionManagementServerService(anExtensionManagementServer('vscode-local', instantiationService), anExtensionManagementServer('vscode-remote', instantiationService), null));
417+
const localWorkspaceDepExtension = aLocalExtension2('pub.b', { extensionKind: ['workspace'] }, { location: URI.file(`pub.b`) });
418+
const remoteWorkspaceExtension = aLocalExtension2('pub.a', { extensionKind: ['workspace'], extensionDependencies: ['pub.b'] }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
419+
const remoteWorkspaceDepExtension = aLocalExtension2('pub.b', { extensionKind: ['workspace'] }, { location: URI.file(`pub.b`).with({ scheme: Schemas.vscodeRemote }) });
420+
installed.push(localWorkspaceDepExtension, remoteWorkspaceExtension, remoteWorkspaceDepExtension);
421+
422+
testObject = new TestExtensionEnablementService(instantiationService);
423+
await (<TestExtensionEnablementService>testObject).waitUntilInitialized();
424+
425+
await testObject.setEnablement([remoteWorkspaceExtension], EnablementState.DisabledGlobally);
426+
await testObject.setEnablement([remoteWorkspaceExtension], EnablementState.EnabledGlobally);
427+
assert.ok(testObject.isEnabled(remoteWorkspaceExtension));
428+
assert.strictEqual(testObject.getEnablementState(remoteWorkspaceExtension), EnablementState.EnabledGlobally);
429+
});
430+
415431
test('test enable an extension also enables packed extensions', async () => {
416432
installed.push(...[aLocalExtension2('pub.a', { extensionPack: ['pub.b'] }), aLocalExtension('pub.b')]);
417433
const target = installed[0];

0 commit comments

Comments
 (0)