src/vs/editor/contrib/linesOperations/browser/moveLinesCommand.ts/MoveLinesCommand/matchEnterRuleMovingDown
class MoveLinesCommand:	private matchEnterRuleMovingDown(model: ITextModel, indentConverter: IIndentConverter, tabSize: number, line: number, futureAboveLineNumber: number, futureAboveLineText: string) {
		if (strings.lastNonWhitespaceIndex(futureAboveLineText) >= 0) {
			// break
			let maxColumn = model.getLineMaxColumn(futureAboveLineNumber);
			let enter = getEnterAction(this._autoIndent, model, new Range(futureAboveLineNumber, maxColumn, futureAboveLineNumber, maxColumn), this._languageConfigurationService);
			return this.parseEnterResult(model, indentConverter, tabSize, line, enter);
		} else {
			// go upwards, starting from `line - 1`
			let validPrecedingLine = line - 1;
			while (validPrecedingLine >= 1) {
				let lineContent = model.getLineContent(validPrecedingLine);
				let nonWhitespaceIdx = strings.lastNonWhitespaceIndex(lineContent);

				if (nonWhitespaceIdx >= 0) {
					break;
				}

				validPrecedingLine--;
			}

			if (validPrecedingLine < 1 || line > model.getLineCount()) {
				return null;
			}

			let maxColumn = model.getLineMaxColumn(validPrecedingLine);
			let enter = getEnterAction(this._autoIndent, model, new Range(validPrecedingLine, maxColumn, validPrecedingLine, maxColumn), this._languageConfigurationService);
			return this.parseEnterResult(model, indentConverter, tabSize, line, enter);
		}
	}