on master help sign in
Add `work_done_token` as parameter to lsp methods
a6d3958wojciechkepka
helix-lsp/src/client.rs+28−24
@@ -465,6 +465,7 @@ impl Client {
465 &self,
465 &self,
466 text_document: lsp::TextDocumentIdentifier,
466 text_document: lsp::TextDocumentIdentifier,
467 position: lsp::Position,
467 position: lsp::Position,
468+ work_done_token: Option<lsp::ProgressToken>,
468 ) -> impl Future<Output = Result<Value>> {
469 ) -> impl Future<Output = Result<Value>> {
469 // ) -> Result<Vec<lsp::CompletionItem>> {
470 // ) -> Result<Vec<lsp::CompletionItem>> {
470 let params = lsp::CompletionParams {
471 let params = lsp::CompletionParams {
@@ -473,9 +474,7 @@ impl Client {
473 position,
474 position,
474 },
475 },
475 // TODO: support these tokens by async receiving and updating the choice list
476 // TODO: support these tokens by async receiving and updating the choice list
476− work_done_progress_params: lsp::WorkDoneProgressParams {
477+ work_done_progress_params: lsp::WorkDoneProgressParams { work_done_token },
477− work_done_token: None,
478− },
479 partial_result_params: lsp::PartialResultParams {
478 partial_result_params: lsp::PartialResultParams {
480 partial_result_token: None,
479 partial_result_token: None,
481 },
480 },
@@ -490,15 +489,14 @@ impl Client {
490 &self,
489 &self,
491 text_document: lsp::TextDocumentIdentifier,
490 text_document: lsp::TextDocumentIdentifier,
492 position: lsp::Position,
491 position: lsp::Position,
492+ work_done_token: Option<lsp::ProgressToken>,
493 ) -> impl Future<Output = Result<Value>> {
493 ) -> impl Future<Output = Result<Value>> {
494 let params = lsp::SignatureHelpParams {
494 let params = lsp::SignatureHelpParams {
495 text_document_position_params: lsp::TextDocumentPositionParams {
495 text_document_position_params: lsp::TextDocumentPositionParams {
496 text_document,
496 text_document,
497 position,
497 position,
498 },
498 },
499− work_done_progress_params: lsp::WorkDoneProgressParams {
499+ work_done_progress_params: lsp::WorkDoneProgressParams { work_done_token },
500− work_done_token: None,
501− },
502 context: None,
500 context: None,
503 // lsp::SignatureHelpContext
501 // lsp::SignatureHelpContext
504 };
502 };
@@ -510,15 +508,14 @@ impl Client {
510 &self,
508 &self,
511 text_document: lsp::TextDocumentIdentifier,
509 text_document: lsp::TextDocumentIdentifier,
512 position: lsp::Position,
510 position: lsp::Position,
511+ work_done_token: Option<lsp::ProgressToken>,
513 ) -> impl Future<Output = Result<Value>> {
512 ) -> impl Future<Output = Result<Value>> {
514 let params = lsp::HoverParams {
513 let params = lsp::HoverParams {
515 text_document_position_params: lsp::TextDocumentPositionParams {
514 text_document_position_params: lsp::TextDocumentPositionParams {
516 text_document,
515 text_document,
517 position,
516 position,
518 },
517 },
519− work_done_progress_params: lsp::WorkDoneProgressParams {
518+ work_done_progress_params: lsp::WorkDoneProgressParams { work_done_token },
520− work_done_token: None,
521− },
522 // lsp::SignatureHelpContext
519 // lsp::SignatureHelpContext
523 };
520 };
524
521
@@ -531,6 +528,7 @@ impl Client {
531 &self,
528 &self,
532 text_document: lsp::TextDocumentIdentifier,
529 text_document: lsp::TextDocumentIdentifier,
533 options: lsp::FormattingOptions,
530 options: lsp::FormattingOptions,
531+ work_done_token: Option<lsp::ProgressToken>,
534 ) -> anyhow::Result<Vec<lsp::TextEdit>> {
532 ) -> anyhow::Result<Vec<lsp::TextEdit>> {
535 let capabilities = self.capabilities.as_ref().unwrap();
533 let capabilities = self.capabilities.as_ref().unwrap();
536
534
@@ -545,9 +543,7 @@ impl Client {
545 let params = lsp::DocumentFormattingParams {
543 let params = lsp::DocumentFormattingParams {
546 text_document,
544 text_document,
547 options,
545 options,
548− work_done_progress_params: lsp::WorkDoneProgressParams {
546+ work_done_progress_params: lsp::WorkDoneProgressParams { work_done_token },
549− work_done_token: None,
550− },
551 };
547 };
552
548
553 let response = self.request::<lsp::request::Formatting>(params).await?;
549 let response = self.request::<lsp::request::Formatting>(params).await?;
@@ -560,6 +556,7 @@ impl Client {
560 text_document: lsp::TextDocumentIdentifier,
556 text_document: lsp::TextDocumentIdentifier,
561 range: lsp::Range,
557 range: lsp::Range,
562 options: lsp::FormattingOptions,
558 options: lsp::FormattingOptions,
559+ work_done_token: Option<lsp::ProgressToken>,
563 ) -> anyhow::Result<Vec<lsp::TextEdit>> {
560 ) -> anyhow::Result<Vec<lsp::TextEdit>> {
564 let capabilities = self.capabilities.as_ref().unwrap();
561 let capabilities = self.capabilities.as_ref().unwrap();
565
562
@@ -575,9 +572,7 @@ impl Client {
575 text_document,
572 text_document,
576 range,
573 range,
577 options,
574 options,
578− work_done_progress_params: lsp::WorkDoneProgressParams {
575+ work_done_progress_params: lsp::WorkDoneProgressParams { work_done_token },
579− work_done_token: None,
580− },
581 };
576 };
582
577
583 let response = self
578 let response = self
@@ -596,15 +591,14 @@ impl Client {
596 &self,
591 &self,
597 text_document: lsp::TextDocumentIdentifier,
592 text_document: lsp::TextDocumentIdentifier,
598 position: lsp::Position,
593 position: lsp::Position,
594+ work_done_token: Option<lsp::ProgressToken>,
599 ) -> impl Future<Output = Result<Value>> {
595 ) -> impl Future<Output = Result<Value>> {
600 let params = lsp::GotoDefinitionParams {
596 let params = lsp::GotoDefinitionParams {
601 text_document_position_params: lsp::TextDocumentPositionParams {
597 text_document_position_params: lsp::TextDocumentPositionParams {
602 text_document,
598 text_document,
603 position,
599 position,
604 },
600 },
605− work_done_progress_params: lsp::WorkDoneProgressParams {
601+ work_done_progress_params: lsp::WorkDoneProgressParams { work_done_token },
606− work_done_token: None,
607− },
608 partial_result_params: lsp::PartialResultParams {
602 partial_result_params: lsp::PartialResultParams {
609 partial_result_token: None,
603 partial_result_token: None,
610 },
604 },
@@ -617,30 +611,42 @@ impl Client {
617 &self,
611 &self,
618 text_document: lsp::TextDocumentIdentifier,
612 text_document: lsp::TextDocumentIdentifier,
619 position: lsp::Position,
613 position: lsp::Position,
614+ work_done_token: Option<lsp::ProgressToken>,
620 ) -> impl Future<Output = Result<Value>> {
615 ) -> impl Future<Output = Result<Value>> {
621− self.goto_request::<lsp::request::GotoDefinition>(text_document, position)
616+ self.goto_request::<lsp::request::GotoDefinition>(text_document, position, work_done_token)
622 }
617 }
623
618
624 pub fn goto_type_definition(
619 pub fn goto_type_definition(
625 &self,
620 &self,
626 text_document: lsp::TextDocumentIdentifier,
621 text_document: lsp::TextDocumentIdentifier,
627 position: lsp::Position,
622 position: lsp::Position,
623+ work_done_token: Option<lsp::ProgressToken>,
628 ) -> impl Future<Output = Result<Value>> {
624 ) -> impl Future<Output = Result<Value>> {
629− self.goto_request::<lsp::request::GotoTypeDefinition>(text_document, position)
625+ self.goto_request::<lsp::request::GotoTypeDefinition>(
626+ text_document,
627+ position,
628+ work_done_token,
629+ )
630 }
630 }
631
631
632 pub fn goto_implementation(
632 pub fn goto_implementation(
633 &self,
633 &self,
634 text_document: lsp::TextDocumentIdentifier,
634 text_document: lsp::TextDocumentIdentifier,
635 position: lsp::Position,
635 position: lsp::Position,
636+ work_done_token: Option<lsp::ProgressToken>,
636 ) -> impl Future<Output = Result<Value>> {
637 ) -> impl Future<Output = Result<Value>> {
637− self.goto_request::<lsp::request::GotoImplementation>(text_document, position)
638+ self.goto_request::<lsp::request::GotoImplementation>(
639+ text_document,
640+ position,
641+ work_done_token,
642+ )
638 }
643 }
639
644
640 pub fn goto_reference(
645 pub fn goto_reference(
641 &self,
646 &self,
642 text_document: lsp::TextDocumentIdentifier,
647 text_document: lsp::TextDocumentIdentifier,
643 position: lsp::Position,
648 position: lsp::Position,
649+ work_done_token: Option<lsp::ProgressToken>,
644 ) -> impl Future<Output = Result<Value>> {
650 ) -> impl Future<Output = Result<Value>> {
645 let params = lsp::ReferenceParams {
651 let params = lsp::ReferenceParams {
646 text_document_position: lsp::TextDocumentPositionParams {
652 text_document_position: lsp::TextDocumentPositionParams {
@@ -650,9 +656,7 @@ impl Client {
650 context: lsp::ReferenceContext {
656 context: lsp::ReferenceContext {
651 include_declaration: true,
657 include_declaration: true,
652 },
658 },
653− work_done_progress_params: lsp::WorkDoneProgressParams {
659+ work_done_progress_params: lsp::WorkDoneProgressParams { work_done_token },
654− work_done_token: None,
655− },
656 partial_result_params: lsp::PartialResultParams {
660 partial_result_params: lsp::PartialResultParams {
657 partial_result_token: None,
661 partial_result_token: None,
658 },
662 },
helix-term/src/commands.rs+7−7
@@ -1852,7 +1852,7 @@ fn goto_definition(cx: &mut Context) {
1852 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
1852 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
1853
1853
1854 // TODO: handle fails
1854 // TODO: handle fails
1855− let future = language_server.goto_definition(doc.identifier(), pos);
1855+ let future = language_server.goto_definition(doc.identifier(), pos, None);
1856
1856
1857 cx.callback(
1857 cx.callback(
1858 future,
1858 future,
@@ -1889,7 +1889,7 @@ fn goto_type_definition(cx: &mut Context) {
1889 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
1889 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
1890
1890
1891 // TODO: handle fails
1891 // TODO: handle fails
1892− let future = language_server.goto_type_definition(doc.identifier(), pos);
1892+ let future = language_server.goto_type_definition(doc.identifier(), pos, None);
1893
1893
1894 cx.callback(
1894 cx.callback(
1895 future,
1895 future,
@@ -1926,7 +1926,7 @@ fn goto_implementation(cx: &mut Context) {
1926 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
1926 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
1927
1927
1928 // TODO: handle fails
1928 // TODO: handle fails
1929− let future = language_server.goto_implementation(doc.identifier(), pos);
1929+ let future = language_server.goto_implementation(doc.identifier(), pos, None);
1930
1930
1931 cx.callback(
1931 cx.callback(
1932 future,
1932 future,
@@ -1963,7 +1963,7 @@ fn goto_reference(cx: &mut Context) {
1963 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
1963 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
1964
1964
1965 // TODO: handle fails
1965 // TODO: handle fails
1966− let future = language_server.goto_reference(doc.identifier(), pos);
1966+ let future = language_server.goto_reference(doc.identifier(), pos, None);
1967
1967
1968 cx.callback(
1968 cx.callback(
1969 future,
1969 future,
@@ -2075,7 +2075,7 @@ fn signature_help(cx: &mut Context) {
2075 );
2075 );
2076
2076
2077 // TODO: handle fails
2077 // TODO: handle fails
2078− let future = language_server.text_document_signature_help(doc.identifier(), pos);
2078+ let future = language_server.text_document_signature_help(doc.identifier(), pos, None);
2079
2079
2080 cx.callback(
2080 cx.callback(
2081 future,
2081 future,
@@ -2718,7 +2718,7 @@ fn completion(cx: &mut Context) {
2718 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
2718 let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
2719
2719
2720 // TODO: handle fails
2720 // TODO: handle fails
2721− let future = language_server.completion(doc.identifier(), pos);
2721+ let future = language_server.completion(doc.identifier(), pos, None);
2722
2722
2723 let trigger_offset = doc.selection(view.id).cursor();
2723 let trigger_offset = doc.selection(view.id).cursor();
2724
2724
@@ -2776,7 +2776,7 @@ fn hover(cx: &mut Context) {
2776 );
2776 );
2777
2777
2778 // TODO: handle fails
2778 // TODO: handle fails
2779− let future = language_server.text_document_hover(doc.identifier(), pos);
2779+ let future = language_server.text_document_hover(doc.identifier(), pos, None);
2780
2780
2781 cx.callback(
2781 cx.callback(
2782 future,
2782 future,
helix-view/src/document.rs+5−4
@@ -263,10 +263,11 @@ impl Document {
263 pub fn format(&mut self, view_id: ViewId) {
263 pub fn format(&mut self, view_id: ViewId) {
264 if let Some(language_server) = self.language_server() {
264 if let Some(language_server) = self.language_server() {
265 // TODO: await, no blocking
265 // TODO: await, no blocking
266− let transaction = helix_lsp::block_on(
266+ let transaction = helix_lsp::block_on(language_server.text_document_formatting(
267− language_server
267+ self.identifier(),
268− .text_document_formatting(self.identifier(), lsp::FormattingOptions::default()),
268+ lsp::FormattingOptions::default(),
269+ None,
269− )
270+ ))
270 .map(|edits| {
271 .map(|edits| {
271 helix_lsp::util::generate_transaction_from_edits(
272 helix_lsp::util::generate_transaction_from_edits(
272 self.text(),
273 self.text(),