From 02e8bb0c6e3854485e72f896f889673a4f3ad762 Mon Sep 17 00:00:00 2001 From: Ariel Davis Date: Sat, 6 May 2023 00:57:57 -0700 Subject: [PATCH] Return Option --- crates/ide-db/src/tests/line_index.rs | 4 ++-- crates/rust-analyzer/src/from_proto.rs | 5 ++++- crates/rust-analyzer/src/to_proto.rs | 2 +- lib/line-index/src/lib.rs | 8 ++++---- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/crates/ide-db/src/tests/line_index.rs b/crates/ide-db/src/tests/line_index.rs index c41b0de5633..6b49bb2631c 100644 --- a/crates/ide-db/src/tests/line_index.rs +++ b/crates/ide-db/src/tests/line_index.rs @@ -29,8 +29,8 @@ fn test_every_chars() { assert_eq!(got_lin_col, lin_col); for (enc, col) in [(WideEncoding::Utf16, col_utf16), (WideEncoding::Utf32, col_utf32)] { - let wide_lin_col = line_index.to_wide(enc, lin_col); - let got_lin_col = line_index.to_utf8(enc, wide_lin_col); + let wide_lin_col = line_index.to_wide(enc, lin_col).unwrap(); + let got_lin_col = line_index.to_utf8(enc, wide_lin_col).unwrap(); assert_eq!(got_lin_col, lin_col); assert_eq!(wide_lin_col.col, col) } diff --git a/crates/rust-analyzer/src/from_proto.rs b/crates/rust-analyzer/src/from_proto.rs index 44891fad1a9..cd74a5500d0 100644 --- a/crates/rust-analyzer/src/from_proto.rs +++ b/crates/rust-analyzer/src/from_proto.rs @@ -31,7 +31,10 @@ pub(crate) fn offset(line_index: &LineIndex, position: lsp_types::Position) -> R PositionEncoding::Utf8 => LineCol { line: position.line, col: position.character }, PositionEncoding::Wide(enc) => { let line_col = WideLineCol { line: position.line, col: position.character }; - line_index.index.to_utf8(enc, line_col) + line_index + .index + .to_utf8(enc, line_col) + .ok_or_else(|| format_err!("Invalid wide col offset"))? } }; let text_size = diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 60292d2ad18..b9d853e202a 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs @@ -32,7 +32,7 @@ pub(crate) fn position(line_index: &LineIndex, offset: TextSize) -> lsp_types::P match line_index.encoding { PositionEncoding::Utf8 => lsp_types::Position::new(line_col.line, line_col.col), PositionEncoding::Wide(enc) => { - let line_col = line_index.index.to_wide(enc, line_col); + let line_col = line_index.index.to_wide(enc, line_col).unwrap(); lsp_types::Position::new(line_col.line, line_col.col) } } diff --git a/lib/line-index/src/lib.rs b/lib/line-index/src/lib.rs index 39ae99fbd69..3c10fbe20c5 100644 --- a/lib/line-index/src/lib.rs +++ b/lib/line-index/src/lib.rs @@ -156,15 +156,15 @@ impl LineIndex { } /// Transforms the `LineCol` with the given `WideEncoding` into a `WideLineCol`. - pub fn to_wide(&self, enc: WideEncoding, line_col: LineCol) -> WideLineCol { + pub fn to_wide(&self, enc: WideEncoding, line_col: LineCol) -> Option { let col = self.utf8_to_wide_col(enc, line_col.line, line_col.col.into()); - WideLineCol { line: line_col.line, col: col as u32 } + Some(WideLineCol { line: line_col.line, col: col as u32 }) } /// Transforms the `WideLineCol` with the given `WideEncoding` into a `LineCol`. - pub fn to_utf8(&self, enc: WideEncoding, line_col: WideLineCol) -> LineCol { + pub fn to_utf8(&self, enc: WideEncoding, line_col: WideLineCol) -> Option { let col = self.wide_to_utf8_col(enc, line_col.line, line_col.col); - LineCol { line: line_col.line, col: col.into() } + Some(LineCol { line: line_col.line, col: col.into() }) } /// Returns an iterator over the ranges for the lines.