summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/Protocol.cpp
diff options
context:
space:
mode:
authorSam McCall <sam.mccall@gmail.com>2019-03-27 17:47:49 +0000
committerSam McCall <sam.mccall@gmail.com>2019-03-27 17:47:49 +0000
commita69698f45fadefd2cabba8d5aa1a8e93463a6d49 (patch)
tree4052f9f6efd3a86a95ca6f019328d6b8ac0f50f5 /clang-tools-extra/clangd/Protocol.cpp
parent381188f1f39ea8980c23aecb3a0695425aaa99cc (diff)
downloadbcm5719-llvm-a69698f45fadefd2cabba8d5aa1a8e93463a6d49.tar.gz
bcm5719-llvm-a69698f45fadefd2cabba8d5aa1a8e93463a6d49.zip
[clangd] Support utf-8 offsets (rather than utf-16) as a protocol extension
Summary: Still some pieces to go here: unit tests for new SourceCode functionality and a command-line flag to force utf-8 mode. But wanted to get early feedback. Reviewers: hokein Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, kadircet, jdoerfert, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D58275 llvm-svn: 357102
Diffstat (limited to 'clang-tools-extra/clangd/Protocol.cpp')
-rw-r--r--clang-tools-extra/clangd/Protocol.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/Protocol.cpp b/clang-tools-extra/clangd/Protocol.cpp
index dfd130a77a5..e11c621aaa3 100644
--- a/clang-tools-extra/clangd/Protocol.cpp
+++ b/clang-tools-extra/clangd/Protocol.cpp
@@ -16,6 +16,7 @@
#include "clang/Basic/LLVM.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/JSON.h"
@@ -311,6 +312,11 @@ bool fromJSON(const llvm::json::Value &Params, ClientCapabilities &R) {
}
}
}
+ if (auto *OffsetEncoding = O->get("offsetEncoding")) {
+ R.offsetEncoding.emplace();
+ if (!fromJSON(*OffsetEncoding, *R.offsetEncoding))
+ return false;
+ }
return true;
}
@@ -932,5 +938,26 @@ bool fromJSON(const llvm::json::Value &Params, ReferenceParams &R) {
return fromJSON(Params, Base);
}
+llvm::json::Value toJSON(const OffsetEncoding &OE) {
+ switch (OE) {
+ case OffsetEncoding::UTF8:
+ return "utf-8";
+ case OffsetEncoding::UTF16:
+ return "utf-16";
+ case OffsetEncoding::UnsupportedEncoding:
+ return "unknown";
+ }
+}
+bool fromJSON(const llvm::json::Value &V, OffsetEncoding &OE) {
+ auto Str = V.getAsString();
+ if (!Str)
+ return false;
+ OE = llvm::StringSwitch<OffsetEncoding>(*Str)
+ .Case("utf-8", OffsetEncoding::UTF8)
+ .Case("utf-16", OffsetEncoding::UTF16)
+ .Default(OffsetEncoding::UnsupportedEncoding);
+ return true;
+}
+
} // namespace clangd
} // namespace clang
OpenPOWER on IntegriCloud