@@ -583,7 +583,12 @@ impl Client {
583 Ok(response.unwrap_or_default())
583 Ok(response.unwrap_or_default())
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>,
588 text_document: lsp::TextDocumentIdentifier,
593 text_document: lsp::TextDocumentIdentifier,
589 position: lsp::Position,
594 position: lsp::Position,
@@ -628,7 +633,8 @@ impl Client {
628 text_document: lsp::TextDocumentIdentifier,
633 text_document: lsp::TextDocumentIdentifier,
629 position: lsp::Position,
634 position: lsp::Position,
630 ) -> anyhow::Result<Vec<lsp::Location>> {
635 ) -> anyhow::Result<Vec<lsp::Location>> {
631− self.goto_request(response).await
636+ self.goto_request::<lsp::request::GotoDefinition>(text_document, position)
634 pub async fn goto_type_definition(
640 pub async fn goto_type_definition(
@@ -636,24 +642,8 @@ impl Client {
636 text_document: lsp::TextDocumentIdentifier,
642 text_document: lsp::TextDocumentIdentifier,
637 position: lsp::Position,
643 position: lsp::Position,
638 ) -> anyhow::Result<Vec<lsp::Location>> {
644 ) -> anyhow::Result<Vec<lsp::Location>> {
639− let params = lsp::GotoDefinitionParams {
640− text_document_position_params: lsp::TextDocumentPositionParams {
644− work_done_progress_params: lsp::WorkDoneProgressParams {
645− work_done_token: None,
647− partial_result_params: lsp::PartialResultParams {
648− partial_result_token: None,
653− .request::<lsp::request::GotoTypeDefinition>(params)
645+ self.goto_request::<lsp::request::GotoTypeDefinition>(text_document, position)
656− self.goto_request(response).await
659 pub async fn goto_implementation(
649 pub async fn goto_implementation(
@@ -661,24 +651,8 @@ impl Client {
661 text_document: lsp::TextDocumentIdentifier,
651 text_document: lsp::TextDocumentIdentifier,
662 position: lsp::Position,
652 position: lsp::Position,
663 ) -> anyhow::Result<Vec<lsp::Location>> {
653 ) -> anyhow::Result<Vec<lsp::Location>> {
664− let params = lsp::GotoDefinitionParams {
665− text_document_position_params: lsp::TextDocumentPositionParams {
669− work_done_progress_params: lsp::WorkDoneProgressParams {
670− work_done_token: None,
672− partial_result_params: lsp::PartialResultParams {
673− partial_result_token: None,
678− .request::<lsp::request::GotoImplementation>(params)
654+ self.goto_request::<lsp::request::GotoImplementation>(text_document, position)
681− self.goto_request(response).await
684 pub async fn goto_reference(
658 pub async fn goto_reference(
@@ -704,7 +678,6 @@ impl Client {
705 let response = self.request::<lsp::request::References>(params).await?;
679 let response = self.request::<lsp::request::References>(params).await?;
707− self.goto_request(response.map(lsp::GotoDefinitionResponse::Array))
681+ Ok(response.unwrap_or_default())