llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-format

Author: owenca (owenca)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/177736.diff


3 Files Affected:

- (modified) clang/lib/Format/FormatTokenLexer.cpp (+8-3) 
- (modified) clang/unittests/Format/FormatTestJava.cpp (+7) 
- (modified) clang/unittests/Format/TokenAnnotatorTest.cpp (+9) 


``````````diff
diff --git a/clang/lib/Format/FormatTokenLexer.cpp 
b/clang/lib/Format/FormatTokenLexer.cpp
index eb8658396ecde..4a087d9e6dc2b 100644
--- a/clang/lib/Format/FormatTokenLexer.cpp
+++ b/clang/lib/Format/FormatTokenLexer.cpp
@@ -718,14 +718,19 @@ void FormatTokenLexer::tryParseJavaTextBlock() {
   ++S; // Skip the `"""` that begins a text block.
 
   // Find the `"""` that ends the text block.
+  bool Escaped = false;
   for (int Count = 0; Count < 3 && S < End; ++S) {
+    if (Escaped) {
+      Escaped = false;
+      continue;
+    }
     switch (*S) {
-    case '\\':
-      Count = -1;
-      break;
     case '\"':
       ++Count;
       break;
+    case '\\':
+      Escaped = true;
+      [[fallthrough]];
     default:
       Count = 0;
     }
diff --git a/clang/unittests/Format/FormatTestJava.cpp 
b/clang/unittests/Format/FormatTestJava.cpp
index 3cc97e2dc0b2e..29890aa863569 100644
--- a/clang/unittests/Format/FormatTestJava.cpp
+++ b/clang/unittests/Format/FormatTestJava.cpp
@@ -846,6 +846,13 @@ TEST_F(FormatTestJava, TextBlock) {
 
   verifyNoChange("String name = \"\"\"\n"
                  "              Pat Q. Smith");
+
+  verifyFormat("String foo = \"\"\"\n"
+               "    bar\n"
+               "    \\\\\"\"\";",
+               "String foo=\"\"\"\n"
+               "    bar\n"
+               "    \\\\\"\"\" ;");
 }
 
 TEST_F(FormatTestJava, BreakAfterRecord) {
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp 
b/clang/unittests/Format/TokenAnnotatorTest.cpp
index a04c6bea4d050..b3e127c3eb6ba 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -4006,6 +4006,15 @@ TEST_F(TokenAnnotatorTest, SwitchExpression) {
   EXPECT_TOKEN(Tokens[20], tok::arrow, TT_CaseLabelArrow);
 }
 
+TEST_F(TokenAnnotatorTest, TextBlock) {
+  auto Tokens = annotate("String foo = \"\"\"\n"
+                         "    bar\n"
+                         "    \\\\\"\"\";",
+                         getLLVMStyle(FormatStyle::LK_Java));
+  ASSERT_EQ(Tokens.size(), 6u) << Tokens;
+  EXPECT_TOKEN(Tokens[3], tok::string_literal, TT_StringInConcatenation);
+}
+
 TEST_F(TokenAnnotatorTest, JavaRecord) {
   auto Tokens = annotate("public record MyRecord() {}",
                          getLLVMStyle(FormatStyle::LK_Java));

``````````

</details>


https://github.com/llvm/llvm-project/pull/177736
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to