diff --git a/src/vs/workbench/api/node/extHostConfiguration.ts b/src/vs/workbench/api/node/extHostConfiguration.ts index c7c10c31fb2..fb1ac12bc09 100644 --- a/src/vs/workbench/api/node/extHostConfiguration.ts +++ b/src/vs/workbench/api/node/extHostConfiguration.ts @@ -100,6 +100,10 @@ export class ExtHostConfiguration implements ExtHostConfigurationShape { let clonedConfig = void 0; const cloneOnWriteProxy = (target: any, accessor: string): any => { let clonedTarget = void 0; + const cloneTarget = () => { + clonedConfig = clonedConfig ? clonedConfig : deepClone(config); + clonedTarget = clonedTarget ? clonedTarget : lookUp(clonedConfig, accessor); + }; return isObject(target) ? new Proxy(target, { get: (target: any, property: string) => { @@ -114,10 +118,19 @@ export class ExtHostConfiguration implements ExtHostConfigurationShape { return result; }, set: (target: any, property: string, value: any) => { - clonedConfig = clonedConfig ? clonedConfig : deepClone(config); - clonedTarget = clonedTarget ? clonedTarget : lookUp(clonedConfig, accessor); + cloneTarget(); clonedTarget[property] = value; return true; + }, + deleteProperty: (target: any, property: string) => { + cloneTarget(); + delete clonedTarget[property]; + return true; + }, + defineProperty: (target: any, property: string, descriptor: any) => { + cloneTarget(); + Object.defineProperty(clonedTarget, property, descriptor); + return true; } }) : target; }; diff --git a/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts b/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts index b7008d3f5a0..382cbc08b75 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts @@ -102,6 +102,11 @@ suite('ExtHostConfiguration', function () { 'config2': 'Das Pferd frisst kein Reis.' }, 'config4': '' + }, + 'workbench': { + 'colorCustomizations': { + 'statusBar.foreground': 'somevalue' + } } }); @@ -131,6 +136,14 @@ suite('ExtHostConfiguration', function () { actual = testObject.inspect('farboo'); actual['value'] = 'effectiveValue'; assert.equal('effectiveValue', actual['value']); + + testObject = all.getConfiguration('workbench'); + actual = testObject.get('colorCustomizations'); + delete actual['statusBar.foreground']; + assert.equal(actual['statusBar.foreground'], undefined); + testObject = all.getConfiguration('workbench'); + actual = testObject.get('colorCustomizations'); + assert.equal(actual['statusBar.foreground'], 'somevalue'); }); test('cannot modify returned configuration', function () { @@ -158,7 +171,6 @@ suite('ExtHostConfiguration', function () { testObject['farboo']['config0'] = false; assert.fail('This should be readonly'); } catch (e) { - console.log(e); } try {