<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Oct 22, 2018 at 1:32 PM Daan De Meyer <<a href="mailto:daan.j.demeyer@gmail.com">daan.j.demeyer@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><br></div><div>My only concern is that we'll break clients that 
make the equal and opposite mistake (sending byte lengths instead of 
UTF-16 lengths).</div><div>Maybe we should also downgrade this error to a
 log message, since we can presumably trust the length from the string. 
What do you think?</div></blockquote><div><br></div><div>I think the check is useful just to verify if the client and server are on the same page so I'm partial to option 2 as well. Downgrading to a log message avoids outright breaking existing clients so that seems like the way to go. As soon as Github is back up I'll make an issue asking to clarify the unit of rangeLength in the lsp repository as well.</div></div></div></blockquote><div>Thanks!</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>Assuming we go with option 2 (including downgrading to an error message), I have two more questions:</div><div><br></div><div>1. Which header should I put the utf16Len function in (from SourceCode.cpp)? I tried searching for an existing header with UTF functions but I didn't immediately find one.</div></div></div></blockquote><div>I think SourceCode.h is a reasonable fit within clangd. (There are some UTF libraries in llvm/support, but it's not clear this belongs there and it'd be a bunch of work).</div><div><br></div><div>Consider renaming it something like `lspLength()` or so and keeping the bits about UTF-16 in the function comment.</div><div>That's kind of a low-level detail.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>2. How do I go about downgrading to a log message? Do I just write to errs()?<br></div></div></div></blockquote><div>We use the log() functions in clangd/Logger.h. (Abstracts the destination, handles locking, does formatting).</div><div><br></div><div>This one is scary+rare enough it should probably be an error log.</div><div>The functions use formatv syntax, so something like:</div><div>  elog("bad TextDocumentContentChangeEvent: rangeLength={0} but computed length {1} for {2}",</div><div>       *change.rangeLength, Len, change.text);</div><div><br></div><div>Cheers, Sam</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div>
</blockquote></div></div>