Return Option

This commit is contained in:
Ariel Davis 2023-05-06 00:57:57 -07:00
parent 9de213c4fe
commit 02e8bb0c6e
4 changed files with 11 additions and 8 deletions

View File

@ -29,8 +29,8 @@ fn test_every_chars() {
assert_eq!(got_lin_col, lin_col); assert_eq!(got_lin_col, lin_col);
for (enc, col) in [(WideEncoding::Utf16, col_utf16), (WideEncoding::Utf32, col_utf32)] { for (enc, col) in [(WideEncoding::Utf16, col_utf16), (WideEncoding::Utf32, col_utf32)] {
let wide_lin_col = line_index.to_wide(enc, 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); let got_lin_col = line_index.to_utf8(enc, wide_lin_col).unwrap();
assert_eq!(got_lin_col, lin_col); assert_eq!(got_lin_col, lin_col);
assert_eq!(wide_lin_col.col, col) assert_eq!(wide_lin_col.col, col)
} }

View File

@ -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::Utf8 => LineCol { line: position.line, col: position.character },
PositionEncoding::Wide(enc) => { PositionEncoding::Wide(enc) => {
let line_col = WideLineCol { line: position.line, col: position.character }; 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 = let text_size =

View File

@ -32,7 +32,7 @@ pub(crate) fn position(line_index: &LineIndex, offset: TextSize) -> lsp_types::P
match line_index.encoding { match line_index.encoding {
PositionEncoding::Utf8 => lsp_types::Position::new(line_col.line, line_col.col), PositionEncoding::Utf8 => lsp_types::Position::new(line_col.line, line_col.col),
PositionEncoding::Wide(enc) => { 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) lsp_types::Position::new(line_col.line, line_col.col)
} }
} }

View File

@ -156,15 +156,15 @@ impl LineIndex {
} }
/// Transforms the `LineCol` with the given `WideEncoding` into a `WideLineCol`. /// 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()); 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`. /// 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); 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. /// Returns an iterator over the ranges for the lines.