From 75278505469ef60edef10fe303303df0e64a55e7 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 4 Aug 2022 13:36:33 -0700 Subject: [PATCH] Handle RPC requests for type definitions on server and host --- crates/collab/src/integration_tests.rs | 36 +++++++++++++++++++++++--- crates/collab/src/rpc.rs | 1 + crates/project/src/project.rs | 1 + 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/crates/collab/src/integration_tests.rs b/crates/collab/src/integration_tests.rs index 1f3ccef0be0d6ecd3946e2971850d3be0b7b3412..2a68c2056e523c7965d7cdeb090a3cdf55337f61 100644 --- a/crates/collab/src/integration_tests.rs +++ b/crates/collab/src/integration_tests.rs @@ -2057,7 +2057,8 @@ async fn test_definition(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) { "a.rs": "const ONE: usize = b::TWO + b::THREE;", }, "dir-2": { - "b.rs": "const TWO: usize = 2;\nconst THREE: usize = 3;", + "b.rs": "const TWO: c::T2 = 2;\nconst THREE: usize = 3;", + "c.rs": "type T2 = usize;", } }), ) @@ -2093,7 +2094,7 @@ async fn test_definition(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) { let target_buffer = definitions_1[0].target.buffer.read(cx); assert_eq!( target_buffer.text(), - "const TWO: usize = 2;\nconst THREE: usize = 3;" + "const TWO: c::T2 = 2;\nconst THREE: usize = 3;" ); assert_eq!( definitions_1[0].target.range.to_point(target_buffer), @@ -2122,7 +2123,7 @@ async fn test_definition(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) { let target_buffer = definitions_2[0].target.buffer.read(cx); assert_eq!( target_buffer.text(), - "const TWO: usize = 2;\nconst THREE: usize = 3;" + "const TWO: c::T2 = 2;\nconst THREE: usize = 3;" ); assert_eq!( definitions_2[0].target.range.to_point(target_buffer), @@ -2133,6 +2134,35 @@ async fn test_definition(cx_a: &mut TestAppContext, cx_b: &mut TestAppContext) { definitions_1[0].target.buffer, definitions_2[0].target.buffer ); + + fake_language_server.handle_request::( + |req, _| async move { + assert_eq!( + req.text_document_position_params.position, + lsp::Position::new(0, 7) + ); + Ok(Some(lsp::GotoDefinitionResponse::Scalar( + lsp::Location::new( + lsp::Url::from_file_path("/root/dir-2/c.rs").unwrap(), + lsp::Range::new(lsp::Position::new(0, 5), lsp::Position::new(0, 7)), + ), + ))) + }, + ); + + let type_definitions = project_b + .update(cx_b, |p, cx| p.type_definition(&buffer_b, 7, cx)) + .await + .unwrap(); + cx_b.read(|cx| { + assert_eq!(type_definitions.len(), 1); + let target_buffer = type_definitions[0].target.buffer.read(cx); + assert_eq!(target_buffer.text(), "type T2 = usize;"); + assert_eq!( + type_definitions[0].target.range.to_point(target_buffer), + Point::new(0, 5)..Point::new(0, 7) + ); + }); } #[gpui::test(iterations = 10)] diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 4944761d58bd6bb1fb330f6fc7a5ecbf3cf62b7b..a4a48af5be6b0b5bab7cf9f93b3f826517634588 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -165,6 +165,7 @@ impl Server { .add_message_handler(Server::update_diagnostic_summary) .add_request_handler(Server::forward_project_request::) .add_request_handler(Server::forward_project_request::) + .add_request_handler(Server::forward_project_request::) .add_request_handler(Server::forward_project_request::) .add_request_handler(Server::forward_project_request::) .add_request_handler(Server::forward_project_request::) diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index bc25687df6666e8b35a0c8d12f006a47d57ff4d4..6488afd303d4194f02e8d5e2d2d2c35bcc424645 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -389,6 +389,7 @@ impl Project { client.add_model_request_handler(Self::handle_get_completions); client.add_model_request_handler(Self::handle_lsp_command::); client.add_model_request_handler(Self::handle_lsp_command::); + client.add_model_request_handler(Self::handle_lsp_command::); client.add_model_request_handler(Self::handle_lsp_command::); client.add_model_request_handler(Self::handle_lsp_command::); client.add_model_request_handler(Self::handle_lsp_command::);