Rename col to col_utf16

This commit is contained in:
Adolfo Ochagavía 2018-11-16 12:02:45 +01:00
parent 136d1864bc
commit bccbee5ba3
2 changed files with 28 additions and 23 deletions

View file

@ -11,7 +11,7 @@ pub struct LineIndex {
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct LineCol {
pub line: u32,
pub col: u32,
pub col_utf16: u32,
}
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
@ -75,13 +75,13 @@ impl LineIndex {
LineCol {
line: line as u32,
col: self.utf8_to_utf16_col(line as u32, col) as u32,
col_utf16: self.utf8_to_utf16_col(line as u32, col) as u32,
}
}
pub fn offset(&self, line_col: LineCol) -> TextUnit {
//TODO: return Result
let col = self.utf16_to_utf8_col(line_col.line, line_col.col);
let col = self.utf16_to_utf8_col(line_col.line, line_col.col_utf16);
self.newlines[line_col.line as usize] + col
}
@ -126,23 +126,23 @@ impl LineIndex {
fn test_line_index() {
let text = "hello\nworld";
let index = LineIndex::new(text);
assert_eq!(index.line_col(0.into()), LineCol { line: 0, col: 0 });
assert_eq!(index.line_col(1.into()), LineCol { line: 0, col: 1 });
assert_eq!(index.line_col(5.into()), LineCol { line: 0, col: 5 });
assert_eq!(index.line_col(6.into()), LineCol { line: 1, col: 0 });
assert_eq!(index.line_col(7.into()), LineCol { line: 1, col: 1 });
assert_eq!(index.line_col(8.into()), LineCol { line: 1, col: 2 });
assert_eq!(index.line_col(10.into()), LineCol { line: 1, col: 4 });
assert_eq!(index.line_col(11.into()), LineCol { line: 1, col: 5 });
assert_eq!(index.line_col(12.into()), LineCol { line: 1, col: 6 });
assert_eq!(index.line_col(0.into()), LineCol { line: 0, col_utf16: 0 });
assert_eq!(index.line_col(1.into()), LineCol { line: 0, col_utf16: 1 });
assert_eq!(index.line_col(5.into()), LineCol { line: 0, col_utf16: 5 });
assert_eq!(index.line_col(6.into()), LineCol { line: 1, col_utf16: 0 });
assert_eq!(index.line_col(7.into()), LineCol { line: 1, col_utf16: 1 });
assert_eq!(index.line_col(8.into()), LineCol { line: 1, col_utf16: 2 });
assert_eq!(index.line_col(10.into()), LineCol { line: 1, col_utf16: 4 });
assert_eq!(index.line_col(11.into()), LineCol { line: 1, col_utf16: 5 });
assert_eq!(index.line_col(12.into()), LineCol { line: 1, col_utf16: 6 });
let text = "\nhello\nworld";
let index = LineIndex::new(text);
assert_eq!(index.line_col(0.into()), LineCol { line: 0, col: 0 });
assert_eq!(index.line_col(1.into()), LineCol { line: 1, col: 0 });
assert_eq!(index.line_col(2.into()), LineCol { line: 1, col: 1 });
assert_eq!(index.line_col(6.into()), LineCol { line: 1, col: 5 });
assert_eq!(index.line_col(7.into()), LineCol { line: 2, col: 0 });
assert_eq!(index.line_col(0.into()), LineCol { line: 0, col_utf16: 0 });
assert_eq!(index.line_col(1.into()), LineCol { line: 1, col_utf16: 0 });
assert_eq!(index.line_col(2.into()), LineCol { line: 1, col_utf16: 1 });
assert_eq!(index.line_col(6.into()), LineCol { line: 1, col_utf16: 5 });
assert_eq!(index.line_col(7.into()), LineCol { line: 2, col_utf16: 0 });
}
#[cfg(test)]

View file

@ -51,7 +51,7 @@ impl ConvWith for Position {
fn conv_with(self, line_index: &LineIndex) -> TextUnit {
let line_col = LineCol {
line: self.line as u32,
col: (self.character as u32).into(),
col_utf16: self.character as u32,
};
line_index.offset(line_col)
}
@ -63,7 +63,10 @@ impl ConvWith for TextUnit {
fn conv_with(self, line_index: &LineIndex) -> Position {
let line_col = line_index.line_col(self);
Position::new(u64::from(line_col.line), u64::from(u32::from(line_col.col)))
Position::new(
u64::from(line_col.line),
u64::from(u32::from(line_col.col_utf16)),
)
}
}
@ -201,8 +204,10 @@ impl TryConvWith for SourceChange {
.map(|it| it.edits.as_slice())
.unwrap_or(&[]);
let line_col = translate_offset_with_edit(&*line_index, pos.offset, edits);
let position =
Position::new(u64::from(line_col.line), u64::from(u32::from(line_col.col)));
let position = Position::new(
u64::from(line_col.line),
u64::from(u32::from(line_col.col_utf16)),
);
Some(TextDocumentPositionParams {
text_document: TextDocumentIdentifier::new(pos.file_id.try_conv_with(world)?),
position,
@ -245,12 +250,12 @@ fn translate_offset_with_edit(
if in_edit_line_col.line == 0 {
LineCol {
line: edit_line_col.line,
col: edit_line_col.col + in_edit_line_col.col,
col_utf16: edit_line_col.col_utf16 + in_edit_line_col.col_utf16,
}
} else {
LineCol {
line: edit_line_col.line + in_edit_line_col.line,
col: in_edit_line_col.col,
col_utf16: in_edit_line_col.col_utf16,
}
}
}