[clang-tools-extra] r315287 - Revert "Revert r315214 since diff -Z isn't portable, this is breaking:"
Ilya Biryukov via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 23 07:09:16 PDT 2017
Missed that, will do, thanks.
On Wed, Oct 11, 2017 at 1:39 AM, Bruno Cardoso Lopes <
bruno.cardoso at gmail.com> wrote:
> On Tue, Oct 10, 2017 at 2:08 AM, Ilya Biryukov via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
> > Author: ibiryukov
> > Date: Tue Oct 10 02:08:47 2017
> > New Revision: 315287
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=315287&view=rev
> > Log:
> > Revert "Revert r315214 since diff -Z isn't portable, this is breaking:"
> >
> > This reverts commit r315242 and restores r315214.
> >
> > To fix original failure, replaced non-portable `diff -Z` with portable
> > alternative: `diff -b`.
> >
> > Added:
> > clang-tools-extra/trunk/test/clangd/input-mirror.test
> > Modified:
> > clang-tools-extra/trunk/clangd/JSONRPCDispatcher.cpp
> > clang-tools-extra/trunk/clangd/JSONRPCDispatcher.h
> > clang-tools-extra/trunk/clangd/tool/ClangdMain.cpp
> >
> > Modified: clang-tools-extra/trunk/clangd/JSONRPCDispatcher.cpp
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/
> JSONRPCDispatcher.cpp?rev=315287&r1=315286&r2=315287&view=diff
> > ============================================================
> ==================
> > --- clang-tools-extra/trunk/clangd/JSONRPCDispatcher.cpp (original)
> > +++ clang-tools-extra/trunk/clangd/JSONRPCDispatcher.cpp Tue Oct 10
> 02:08:47 2017
> > @@ -37,6 +37,14 @@ void JSONOutput::log(const Twine &Messag
> > Logs.flush();
> > }
> >
> > +void JSONOutput::mirrorInput(const Twine &Message) {
> > + if (!InputMirror)
> > + return;
> > +
> > + *InputMirror << Message;
> > + InputMirror->flush();
> > +}
> > +
> > void Handler::handleMethod(llvm::yaml::MappingNode *Params, StringRef
> ID) {
> > Output.log("Method ignored.\n");
> > // Return that this method is unsupported.
> > @@ -147,6 +155,14 @@ void clangd::runLanguageServerLoop(std::
> > continue;
> > }
> >
> > + Out.mirrorInput(Line);
> > + // Mirror '\n' that gets consumed by std::getline, but is not
> included in
> > + // the resulting Line.
> > + // Note that '\r' is part of Line, so we don't need to mirror it
> > + // separately.
> > + if (!In.eof())
> > + Out.mirrorInput("\n");
> > +
> > llvm::StringRef LineRef(Line);
> >
> > // We allow YAML-style comments in headers. Technically this
> isn't part
> > @@ -163,9 +179,8 @@ void clangd::runLanguageServerLoop(std::
> > if (LineRef.consume_front("Content-Length: ")) {
> > if (ContentLength != 0) {
> > Out.log("Warning: Duplicate Content-Length header received. "
> > - "The previous value for this message ("
> > - + std::to_string(ContentLength)
> > - + ") was ignored.\n");
> > + "The previous value for this message (" +
> > + std::to_string(ContentLength) + ") was ignored.\n");
> > }
> >
> > llvm::getAsUnsignedInteger(LineRef.trim(), 0, ContentLength);
> > @@ -185,15 +200,13 @@ void clangd::runLanguageServerLoop(std::
> > // parser.
> > std::vector<char> JSON(ContentLength + 1, '\0');
> > In.read(JSON.data(), ContentLength);
> > + Out.mirrorInput(StringRef(JSON.data(), In.gcount()));
> >
> > // If the stream is aborted before we read ContentLength bytes, In
> > // will have eofbit and failbit set.
> > if (!In) {
> > - Out.log("Input was aborted. Read only "
> > - + std::to_string(In.gcount())
> > - + " bytes of expected "
> > - + std::to_string(ContentLength)
> > - + ".\n");
> > + Out.log("Input was aborted. Read only " +
> std::to_string(In.gcount()) +
> > + " bytes of expected " + std::to_string(ContentLength) +
> ".\n");
> > break;
> > }
> >
> > @@ -209,8 +222,8 @@ void clangd::runLanguageServerLoop(std::
> > if (IsDone)
> > break;
> > } else {
> > - Out.log( "Warning: Missing Content-Length header, or message has
> zero "
> > - "length.\n" );
> > + Out.log("Warning: Missing Content-Length header, or message has
> zero "
> > + "length.\n");
> > }
> > }
> > }
> >
> > Modified: clang-tools-extra/trunk/clangd/JSONRPCDispatcher.h
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/
> JSONRPCDispatcher.h?rev=315287&r1=315286&r2=315287&view=diff
> > ============================================================
> ==================
> > --- clang-tools-extra/trunk/clangd/JSONRPCDispatcher.h (original)
> > +++ clang-tools-extra/trunk/clangd/JSONRPCDispatcher.h Tue Oct 10
> 02:08:47 2017
> > @@ -24,8 +24,9 @@ namespace clangd {
> > /// them.
> > class JSONOutput : public Logger {
> > public:
> > - JSONOutput(llvm::raw_ostream &Outs, llvm::raw_ostream &Logs)
> > - : Outs(Outs), Logs(Logs) {}
> > + JSONOutput(llvm::raw_ostream &Outs, llvm::raw_ostream &Logs,
> > + llvm::raw_ostream *InputMirror = nullptr)
> > + : Outs(Outs), Logs(Logs), InputMirror(InputMirror) {}
> >
> > /// Emit a JSONRPC message.
> > void writeMessage(const Twine &Message);
> > @@ -33,9 +34,15 @@ public:
> > /// Write to the logging stream.
> > void log(const Twine &Message) override;
> >
> > + /// Mirror \p Message into InputMirror stream. Does nothing if
> InputMirror is
> > + /// null.
> > + /// Unlike other methods of JSONOutput, mirrorInput is not
> thread-safe.
> > + void mirrorInput(const Twine &Message);
> > +
> > private:
> > llvm::raw_ostream &Outs;
> > llvm::raw_ostream &Logs;
> > + llvm::raw_ostream *InputMirror;
> >
> > std::mutex StreamMutex;
> > };
> >
> > Modified: clang-tools-extra/trunk/clangd/tool/ClangdMain.cpp
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/clangd/tool/ClangdMain.cpp?rev=315287&r1=315286&r2=315287&view=diff
> > ============================================================
> ==================
> > --- clang-tools-extra/trunk/clangd/tool/ClangdMain.cpp (original)
> > +++ clang-tools-extra/trunk/clangd/tool/ClangdMain.cpp Tue Oct 10
> 02:08:47 2017
> > @@ -9,10 +9,12 @@
> >
> > #include "ClangdLSPServer.h"
> > #include "JSONRPCDispatcher.h"
> > +#include "Path.h"
> > #include "llvm/Support/CommandLine.h"
> > #include "llvm/Support/FileSystem.h"
> > #include "llvm/Support/Path.h"
> > #include "llvm/Support/Program.h"
> > +#include "llvm/Support/raw_ostream.h"
> > #include <iostream>
> > #include <memory>
> > #include <string>
> > @@ -43,11 +45,17 @@ static llvm::cl::opt<bool> RunSynchronou
> > llvm::cl::desc("Parse on main thread. If set, -j is ignored"),
> > llvm::cl::init(false), llvm::cl::Hidden);
> >
> > -static llvm::cl::opt<std::string>
> > +static llvm::cl::opt<Path>
> > ResourceDir("resource-dir",
> > llvm::cl::desc("Directory for system clang headers"),
> > llvm::cl::init(""), llvm::cl::Hidden);
> >
> > +static llvm::cl::opt<Path> InputMirrorFile(
> > + "input-mirror-file",
> > + llvm::cl::desc(
> > + "Mirror all LSP input to the specified file. Useful for
> debugging."),
> > + llvm::cl::init(""), llvm::cl::Hidden);
> > +
> > int main(int argc, char *argv[]) {
> > llvm::cl::ParseCommandLineOptions(argc, argv, "clangd");
> >
> > @@ -63,9 +71,21 @@ int main(int argc, char *argv[]) {
> > WorkerThreadsCount = 0;
> >
> > /// Validate command line arguments.
> > + llvm::Optional<llvm::raw_fd_ostream> InputMirrorStream;
> > + if (!InputMirrorFile.empty()) {
> > + std::error_code EC;
> > + InputMirrorStream.emplace(InputMirrorFile, /*ref*/ EC,
> llvm::sys::fs::F_RW);
> > + if (EC) {
> > + InputMirrorStream.reset();
> > + llvm::errs() << "Error while opening an input mirror file: "
> > + << EC.message();
> > + }
> > + }
> > +
> > llvm::raw_ostream &Outs = llvm::outs();
> > llvm::raw_ostream &Logs = llvm::errs();
> > - JSONOutput Out(Outs, Logs);
> > + JSONOutput Out(Outs, Logs,
> > + InputMirrorStream ? InputMirrorStream.getPointer() :
> nullptr);
> >
> > // If --compile-commands-dir arg was invoked, check value and
> override default
> > // path.
> >
> > Added: clang-tools-extra/trunk/test/clangd/input-mirror.test
> > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/test/clangd/input-mirror.test?rev=315287&view=auto
> > ============================================================
> ==================
> > --- clang-tools-extra/trunk/test/clangd/input-mirror.test (added)
> > +++ clang-tools-extra/trunk/test/clangd/input-mirror.test Tue Oct 10
> 02:08:47 2017
> > @@ -0,0 +1,154 @@
> > +# RUN: clangd -run-synchronously -input-mirror-file %t < %s
> > +# Note that we have to use '-Z' as -input-mirror-file does not have a
> newline at the end of file.
>
> Maybe also update the comment above?
>
> --
> Bruno Cardoso Lopes
> http://www.brunocardoso.cc
>
--
Regards,
Ilya Biryukov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20171023/e8c456d5/attachment-0001.html>
More information about the cfe-commits
mailing list