From 624351513903e137de56f7f0b88037fff1ea98bb Mon Sep 17 00:00:00 2001 From: Jan Korous Date: Mon, 23 Apr 2018 15:55:07 +0000 Subject: [PATCH] [clangd][tests] Fix handling of EOF in delimited input Request in delimited input ended by EOF shouldn't be an error state. Comments at the end of test file shouldn't be logged as an error state. Input mirroring should work for the last request in delimited test file. llvm-svn: 330608 --- clang-tools-extra/clangd/JSONRPCDispatcher.cpp | 16 +++++++--------- .../test/clangd/delimited-input-comment-at-the-end.test | 12 ++++++++++++ 2 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 clang-tools-extra/test/clangd/delimited-input-comment-at-the-end.test diff --git a/clang-tools-extra/clangd/JSONRPCDispatcher.cpp b/clang-tools-extra/clangd/JSONRPCDispatcher.cpp index 2cf4da3..1e0f5bc 100644 --- a/clang-tools-extra/clangd/JSONRPCDispatcher.cpp +++ b/clang-tools-extra/clangd/JSONRPCDispatcher.cpp @@ -277,21 +277,19 @@ static llvm::Optional readDelimitedMessage(std::istream &In, 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); } } diff --git a/clang-tools-extra/test/clangd/delimited-input-comment-at-the-end.test b/clang-tools-extra/test/clangd/delimited-input-comment-at-the-end.test new file mode 100644 index 0000000..9c10b92 --- /dev/null +++ b/clang-tools-extra/test/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 -- 2.7.4