diff --git a/src/vs/base/common/search.ts b/src/vs/base/common/search.ts index 3d036494cc29a..250b530c175ad 100644 --- a/src/vs/base/common/search.ts +++ b/src/vs/base/common/search.ts @@ -7,6 +7,11 @@ import * as strings from './strings.js'; export function buildReplaceStringWithCasePreserved(matches: string[] | null, pattern: string): string { if (matches && (matches[0] !== '')) { + // A caseless match has no case to preserve, so use the pattern as-is. + if (matches[0].toLowerCase() === matches[0].toUpperCase()) { + return pattern; + } + const containsHyphens = validateSpecificSpecialCharacter(matches, pattern, '-'); const containsUnderscores = validateSpecificSpecialCharacter(matches, pattern, '_'); if (containsHyphens && !containsUnderscores) { diff --git a/src/vs/editor/contrib/find/test/browser/replacePattern.test.ts b/src/vs/editor/contrib/find/test/browser/replacePattern.test.ts index 26c65b3d8be8a..7b7ab95235d8d 100644 --- a/src/vs/editor/contrib/find/test/browser/replacePattern.test.ts +++ b/src/vs/editor/contrib/find/test/browser/replacePattern.test.ts @@ -219,6 +219,11 @@ suite('Replace Pattern test', () => { assertReplace(['Foo_Bar-abc'], 'newfoo_newbar-abc', 'Newfoo_newbar-abc'); assertReplace(['foo_Bar'], 'newfoo_newbar', 'newfoo_Newbar'); assertReplace(['Foo_BAR'], 'newfoo_newbar', 'Newfoo_NEWBAR'); + // #192168 - matches without any cased characters have no case to preserve + assertReplace(['()'], 'fontSize: 20', 'fontSize: 20'); + assertReplace(['123'], 'Def', 'Def'); + assertReplace(['!'], 'someValue', 'someValue'); + assertReplace(['ABC-123'], 'Def-someValue', 'DEF-someValue'); }); test('preserve case', () => { @@ -250,5 +255,10 @@ suite('Replace Pattern test', () => { assertReplace(['Foo_Bar-abc'], 'newfoo_newbar-abc', 'Newfoo_newbar-abc'); assertReplace(['foo_Bar'], 'newfoo_newbar', 'newfoo_Newbar'); assertReplace(['foo_BAR'], 'newfoo_newbar', 'newfoo_NEWBAR'); + // #192168 - matches without any cased characters have no case to preserve + assertReplace(['()'], 'fontSize: 20', 'fontSize: 20'); + assertReplace(['123'], 'Def', 'Def'); + assertReplace(['!'], 'someValue', 'someValue'); + assertReplace(['ABC-123'], 'Def-someValue', 'DEF-someValue'); }); });