[clangd] Introduced Logger interface.
Summary: This fixes a bunch of logging-related FIXMEs.
Reviewers: bkramer, krasimir, malaperle
Reviewed By: malaperle
Subscribers: malaperle, klimek, cfe-commits, mgorny
Differential Revision: https://reviews.llvm.org/D37972
llvm-svn: 313730
diff --git a/clang-tools-extra/clangd/Protocol.cpp b/clang-tools-extra/clangd/Protocol.cpp
index 57d3bee..d9da386 100644
--- a/clang-tools-extra/clangd/Protocol.cpp
+++ b/clang-tools-extra/clangd/Protocol.cpp
@@ -13,7 +13,7 @@
//===----------------------------------------------------------------------===//
#include "Protocol.h"
-#include "JSONRPCDispatcher.h"
+#include "Logger.h"
#include "clang/Basic/LLVM.h"
#include "llvm/ADT/SmallString.h"
@@ -21,11 +21,13 @@
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
+
+using namespace clang;
using namespace clang::clangd;
namespace {
-void logIgnoredField(llvm::StringRef KeyValue, JSONOutput &Output) {
- Output.log(llvm::formatv("Ignored unknown field \"{0}\"\n", KeyValue));
+void logIgnoredField(llvm::StringRef KeyValue, clangd::Logger &Logger) {
+ Logger.log(llvm::formatv("Ignored unknown field \"{0}\"\n", KeyValue));
}
} // namespace
@@ -65,7 +67,7 @@
llvm::Optional<TextDocumentIdentifier>
TextDocumentIdentifier::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
TextDocumentIdentifier Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -84,14 +86,14 @@
} else if (KeyValue == "version") {
// FIXME: parse version, but only for VersionedTextDocumentIdentifiers.
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
}
llvm::Optional<Position> Position::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
Position Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -117,7 +119,7 @@
return llvm::None;
Result.character = Val;
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -131,7 +133,7 @@
}
llvm::Optional<Range> Range::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
Range Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -147,17 +149,17 @@
llvm::SmallString<10> Storage;
if (KeyValue == "start") {
- auto Parsed = Position::parse(Value, Output);
+ auto Parsed = Position::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.start = std::move(*Parsed);
} else if (KeyValue == "end") {
- auto Parsed = Position::parse(Value, Output);
+ auto Parsed = Position::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.end = std::move(*Parsed);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -180,7 +182,7 @@
}
llvm::Optional<TextDocumentItem>
-TextDocumentItem::parse(llvm::yaml::MappingNode *Params, JSONOutput &Output) {
+TextDocumentItem::parse(llvm::yaml::MappingNode *Params, clangd::Logger &Logger) {
TextDocumentItem Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -207,14 +209,14 @@
} else if (KeyValue == "text") {
Result.text = Value->getValue(Storage);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
}
llvm::Optional<Metadata> Metadata::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
Metadata Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -237,14 +239,14 @@
Result.extraFlags.push_back(Node->getValue(Storage));
}
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
}
llvm::Optional<TextEdit> TextEdit::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
TextEdit Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -260,7 +262,7 @@
auto *Map = dyn_cast<llvm::yaml::MappingNode>(Value);
if (!Map)
return llvm::None;
- auto Parsed = Range::parse(Map, Output);
+ auto Parsed = Range::parse(Map, Logger);
if (!Parsed)
return llvm::None;
Result.range = std::move(*Parsed);
@@ -270,7 +272,7 @@
return llvm::None;
Result.newText = Node->getValue(Storage);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -286,7 +288,7 @@
llvm::Optional<DidOpenTextDocumentParams>
DidOpenTextDocumentParams::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
DidOpenTextDocumentParams Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -302,17 +304,17 @@
llvm::SmallString<10> Storage;
if (KeyValue == "textDocument") {
- auto Parsed = TextDocumentItem::parse(Value, Output);
+ auto Parsed = TextDocumentItem::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.textDocument = std::move(*Parsed);
} else if (KeyValue == "metadata") {
- auto Parsed = Metadata::parse(Value, Output);
+ auto Parsed = Metadata::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.metadata = std::move(*Parsed);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -320,7 +322,7 @@
llvm::Optional<DidCloseTextDocumentParams>
DidCloseTextDocumentParams::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
DidCloseTextDocumentParams Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -335,12 +337,12 @@
auto *Map = dyn_cast<llvm::yaml::MappingNode>(Value);
if (!Map)
return llvm::None;
- auto Parsed = TextDocumentIdentifier::parse(Map, Output);
+ auto Parsed = TextDocumentIdentifier::parse(Map, Logger);
if (!Parsed)
return llvm::None;
Result.textDocument = std::move(*Parsed);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -348,7 +350,7 @@
llvm::Optional<DidChangeTextDocumentParams>
DidChangeTextDocumentParams::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
DidChangeTextDocumentParams Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -364,7 +366,7 @@
auto *Map = dyn_cast<llvm::yaml::MappingNode>(Value);
if (!Map)
return llvm::None;
- auto Parsed = TextDocumentIdentifier::parse(Map, Output);
+ auto Parsed = TextDocumentIdentifier::parse(Map, Logger);
if (!Parsed)
return llvm::None;
Result.textDocument = std::move(*Parsed);
@@ -376,13 +378,13 @@
auto *I = dyn_cast<llvm::yaml::MappingNode>(&Item);
if (!I)
return llvm::None;
- auto Parsed = TextDocumentContentChangeEvent::parse(I, Output);
+ auto Parsed = TextDocumentContentChangeEvent::parse(I, Logger);
if (!Parsed)
return llvm::None;
Result.contentChanges.push_back(std::move(*Parsed));
}
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -390,7 +392,7 @@
llvm::Optional<TextDocumentContentChangeEvent>
TextDocumentContentChangeEvent::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
TextDocumentContentChangeEvent Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -408,14 +410,14 @@
if (KeyValue == "text") {
Result.text = Value->getValue(Storage);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
}
llvm::Optional<FormattingOptions>
-FormattingOptions::parse(llvm::yaml::MappingNode *Params, JSONOutput &Output) {
+FormattingOptions::parse(llvm::yaml::MappingNode *Params, clangd::Logger &Logger) {
FormattingOptions Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -448,7 +450,7 @@
}
Result.insertSpaces = Val;
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -463,7 +465,7 @@
llvm::Optional<DocumentRangeFormattingParams>
DocumentRangeFormattingParams::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
DocumentRangeFormattingParams Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -479,22 +481,22 @@
llvm::SmallString<10> Storage;
if (KeyValue == "textDocument") {
- auto Parsed = TextDocumentIdentifier::parse(Value, Output);
+ auto Parsed = TextDocumentIdentifier::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.textDocument = std::move(*Parsed);
} else if (KeyValue == "range") {
- auto Parsed = Range::parse(Value, Output);
+ auto Parsed = Range::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.range = std::move(*Parsed);
} else if (KeyValue == "options") {
- auto Parsed = FormattingOptions::parse(Value, Output);
+ auto Parsed = FormattingOptions::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.options = std::move(*Parsed);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -502,7 +504,7 @@
llvm::Optional<DocumentOnTypeFormattingParams>
DocumentOnTypeFormattingParams::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
DocumentOnTypeFormattingParams Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -527,22 +529,22 @@
if (!Value)
return llvm::None;
if (KeyValue == "textDocument") {
- auto Parsed = TextDocumentIdentifier::parse(Value, Output);
+ auto Parsed = TextDocumentIdentifier::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.textDocument = std::move(*Parsed);
} else if (KeyValue == "position") {
- auto Parsed = Position::parse(Value, Output);
+ auto Parsed = Position::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.position = std::move(*Parsed);
} else if (KeyValue == "options") {
- auto Parsed = FormattingOptions::parse(Value, Output);
+ auto Parsed = FormattingOptions::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.options = std::move(*Parsed);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -550,7 +552,7 @@
llvm::Optional<DocumentFormattingParams>
DocumentFormattingParams::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
DocumentFormattingParams Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -566,24 +568,24 @@
llvm::SmallString<10> Storage;
if (KeyValue == "textDocument") {
- auto Parsed = TextDocumentIdentifier::parse(Value, Output);
+ auto Parsed = TextDocumentIdentifier::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.textDocument = std::move(*Parsed);
} else if (KeyValue == "options") {
- auto Parsed = FormattingOptions::parse(Value, Output);
+ auto Parsed = FormattingOptions::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.options = std::move(*Parsed);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
}
llvm::Optional<Diagnostic> Diagnostic::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
Diagnostic Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -599,7 +601,7 @@
dyn_cast_or_null<llvm::yaml::MappingNode>(NextKeyValue.getValue());
if (!Value)
return llvm::None;
- auto Parsed = Range::parse(Value, Output);
+ auto Parsed = Range::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.range = std::move(*Parsed);
@@ -623,14 +625,14 @@
return llvm::None;
Result.message = Value->getValue(Storage);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
}
llvm::Optional<CodeActionContext>
-CodeActionContext::parse(llvm::yaml::MappingNode *Params, JSONOutput &Output) {
+CodeActionContext::parse(llvm::yaml::MappingNode *Params, clangd::Logger &Logger) {
CodeActionContext Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -650,20 +652,20 @@
auto *I = dyn_cast<llvm::yaml::MappingNode>(&Item);
if (!I)
return llvm::None;
- auto Parsed = Diagnostic::parse(I, Output);
+ auto Parsed = Diagnostic::parse(I, Logger);
if (!Parsed)
return llvm::None;
Result.diagnostics.push_back(std::move(*Parsed));
}
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
}
llvm::Optional<CodeActionParams>
-CodeActionParams::parse(llvm::yaml::MappingNode *Params, JSONOutput &Output) {
+CodeActionParams::parse(llvm::yaml::MappingNode *Params, clangd::Logger &Logger) {
CodeActionParams Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -679,22 +681,22 @@
llvm::SmallString<10> Storage;
if (KeyValue == "textDocument") {
- auto Parsed = TextDocumentIdentifier::parse(Value, Output);
+ auto Parsed = TextDocumentIdentifier::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.textDocument = std::move(*Parsed);
} else if (KeyValue == "range") {
- auto Parsed = Range::parse(Value, Output);
+ auto Parsed = Range::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.range = std::move(*Parsed);
} else if (KeyValue == "context") {
- auto Parsed = CodeActionContext::parse(Value, Output);
+ auto Parsed = CodeActionContext::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.context = std::move(*Parsed);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;
@@ -702,7 +704,7 @@
llvm::Optional<TextDocumentPositionParams>
TextDocumentPositionParams::parse(llvm::yaml::MappingNode *Params,
- JSONOutput &Output) {
+ clangd::Logger &Logger) {
TextDocumentPositionParams Result;
for (auto &NextKeyValue : *Params) {
auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
@@ -718,17 +720,17 @@
llvm::SmallString<10> Storage;
if (KeyValue == "textDocument") {
- auto Parsed = TextDocumentIdentifier::parse(Value, Output);
+ auto Parsed = TextDocumentIdentifier::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.textDocument = std::move(*Parsed);
} else if (KeyValue == "position") {
- auto Parsed = Position::parse(Value, Output);
+ auto Parsed = Position::parse(Value, Logger);
if (!Parsed)
return llvm::None;
Result.position = std::move(*Parsed);
} else {
- logIgnoredField(KeyValue, Output);
+ logIgnoredField(KeyValue, Logger);
}
}
return Result;