atirit added a comment.

I've found yet another bug. When `AllowShortEnumsOnASingleLine` is `true` and a 
multiline enum is forced (by line length, trailing comma, etc.), multiple names 
for the enum are placed on separate lines.

Example:

  enum { A, B, C, } ShortEnum1, ShortEnum2;

Is refactored to

  enum {
      A,
      B,
      C,
  } ShortEnum1,
      ShortEnum2;

Instead of the expected

  enum {
      A,
      B,
      C,
  } ShortEnum1, ShortEnum2;

`ColumnLimit` is not causing this.
When `AllowShortEnumsOnASingleLine` is `false`, the expected behaviour occurs. 
This affects a unit test I added, so I'll be fixing this as well in this diff.



================
Comment at: clang/lib/Format/TokenAnnotator.cpp:3679-3680
+        if (remainingFile[whileIndex] != '\n' &&
+            (remainingFile[whileIndex] == ' ' &&
+             remainingFile[whileIndex - 1] == ' ')) {
+          remainingLineCharCount++;
----------------
curdeius wrote:
> atirit wrote:
> > curdeius wrote:
> > > I don't really understand these conditions on spaces. Could you explain 
> > > your intent, please?
> > > You really need to add specific tests for that, playing with the value of 
> > > ColumnLimit, adding spacing etc.
> > Repeated spaces, e.g. `enum {   A,  B, C } SomeEnum;` are removed during 
> > formatting. Since they wouldn't be part of the formatted line, they 
> > shouldn't be counted towards the column limit. Only one space need be 
> > considered. Removed spaces, e.g. `enum{A,B,C}SomeEnum;` are handled by the 
> > fact that `clang-format` runs multiple passes. On the first pass, spaces 
> > would be added. On the second pass, assuming the line is then too long, the 
> > above code would catch it and break up the enum.
> > 
> > I'll add unit tests to check if spaces are being handled correctly.
> Since you use `== ' '` twice, `remainingLineCharCount` will count only 
> consecutive spaces, right?
> But you want to count other characters, no?
> So, IIUC, the condition you want is `rF[wI] != '\n' && !(rF[wI] == ' ' && 
> rF[wI - 1] == ' ')` (mind the negation). It will count characters other than 
> a newline and it will only count a series of consecutive spaces as one char. 
> WDYT?
Ah yes, that's my bad. Must have made a typo. Fixed in the next commit.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93938/new/

https://reviews.llvm.org/D93938

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to