about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAriel Davis <ariel.z.davis@icloud.com>2023-05-06 00:57:57 -0700
committerAriel Davis <ariel.z.davis@icloud.com>2023-05-06 00:57:57 -0700
commit02e8bb0c6e3854485e72f896f889673a4f3ad762 (patch)
tree035b5094dadc84551576b593c30823353e89ff23
parent9de213c4fe10a001d1f55c76f157c1d9173694bc (diff)
downloadrust-02e8bb0c6e3854485e72f896f889673a4f3ad762.tar.gz
rust-02e8bb0c6e3854485e72f896f889673a4f3ad762.zip
Return Option
-rw-r--r--crates/ide-db/src/tests/line_index.rs4
-rw-r--r--crates/rust-analyzer/src/from_proto.rs5
-rw-r--r--crates/rust-analyzer/src/to_proto.rs2
-rw-r--r--lib/line-index/src/lib.rs8
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<WideLineCol> {
         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<LineCol> {
         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.