aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2021-02-12 18:24:10 +0000
committerAleksey Kladov <[email protected]>2021-02-16 16:17:32 +0000
commit2cb4ac9eb4cb02e7d14ec50a9e7d8e9fe49a4ec1 (patch)
treed70cb9c9c61359ba0b171e3e38267e42bcb00b0b
parentcc49502ab47bcd20c90589226282b8f3c3df5190 (diff)
Prepare for utf-8 offsets
-rw-r--r--crates/ide/src/lib.rs2
-rw-r--r--crates/ide_db/src/line_index.rs12
-rw-r--r--crates/ide_db/src/line_index/tests.rs28
-rw-r--r--crates/rust-analyzer/src/cli/analysis_bench.rs4
-rw-r--r--crates/rust-analyzer/src/cli/analysis_stats.rs8
-rw-r--r--crates/rust-analyzer/src/from_proto.rs4
-rw-r--r--crates/rust-analyzer/src/to_proto.rs2
7 files changed, 30 insertions, 30 deletions
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 89e7bef7d..68756f78a 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -95,7 +95,7 @@ pub use ide_db::{
95 }, 95 },
96 call_info::CallInfo, 96 call_info::CallInfo,
97 label::Label, 97 label::Label,
98 line_index::{LineCol, LineIndex}, 98 line_index::{LineColUtf16, LineIndex},
99 search::{ReferenceAccess, SearchScope}, 99 search::{ReferenceAccess, SearchScope},
100 source_change::{FileSystemEdit, SourceChange}, 100 source_change::{FileSystemEdit, SourceChange},
101 symbol_index::Query, 101 symbol_index::Query,
diff --git a/crates/ide_db/src/line_index.rs b/crates/ide_db/src/line_index.rs
index 41226305e..490c172e3 100644
--- a/crates/ide_db/src/line_index.rs
+++ b/crates/ide_db/src/line_index.rs
@@ -15,11 +15,11 @@ pub struct LineIndex {
15} 15}
16 16
17#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] 17#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
18pub struct LineCol { 18pub struct LineColUtf16 {
19 /// Zero-based 19 /// Zero-based
20 pub line: u32, 20 pub line: u32,
21 /// Zero-based 21 /// Zero-based
22 pub col_utf16: u32, 22 pub col: u32,
23} 23}
24 24
25#[derive(Clone, Debug, Hash, PartialEq, Eq)] 25#[derive(Clone, Debug, Hash, PartialEq, Eq)]
@@ -88,17 +88,17 @@ impl LineIndex {
88 LineIndex { newlines, utf16_lines } 88 LineIndex { newlines, utf16_lines }
89 } 89 }
90 90
91 pub fn line_col(&self, offset: TextSize) -> LineCol { 91 pub fn line_col(&self, offset: TextSize) -> LineColUtf16 {
92 let line = partition_point(&self.newlines, |&it| it <= offset) - 1; 92 let line = partition_point(&self.newlines, |&it| it <= offset) - 1;
93 let line_start_offset = self.newlines[line]; 93 let line_start_offset = self.newlines[line];
94 let col = offset - line_start_offset; 94 let col = offset - line_start_offset;
95 95
96 LineCol { line: line as u32, col_utf16: self.utf8_to_utf16_col(line as u32, col) as u32 } 96 LineColUtf16 { line: line as u32, col: self.utf8_to_utf16_col(line as u32, col) as u32 }
97 } 97 }
98 98
99 pub fn offset(&self, line_col: LineCol) -> TextSize { 99 pub fn offset(&self, line_col: LineColUtf16) -> TextSize {
100 //FIXME: return Result 100 //FIXME: return Result
101 let col = self.utf16_to_utf8_col(line_col.line, line_col.col_utf16); 101 let col = self.utf16_to_utf8_col(line_col.line, line_col.col);
102 self.newlines[line_col.line as usize] + col 102 self.newlines[line_col.line as usize] + col
103 } 103 }
104 104
diff --git a/crates/ide_db/src/line_index/tests.rs b/crates/ide_db/src/line_index/tests.rs
index 05f7484e8..1a109654e 100644
--- a/crates/ide_db/src/line_index/tests.rs
+++ b/crates/ide_db/src/line_index/tests.rs
@@ -4,23 +4,23 @@ use super::*;
4fn test_line_index() { 4fn test_line_index() {
5 let text = "hello\nworld"; 5 let text = "hello\nworld";
6 let index = LineIndex::new(text); 6 let index = LineIndex::new(text);
7 assert_eq!(index.line_col(0.into()), LineCol { line: 0, col_utf16: 0 }); 7 assert_eq!(index.line_col(0.into()), LineColUtf16 { line: 0, col: 0 });
8 assert_eq!(index.line_col(1.into()), LineCol { line: 0, col_utf16: 1 }); 8 assert_eq!(index.line_col(1.into()), LineColUtf16 { line: 0, col: 1 });
9 assert_eq!(index.line_col(5.into()), LineCol { line: 0, col_utf16: 5 }); 9 assert_eq!(index.line_col(5.into()), LineColUtf16 { line: 0, col: 5 });
10 assert_eq!(index.line_col(6.into()), LineCol { line: 1, col_utf16: 0 }); 10 assert_eq!(index.line_col(6.into()), LineColUtf16 { line: 1, col: 0 });
11 assert_eq!(index.line_col(7.into()), LineCol { line: 1, col_utf16: 1 }); 11 assert_eq!(index.line_col(7.into()), LineColUtf16 { line: 1, col: 1 });
12 assert_eq!(index.line_col(8.into()), LineCol { line: 1, col_utf16: 2 }); 12 assert_eq!(index.line_col(8.into()), LineColUtf16 { line: 1, col: 2 });
13 assert_eq!(index.line_col(10.into()), LineCol { line: 1, col_utf16: 4 }); 13 assert_eq!(index.line_col(10.into()), LineColUtf16 { line: 1, col: 4 });
14 assert_eq!(index.line_col(11.into()), LineCol { line: 1, col_utf16: 5 }); 14 assert_eq!(index.line_col(11.into()), LineColUtf16 { line: 1, col: 5 });
15 assert_eq!(index.line_col(12.into()), LineCol { line: 1, col_utf16: 6 }); 15 assert_eq!(index.line_col(12.into()), LineColUtf16 { line: 1, col: 6 });
16 16
17 let text = "\nhello\nworld"; 17 let text = "\nhello\nworld";
18 let index = LineIndex::new(text); 18 let index = LineIndex::new(text);
19 assert_eq!(index.line_col(0.into()), LineCol { line: 0, col_utf16: 0 }); 19 assert_eq!(index.line_col(0.into()), LineColUtf16 { line: 0, col: 0 });
20 assert_eq!(index.line_col(1.into()), LineCol { line: 1, col_utf16: 0 }); 20 assert_eq!(index.line_col(1.into()), LineColUtf16 { line: 1, col: 0 });
21 assert_eq!(index.line_col(2.into()), LineCol { line: 1, col_utf16: 1 }); 21 assert_eq!(index.line_col(2.into()), LineColUtf16 { line: 1, col: 1 });
22 assert_eq!(index.line_col(6.into()), LineCol { line: 1, col_utf16: 5 }); 22 assert_eq!(index.line_col(6.into()), LineColUtf16 { line: 1, col: 5 });
23 assert_eq!(index.line_col(7.into()), LineCol { line: 2, col_utf16: 0 }); 23 assert_eq!(index.line_col(7.into()), LineColUtf16 { line: 2, col: 0 });
24} 24}
25 25
26#[test] 26#[test]
diff --git a/crates/rust-analyzer/src/cli/analysis_bench.rs b/crates/rust-analyzer/src/cli/analysis_bench.rs
index 6735b6388..edf12faa4 100644
--- a/crates/rust-analyzer/src/cli/analysis_bench.rs
+++ b/crates/rust-analyzer/src/cli/analysis_bench.rs
@@ -5,7 +5,7 @@ use std::{env, path::PathBuf, str::FromStr, sync::Arc, time::Instant};
5use anyhow::{bail, format_err, Result}; 5use anyhow::{bail, format_err, Result};
6use hir::PrefixKind; 6use hir::PrefixKind;
7use ide::{ 7use ide::{
8 Analysis, AnalysisHost, Change, CompletionConfig, DiagnosticsConfig, FilePosition, LineCol, 8 Analysis, AnalysisHost, Change, CompletionConfig, DiagnosticsConfig, FilePosition, LineColUtf16,
9}; 9};
10use ide_db::{ 10use ide_db::{
11 base_db::{ 11 base_db::{
@@ -97,7 +97,7 @@ impl BenchCmd {
97 let offset = host 97 let offset = host
98 .analysis() 98 .analysis()
99 .file_line_index(file_id)? 99 .file_line_index(file_id)?
100 .offset(LineCol { line: pos.line - 1, col_utf16: pos.column }); 100 .offset(LineColUtf16 { line: pos.line - 1, col: pos.column });
101 let file_position = FilePosition { file_id, offset }; 101 let file_position = FilePosition { file_id, offset };
102 102
103 if is_completion { 103 if is_completion {
diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs
index 3417af687..6d6f398f4 100644
--- a/crates/rust-analyzer/src/cli/analysis_stats.rs
+++ b/crates/rust-analyzer/src/cli/analysis_stats.rs
@@ -218,9 +218,9 @@ impl AnalysisStatsCmd {
218 bar.println(format!( 218 bar.println(format!(
219 "{}:{}-{}:{}: {}", 219 "{}:{}-{}:{}: {}",
220 start.line + 1, 220 start.line + 1,
221 start.col_utf16, 221 start.col,
222 end.line + 1, 222 end.line + 1,
223 end.col_utf16, 223 end.col,
224 ty.display(db) 224 ty.display(db)
225 )); 225 ));
226 } else { 226 } else {
@@ -250,9 +250,9 @@ impl AnalysisStatsCmd {
250 "{} {}:{}-{}:{}: Expected {}, got {}", 250 "{} {}:{}-{}:{}: Expected {}, got {}",
251 path, 251 path,
252 start.line + 1, 252 start.line + 1,
253 start.col_utf16, 253 start.col,
254 end.line + 1, 254 end.line + 1,
255 end.col_utf16, 255 end.col,
256 mismatch.expected.display(db), 256 mismatch.expected.display(db),
257 mismatch.actual.display(db) 257 mismatch.actual.display(db)
258 )); 258 ));
diff --git a/crates/rust-analyzer/src/from_proto.rs b/crates/rust-analyzer/src/from_proto.rs
index 6676eebf4..82e7cfa81 100644
--- a/crates/rust-analyzer/src/from_proto.rs
+++ b/crates/rust-analyzer/src/from_proto.rs
@@ -1,7 +1,7 @@
1//! Conversion lsp_types types to rust-analyzer specific ones. 1//! Conversion lsp_types types to rust-analyzer specific ones.
2use std::convert::TryFrom; 2use std::convert::TryFrom;
3 3
4use ide::{Annotation, AnnotationKind, AssistKind, LineCol, LineIndex}; 4use ide::{Annotation, AnnotationKind, AssistKind, LineColUtf16, LineIndex};
5use ide_db::base_db::{FileId, FilePosition, FileRange}; 5use ide_db::base_db::{FileId, FilePosition, FileRange};
6use syntax::{TextRange, TextSize}; 6use syntax::{TextRange, TextSize};
7use vfs::AbsPathBuf; 7use vfs::AbsPathBuf;
@@ -18,7 +18,7 @@ pub(crate) fn vfs_path(url: &lsp_types::Url) -> Result<vfs::VfsPath> {
18} 18}
19 19
20pub(crate) fn offset(line_index: &LineIndex, position: lsp_types::Position) -> TextSize { 20pub(crate) fn offset(line_index: &LineIndex, position: lsp_types::Position) -> TextSize {
21 let line_col = LineCol { line: position.line as u32, col_utf16: position.character as u32 }; 21 let line_col = LineColUtf16 { line: position.line as u32, col: position.character as u32 };
22 line_index.offset(line_col) 22 line_index.offset(line_col)
23} 23}
24 24
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs
index 8a2b4d9bd..599b5207c 100644
--- a/crates/rust-analyzer/src/to_proto.rs
+++ b/crates/rust-analyzer/src/to_proto.rs
@@ -22,7 +22,7 @@ use crate::{
22 22
23pub(crate) fn position(line_index: &LineIndex, offset: TextSize) -> lsp_types::Position { 23pub(crate) fn position(line_index: &LineIndex, offset: TextSize) -> lsp_types::Position {
24 let line_col = line_index.line_col(offset); 24 let line_col = line_index.line_col(offset);
25 lsp_types::Position::new(line_col.line, line_col.col_utf16) 25 lsp_types::Position::new(line_col.line, line_col.col)
26} 26}
27 27
28pub(crate) fn range(line_index: &LineIndex, range: TextRange) -> lsp_types::Range { 28pub(crate) fn range(line_index: &LineIndex, range: TextRange) -> lsp_types::Range {