[PATCH] D154755: [clang-format] Fix formatting of if statements with BlockIndent
Gedare Bloom via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 19 08:13:02 PDT 2023
gedare added inline comments.
================
Comment at: clang/unittests/Format/FormatTest.cpp:25504
+
+#if 0
verifyFormat("if (quitelongarg !=\n"
----------------
MyDeveloperDay wrote:
> we don't do this.
OK, I'll move that other bug up my priority list, as the behavior of this test case involves both. That bug prevents breaking the line after the operand, I think there's some off-by-1 error somewhere in calculating the columns for blockindent breaks. Otherwise, this patch reveals that bug as a regression in this test case.
================
Comment at: clang/unittests/Format/FormatTest.cpp:25505-25510
verifyFormat("if (quitelongarg !=\n"
" (alsolongarg - 1)) { // ABC is a very longgggggggggggg "
"comment\n"
" return;\n"
"}",
Style);
----------------
MyDeveloperDay wrote:
> you can't remove a test and just call it good... the original author put this test in for a reason I assume?
understood, although it seems that the original author may not have considered `if` statements as legitimately to be used in BlockIndented formats, since this test case does not block indent. So, the test case will have to change anyway, if the `if` should be blockindented.
================
Comment at: clang/unittests/Format/FormatTest.cpp:25514
+ verifyFormat("void foo() {\n"
+ " if (quitelongname < alsolongname ||\n"
+ " anotherevenlongername <=\n"
----------------
MyDeveloperDay wrote:
> isn't the breaking of `if (` and `} else if (\n` inconsistent?
The breaking is dependent on what ends up exceeding the ColumnLimit. since ` if (` is shorter than ` } else if (` by about 5 characters, you can get different breaks. As far as I can tell, the behavior of `AlwaysBreak` and `BlockIndent` will only break after the opening parens if the first "argument" doesn't fit. From what I understand, the penalties and desirable breaks come into play then, based on breaking around commas or boolean operators. With this patch, the behavior here is now consistent for both `AlwaysBreak` and `BlockIndent`.
This behavior is undocumented and I do not know the intention. I would think it is better for the two options to behave consistently, but I'm also willing to treat them differently for backward compatibility while fixing this bug.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D154755/new/
https://reviews.llvm.org/D154755
More information about the cfe-commits
mailing list