hokein accepted this revision.
hokein added a comment.
This revision is now accepted and ready to land.

Cool, the code looks good to me (just a few nits), thanks for the descriptive 
comments!

> This seems likely to cause problems with editors that have the same bug, and
>  treat the protocol as if columns are UTF-8 bytes. But we can find and fix 
> those.

VSCode is fine I think, but we need to fix our internal ycm vim integration.



================
Comment at: clangd/SourceCode.cpp:25
+// Returns true if CB returned true, false if we hit the end of string.
+template <typename Callback>
+bool iterateCodepoints(StringRef U8, const Callback &CB) {
----------------
Can we make it `static`?

The callback type is function<int, int>, the reason why using template here is 
mainly to save some keystroke? 


================
Comment at: clangd/SourceCode.cpp:53
+// to UTF-8, and returns the length in bytes.
+static size_t measureUTF16(StringRef U8, int Units, bool &Valid) {
+  size_t Result = 0;
----------------
nit: consider naming the parameter `U16Units`?


================
Comment at: clangd/SourceCode.cpp:72
+  size_t Count = 0;
+  iterateCodepoints(U8, [&](int U8Len, int U16Len) {
+    Count += U16Len;
----------------
Maybe add an `assume` to ensure `iterateCodepoints` always return false (reach 
the end of the U8)?


================
Comment at: clangd/SourceCode.cpp:137
+    P.character =
+        utf16Len(Code.substr(LocInfo.second - ColumnInBytes, ColumnInBytes));
+  }
----------------
nit: it took me a while to understand what the sub-expression 
`Code.substr(LocInfo.second - ColumnInBytes, ColumnInBytes)` does, maybe 
abstract it out with a descriptive name? Also it is not straight-forward to 
understand what `LocInfo.second` is without navigating to 
`getDecomposedSpellingLoc`.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D46035



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to