on master help sign in
Extract a lsp position helper
commita449156702112a1ee1d11ef2f5495067d801deef authorBlaž Hrastnik <blaz@mxxn.io> dateFri 18 Feb 2022, 14:33 (5 years ago) parent5af9136
2 files changed+24−50
helix-term/src/commands/lsp.rs+10−50 helix-view/src/document.rs+14
helix-term/src/commands/lsp.rs+10−50
@@ -1,6 +1,6 @@
11use helix_lsp::{
22 block_on, lsp,
3− util::{lsp_pos_to_pos, lsp_range_to_range, pos_to_lsp_pos, range_to_lsp_range},
3+ util::{lsp_pos_to_pos, lsp_range_to_range, range_to_lsp_range},
44 OffsetEncoding,
55};
66
@@ -495,13 +495,7 @@ pub fn goto_definition(cx: &mut Context) {
495495 let language_server = language_server!(doc);
496496 let offset_encoding = language_server.offset_encoding();
497497
498− let pos = pos_to_lsp_pos(
499− doc.text(),
500− doc.selection(view.id)
501− .primary()
502− .cursor(doc.text().slice(..)),
503− offset_encoding,
504− );
498+ let pos = doc.position(view.id, offset_encoding);
505499
506500 let future = language_server.goto_definition(doc.identifier(), pos, None);
507501
@@ -519,13 +513,7 @@ pub fn goto_type_definition(cx: &mut Context) {
519513 let language_server = language_server!(doc);
520514 let offset_encoding = language_server.offset_encoding();
521515
522− let pos = pos_to_lsp_pos(
523− doc.text(),
524− doc.selection(view.id)
525− .primary()
526− .cursor(doc.text().slice(..)),
527− offset_encoding,
528− );
516+ let pos = doc.position(view.id, offset_encoding);
529517
530518 let future = language_server.goto_type_definition(doc.identifier(), pos, None);
531519
@@ -543,13 +531,7 @@ pub fn goto_implementation(cx: &mut Context) {
543531 let language_server = language_server!(doc);
544532 let offset_encoding = language_server.offset_encoding();
545533
546− let pos = pos_to_lsp_pos(
547− doc.text(),
548− doc.selection(view.id)
549− .primary()
550− .cursor(doc.text().slice(..)),
551− offset_encoding,
552− );
534+ let pos = doc.position(view.id, offset_encoding);
553535
554536 let future = language_server.goto_implementation(doc.identifier(), pos, None);
555537
@@ -567,13 +549,7 @@ pub fn goto_reference(cx: &mut Context) {
567549 let language_server = language_server!(doc);
568550 let offset_encoding = language_server.offset_encoding();
569551
570− let pos = pos_to_lsp_pos(
571− doc.text(),
572− doc.selection(view.id)
573− .primary()
574− .cursor(doc.text().slice(..)),
575− offset_encoding,
576− );
552+ let pos = doc.position(view.id, offset_encoding);
577553
578554 let future = language_server.goto_reference(doc.identifier(), pos, None);
579555
@@ -589,14 +565,9 @@ pub fn goto_reference(cx: &mut Context) {
589565pub fn signature_help(cx: &mut Context) {
590566 let (view, doc) = current!(cx.editor);
591567 let language_server = language_server!(doc);
568+ let offset_encoding = language_server.offset_encoding();
592569
593− let pos = pos_to_lsp_pos(
594− doc.text(),
595− doc.selection(view.id)
596− .primary()
597− .cursor(doc.text().slice(..)),
598− language_server.offset_encoding(),
599− );
570+ let pos = doc.position(view.id, offset_encoding);
600571
601572 let future = language_server.text_document_signature_help(doc.identifier(), pos, None);
602573
@@ -622,16 +593,11 @@ pub fn signature_help(cx: &mut Context) {
622593pub fn hover(cx: &mut Context) {
623594 let (view, doc) = current!(cx.editor);
624595 let language_server = language_server!(doc);
596+ let offset_encoding = language_server.offset_encoding();
625597
626598 // TODO: factor out a doc.position_identifier() that returns lsp::TextDocumentPositionIdentifier
627599
628− let pos = pos_to_lsp_pos(
629− doc.text(),
630− doc.selection(view.id)
631− .primary()
632− .cursor(doc.text().slice(..)),
633− language_server.offset_encoding(),
634− );
600+ let pos = doc.position(view.id, offset_encoding);
635601
636602 let future = language_server.text_document_hover(doc.identifier(), pos, None);
637603
@@ -688,13 +654,7 @@ pub fn rename_symbol(cx: &mut Context) {
688654 let language_server = language_server!(doc);
689655 let offset_encoding = language_server.offset_encoding();
690656
691− let pos = pos_to_lsp_pos(
692− doc.text(),
693− doc.selection(view.id)
694− .primary()
695− .cursor(doc.text().slice(..)),
696− offset_encoding,
697− );
657+ let pos = doc.position(view.id, offset_encoding);
698658
699659 let task = language_server.rename_symbol(doc.identifier(), pos, input.to_string());
700660 let edits = block_on(task).unwrap_or_default();
helix-view/src/document.rs+14
@@ -922,6 +922,20 @@ impl Document {
922922 lsp::VersionedTextDocumentIdentifier::new(self.url().unwrap(), self.version)
923923 }
924924
925+ pub fn position(
926+ &self,
927+ view_id: ViewId,
928+ offset_encoding: helix_lsp::OffsetEncoding,
929+ ) -> lsp::Position {
930+ let text = self.text();
931+
932+ helix_lsp::util::pos_to_lsp_pos(
933+ text,
934+ self.selection(view_id).primary().cursor(text.slice(..)),
935+ offset_encoding,
936+ )
937+ }
938+
925939 #[inline]
926940 pub fn diagnostics(&self) -> &[Diagnostic] {
927941 &self.diagnostics