From 6b2da4e5474ec064e44b7cf19523de1bab72ba27 Mon Sep 17 00:00:00 2001 From: Bernardo Date: Sun, 23 Dec 2018 15:49:14 +0100 Subject: use new translate_offset_with_edit for TryConvWith doc comments --- crates/ra_lsp_server/src/conv.rs | 37 +------------------------------------ 1 file changed, 1 insertion(+), 36 deletions(-) (limited to 'crates/ra_lsp_server/src') diff --git a/crates/ra_lsp_server/src/conv.rs b/crates/ra_lsp_server/src/conv.rs index 051f1f995..63827aeea 100644 --- a/crates/ra_lsp_server/src/conv.rs +++ b/crates/ra_lsp_server/src/conv.rs @@ -3,7 +3,7 @@ use languageserver_types::{ TextDocumentItem, TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier, InsertTextFormat, }; use ra_analysis::{FileId, FileSystemEdit, SourceChange, SourceFileEdit, FilePosition, CompletionItem, CompletionItemKind, InsertText}; -use ra_editor::{LineCol, LineIndex}; +use ra_editor::{LineCol, LineIndex, translate_offset_with_edit}; use ra_text_edit::{AtomTextEdit, TextEdit}; use ra_syntax::{SyntaxKind, TextRange, TextUnit}; @@ -261,41 +261,6 @@ impl TryConvWith for SourceChange { } } -// HACK: we should translate offset to line/column using linde_index *with edits applied*. -// A naive version of this function would be to apply `edits` to the original text, -// construct a new line index and use that, but it would be slow. -// -// Writing fast & correct version is issue #105, let's use a quick hack in the meantime -fn translate_offset_with_edit( - pre_edit_index: &LineIndex, - offset: TextUnit, - edits: &[AtomTextEdit], -) -> LineCol { - let fallback = pre_edit_index.line_col(offset); - let edit = match edits.first() { - None => return fallback, - Some(edit) => edit, - }; - let end_offset = edit.delete.start() + TextUnit::of_str(&edit.insert); - if !(edit.delete.start() <= offset && offset <= end_offset) { - return fallback; - } - let rel_offset = offset - edit.delete.start(); - let in_edit_line_col = LineIndex::new(&edit.insert).line_col(rel_offset); - let edit_line_col = pre_edit_index.line_col(edit.delete.start()); - if in_edit_line_col.line == 0 { - LineCol { - line: edit_line_col.line, - 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_utf16: in_edit_line_col.col_utf16, - } - } -} - impl TryConvWith for SourceFileEdit { type Ctx = ServerWorld; type Output = TextDocumentEdit; -- cgit v1.2.3