Change:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --There is Title Case, Snake Case, Lowercase, Uppercase, but no Camel Case. It would be nice to transform: -
It would be a great feature. You could use that extension: until then. I also think that they should work on the to exclude articles and even custom words. instead of which is not accaptable in many academic organizations.
<!-- -96bd-47a8-a0e8- --This feature request is now a candidate for our backlog. The community has 60 days to the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our . Happy Coding!
<!-- -a7ce-58b9-b1f9- --This feature request has not yet received the 20 community it takes to make to our backlog. 10 days to go. To learn more about how we handle feature requests, please see our . Happy Coding!
<!-- -c9e0-7adb-d31b- --:slightlysmilingface: This feature request received a sufficient number of community upvotes and we moved it to our backlog. To learn more about how we handle feature requests, please see our . Happy Coding!
Up for a PR anyone?
I to do this. I have more details in the PR description about how different use cases should be handled. I don't really have a strong opinion on it. I wrote a personal extension long ago that has it's own set of rules, so I probably will keep using that over the one I implemented in the PR.

Discussion:
} } <ins> export class CamelCaseAction extends AbstractCaseAction { public static wordBoundary = new BackwardsCompatibleRegExp('[_s-]', 'gm'); constructor() { super({ id: 'editor.action.transformToCamelcase', label: nls.localize('editor.transformToCamelcase', "Transform to Camel Case"), alias: 'Transform to Camel Case', precondition: EditorContextKeys.writable }); } protected _modifyText(text: string, wordSeparators: string): string { const wordBoundary = CamelCaseAction.wordBoundary.get(); if (!wordBoundary) { // cannot support this return text; } const words = text.split(wordBoundary); const firstWord = words.shift(); return firstWord + words.map((word: string) => word.substring(0, 1).toLocaleUpperCase() + word.substring(1)) .join(''); } } </ins> export class KebabCaseAction extends AbstractCaseAction { public static isSupported(): boolean {

if (SnakeCaseAction.caseBoundary.isSupported() && SnakeCaseAction.singleLetters.isSupported()) { registerEditorAction(SnakeCaseAction); } <ins> if (CamelCaseAction.wordBoundary.isSupported()) { registerEditorAction(CamelCaseAction); } </ins> if (TitleCaseAction.titleBoundary.isSupported()) { registerEditorAction(TitleCaseAction); }

import { Handler } from 'vs/editor/common/editorCommon'; import { ITextModel } from 'vs/editor/common/model'; import { ViewModel } from 'vs/editor/common/viewModel/viewModelImpl'; <del> import { DeleteAllLeftAction, DeleteAllRightAction, DeleteDuplicateLinesAction, DeleteLinesAction, IndentLinesAction, InsertLineAfterAction, InsertLineBeforeAction, JoinLinesAction, KebabCaseAction, LowerCaseAction, SnakeCaseAction, SortLinesAscendingAction, SortLinesDescendingAction, TitleCaseAction, TransposeAction, UpperCaseAction } from 'vs/editor/contrib/linesOperations/browser/linesOperations'; </del> <ins> import { CamelCaseAction, DeleteAllLeftAction, DeleteAllRightAction, DeleteDuplicateLinesAction, DeleteLinesAction, IndentLinesAction, InsertLineAfterAction, InsertLineBeforeAction, JoinLinesAction, KebabCaseAction, LowerCaseAction, SnakeCaseAction, SortLinesAscendingAction, SortLinesDescendingAction, TitleCaseAction, TransposeAction, UpperCaseAction } from 'vs/editor/contrib/linesOperations/browser/linesOperations'; </ins> import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor'; import { createTextModel } from 'vs/editor/test/common/testTextModel';

withTestCodeEditor( [ <ins> 'camel from words', 'from_snake_case', 'from-kebab-case', 'alreadyCamel', 'ReTain_any_CAPitalization', 'my_var.test_function()', 'öçş_öç_şğü_ğü' ], {}, (editor) => { const model = editor.getModel()!; const camelcaseAction = new CamelCaseAction(); editor.setSelection(new Selection(1, 1, 1, 18)); executeAction(camelcaseAction, editor); assert.strictEqual(model.getLineContent(1), 'camelFromWords'); editor.setSelection(new Selection(2, 1, 2, 15)); executeAction(camelcaseAction, editor); assert.strictEqual(model.getLineContent(2), 'fromSnakeCase'); editor.setSelection(new Selection(3, 1, 3, 15)); executeAction(camelcaseAction, editor); assert.strictEqual(model.getLineContent(3), 'fromKebabCase'); editor.setSelection(new Selection(4, 1, 4, 12)); executeAction(camelcaseAction, editor); assert.strictEqual(model.getLineContent(4), 'alreadyCamel'); editor.setSelection(new Selection(5, 1, 5, 26)); executeAction(camelcaseAction, editor); assert.strictEqual(model.getLineContent(5), 'ReTainAnyCAPitalization'); editor.setSelection(new Selection(6, 1, 6, 23)); executeAction(camelcaseAction, editor); assert.strictEqual(model.getLineContent(6), 'myVar.testFunction()'); editor.setSelection(new Selection(7, 1, 7, 14)); executeAction(camelcaseAction, editor); assert.strictEqual(model.getLineContent(7), 'öçşÖçŞğüĞü'); } ); withTestCodeEditor( [ </ins> '', '   ' ], {}, (editor) => {