[PATCH] D50078: clang-format: support aligned nested conditionals formatting
Krasimir Georgiev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 28 04:51:13 PDT 2020
krasimir added a comment.
In D50078#2053324 <https://reviews.llvm.org/D50078#2053324>, @krasimir wrote:
> I'm happy with this patch!
>
> We found a couple of rough edges:
>
> - alignment after `?:` and
> - new formatting of `_ ? _ ? _ : _ : _` patterns is bad
>
> These are illustrated as examples D and E below (A, B and C look good to me). `test.cc` is how I'd expect clang-format to behave with this patch with `BreakBeforeTernaryOperators = true`, like in LLVM style.
> - alignment after `?:`: this is a GNU extension and we've seen it used in C++ and ObjC: https://stackoverflow.com/questions/24538096/in-objective-c. I think this is special enough for us to consider an occurrence of `?:` to break a ternary operator chain for the purposes of this alignment. I'd expect a +4 alignment of the last 2 lines of example D for consistency with A.
> - new formatting doesn't work for `_ ? _ ? _ : _ : _` patterns; old formatting is better in that case. I think the new chained alignment works very well for _ ? _ : _ ? _ : _ ... cases, but we should attempt it otherwise.
>
>
>
> % cat test.cc
> //-- column 80 ----------------------------------------------------------------V
> // A
> int i = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> ? bbbbbbbbbbbbbbbbbbb
> : cccccccccccccccccccc;
>
> //-- column 80 ----------------------------------------------------------------V
> // B
> int i = aaaaaaaaaaaaaaaaaaaaaaaaaa ? bbbbbbbbbbbbbbbbbbb
> : cccccccccccccccccccc ? dddddddddddddddddddd
> : eeeeeeeeeeeeeeeee;
>
> //-- column 80 ----------------------------------------------------------------V
> // C
> int i = aaaaaaaaaaaaaaaaaaaaaaaaaa
> ?: bbbbbbbbbbbbbbbbbbb ? ccccccccccccc
> : ddddddddd;
>
> //-- column 80 ----------------------------------------------------------------V
> // D
> int i = aaaaaaaaaaaaaaaaaaaaaaaaaa
> ?: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
> ? bbbbbbbbbbbbbbbbbbb
> : cccccccccccccccccccc;
>
> //-- column 80 ----------------------------------------------------------------V
> // E
> return temp[0] > temp[1] ? temp[0] > temp[2] ? 0 : 2
> : temp[1] > temp[2] ? 1 : 2;
>
>
>
>
> % bin/clang-format -style=llvm test.cc
> //-- column 80 ----------------------------------------------------------------V
> // A
> int i = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> ? bbbbbbbbbbbbbbbbbbb
> : cccccccccccccccccccc;
>
> //-- column 80 ----------------------------------------------------------------V
> // B
> int i = aaaaaaaaaaaaaaaaaaaaaaaaaa ? bbbbbbbbbbbbbbbbbbb
> : cccccccccccccccccccc ? dddddddddddddddddddd
> : eeeeeeeeeeeeeeeee;
>
> //-- column 80 ----------------------------------------------------------------V
> // C
> int i = aaaaaaaaaaaaaaaaaaaaaaaaaa
> ?: bbbbbbbbbbbbbbbbbbb ? ccccccccccccc
> : ddddddddd;
>
> //-- column 80 ----------------------------------------------------------------V
> // D
> int i = aaaaaaaaaaaaaaaaaaaaaaaaaa
> ?: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
> ? bbbbbbbbbbbbbbbbbbb
> : cccccccccccccccccccc;
>
> //-- column 80 ----------------------------------------------------------------V
> // E
> return temp[0] > temp[1] ? temp[0] > temp[2] ? 0 : 2
> : temp[1] > temp[2] ? 1
> : 2;
>
@MyDeveloperDay , @Typz -- could you please take a look at these two issues and give your feedback? (E) looks pretty bad. I'm not familiar enough with this patch to judge how easy / hard would it be to mitigate these.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D50078/new/
https://reviews.llvm.org/D50078
More information about the cfe-commits
mailing list