diff --git a/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts b/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts index 9e2704a79b6..eaf1dfe189a 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsTreeModels.ts @@ -751,8 +751,8 @@ export function inspectSetting(key: string, target: SettingsTarget, languageFilt return { isConfigured, inspected, targetSelector, inspectedLanguageOverrides, languageSelector: languageFilter }; } -function sanitizeId(id: string): string { - return id.replace(/[\.\/]/, '_'); +export function sanitizeId(id: string): string { + return id.replace(/[\.\/]/g, '_'); } export function settingKeyToDisplayFormat(key: string, groupId: string = '', isLanguageTagSetting: boolean = false): { category: string; label: string } { diff --git a/src/vs/workbench/contrib/preferences/test/browser/settingsTreeModels.test.ts b/src/vs/workbench/contrib/preferences/test/browser/settingsTreeModels.test.ts index 98421c6ea63..0fd6956d676 100644 --- a/src/vs/workbench/contrib/preferences/test/browser/settingsTreeModels.test.ts +++ b/src/vs/workbench/contrib/preferences/test/browser/settingsTreeModels.test.ts @@ -5,7 +5,7 @@ import assert from 'assert'; import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js'; -import { settingKeyToDisplayFormat, parseQuery, IParsedQuery } from '../../browser/settingsTreeModels.js'; +import { settingKeyToDisplayFormat, parseQuery, IParsedQuery, sanitizeId } from '../../browser/settingsTreeModels.js'; suite('SettingsTree', () => { test('settingKeyToDisplayFormat', () => { @@ -329,5 +329,22 @@ suite('SettingsTree', () => { }); }); + test('sanitizeId replaces all dots and slashes', () => { + assert.deepStrictEqual( + [ + sanitizeId('root.editor.font.size'), + sanitizeId('group/subgroup/setting.key'), + sanitizeId('no-special-chars'), + sanitizeId('single.dot'), + ], + [ + 'root_editor_font_size', + 'group_subgroup_setting_key', + 'no-special-chars', + 'single_dot', + ] + ); + }); + ensureNoDisposablesAreLeakedInTestSuite(); });