diff --git a/src/debug/debug-launch-provider.test.ts b/src/debug/debug-launch-provider.test.ts index f51d6a00..33c4025d 100644 --- a/src/debug/debug-launch-provider.test.ts +++ b/src/debug/debug-launch-provider.test.ts @@ -796,7 +796,7 @@ describe('DebugLaunchProvider', () => { await debugLaunchProvider.handleUpdateDebugTasks(); expect(debugLaunchProvider.configurationProviderMock.inspectConfigVariable).toHaveBeenCalledWith('hideSlowPreLaunchWarning', 'debug'); - expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).not.toHaveBeenCalled(); + expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).not.toHaveBeenCalledWith('hideSlowPreLaunchWarning', true, 'debug', true); }); it.each([false, true])('should not add hideSlowPreLaunchWarning to workspace if already set globally (%s)', async (value) => { @@ -812,7 +812,73 @@ describe('DebugLaunchProvider', () => { await debugLaunchProvider.handleUpdateDebugTasks(); expect(debugLaunchProvider.configurationProviderMock.inspectConfigVariable).toHaveBeenCalledWith('hideSlowPreLaunchWarning', 'debug'); - expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).not.toHaveBeenCalled(); + expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).not.toHaveBeenCalledWith('hideSlowPreLaunchWarning', true, 'debug', true); + }); + + it('should set memory inspector defaults when missing', async () => { + const debugLaunchProvider = new DebugLaunchProviderTest(); + + debugLaunchProvider.solutionManagerMock.workspaceFolder = workspaceFolderUri; + jest.spyOn(debugLaunchProvider, 'loadCbuildRunYml').mockResolvedValue(cbuildRunYml); + jest.spyOn(debugLaunchProvider, 'loadDebugAdaptersYml').mockResolvedValue(debugAdaptersYml); + jest.spyOn(debugLaunchProvider, 'updateDebugTasks').mockResolvedValue(undefined); + + await debugLaunchProvider.handleUpdateDebugTasks(); + + expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).toHaveBeenCalledWith('addressPadding', '32bit', 'memory-inspector', true); + expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).toHaveBeenCalledWith('groupings.groupsPerRow', 'Autofit', 'memory-inspector', true); + expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).toHaveBeenCalledWith('groupings.MAUsPerGroup', 4, 'memory-inspector', true); + expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).toHaveBeenCalledWith('scrollingBehavior', 'Auto-Append', 'memory-inspector', true); + }); + + it.each([ + ['addressPadding', '32bit'], + ['groupings.groupsPerRow', 'Autofit'], + ['groupings.MAUsPerGroup', 4], + ['scrollingBehavior', 'Auto-Append'], + ])('should not overwrite memory-inspector.%s workspace setting', async (name, defaultValue) => { + const debugLaunchProvider = new DebugLaunchProviderTest(); + + debugLaunchProvider.solutionManagerMock.workspaceFolder = workspaceFolderUri; + jest.spyOn(debugLaunchProvider, 'loadCbuildRunYml').mockResolvedValue(cbuildRunYml); + jest.spyOn(debugLaunchProvider, 'loadDebugAdaptersYml').mockResolvedValue(debugAdaptersYml); + jest.spyOn(debugLaunchProvider, 'updateDebugTasks').mockResolvedValue(undefined); + + debugLaunchProvider.configurationProviderMock.inspectConfigVariable.mockImplementation((key, ext) => { + if (ext === 'memory-inspector' && key === name) { + return { key: `${ext}.${key}`, workspaceValue: 'already-set' }; + } + return { key: `${ext || PACKAGE_NAME}.${key}` }; + }); + + await debugLaunchProvider.handleUpdateDebugTasks(); + + expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).not.toHaveBeenCalledWith(name, defaultValue, 'memory-inspector', true); + }); + + it.each([ + ['addressPadding', '32bit'], + ['groupings.groupsPerRow', 'Autofit'], + ['groupings.MAUsPerGroup', 4], + ['scrollingBehavior', 'Auto-Append'], + ])('should not overwrite memory-inspector.%s global setting', async (name, defaultValue) => { + const debugLaunchProvider = new DebugLaunchProviderTest(); + + debugLaunchProvider.solutionManagerMock.workspaceFolder = workspaceFolderUri; + jest.spyOn(debugLaunchProvider, 'loadCbuildRunYml').mockResolvedValue(cbuildRunYml); + jest.spyOn(debugLaunchProvider, 'loadDebugAdaptersYml').mockResolvedValue(debugAdaptersYml); + jest.spyOn(debugLaunchProvider, 'updateDebugTasks').mockResolvedValue(undefined); + + debugLaunchProvider.configurationProviderMock.inspectConfigVariable.mockImplementation((key, ext) => { + if (ext === 'memory-inspector' && key === name) { + return { key: `${ext}.${key}`, globalValue: 'already-set' }; + } + return { key: `${ext || PACKAGE_NAME}.${key}` }; + }); + + await debugLaunchProvider.handleUpdateDebugTasks(); + + expect(debugLaunchProvider.configurationProviderMock.setConfigVariable).not.toHaveBeenCalledWith(name, defaultValue, 'memory-inspector', true); }); }); diff --git a/src/debug/debug-launch-provider.ts b/src/debug/debug-launch-provider.ts index 5834afc6..a7a61ce2 100644 --- a/src/debug/debug-launch-provider.ts +++ b/src/debug/debug-launch-provider.ts @@ -352,6 +352,27 @@ export class DebugLaunchProviderImpl implements DebugLaunchProvider { if ((showInStatusBar?.globalValue ?? showInStatusBar?.workspaceValue) === undefined) { this.configurationProvider.setConfigVariable('showInStatusBar', 'never', 'debug', true); } + + // Configure memory inspector defaults for improved embedded memory view readability + const addressPadding = this.configurationProvider.inspectConfigVariable('addressPadding', 'memory-inspector'); + if ((addressPadding?.globalValue ?? addressPadding?.workspaceValue) === undefined) { + this.configurationProvider.setConfigVariable('addressPadding', '32bit', 'memory-inspector', true); + } + + const groupsPerRow = this.configurationProvider.inspectConfigVariable('groupings.groupsPerRow', 'memory-inspector'); + if ((groupsPerRow?.globalValue ?? groupsPerRow?.workspaceValue) === undefined) { + this.configurationProvider.setConfigVariable('groupings.groupsPerRow', 'Autofit', 'memory-inspector', true); + } + + const mausPerGroup = this.configurationProvider.inspectConfigVariable('groupings.MAUsPerGroup', 'memory-inspector'); + if ((mausPerGroup?.globalValue ?? mausPerGroup?.workspaceValue) === undefined) { + this.configurationProvider.setConfigVariable('groupings.MAUsPerGroup', 4, 'memory-inspector', true); + } + + const scrollingBehavior = this.configurationProvider.inspectConfigVariable('scrollingBehavior', 'memory-inspector'); + if ((scrollingBehavior?.globalValue ?? scrollingBehavior?.workspaceValue) === undefined) { + this.configurationProvider.setConfigVariable('scrollingBehavior', 'Auto-Append', 'memory-inspector', true); + } } }