<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/57609>57609</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang-format: AllowShortCaseLabelsOnASingleLine only for simple cases
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          AdamBucior
      </td>
    </tr>
</table>

<pre>
    Hi,

I would like clang-format to put short case labels on single line only for simple single-case cases like:
```
switch (i) {
case 0: return 3;
case 1: return 7;
case 2: return 1;
case 3: return 5;
}
```

But not for more complicated multiple-case cases like:
```
switch (i) {
case 0:
case 1:
  return i;
case 2:
case 3:
  i *= 2;
  break;
}
```

Which `clang-format -style="{AllowShortCaseLabelsOnASingleLine: true}"` formats as:
```
switch (i) {
case 0:
case 1: return i;
case 2:
case 3: i *= 2; break;
}
```
which doesn't make it obvious that `return i;` is also done in case `i` is 0 (and similarly for `case 2:`).

The problem also exists for fallthrough cases like:
```
switch (i) {
case 0:
  g();
  [[fallthrough]];
case 1:
  f();
  break;
}
```

Which `clang-format -style="{AllowShortCaseLabelsOnASingleLine: true}"` formats as:
```
switch (i) {
case 0: g(); [[fallthrough]];
case 1: f(); break;
}
```

I propose to add a new option: `AllowShortCaseLabelsOnASingleLine: SingleCases`

The last example might be more challenging because `clang-format` would need a way to detect whether the previous case can fallthrough. I see 2 ways:
- Just check if there is a `[[fallthrough]]` attribute (this option would cause wrong formatting if someone forgets `[[fallthrough]]`)
- Check for `return` or `break` (this option might be harder to implement correctly)

I'm fine with both ways.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzdVsGOozgQ_Rq4lBI50EDnwCHpaLS9GmkPM9KcDVTA2wZHtpls_n6rMOkh3TO7WalPKyEiu1xVr169MqlMcyl_U1HyFIlDJHbh_QxnM-oGtHpBqLUc2tXR2F568AZOowfXGeuhlg5Bywq1AzOAU0OraUMNSEt9AfKhzf5Em8G2mjz45abYUTonjHIxP9PSnZWvO4iSR0K2hajYh_3JXZAXWPSjHSCN0qVpszAVt6ZkYdrcmtKFKXs1RcXhp9jCe08kDMZPJfbGUlGG6lS19NhAP2qvTh9Y7psSwxKumNX7St9Ud3VQlGMXpQc-s79uVhbly51lf-sUA83FjShWzl80VXeIkoTA77Q25y-skCcC8HnSxx_D7sskgc-kDubb2xE5F3nkAkIgB9J9FEf3k3PLyp10nCciGoNuiJLCQy9pUpQHU31XZnTgO-KFTi9RUJ2KStTOkCPNiBrCBJFBzUbBBcqh4bFRWtp5iJjwV_QEIdmul1352iGcrKk09iE8_qUcscmuR6m176wZ2-7jlAjQ0hE6sZBRlO3pWaSLsgM_7wb06nB8F-J_osQFOfezsqDjP_HwzJ0_GYpCV7NsGpAw4BnMySszcFw6fxcNYcUH3JsULC8tnSdZyeky71Xbeahwvvk6qg6Hlvxpr5ZjkPSyL0xs-KIMiAzxLC-Mt0GPtYdzh75DS0PDOsYwQfPdOSwVvIZncEhzwAF-NGgFv48Er-6wfgF15DiEi2eNgfyqBYRJem9VNXrkbvqOPAJvM9hQy9kaqiwU4rlIyuBMjzzCtNsiqeUf03BXZ5xPE8R5pMPdwDjCOrQ9F2_BvNLdSdswTQamj2qPAxVtrCUO9eU1y6wLupZ6OPK3mPTaQWXoxaytYyw3eZ5kWZGledyUabNNtzL2ymssb7pGqvhX6bz70k-XTDxaXXben6YmJZ_oaQnFWK3pO0kLrb9ff1ak3z-pAloq50ZSX_IpK3KxjbuyENlj_pg_CLHN60wejzWmeNxWAuuHTY5FHP58lMx9krDupxA8ytkhVmUikkRsRbFJ02STrfMaK5EVxUNVpOJRZNGDwF4qvWYca2plbMsJUjW2joyab9EfRumcaknAUzqKL0dPxJS7Rvb7sVbGxlP2ckL_N-77x-o">