@@ -44,7 +44,7 @@ import { ICssStyleCollector, IColorTheme, IThemeService, registerThemingParticip
4444import { getIgnoredSettings } from 'vs/platform/userDataSync/common/settingsMerge' ;
4545import { ITOCEntry } from 'vs/workbench/contrib/preferences/browser/settingsLayout' ;
4646import { ISettingsEditorViewState , settingKeyToDisplayFormat , SettingsTreeElement , SettingsTreeGroupChild , SettingsTreeGroupElement , SettingsTreeNewExtensionsElement , SettingsTreeSettingElement } from 'vs/workbench/contrib/preferences/browser/settingsTreeModels' ;
47- import { ExcludeSettingWidget , ISettingListChangeEvent , IListDataItem , ListSettingWidget , settingsHeaderForeground , settingsNumberInputBackground , settingsNumberInputBorder , settingsNumberInputForeground , settingsSelectBackground , settingsSelectBorder , settingsSelectForeground , settingsSelectListBorder , settingsTextInputBackground , settingsTextInputBorder , settingsTextInputForeground , ObjectSettingWidget , IObjectDataItem , IObjectEnumOption , ObjectValue , IObjectValueSuggester } from 'vs/workbench/contrib/preferences/browser/settingsWidgets' ;
47+ import { ExcludeSettingWidget , ISettingListChangeEvent , IListDataItem , ListSettingWidget , settingsHeaderForeground , settingsNumberInputBackground , settingsNumberInputBorder , settingsNumberInputForeground , settingsSelectBackground , settingsSelectBorder , settingsSelectForeground , settingsSelectListBorder , settingsTextInputBackground , settingsTextInputBorder , settingsTextInputForeground , ObjectSettingWidget , IObjectDataItem , IObjectEnumOption , ObjectValue , IObjectValueSuggester , IObjectKeySuggester } from 'vs/workbench/contrib/preferences/browser/settingsWidgets' ;
4848import { SETTINGS_EDITOR_COMMAND_SHOW_CONTEXT_MENU } from 'vs/workbench/contrib/preferences/common/preferences' ;
4949import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService' ;
5050import { ISetting , ISettingsGroup , SettingValueType } from 'vs/workbench/services/preferences/common/preferences' ;
@@ -174,6 +174,26 @@ function getObjectDisplayValue(element: SettingsTreeSettingElement): IObjectData
174174 } ) ;
175175}
176176
177+ function createObjectKeySuggester ( element : SettingsTreeSettingElement ) : IObjectKeySuggester {
178+ const { objectProperties } = element . setting ;
179+ const allStaticKeys = Object . keys ( objectProperties ?? { } ) ;
180+
181+ return keys => {
182+ const existingKeys = new Set ( keys ) ;
183+ const enumOptions : IObjectEnumOption [ ] = [ ] ;
184+
185+ allStaticKeys . forEach ( staticKey => {
186+ if ( ! existingKeys . has ( staticKey ) ) {
187+ enumOptions . push ( { value : staticKey , description : objectProperties ! [ staticKey ] . description } ) ;
188+ }
189+ } ) ;
190+
191+ return enumOptions . length > 0
192+ ? { type : 'enum' , data : enumOptions [ 0 ] . value , options : enumOptions }
193+ : undefined ;
194+ } ;
195+ }
196+
177197function createObjectValueSuggester ( element : SettingsTreeSettingElement ) : IObjectValueSuggester {
178198 const { objectProperties, objectPatternProperties, objectAdditionalProperties } = element . setting ;
179199
@@ -204,8 +224,11 @@ function createObjectValueSuggester(element: SettingsTreeSettingElement): IObjec
204224
205225 if ( type === 'boolean' ) {
206226 return { type, data : suggestedSchema . default ?? true } ;
227+ } else if ( type === 'enum' ) {
228+ const options = getEnumOptionsFromSchema ( suggestedSchema ) ;
229+ return { type, data : suggestedSchema . default ?? options [ 0 ] . value , options } ;
207230 } else {
208- return { type, data : suggestedSchema . default ?? '' , options : getEnumOptionsFromSchema ( suggestedSchema ) } ;
231+ return { type, data : suggestedSchema . default ?? '' } ;
209232 }
210233 }
211234
@@ -1084,6 +1107,7 @@ export class SettingObjectRenderer extends AbstractSettingRenderer implements IT
10841107 isDefined ( dataElement . setting . objectPatternProperties ) ||
10851108 ! areAllPropertiesDefined ( Object . keys ( dataElement . setting . objectProperties ?? { } ) , items )
10861109 ) ,
1110+ keySuggester : createObjectKeySuggester ( dataElement ) ,
10871111 valueSuggester : createObjectValueSuggester ( dataElement ) ,
10881112 } ) ;
10891113
0 commit comments