From 6c54746e24a77f24c3621dd5c5d1c7fffc5dd4f6 Mon Sep 17 00:00:00 2001 From: Jacob MacDonald Date: Tue, 30 Sep 2025 09:56:28 -0700 Subject: [PATCH] restore case insensitivity for extension enablement and add tests (#10249) --- .../extensions/extensionEnablement.test.ts | 36 +++++++++++++++++++ .../config/extensions/extensionEnablement.ts | 6 +++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/config/extensions/extensionEnablement.test.ts b/packages/cli/src/config/extensions/extensionEnablement.test.ts index 63a38ca5e8..b87fc2d814 100644 --- a/packages/cli/src/config/extensions/extensionEnablement.test.ts +++ b/packages/cli/src/config/extensions/extensionEnablement.test.ts @@ -227,6 +227,42 @@ describe('ExtensionEnablementManager', () => { ); }); + describe('extension overrides (-e )', () => { + beforeEach(() => { + manager = new ExtensionEnablementManager(configDir, ['ext-test']); + }); + + it('can enable extensions, case-insensitive', () => { + manager.disable('ext-test', true, '/'); + expect(manager.isEnabled('ext-test', '/')).toBe(true); + expect(manager.isEnabled('Ext-Test', '/')).toBe(true); + // Double check that it would have been disabled otherwise + expect( + new ExtensionEnablementManager(configDir).isEnabled('ext-test', '/'), + ).toBe(false); + }); + + it('disable all other extensions', () => { + manager = new ExtensionEnablementManager(configDir, ['ext-test']); + manager.enable('ext-test-2', true, '/'); + expect(manager.isEnabled('ext-test-2', '/')).toBe(false); + // Double check that it would have been enabled otherwise + expect( + new ExtensionEnablementManager(configDir).isEnabled('ext-test-2', '/'), + ).toBe(true); + }); + + it('none disables all extensions', () => { + manager = new ExtensionEnablementManager(configDir, ['none']); + manager.enable('ext-test', true, '/'); + expect(manager.isEnabled('ext-test', '/path/to/dir')).toBe(false); + // Double check that it would have been enabled otherwise + expect( + new ExtensionEnablementManager(configDir).isEnabled('ext-test', '/'), + ).toBe(true); + }); + }); + describe('validateExtensionOverrides', () => { let consoleErrorSpy: ReturnType; diff --git a/packages/cli/src/config/extensions/extensionEnablement.ts b/packages/cli/src/config/extensions/extensionEnablement.ts index c1e45101c2..737bc08d4d 100644 --- a/packages/cli/src/config/extensions/extensionEnablement.ts +++ b/packages/cli/src/config/extensions/extensionEnablement.ts @@ -152,7 +152,11 @@ export class ExtensionEnablementManager { // If we have explicit overrides, only enable those extensions. if (this.enabledExtensionNamesOverride.length > 0) { - return this.enabledExtensionNamesOverride.includes(extensionName); + // When checking against overrides ONLY, we use a case insensitive match. + // The override names are already lowercased in the constructor. + return this.enabledExtensionNamesOverride.includes( + extensionName.toLocaleLowerCase(), + ); } // Otherwise, we use the configuration settings