@@ -583,7 +583,12 @@ impl Client {
583583 Ok(response.unwrap_or_default())
584584 }
585585
586− pub async fn goto_request<T: lsp::request::Request>(
586+ async fn goto_request<
587+ T: lsp::request::Request<
588+ Params = lsp::GotoDefinitionParams,
589+ Result = Option<lsp::GotoDefinitionResponse>,
590+ >,
591+ >(
587592 &self,
588593 text_document: lsp::TextDocumentIdentifier,
589594 position: lsp::Position,
@@ -628,7 +633,8 @@ impl Client {
628633 text_document: lsp::TextDocumentIdentifier,
629634 position: lsp::Position,
630635 ) -> anyhow::Result<Vec<lsp::Location>> {
631− self.goto_request(response).await
636+ self.goto_request::<lsp::request::GotoDefinition>(text_document, position)
637+ .await
632638 }
633639
634640 pub async fn goto_type_definition(
@@ -636,24 +642,8 @@ impl Client {
636642 text_document: lsp::TextDocumentIdentifier,
637643 position: lsp::Position,
638644 ) -> anyhow::Result<Vec<lsp::Location>> {
639− let params = lsp::GotoDefinitionParams {
640− text_document_position_params: lsp::TextDocumentPositionParams {
641− text_document,
642− position,
643− },
644− work_done_progress_params: lsp::WorkDoneProgressParams {
645− work_done_token: None,
646− },
647− partial_result_params: lsp::PartialResultParams {
648− partial_result_token: None,
649− },
650− };
651−
652− let response = self
653− .request::<lsp::request::GotoTypeDefinition>(params)
654− .await?;
655−
656− self.goto_request(response).await
645+ self.goto_request::<lsp::request::GotoTypeDefinition>(text_document, position)
646+ .await
657647 }
658648
659649 pub async fn goto_implementation(
@@ -661,24 +651,8 @@ impl Client {
661651 text_document: lsp::TextDocumentIdentifier,
662652 position: lsp::Position,
663653 ) -> anyhow::Result<Vec<lsp::Location>> {
664− let params = lsp::GotoDefinitionParams {
665− text_document_position_params: lsp::TextDocumentPositionParams {
666− text_document,
667− position,
668− },
669− work_done_progress_params: lsp::WorkDoneProgressParams {
670− work_done_token: None,
671− },
672− partial_result_params: lsp::PartialResultParams {
673− partial_result_token: None,
674− },
675− };
676−
677− let response = self
678− .request::<lsp::request::GotoImplementation>(params)
679− .await?;
680−
681− self.goto_request(response).await
654+ self.goto_request::<lsp::request::GotoImplementation>(text_document, position)
655+ .await
682656 }
683657
684658 pub async fn goto_reference(
@@ -704,7 +678,6 @@ impl Client {
704678
705679 let response = self.request::<lsp::request::References>(params).await?;
706680
707− self.goto_request(response.map(lsp::GotoDefinitionResponse::Array))
708− .await
681+ Ok(response.unwrap_or_default())
709682 }
710683}