[clang] [clang-format] Annotate do while while (PR #69707)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 20 04:03:21 PDT 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-format
Author: Björn Schäpers (HazardyKnusperkeks)
<details>
<summary>Changes</summary>
So we can differentiate on the while keyword between a do-while-loop and a normal while-loop.
---
Full diff: https://github.com/llvm/llvm-project/pull/69707.diff
3 Files Affected:
- (modified) clang/lib/Format/FormatToken.h (+1)
- (modified) clang/lib/Format/UnwrappedLineParser.cpp (+2)
- (modified) clang/unittests/Format/TokenAnnotatorTest.cpp (+10)
``````````diff
diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h
index 606e9e790ad833b..acd24f836199da1 100644
--- a/clang/lib/Format/FormatToken.h
+++ b/clang/lib/Format/FormatToken.h
@@ -67,6 +67,7 @@ namespace format {
TYPE(DesignatedInitializerLSquare) \
TYPE(DesignatedInitializerPeriod) \
TYPE(DictLiteral) \
+ TYPE(DoWhile) \
TYPE(ElseLBrace) \
TYPE(ElseRBrace) \
TYPE(EnumLBrace) \
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index 7bb487d020ea6f7..488d8dc07b1eae3 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -3137,6 +3137,8 @@ void UnwrappedLineParser::parseDoWhile() {
return;
}
+ FormatTok->setFinalizedType(TT_DoWhile);
+
// If in Whitesmiths mode, the line with the while() needs to be indented
// to the same level as the block.
if (Style.BreakBeforeBraces == FormatStyle::BS_Whitesmiths)
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index 4dbe2a532c5fdb2..290d0103bb3cf87 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -2334,6 +2334,16 @@ TEST_F(TokenAnnotatorTest, UnderstandsControlStatements) {
EXPECT_TOKEN(Tokens[5], tok::r_brace, TT_ControlStatementRBrace);
}
+TEST_F(TokenAnnotatorTest, UnderstandsDoWhile) {
+ auto Tokens = annotate("do { ++i; } while ( i > 5 );");
+ ASSERT_EQ(Tokens.size(), 14u) << Tokens;
+ EXPECT_TOKEN(Tokens[6], tok::kw_while, TT_DoWhile);
+
+ Tokens = annotate("do ++i; while ( i > 5 );");
+ ASSERT_EQ(Tokens.size(), 12u) << Tokens;
+ EXPECT_TOKEN(Tokens[4], tok::kw_while, TT_DoWhile);
+}
+
} // namespace
} // namespace format
} // namespace clang
``````````
</details>
https://github.com/llvm/llvm-project/pull/69707
More information about the cfe-commits
mailing list