Change:
VSCode Version: 1.22.0-insider OS Version: macOS 10.13.3 Currently VSCode increments suffix when copying a file. Copying makes . But there are cases when the is specified in prefix not suffix, for instance when dealing with migrations we have files like , copying this results in creating a file named which is not the desired result. It would be great if VSCode could detect and increment the prefix if needed. It also requires minimal changes to method to add the functionality.
Testing something like should be enough to handle the case.
If there is a simple PR to handle this case we would be happy to merge it in
Great, I'll make the changes and create PR
This caused which we should take for May

Discussion:
return candidate; } <del> function incrementFileName(name: string, isFolder: boolean): string { </del> <ins> export function incrementFileName(name: string, isFolder: boolean): string { const separators = '[.-_]'; </ins> // file.1.txt=>file.2.txt <del> if (!isFolder && name.match(/(.*.)(d+)(..*)$/)) { return name.replace(/(.*.)(d+)(..*)$/, (match, g1?, g2?, g3?) => { return g1 + (parseInt(g2) + 1) + g3; }); </del> <ins> let suffixFileRegex = RegExp('(.*' + separators + ')(d+)(..*)$'); if (!isFolder && name.match(suffixFileRegex)) { return name.replace(suffixFileRegex, (match, g1?, g2?, g3?) => { return g1 + strings.pad(parseInt(g2) + 1, g2.length) + g3; }); } // 1.file.txt=>2.file.txt let prefixFileRegex = RegExp('(d+)(' + separators + '.*)(..*)$'); if (!isFolder && name.match(prefixFileRegex)) { return name.replace(prefixFileRegex, (match, g1?, g2?, g3?) => { return strings.pad(parseInt(g1) + 1, g1.length) + g2 + g3; }); </ins> } // file.txt=>file.1.txt

// folder.1=>folder.2 if (isFolder && name.match(/(d+)$/)) { <del> return name.replace(/(d+)$/, (match: string, ...groups: any[]) => { return String(parseInt(groups[0]) + 1); }); </del> <ins> return name.replace(/(d+)$/, (match: string, ...groups: any[]) => { return strings.pad(parseInt(groups[0]) + 1, groups[0].length); }); } // 1.folder=>2.folder if (isFolder && name.match(/^(d+)/)) { return name.replace(/^(d+)/, (match: string, ...groups: any[]) => { return strings.pad(parseInt(groups[0]) + 1, groups[0].length); }); </ins> } // file/folder=>file.1/folder.1

<ins> /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ 'use strict'; import * as assert from 'assert'; import { incrementFileName } from 'vs/workbench/parts/files/electron-browser/fileActions'; suite('Files - Increment file name', () => { test('Increment file name without any version', function () { const name = 'test.js'; const result = incrementFileName(name, false); assert.strictEqual(result, 'test.1.js'); }); test('Increment folder name without any version', function () { const name = 'test'; const result = incrementFileName(name, true); assert.strictEqual(result, 'test.1'); }); test('Increment file name with suffix version', function () { const name = 'test.1.js'; const result = incrementFileName(name, false); assert.strictEqual(result, 'test.2.js'); }); test('Increment file name with suffix version with trailing zeros', function () { const name = 'test.001.js'; const result = incrementFileName(name, false); assert.strictEqual(result, 'test.002.js'); }); test('Increment file name with suffix version with trailing zeros, changing length', function () { const name = 'test.009.js'; const result = incrementFileName(name, false); assert.strictEqual(result, 'test.010.js'); }); test('Increment file name with suffix version with `-` as separator', function () { const name = 'test-1.js'; const result = incrementFileName(name, false); assert.strictEqual(result, 'test-2.js'); }); test('Increment file name with suffix version with `-` as separator, trailing zeros', function () { const name = 'test-001.js'; const result = incrementFileName(name, false); assert.strictEqual(result, 'test-002.js'); }); test('Increment file name with suffix version with `-` as separator, trailing zeros, changnig length', function () { const name = 'test-099.js'; const result = incrementFileName(name, false); assert.strictEqual(result, 'test-100.js'); }); test('Increment file name with suffix version with `_` as separator', function () { const name = 'test_1.js'; const result = incrementFileName(name, false); assert.strictEqual(result, 'test_2.js'); }); test('Increment folder name with suffix version', function () { const name = 'test.1'; const result = incrementFileName(name, true); assert.strictEqual(result, 'test.2'); }); test('Increment folder name with suffix version, trailing zeros', function () { const name = 'test.001'; const result = incrementFileName(name, true); assert.strictEqual(result, 'test.002'); }); test('Increment folder name with suffix version with `-` as separator', function () { const name = 'test-1'; const result = incrementFileName(name, true); assert.strictEqual(result, 'test-2'); }); test('Increment folder name with suffix version with `_` as separator', function () { const name = 'test_1'; const result = incrementFileName(name, true); assert.strictEqual(result, 'test_2'); }); test('Increment file name with prefix version', function () { const name = '1.test.js'; const result = incrementFileName(name, false); assert.strictEqual(result, '2.test.js'); }); test('Increment file name with prefix version, trailing zeros', function () { const name = '001.test.js'; const result = incrementFileName(name, false); assert.strictEqual(result, '002.test.js'); }); test('Increment file name with prefix version with `-` as separator', function () { const name = '1-test.js'; const result = incrementFileName(name, false); assert.strictEqual(result, '2-test.js'); }); test('Increment file name with prefix version with `-` as separator', function () { const name = '1_test.js'; const result = incrementFileName(name, false); assert.strictEqual(result, '2_test.js'); }); test('Increment folder name with suffix version', function () { const name = '1.test'; const result = incrementFileName(name, true); assert.strictEqual(result, '2.test'); }); test('Increment folder name with suffix version, trailing zeros', function () { const name = '001.test'; const result = incrementFileName(name, true); assert.strictEqual(result, '002.test'); }); test('Increment folder name with suffix version  with `-` as separator', function () { const name = '1-test'; const result = incrementFileName(name, true); assert.strictEqual(result, '2-test'); }); }); </ins>  No newline at end of file