about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--crates/rust-analyzer/src/diagnostics/to_proto.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/crates/rust-analyzer/src/diagnostics/to_proto.rs b/crates/rust-analyzer/src/diagnostics/to_proto.rs
index dd59923cb34..9d229c36f5a 100644
--- a/crates/rust-analyzer/src/diagnostics/to_proto.rs
+++ b/crates/rust-analyzer/src/diagnostics/to_proto.rs
@@ -63,8 +63,14 @@ fn location(
 
     // FIXME: this doesn't handle UTF16 offsets correctly
     let range = lsp_types::Range::new(
-        lsp_types::Position::new(span.line_start as u32 - 1, span.column_start as u32 - 1),
-        lsp_types::Position::new(span.line_end as u32 - 1, span.column_end as u32 - 1),
+        lsp_types::Position::new(
+            (span.line_start as u32).saturating_sub(1),
+            (span.column_start as u32).saturating_sub(1),
+        ),
+        lsp_types::Position::new(
+            (span.line_end as u32).saturating_sub(1),
+            (span.column_end as u32).saturating_sub(1),
+        ),
     );
 
     lsp_types::Location { uri, range }