on master help sign in
goto_request wip
a5f9080Jan Hrastnik
Cargo.lock−1
@@ -550,7 +550,6 @@ dependencies = [
550 "helix-view",
550 "helix-view",
551 "ignore",
551 "ignore",
552 "log",
552 "log",
553− "lsp-types",
554 "num_cpus",
553 "num_cpus",
555 "once_cell",
554 "once_cell",
556 "pulldown-cmark",
555 "pulldown-cmark",
helix-lsp/src/client.rs+22−21
@@ -583,10 +583,26 @@ impl Client {
583 Ok(response.unwrap_or_default())
583 Ok(response.unwrap_or_default())
584 }
584 }
585
585
586− pub async fn goto_generic(
586+ pub async fn goto_request<T: lsp::request::Request>(
587 &self,
587 &self,
588− response: Option<lsp::GotoDefinitionResponse>,
588+ text_document: lsp::TextDocumentIdentifier,
589+ position: lsp::Position,
589 ) -> anyhow::Result<Vec<lsp::Location>> {
590 ) -> anyhow::Result<Vec<lsp::Location>> {
591+ let params = lsp::GotoDefinitionParams {
592+ text_document_position_params: lsp::TextDocumentPositionParams {
593+ text_document,
594+ position,
595+ },
596+ work_done_progress_params: lsp::WorkDoneProgressParams {
597+ work_done_token: None,
598+ },
599+ partial_result_params: lsp::PartialResultParams {
600+ partial_result_token: None,
601+ },
602+ };
603+
604+ let response = self.request::<T>(params).await?;
605+
590 let items = match response {
606 let items = match response {
591 Some(lsp::GotoDefinitionResponse::Scalar(location)) => vec![location],
607 Some(lsp::GotoDefinitionResponse::Scalar(location)) => vec![location],
592 Some(lsp::GotoDefinitionResponse::Array(location_vec)) => location_vec,
608 Some(lsp::GotoDefinitionResponse::Array(location_vec)) => location_vec,
@@ -612,22 +628,7 @@ impl Client {
612 text_document: lsp::TextDocumentIdentifier,
628 text_document: lsp::TextDocumentIdentifier,
613 position: lsp::Position,
629 position: lsp::Position,
614 ) -> anyhow::Result<Vec<lsp::Location>> {
630 ) -> anyhow::Result<Vec<lsp::Location>> {
615− let params = lsp::GotoDefinitionParams {
616− text_document_position_params: lsp::TextDocumentPositionParams {
617− text_document,
618− position,
619− },
620− work_done_progress_params: lsp::WorkDoneProgressParams {
621− work_done_token: None,
622− },
623− partial_result_params: lsp::PartialResultParams {
624− partial_result_token: None,
625− },
626− };
627−
628− let response = self.request::<lsp::request::GotoDefinition>(params).await?;
629−
630− self.goto_generic(response).await
631+ self.goto_request(response).await
631 }
632 }
632
633
633 pub async fn goto_type_definition(
634 pub async fn goto_type_definition(
@@ -652,7 +653,7 @@ impl Client {
652 .request::<lsp::request::GotoTypeDefinition>(params)
653 .request::<lsp::request::GotoTypeDefinition>(params)
653 .await?;
654 .await?;
654
655
655− self.goto_generic(response).await
656+ self.goto_request(response).await
656 }
657 }
657
658
658 pub async fn goto_implementation(
659 pub async fn goto_implementation(
@@ -677,7 +678,7 @@ impl Client {
677 .request::<lsp::request::GotoImplementation>(params)
678 .request::<lsp::request::GotoImplementation>(params)
678 .await?;
679 .await?;
679
680
680− self.goto_generic(response).await
681+ self.goto_request(response).await
681 }
682 }
682
683
683 pub async fn goto_reference(
684 pub async fn goto_reference(
@@ -703,7 +704,7 @@ impl Client {
703
704
704 let response = self.request::<lsp::request::References>(params).await?;
705 let response = self.request::<lsp::request::References>(params).await?;
705
706
706− self.goto_generic(response.map(lsp::GotoDefinitionResponse::Array))
707+ self.goto_request(response.map(lsp::GotoDefinitionResponse::Array))
707 .await
708 .await
708 }
709 }
709}
710}