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);
}
}
--- /dev/null
+# RUN: clangd -input-style=delimited -run-synchronously -input-mirror-file %t < %s\r
+# RUN: grep '{"jsonrpc":"2.0","id":3,"method":"exit"}' %t\r
+#\r
+# RUN: clangd -lit-test -input-mirror-file %t < %s\r
+# RUN: grep '{"jsonrpc":"2.0","id":3,"method":"exit"}' %t\r
+#\r
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}\r
+---\r
+{"jsonrpc":"2.0","id":3,"method":"shutdown"}\r
+---\r
+{"jsonrpc":"2.0","id":3,"method":"exit"}\r
+# comment at the end\r