diff --git a/src/filesystem/__tests__/lib.test.ts b/src/filesystem/__tests__/lib.test.ts index bfe8987bfd..ca7565e336 100644 --- a/src/filesystem/__tests__/lib.test.ts +++ b/src/filesystem/__tests__/lib.test.ts @@ -416,6 +416,22 @@ describe('Lib Functions', () => { ); }); + it('treats dollar signs in replacement text literally', async () => { + const edits = [ + { oldText: 'line2', newText: '$$100 $& value' } + ]; + + mockFs.rename.mockResolvedValueOnce(undefined); + + await applyFileEdits('/test/file.txt', edits, false); + + expect(mockFs.writeFile).toHaveBeenCalledWith( + expect.stringMatching(/\/test\/file\.txt\.[a-f0-9]+\.tmp$/), + 'line1\n$$100 $& value\nline3\n', + 'utf-8' + ); + }); + it('handles dry run mode', async () => { const edits = [ { oldText: 'line2', newText: 'modified line2' } diff --git a/src/filesystem/lib.ts b/src/filesystem/lib.ts index 240ca0d476..7fe5092b7d 100644 --- a/src/filesystem/lib.ts +++ b/src/filesystem/lib.ts @@ -184,7 +184,7 @@ export async function applyFileEdits( // If exact match exists, use it if (modifiedContent.includes(normalizedOld)) { - modifiedContent = modifiedContent.replace(normalizedOld, normalizedNew); + modifiedContent = modifiedContent.replace(normalizedOld, () => normalizedNew); continue; }