ktfmt icon indicating copy to clipboard operation
ktfmt copied to clipboard

Line break on Elvis operator inside parenthesized expression

Open sgrimm opened this issue 3 years ago • 0 comments

Given an expression that has a parenthesized subexpression with the Elvis operator, ktfmt breaks on the Elvis operator rather than the higher-level subexpression even when the subexpression would all fit on the line. Example:

fun foo(
    unreasonablyLongArgumentName: Int?,
    unconscionablyLongArgumentName: Int?,
    unbearablyLongArgumentName: Int?
): Int {
  return (unreasonablyLongArgumentName ?: 0) +
      (unconscionablyLongArgumentName ?: 0) +
      (unbearablyLongArgumentName ?: 0)
}

Ktfmt 0.41 renders this as

fun foo(
    unreasonablyLongArgumentName: Int?,
    unconscionablyLongArgumentName: Int?,
    unbearablyLongArgumentName: Int?
): Int {
  return (unreasonablyLongArgumentName
      ?: 0) + (unconscionablyLongArgumentName ?: 0) + (unbearablyLongArgumentName ?: 0)
}

I'd expect it to either look like the original version or like

fun foo(
    unreasonablyLongArgumentName: Int?,
    unconscionablyLongArgumentName: Int?,
    unbearablyLongArgumentName: Int?
): Int {
  return (unreasonablyLongArgumentName ?: 0) +
      (unconscionablyLongArgumentName ?: 0) + (unbearablyLongArgumentName ?: 0)
}

sgrimm avatar Oct 12 '22 22:10 sgrimm