src/vs/editor/contrib/linesOperations/browser/linesOperations.ts/AbstractCaseAction/run
class AbstractCaseAction:	public run(_accessor: ServicesAccessor, editor: ICodeEditor): void {
		const selections = editor.getSelections();
		if (selections === null) {
			return;
		}

		const model = editor.getModel();
		if (model === null) {
			return;
		}

		const wordSeparators = editor.getOption(EditorOption.wordSeparators);
		const textEdits: ISingleEditOperation[] = [];

		for (const selection of selections) {
			if (selection.isEmpty()) {
				const cursor = selection.getStartPosition();
				const word = editor.getConfiguredWordAtPosition(cursor);

				if (!word) {
					continue;
				}

				const wordRange = new Range(cursor.lineNumber, word.startColumn, cursor.lineNumber, word.endColumn);
				const text = model.getValueInRange(wordRange);
				textEdits.push(EditOperation.replace(wordRange, this._modifyText(text, wordSeparators)));
			} else {
				const text = model.getValueInRange(selection);
				textEdits.push(EditOperation.replace(selection, this._modifyText(text, wordSeparators)));
			}
		}

		editor.pushUndoStop();
		editor.executeEdits(this.id, textEdits);
		editor.pushUndoStop();
	}