Change:
Reported originally by where GitLens seemed to be breaking JSON auto-complete behavior -- causing an extra being at the end. ! I tracked it down to this contribution causing the issue I was able to reproduce this with a clean vscode user-dir/extensions-dir and a simple extension with that contribution
That JSON extension has configurationDefault for the setting: That configurationDefault is lost when the gitlens extension also makes a configurationDefault The bug is that all default overrides for the same language need to be merged, not set.

Discussion:
for (const defaultConfiguration of defaultConfigurations) { for (const key in defaultConfiguration) { properties.push(key); <del> this.defaultValues[key] = defaultConfiguration[key]; </del> if (OVERRIDE_PROPERTY_PATTERN.test(key)) { <ins> this.defaultValues[key] = { ...(this.defaultValues[key] || {}), ...defaultConfiguration[key] }; </ins> const property: IConfigurationPropertySchema = { type: 'object', default: this.defaultValues[key],

this.configurationProperties[key] = property; this.defaultLanguageConfigurationOverridesNode.properties![key] = property; } else { <ins> this.defaultValues[key] = defaultConfiguration[key]; </ins> const property = this.configurationProperties[key]; if (property) { this.updatePropertyDefaultValue(key, property);

<ins> /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; import { Registry } from 'vs/platform/registry/common/platform'; import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry'; suite('ConfigurationRegistry', () => { const configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration); test('configuration override', async () => { configurationRegistry.registerConfiguration({ 'id': '_test_default', 'type': 'object', 'properties': { 'config': { 'type': 'object', } } }); configurationRegistry.registerDefaultConfigurations([{ 'config': { a: 1, b: 2 } }]); configurationRegistry.registerDefaultConfigurations([{ '[lang]': { a: 2, c: 3 } }]); assert.deepEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 }); assert.deepEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, c: 3 }); }); test('configuration override defaults - merges defaults', async () => { configurationRegistry.registerDefaultConfigurations([{ '[lang]': { a: 1, b: 2 } }]); configurationRegistry.registerDefaultConfigurations([{ '[lang]': { a: 2, c: 3 } }]); assert.deepEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, b: 2, c: 3 }); }); test('configuration defaults - overrides defaults', async () => { configurationRegistry.registerConfiguration({ 'id': '_test_default', 'type': 'object', 'properties': { 'config': { 'type': 'object', } } }); configurationRegistry.registerDefaultConfigurations([{ 'config': { a: 1, b: 2 } }]); configurationRegistry.registerDefaultConfigurations([{ 'config': { a: 2, c: 3 } }]); assert.deepEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, c: 3 }); }); }); </ins>