Rename LSP function and simplify tests (#27313)
While working on a fix I found opportunities to improve readability, but it's a big rename diff, so I'm landing separately. Release Notes: - N/A
This commit is contained in:
parent
f4d1e7901c
commit
9f0b09007b
20 changed files with 641 additions and 642 deletions
|
@ -348,7 +348,7 @@ async fn test_collaborating_with_completion(cx_a: &mut TestAppContext, cx_b: &mu
|
|||
// Return some completions from the host's language server.
|
||||
cx_a.executor().start_waiting();
|
||||
fake_language_server
|
||||
.handle_request::<lsp::request::Completion, _, _>(|params, _| async move {
|
||||
.set_request_handler::<lsp::request::Completion, _, _>(|params, _| async move {
|
||||
assert_eq!(
|
||||
params.text_document_position.text_document.uri,
|
||||
lsp::Url::from_file_path("/a/main.rs").unwrap(),
|
||||
|
@ -412,7 +412,7 @@ async fn test_collaborating_with_completion(cx_a: &mut TestAppContext, cx_b: &mu
|
|||
|
||||
// Return a resolved completion from the host's language server.
|
||||
// The resolved completion has an additional text edit.
|
||||
fake_language_server.handle_request::<lsp::request::ResolveCompletionItem, _, _>(
|
||||
fake_language_server.set_request_handler::<lsp::request::ResolveCompletionItem, _, _>(
|
||||
|params, _| async move {
|
||||
assert_eq!(params.label, "first_method(…)");
|
||||
Ok(lsp::CompletionItem {
|
||||
|
@ -465,7 +465,7 @@ async fn test_collaborating_with_completion(cx_a: &mut TestAppContext, cx_b: &mu
|
|||
});
|
||||
|
||||
let mut completion_response = fake_language_server
|
||||
.handle_request::<lsp::request::Completion, _, _>(|params, _| async move {
|
||||
.set_request_handler::<lsp::request::Completion, _, _>(|params, _| async move {
|
||||
assert_eq!(
|
||||
params.text_document_position.text_document.uri,
|
||||
lsp::Url::from_file_path("/a/main.rs").unwrap(),
|
||||
|
@ -496,7 +496,7 @@ async fn test_collaborating_with_completion(cx_a: &mut TestAppContext, cx_b: &mu
|
|||
|
||||
// The completion now gets a new `text_edit.new_text` when resolving the completion item
|
||||
let mut resolve_completion_response = fake_language_server
|
||||
.handle_request::<lsp::request::ResolveCompletionItem, _, _>(|params, _| async move {
|
||||
.set_request_handler::<lsp::request::ResolveCompletionItem, _, _>(|params, _| async move {
|
||||
assert_eq!(params.label, "third_method(…)");
|
||||
Ok(lsp::CompletionItem {
|
||||
label: "third_method(…)".into(),
|
||||
|
@ -589,7 +589,7 @@ async fn test_collaborating_with_code_actions(
|
|||
|
||||
let mut fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
let mut requests = fake_language_server
|
||||
.handle_request::<lsp::request::CodeActionRequest, _, _>(|params, _| async move {
|
||||
.set_request_handler::<lsp::request::CodeActionRequest, _, _>(|params, _| async move {
|
||||
assert_eq!(
|
||||
params.text_document.uri,
|
||||
lsp::Url::from_file_path("/a/main.rs").unwrap(),
|
||||
|
@ -611,7 +611,7 @@ async fn test_collaborating_with_code_actions(
|
|||
cx_b.focus(&editor_b);
|
||||
|
||||
let mut requests = fake_language_server
|
||||
.handle_request::<lsp::request::CodeActionRequest, _, _>(|params, _| async move {
|
||||
.set_request_handler::<lsp::request::CodeActionRequest, _, _>(|params, _| async move {
|
||||
assert_eq!(
|
||||
params.text_document.uri,
|
||||
lsp::Url::from_file_path("/a/main.rs").unwrap(),
|
||||
|
@ -689,7 +689,7 @@ async fn test_collaborating_with_code_actions(
|
|||
Editor::confirm_code_action(editor, &ConfirmCodeAction { item_ix: Some(0) }, window, cx)
|
||||
})
|
||||
.unwrap();
|
||||
fake_language_server.handle_request::<lsp::request::CodeActionResolveRequest, _, _>(
|
||||
fake_language_server.set_request_handler::<lsp::request::CodeActionResolveRequest, _, _>(
|
||||
|_, _| async move {
|
||||
Ok(lsp::CodeAction {
|
||||
title: "Inline into all callers".to_string(),
|
||||
|
@ -812,7 +812,7 @@ async fn test_collaborating_with_renames(cx_a: &mut TestAppContext, cx_b: &mut T
|
|||
});
|
||||
|
||||
fake_language_server
|
||||
.handle_request::<lsp::request::PrepareRenameRequest, _, _>(|params, _| async move {
|
||||
.set_request_handler::<lsp::request::PrepareRenameRequest, _, _>(|params, _| async move {
|
||||
assert_eq!(params.text_document.uri.as_str(), "file:///dir/one.rs");
|
||||
assert_eq!(params.position, lsp::Position::new(0, 7));
|
||||
Ok(Some(lsp::PrepareRenameResponse::Range(lsp::Range::new(
|
||||
|
@ -855,7 +855,7 @@ async fn test_collaborating_with_renames(cx_a: &mut TestAppContext, cx_b: &mut T
|
|||
});
|
||||
|
||||
fake_language_server
|
||||
.handle_request::<lsp::request::PrepareRenameRequest, _, _>(|params, _| async move {
|
||||
.set_request_handler::<lsp::request::PrepareRenameRequest, _, _>(|params, _| async move {
|
||||
assert_eq!(params.text_document.uri.as_str(), "file:///dir/one.rs");
|
||||
assert_eq!(params.position, lsp::Position::new(0, 8));
|
||||
Ok(Some(lsp::PrepareRenameResponse::Range(lsp::Range::new(
|
||||
|
@ -891,7 +891,7 @@ async fn test_collaborating_with_renames(cx_a: &mut TestAppContext, cx_b: &mut T
|
|||
Editor::confirm_rename(editor, &ConfirmRename, window, cx).unwrap()
|
||||
});
|
||||
fake_language_server
|
||||
.handle_request::<lsp::request::Rename, _, _>(|params, _| async move {
|
||||
.set_request_handler::<lsp::request::Rename, _, _>(|params, _| async move {
|
||||
assert_eq!(
|
||||
params.text_document_position.text_document.uri.as_str(),
|
||||
"file:///dir/one.rs"
|
||||
|
@ -1321,7 +1321,7 @@ async fn test_on_input_format_from_host_to_guest(
|
|||
|
||||
// Receive an OnTypeFormatting request as the host's language server.
|
||||
// Return some formatting from the host's language server.
|
||||
fake_language_server.handle_request::<lsp::request::OnTypeFormatting, _, _>(
|
||||
fake_language_server.set_request_handler::<lsp::request::OnTypeFormatting, _, _>(
|
||||
|params, _| async move {
|
||||
assert_eq!(
|
||||
params.text_document_position.text_document.uri,
|
||||
|
@ -1452,7 +1452,7 @@ async fn test_on_input_format_from_guest_to_host(
|
|||
// Return some formatting from the host's language server.
|
||||
executor.start_waiting();
|
||||
fake_language_server
|
||||
.handle_request::<lsp::request::OnTypeFormatting, _, _>(|params, _| async move {
|
||||
.set_request_handler::<lsp::request::OnTypeFormatting, _, _>(|params, _| async move {
|
||||
assert_eq!(
|
||||
params.text_document_position.text_document.uri,
|
||||
lsp::Url::from_file_path("/a/main.rs").unwrap(),
|
||||
|
@ -1624,7 +1624,7 @@ async fn test_mutual_editor_inlay_hint_cache_update(
|
|||
let edits_made = Arc::new(AtomicUsize::new(0));
|
||||
let closure_edits_made = Arc::clone(&edits_made);
|
||||
fake_language_server
|
||||
.handle_request::<lsp::request::InlayHintRequest, _, _>(move |params, _| {
|
||||
.set_request_handler::<lsp::request::InlayHintRequest, _, _>(move |params, _| {
|
||||
let task_edits_made = Arc::clone(&closure_edits_made);
|
||||
async move {
|
||||
assert_eq!(
|
||||
|
@ -1859,7 +1859,7 @@ async fn test_inlay_hint_refresh_is_forwarded(
|
|||
let fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
let closure_other_hints = Arc::clone(&other_hints);
|
||||
fake_language_server
|
||||
.handle_request::<lsp::request::InlayHintRequest, _, _>(move |params, _| {
|
||||
.set_request_handler::<lsp::request::InlayHintRequest, _, _>(move |params, _| {
|
||||
let task_other_hints = Arc::clone(&closure_other_hints);
|
||||
async move {
|
||||
assert_eq!(
|
||||
|
|
|
@ -4480,7 +4480,7 @@ async fn test_formatting_buffer(
|
|||
project.register_buffer_with_language_servers(&buffer_b, cx)
|
||||
});
|
||||
let fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
fake_language_server.handle_request::<lsp::request::Formatting, _, _>(|_, _| async move {
|
||||
fake_language_server.set_request_handler::<lsp::request::Formatting, _, _>(|_, _| async move {
|
||||
Ok(Some(vec![
|
||||
lsp::TextEdit {
|
||||
range: lsp::Range::new(lsp::Position::new(0, 4), lsp::Position::new(0, 4)),
|
||||
|
@ -4633,7 +4633,7 @@ async fn test_prettier_formatting_buffer(
|
|||
});
|
||||
});
|
||||
let fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
fake_language_server.handle_request::<lsp::request::Formatting, _, _>(|_, _| async move {
|
||||
fake_language_server.set_request_handler::<lsp::request::Formatting, _, _>(|_, _| async move {
|
||||
panic!(
|
||||
"Unexpected: prettier should be preferred since it's enabled and language supports it"
|
||||
)
|
||||
|
@ -4731,14 +4731,16 @@ async fn test_definition(
|
|||
|
||||
// Request the definition of a symbol as the guest.
|
||||
let fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
fake_language_server.handle_request::<lsp::request::GotoDefinition, _, _>(|_, _| async move {
|
||||
Ok(Some(lsp::GotoDefinitionResponse::Scalar(
|
||||
lsp::Location::new(
|
||||
lsp::Url::from_file_path("/root/dir-2/b.rs").unwrap(),
|
||||
lsp::Range::new(lsp::Position::new(0, 6), lsp::Position::new(0, 9)),
|
||||
),
|
||||
)))
|
||||
});
|
||||
fake_language_server.set_request_handler::<lsp::request::GotoDefinition, _, _>(
|
||||
|_, _| async move {
|
||||
Ok(Some(lsp::GotoDefinitionResponse::Scalar(
|
||||
lsp::Location::new(
|
||||
lsp::Url::from_file_path("/root/dir-2/b.rs").unwrap(),
|
||||
lsp::Range::new(lsp::Position::new(0, 6), lsp::Position::new(0, 9)),
|
||||
),
|
||||
)))
|
||||
},
|
||||
);
|
||||
|
||||
let definitions_1 = project_b
|
||||
.update(cx_b, |p, cx| p.definition(&buffer_b, 23, cx))
|
||||
|
@ -4760,14 +4762,16 @@ async fn test_definition(
|
|||
|
||||
// Try getting more definitions for the same buffer, ensuring the buffer gets reused from
|
||||
// the previous call to `definition`.
|
||||
fake_language_server.handle_request::<lsp::request::GotoDefinition, _, _>(|_, _| async move {
|
||||
Ok(Some(lsp::GotoDefinitionResponse::Scalar(
|
||||
lsp::Location::new(
|
||||
lsp::Url::from_file_path("/root/dir-2/b.rs").unwrap(),
|
||||
lsp::Range::new(lsp::Position::new(1, 6), lsp::Position::new(1, 11)),
|
||||
),
|
||||
)))
|
||||
});
|
||||
fake_language_server.set_request_handler::<lsp::request::GotoDefinition, _, _>(
|
||||
|_, _| async move {
|
||||
Ok(Some(lsp::GotoDefinitionResponse::Scalar(
|
||||
lsp::Location::new(
|
||||
lsp::Url::from_file_path("/root/dir-2/b.rs").unwrap(),
|
||||
lsp::Range::new(lsp::Position::new(1, 6), lsp::Position::new(1, 11)),
|
||||
),
|
||||
)))
|
||||
},
|
||||
);
|
||||
|
||||
let definitions_2 = project_b
|
||||
.update(cx_b, |p, cx| p.definition(&buffer_b, 33, cx))
|
||||
|
@ -4791,7 +4795,7 @@ async fn test_definition(
|
|||
definitions_2[0].target.buffer
|
||||
);
|
||||
|
||||
fake_language_server.handle_request::<lsp::request::GotoTypeDefinition, _, _>(
|
||||
fake_language_server.set_request_handler::<lsp::request::GotoTypeDefinition, _, _>(
|
||||
|req, _| async move {
|
||||
assert_eq!(
|
||||
req.text_document_position_params.position,
|
||||
|
@ -4881,7 +4885,7 @@ async fn test_references(
|
|||
// Request references to a symbol as the guest.
|
||||
let fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
let (lsp_response_tx, rx) = mpsc::unbounded::<Result<Option<Vec<lsp::Location>>>>();
|
||||
fake_language_server.handle_request::<lsp::request::References, _, _>({
|
||||
fake_language_server.set_request_handler::<lsp::request::References, _, _>({
|
||||
let rx = Arc::new(Mutex::new(Some(rx)));
|
||||
move |params, _| {
|
||||
assert_eq!(
|
||||
|
@ -5131,7 +5135,7 @@ async fn test_document_highlights(
|
|||
|
||||
// Request document highlights as the guest.
|
||||
let fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
fake_language_server.handle_request::<lsp::request::DocumentHighlightRequest, _, _>(
|
||||
fake_language_server.set_request_handler::<lsp::request::DocumentHighlightRequest, _, _>(
|
||||
|params, _| async move {
|
||||
assert_eq!(
|
||||
params
|
||||
|
@ -5268,7 +5272,7 @@ async fn test_lsp_hover(
|
|||
"CrabLang-ls" => {
|
||||
servers_with_hover_requests.insert(
|
||||
new_server_name.clone(),
|
||||
new_server.handle_request::<lsp::request::HoverRequest, _, _>(
|
||||
new_server.set_request_handler::<lsp::request::HoverRequest, _, _>(
|
||||
move |params, _| {
|
||||
assert_eq!(
|
||||
params
|
||||
|
@ -5294,7 +5298,7 @@ async fn test_lsp_hover(
|
|||
"rust-analyzer" => {
|
||||
servers_with_hover_requests.insert(
|
||||
new_server_name.clone(),
|
||||
new_server.handle_request::<lsp::request::HoverRequest, _, _>(
|
||||
new_server.set_request_handler::<lsp::request::HoverRequest, _, _>(
|
||||
|params, _| async move {
|
||||
assert_eq!(
|
||||
params
|
||||
|
@ -5432,22 +5436,24 @@ async fn test_project_symbols(
|
|||
.unwrap();
|
||||
|
||||
let fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
fake_language_server.handle_request::<lsp::WorkspaceSymbolRequest, _, _>(|_, _| async move {
|
||||
Ok(Some(lsp::WorkspaceSymbolResponse::Flat(vec![
|
||||
#[allow(deprecated)]
|
||||
lsp::SymbolInformation {
|
||||
name: "TWO".into(),
|
||||
location: lsp::Location {
|
||||
uri: lsp::Url::from_file_path("/code/crate-2/two.rs").unwrap(),
|
||||
range: lsp::Range::new(lsp::Position::new(0, 6), lsp::Position::new(0, 9)),
|
||||
fake_language_server.set_request_handler::<lsp::WorkspaceSymbolRequest, _, _>(
|
||||
|_, _| async move {
|
||||
Ok(Some(lsp::WorkspaceSymbolResponse::Flat(vec![
|
||||
#[allow(deprecated)]
|
||||
lsp::SymbolInformation {
|
||||
name: "TWO".into(),
|
||||
location: lsp::Location {
|
||||
uri: lsp::Url::from_file_path("/code/crate-2/two.rs").unwrap(),
|
||||
range: lsp::Range::new(lsp::Position::new(0, 6), lsp::Position::new(0, 9)),
|
||||
},
|
||||
kind: lsp::SymbolKind::CONSTANT,
|
||||
tags: None,
|
||||
container_name: None,
|
||||
deprecated: None,
|
||||
},
|
||||
kind: lsp::SymbolKind::CONSTANT,
|
||||
tags: None,
|
||||
container_name: None,
|
||||
deprecated: None,
|
||||
},
|
||||
])))
|
||||
});
|
||||
])))
|
||||
},
|
||||
);
|
||||
|
||||
// Request the definition of a symbol as the guest.
|
||||
let symbols = project_b
|
||||
|
@ -5529,14 +5535,16 @@ async fn test_open_buffer_while_getting_definition_pointing_to_it(
|
|||
.unwrap();
|
||||
|
||||
let fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
fake_language_server.handle_request::<lsp::request::GotoDefinition, _, _>(|_, _| async move {
|
||||
Ok(Some(lsp::GotoDefinitionResponse::Scalar(
|
||||
lsp::Location::new(
|
||||
lsp::Url::from_file_path("/root/b.rs").unwrap(),
|
||||
lsp::Range::new(lsp::Position::new(0, 6), lsp::Position::new(0, 9)),
|
||||
),
|
||||
)))
|
||||
});
|
||||
fake_language_server.set_request_handler::<lsp::request::GotoDefinition, _, _>(
|
||||
|_, _| async move {
|
||||
Ok(Some(lsp::GotoDefinitionResponse::Scalar(
|
||||
lsp::Location::new(
|
||||
lsp::Url::from_file_path("/root/b.rs").unwrap(),
|
||||
lsp::Range::new(lsp::Position::new(0, 6), lsp::Position::new(0, 9)),
|
||||
),
|
||||
)))
|
||||
},
|
||||
);
|
||||
|
||||
let definitions;
|
||||
let buffer_b2;
|
||||
|
|
|
@ -1043,7 +1043,7 @@ impl RandomizedTest for ProjectCollaborationTest {
|
|||
initializer: Some(Box::new({
|
||||
let fs = client.app_state.fs.clone();
|
||||
move |fake_server: &mut FakeLanguageServer| {
|
||||
fake_server.handle_request::<lsp::request::Completion, _, _>(
|
||||
fake_server.set_request_handler::<lsp::request::Completion, _, _>(
|
||||
|_, _| async move {
|
||||
Ok(Some(lsp::CompletionResponse::Array(vec![
|
||||
lsp::CompletionItem {
|
||||
|
@ -1062,7 +1062,7 @@ impl RandomizedTest for ProjectCollaborationTest {
|
|||
},
|
||||
);
|
||||
|
||||
fake_server.handle_request::<lsp::request::CodeActionRequest, _, _>(
|
||||
fake_server.set_request_handler::<lsp::request::CodeActionRequest, _, _>(
|
||||
|_, _| async move {
|
||||
Ok(Some(vec![lsp::CodeActionOrCommand::CodeAction(
|
||||
lsp::CodeAction {
|
||||
|
@ -1073,16 +1073,17 @@ impl RandomizedTest for ProjectCollaborationTest {
|
|||
},
|
||||
);
|
||||
|
||||
fake_server.handle_request::<lsp::request::PrepareRenameRequest, _, _>(
|
||||
|params, _| async move {
|
||||
Ok(Some(lsp::PrepareRenameResponse::Range(lsp::Range::new(
|
||||
params.position,
|
||||
params.position,
|
||||
))))
|
||||
},
|
||||
);
|
||||
fake_server
|
||||
.set_request_handler::<lsp::request::PrepareRenameRequest, _, _>(
|
||||
|params, _| async move {
|
||||
Ok(Some(lsp::PrepareRenameResponse::Range(lsp::Range::new(
|
||||
params.position,
|
||||
params.position,
|
||||
))))
|
||||
},
|
||||
);
|
||||
|
||||
fake_server.handle_request::<lsp::request::GotoDefinition, _, _>({
|
||||
fake_server.set_request_handler::<lsp::request::GotoDefinition, _, _>({
|
||||
let fs = fs.clone();
|
||||
move |_, cx| {
|
||||
let background = cx.background_executor();
|
||||
|
@ -1107,32 +1108,34 @@ impl RandomizedTest for ProjectCollaborationTest {
|
|||
}
|
||||
});
|
||||
|
||||
fake_server.handle_request::<lsp::request::DocumentHighlightRequest, _, _>(
|
||||
move |_, cx| {
|
||||
let mut highlights = Vec::new();
|
||||
let background = cx.background_executor();
|
||||
let mut rng = background.rng();
|
||||
fake_server
|
||||
.set_request_handler::<lsp::request::DocumentHighlightRequest, _, _>(
|
||||
move |_, cx| {
|
||||
let mut highlights = Vec::new();
|
||||
let background = cx.background_executor();
|
||||
let mut rng = background.rng();
|
||||
|
||||
let highlight_count = rng.gen_range(1..=5);
|
||||
for _ in 0..highlight_count {
|
||||
let start_row = rng.gen_range(0..100);
|
||||
let start_column = rng.gen_range(0..100);
|
||||
let end_row = rng.gen_range(0..100);
|
||||
let end_column = rng.gen_range(0..100);
|
||||
let start = PointUtf16::new(start_row, start_column);
|
||||
let end = PointUtf16::new(end_row, end_column);
|
||||
let range = if start > end { end..start } else { start..end };
|
||||
highlights.push(lsp::DocumentHighlight {
|
||||
range: range_to_lsp(range.clone()).unwrap(),
|
||||
kind: Some(lsp::DocumentHighlightKind::READ),
|
||||
let highlight_count = rng.gen_range(1..=5);
|
||||
for _ in 0..highlight_count {
|
||||
let start_row = rng.gen_range(0..100);
|
||||
let start_column = rng.gen_range(0..100);
|
||||
let end_row = rng.gen_range(0..100);
|
||||
let end_column = rng.gen_range(0..100);
|
||||
let start = PointUtf16::new(start_row, start_column);
|
||||
let end = PointUtf16::new(end_row, end_column);
|
||||
let range =
|
||||
if start > end { end..start } else { start..end };
|
||||
highlights.push(lsp::DocumentHighlight {
|
||||
range: range_to_lsp(range.clone()).unwrap(),
|
||||
kind: Some(lsp::DocumentHighlightKind::READ),
|
||||
});
|
||||
}
|
||||
highlights.sort_unstable_by_key(|highlight| {
|
||||
(highlight.range.start, highlight.range.end)
|
||||
});
|
||||
}
|
||||
highlights.sort_unstable_by_key(|highlight| {
|
||||
(highlight.range.start, highlight.range.end)
|
||||
});
|
||||
async move { Ok(Some(highlights)) }
|
||||
},
|
||||
);
|
||||
async move { Ok(Some(highlights)) }
|
||||
},
|
||||
);
|
||||
}
|
||||
})),
|
||||
..Default::default()
|
||||
|
|
|
@ -482,7 +482,7 @@ async fn test_ssh_collaboration_formatting_with_prettier(
|
|||
});
|
||||
});
|
||||
let fake_language_server = fake_language_servers.next().await.unwrap();
|
||||
fake_language_server.handle_request::<lsp::request::Formatting, _, _>(|_, _| async move {
|
||||
fake_language_server.set_request_handler::<lsp::request::Formatting, _, _>(|_, _| async move {
|
||||
panic!(
|
||||
"Unexpected: prettier should be preferred since it's enabled and language supports it"
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue