diff options
Diffstat (limited to 'clang-tools-extra/clangd/SourceCode.h')
| -rw-r--r-- | clang-tools-extra/clangd/SourceCode.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/clang-tools-extra/clangd/SourceCode.h b/clang-tools-extra/clangd/SourceCode.h index 2bf5d0ec2f4..6a2efd9a56f 100644 --- a/clang-tools-extra/clangd/SourceCode.h +++ b/clang-tools-extra/clangd/SourceCode.h @@ -22,12 +22,27 @@ class SourceManager; namespace clangd { /// Turn a [line, column] pair into an offset in Code. -size_t positionToOffset(llvm::StringRef Code, Position P); +/// +/// If the character value is greater than the line length, the behavior depends +/// on AllowColumnsBeyondLineLength: +/// +/// - if true: default back to the end of the line +/// - if false: return an error +/// +/// If the line number is greater than the number of lines in the document, +/// always return an error. +/// +/// The returned value is in the range [0, Code.size()]. +llvm::Expected<size_t> +positionToOffset(llvm::StringRef Code, Position P, + bool AllowColumnsBeyondLineLength = true); /// Turn an offset in Code into a [line, column] pair. +/// FIXME: This should return an error if the offset is invalid. Position offsetToPosition(llvm::StringRef Code, size_t Offset); /// Turn a SourceLocation into a [line, column] pair. +/// FIXME: This should return an error if the location is invalid. Position sourceLocToPosition(const SourceManager &SM, SourceLocation Loc); // Converts a half-open clang source range to an LSP range. |

