pytest_language_server/providers/
hover.rs1use super::Backend;
4use tower_lsp_server::jsonrpc::Result;
5use tower_lsp_server::ls_types::*;
6use tracing::info;
7
8impl Backend {
9 pub async fn handle_hover(&self, params: HoverParams) -> Result<Option<Hover>> {
11 let uri = params.text_document_position_params.text_document.uri;
12 let position = params.text_document_position_params.position;
13
14 info!(
15 "hover request: uri={:?}, line={}, char={}",
16 uri, position.line, position.character
17 );
18
19 if let Some(file_path) = self.uri_to_path(&uri) {
20 info!(
21 "Looking for fixture at {:?}:{}:{}",
22 file_path, position.line, position.character
23 );
24
25 if let Some(definition) = self.fixture_db.find_fixture_definition(
26 &file_path,
27 position.line,
28 position.character,
29 ) {
30 info!("Found fixture definition for hover: {:?}", definition.name);
31
32 let workspace_root = self.workspace_root.read().await.clone();
34
35 let content =
37 Self::format_fixture_documentation(&definition, workspace_root.as_ref());
38
39 info!("Returning hover with content");
40 return Ok(Some(Hover {
41 contents: HoverContents::Markup(MarkupContent {
42 kind: MarkupKind::Markdown,
43 value: content,
44 }),
45 range: None,
46 }));
47 } else {
48 info!("No fixture found for hover");
49 }
50 }
51
52 Ok(None)
53 }
54}