[clang] e240261 - [clang-format] Fix option `BreakBinaryOperations` for operator `>>` (#122282)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 17 19:45:14 PST 2025
Author: Ander
Date: 2025-01-17T19:45:10-08:00
New Revision: e2402615a5a76d46a433dfcc1de10b38a1263c9d
URL: https://github.com/llvm/llvm-project/commit/e2402615a5a76d46a433dfcc1de10b38a1263c9d
DIFF: https://github.com/llvm/llvm-project/commit/e2402615a5a76d46a433dfcc1de10b38a1263c9d.diff
LOG: [clang-format] Fix option `BreakBinaryOperations` for operator `>>` (#122282)
Fixes #106228.
Added:
Modified:
clang/lib/Format/ContinuationIndenter.cpp
clang/unittests/Format/FormatTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp
index 554b55fa75c926..c311deaa17bb0e 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -148,6 +148,7 @@ static bool startsNextOperand(const FormatToken &Current) {
static bool mustBreakBinaryOperation(const FormatToken &Current,
const FormatStyle &Style) {
return Style.BreakBinaryOperations != FormatStyle::BBO_Never &&
+ Current.CanBreakBefore &&
(Style.BreakBeforeBinaryOperators == FormatStyle::BOS_None
? startsNextOperand
: isAlignableBinaryOperator)(Current);
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index d3c97319abb947..f8d13cd0ce2506 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -27976,6 +27976,11 @@ TEST_F(FormatTest, BreakBinaryOperations) {
" operand1 + operand2 - (operand3 + operand4);",
Style);
+ // Check operator>> special case.
+ verifyFormat("std::cin >> longOperand_1 >> longOperand_2 >>\n"
+ " longOperand_3_;",
+ Style);
+
Style.BreakBinaryOperations = FormatStyle::BBO_OnePerLine;
// Logical operations
@@ -28054,6 +28059,13 @@ TEST_F(FormatTest, BreakBinaryOperations) {
" operand6->member;",
Style);
+ // Check operator>> special case.
+ verifyFormat("std::cin >>\n"
+ " longOperand_1 >>\n"
+ " longOperand_2 >>\n"
+ " longOperand_3_;",
+ Style);
+
Style.BreakBinaryOperations = FormatStyle::BBO_RespectPrecedence;
verifyFormat("result = op1 + op2 * op3 - op4;", Style);
@@ -28079,6 +28091,13 @@ TEST_F(FormatTest, BreakBinaryOperations) {
" byte_buffer[3] << 24;",
Style);
+ // Check operator>> special case.
+ verifyFormat("std::cin >>\n"
+ " longOperand_1 >>\n"
+ " longOperand_2 >>\n"
+ " longOperand_3_;",
+ Style);
+
Style.BreakBinaryOperations = FormatStyle::BBO_OnePerLine;
Style.BreakBeforeBinaryOperators = FormatStyle::BOS_NonAssignment;
@@ -28153,6 +28172,13 @@ TEST_F(FormatTest, BreakBinaryOperations) {
" << 24;",
Style);
+ // Check operator>> special case.
+ verifyFormat("std::cin\n"
+ " >> longOperand_1\n"
+ " >> longOperand_2\n"
+ " >> longOperand_3_;",
+ Style);
+
Style.BreakBinaryOperations = FormatStyle::BBO_RespectPrecedence;
verifyFormat("result = op1 + op2 * op3 - op4;", Style);
@@ -28177,6 +28203,13 @@ TEST_F(FormatTest, BreakBinaryOperations) {
" | byte_buffer[2] << 16\n"
" | byte_buffer[3] << 24;",
Style);
+
+ // Check operator>> special case.
+ verifyFormat("std::cin\n"
+ " >> longOperand_1\n"
+ " >> longOperand_2\n"
+ " >> longOperand_3_;",
+ Style);
}
TEST_F(FormatTest, RemoveEmptyLinesInUnwrappedLines) {
More information about the cfe-commits
mailing list