Make positionToOffset return llvm::Expected<size_t>
authorSimon Marchi <simon.marchi@ericsson.com>
Wed, 21 Mar 2018 14:36:46 +0000 (14:36 +0000)
committerSimon Marchi <simon.marchi@ericsson.com>
Wed, 21 Mar 2018 14:36:46 +0000 (14:36 +0000)
commit766338ad7f7f3acdfdc0df17d9d189a2f6497beb
tree295b15eb08b8ed8a1f7d1edd154ebcb8ab7a1d6c
parent3056a8424e62ca0d087805ae3e9b0d686bac116c
Make positionToOffset return llvm::Expected<size_t>

Summary:

To implement incremental document syncing, we want to verify that the
ranges provided by the front-end are valid.  Currently, positionToOffset
deals with invalid Positions by returning 0 or Code.size(), which are
two valid offsets.  Instead, return an llvm:Expected<size_t> with an
error if the position is invalid.

According to the LSP, if the character value exceeds the number of
characters of the given line, it should default back to the end of the
line.  It makes sense in some contexts to have this behavior, and does
not in other contexts.  The AllowColumnsBeyondLineLength parameter
allows to decide what to do in that case, default back to the end of the
line, or return an error.

Reviewers: ilya-biryukov

Subscribers: klimek, ilya-biryukov, jkorous-apple, ioeric, cfe-commits

Differential Revision: https://reviews.llvm.org/D44673

llvm-svn: 328100
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/clangd/SourceCode.cpp
clang-tools-extra/clangd/SourceCode.h
clang-tools-extra/unittests/clangd/Annotations.cpp
clang-tools-extra/unittests/clangd/CMakeLists.txt
clang-tools-extra/unittests/clangd/SourceCodeTests.cpp