jkorous-apple created this revision.
Herald added subscribers: cfe-commits, MaskRay, ioeric, ilya-biryukov.

Request in delimited input ended by EOF shouldn't be an error state.
Comments should be allowed at the end of test files.
Input mirroring should work for the last request in delimited test file.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D45620

Files:
  JSONRPCDispatcher.cpp
  clangd/delimited-input-comment-at-the-end.test


Index: clangd/delimited-input-comment-at-the-end.test
===================================================================
--- /dev/null
+++ clangd/delimited-input-comment-at-the-end.test
@@ -0,0 +1,12 @@
+# RUN: clangd -input-style=delimited -run-synchronously -input-mirror-file %t 
< %s
+# RUN: grep '{"jsonrpc":"2.0","id":3,"method":"exit"}' %t
+#
+# RUN: clangd -lit-test -input-mirror-file %t < %s
+# RUN: grep '{"jsonrpc":"2.0","id":3,"method":"exit"}' %t
+#
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
+---
+{"jsonrpc":"2.0","id":3,"method":"shutdown"}
+---
+{"jsonrpc":"2.0","id":3,"method":"exit"}
+# comment at the end
Index: JSONRPCDispatcher.cpp
===================================================================
--- JSONRPCDispatcher.cpp
+++ JSONRPCDispatcher.cpp
@@ -277,21 +277,19 @@
     if (LineRef.startswith("#")) // comment
       continue;
 
-    bool IsDelim = LineRef.find_first_not_of('-') == llvm::StringRef::npos;
-    if (!IsDelim) // Line is part of a JSON message.
-      JSON += Line;
-    if (IsDelim) {
-      Out.mirrorInput(
-          llvm::formatv("Content-Length: {0}\r\n\r\n{1}", JSON.size(), JSON));
-      return std::move(JSON);
-    }
+    // found a delimiter
+    if (LineRef.find_first_not_of('-') == llvm::StringRef::npos)
+      break;
+
+    JSON += Line;
   }
 
   if (In.bad()) {
     log("Input error while reading message!");
     return llvm::None;
   } else {
-    log("Input message terminated by EOF");
+    Out.mirrorInput(
+        llvm::formatv("Content-Length: {0}\r\n\r\n{1}", JSON.size(), JSON));
     return std::move(JSON);
   }
 }


Index: clangd/delimited-input-comment-at-the-end.test
===================================================================
--- /dev/null
+++ clangd/delimited-input-comment-at-the-end.test
@@ -0,0 +1,12 @@
+# RUN: clangd -input-style=delimited -run-synchronously -input-mirror-file %t < %s
+# RUN: grep '{"jsonrpc":"2.0","id":3,"method":"exit"}' %t
+#
+# RUN: clangd -lit-test -input-mirror-file %t < %s
+# RUN: grep '{"jsonrpc":"2.0","id":3,"method":"exit"}' %t
+#
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
+---
+{"jsonrpc":"2.0","id":3,"method":"shutdown"}
+---
+{"jsonrpc":"2.0","id":3,"method":"exit"}
+# comment at the end
Index: JSONRPCDispatcher.cpp
===================================================================
--- JSONRPCDispatcher.cpp
+++ JSONRPCDispatcher.cpp
@@ -277,21 +277,19 @@
     if (LineRef.startswith("#")) // comment
       continue;
 
-    bool IsDelim = LineRef.find_first_not_of('-') == llvm::StringRef::npos;
-    if (!IsDelim) // Line is part of a JSON message.
-      JSON += Line;
-    if (IsDelim) {
-      Out.mirrorInput(
-          llvm::formatv("Content-Length: {0}\r\n\r\n{1}", JSON.size(), JSON));
-      return std::move(JSON);
-    }
+    // found a delimiter
+    if (LineRef.find_first_not_of('-') == llvm::StringRef::npos)
+      break;
+
+    JSON += Line;
   }
 
   if (In.bad()) {
     log("Input error while reading message!");
     return llvm::None;
   } else {
-    log("Input message terminated by EOF");
+    Out.mirrorInput(
+        llvm::formatv("Content-Length: {0}\r\n\r\n{1}", JSON.size(), JSON));
     return std::move(JSON);
   }
 }
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to