aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-03-18 06:23:42 +0000
committerBlaž Hrastnik2021-03-18 06:23:42 +0000
commite9bd9e72c3adf822ae569644dd87f4a5e04df18e (patch)
tree9babbf9742c36aacaae3291d2d36e56c5ae9a4a2
parent175d38c88cf96dfb6744cb260abf2e8f5c1c48b9 (diff)
Pos conversions always operate on whole documents.
-rw-r--r--helix-lsp/src/client.rs1
-rw-r--r--helix-lsp/src/lib.rs13
-rw-r--r--helix-term/src/application.rs2
-rw-r--r--helix-term/src/commands.rs19
4 files changed, 16 insertions, 19 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index 97e5cfad..672247a9 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -297,7 +297,6 @@ impl Client {
}
let old_text = old_text.slice(..);
- let new_text = new_text.slice(..);
while let Some(change) = iter.next() {
let len = match change {
diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs
index 936c897c..64aa38f1 100644
--- a/helix-lsp/src/lib.rs
+++ b/helix-lsp/src/lib.rs
@@ -28,14 +28,14 @@ pub enum Error {
pub mod util {
use super::*;
- use helix_core::{Range, Rope, RopeSlice, Transaction};
+ use helix_core::{Range, Rope, Transaction};
- pub fn lsp_pos_to_pos(doc: RopeSlice, pos: lsp::Position) -> usize {
+ pub fn lsp_pos_to_pos(doc: &Rope, pos: lsp::Position) -> usize {
let line = doc.line_to_char(pos.line as usize);
let line_start = doc.char_to_utf16_cu(line);
doc.utf16_cu_to_char(line_start + pos.character as usize)
}
- pub fn pos_to_lsp_pos(doc: RopeSlice, pos: usize) -> lsp::Position {
+ pub fn pos_to_lsp_pos(doc: &Rope, pos: usize) -> lsp::Position {
let line = doc.char_to_line(pos);
let line_start = doc.char_to_utf16_cu(doc.line_to_char(line));
let col = doc.char_to_utf16_cu(pos) - line_start;
@@ -43,7 +43,7 @@ pub mod util {
lsp::Position::new(line as u32, col as u32)
}
- pub fn range_to_lsp_range(doc: RopeSlice, range: Range) -> lsp::Range {
+ pub fn range_to_lsp_range(doc: &Rope, range: Range) -> lsp::Range {
let start = pos_to_lsp_pos(doc, range.from());
let end = pos_to_lsp_pos(doc, range.to());
@@ -51,7 +51,6 @@ pub mod util {
}
pub fn generate_transaction_from_edits(doc: &Rope, edits: Vec<lsp::TextEdit>) -> Transaction {
- let text = doc.slice(..); // would be unnecessary if Transaction::change took Rope | RopeSlice
Transaction::change(
doc,
edits.into_iter().map(|edit| {
@@ -62,8 +61,8 @@ pub mod util {
None
};
- let start = lsp_pos_to_pos(text, edit.range.start);
- let end = lsp_pos_to_pos(text, edit.range.end);
+ let start = lsp_pos_to_pos(doc, edit.range.start);
+ let end = lsp_pos_to_pos(doc, edit.range.end);
(start, end, replacement)
}),
)
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index ef33db16..48d7186f 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -134,7 +134,7 @@ impl Application {
.find(|view| view.doc.path() == path.as_ref());
if let Some(view) = view {
- let doc = view.doc.text().slice(..);
+ let doc = view.doc.text();
let diagnostics = params
.diagnostics
.into_iter()
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 97edaf66..291f8577 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -912,7 +912,7 @@ fn goto(cx: &mut Context, locations: Vec<lsp::Location>) {
cx.editor.open(PathBuf::from(location.uri.path()));
let doc = cx.doc();
let definition_pos = location.range.start;
- let new_pos = helix_lsp::util::lsp_pos_to_pos(doc.text().slice(..), definition_pos);
+ let new_pos = helix_lsp::util::lsp_pos_to_pos(doc.text(), definition_pos);
doc.set_selection(Selection::point(new_pos));
}
[] => (), // maybe show user message that no definition was found?
@@ -928,8 +928,7 @@ fn goto(cx: &mut Context, locations: Vec<lsp::Location>) {
editor.open(PathBuf::from(item.uri.path()));
let mut doc = &mut editor.view_mut().doc;
let definition_pos = item.range.start;
- let new_pos =
- helix_lsp::util::lsp_pos_to_pos(doc.text().slice(..), definition_pos);
+ let new_pos = helix_lsp::util::lsp_pos_to_pos(doc.text(), definition_pos);
doc.set_selection(Selection::point(new_pos));
},
);
@@ -946,7 +945,7 @@ pub fn goto_definition(cx: &mut Context) {
};
// TODO: blocking here is not ideal
- let pos = helix_lsp::util::pos_to_lsp_pos(doc.text().slice(..), doc.selection().cursor());
+ let pos = helix_lsp::util::pos_to_lsp_pos(doc.text(), doc.selection().cursor());
// TODO: handle fails
let res =
@@ -962,7 +961,7 @@ pub fn goto_type_definition(cx: &mut Context) {
};
// TODO: blocking here is not ideal
- let pos = helix_lsp::util::pos_to_lsp_pos(doc.text().slice(..), doc.selection().cursor());
+ let pos = helix_lsp::util::pos_to_lsp_pos(doc.text(), doc.selection().cursor());
// TODO: handle fails
let res = smol::block_on(language_server.goto_type_definition(doc.identifier(), pos))
@@ -978,7 +977,7 @@ pub fn goto_implementation(cx: &mut Context) {
};
// TODO: blocking here is not ideal
- let pos = helix_lsp::util::pos_to_lsp_pos(doc.text().slice(..), doc.selection().cursor());
+ let pos = helix_lsp::util::pos_to_lsp_pos(doc.text(), doc.selection().cursor());
// TODO: handle fails
let res = smol::block_on(language_server.goto_implementation(doc.identifier(), pos))
@@ -994,7 +993,7 @@ pub fn goto_reference(cx: &mut Context) {
};
// TODO: blocking here is not ideal
- let pos = helix_lsp::util::pos_to_lsp_pos(doc.text().slice(..), doc.selection().cursor());
+ let pos = helix_lsp::util::pos_to_lsp_pos(doc.text(), doc.selection().cursor());
// TODO: handle fails
let res =
@@ -1223,7 +1222,7 @@ pub fn format_selections(cx: &mut Context) {
.selection()
.ranges()
.iter()
- .map(|range| helix_lsp::util::range_to_lsp_range(doc.text().slice(..), *range))
+ .map(|range| helix_lsp::util::range_to_lsp_range(doc.text(), *range))
.collect();
for range in ranges {
@@ -1333,7 +1332,7 @@ pub fn completion(cx: &mut Context) {
};
// TODO: blocking here is not ideal
- let pos = helix_lsp::util::pos_to_lsp_pos(doc.text().slice(..), doc.selection().cursor());
+ let pos = helix_lsp::util::pos_to_lsp_pos(doc.text(), doc.selection().cursor());
// TODO: handle fails
@@ -1435,7 +1434,7 @@ pub fn hover(cx: &mut Context) {
// TODO: blocking here is not ideal, make commands async fn?
// not like we can process additional input meanwhile though
- let pos = helix_lsp::util::pos_to_lsp_pos(doc.text().slice(..), doc.selection().cursor());
+ let pos = helix_lsp::util::pos_to_lsp_pos(doc.text(), doc.selection().cursor());
// TODO: handle fails
let res = smol::block_on(language_server.text_document_hover(doc.identifier(), pos))