summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/hover.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/hover.rs')
-rw-r--r--support/texlab/src/features/hover.rs39
1 files changed, 14 insertions, 25 deletions
diff --git a/support/texlab/src/features/hover.rs b/support/texlab/src/features/hover.rs
index 8663f6256d..27d07f74cd 100644
--- a/support/texlab/src/features/hover.rs
+++ b/support/texlab/src/features/hover.rs
@@ -5,43 +5,32 @@ mod field;
mod label;
mod string_ref;
-use lsp_types::{Hover, HoverContents, HoverParams, MarkupContent, MarkupKind};
+use lsp_types::{Hover, HoverContents, MarkupContent, MarkupKind, Position, Url};
use rowan::TextRange;
use crate::{
- features::{cursor::CursorContext, hover::citation::find_citation_hover},
- LineIndexExt,
+ util::{cursor::CursorContext, line_index_ext::LineIndexExt},
+ Db,
};
-use self::{
- component::find_component_hover, entry_type::find_entry_type_hover, field::find_field_hover,
- label::find_label_hover, string_ref::find_string_reference_hover,
-};
-
-use super::FeatureRequest;
-
-pub fn find_hover(request: FeatureRequest<HoverParams>) -> Option<Hover> {
- let context = CursorContext::new(request);
+pub fn find(db: &dyn Db, uri: &Url, position: Position) -> Option<Hover> {
+ let context = CursorContext::new(db, uri, position, ())?;
log::debug!("[Hover] Cursor: {:?}", context.cursor);
- let result = find_label_hover(&context)
- .or_else(|| find_citation_hover(&context))
- .or_else(|| find_component_hover(&context))
- .or_else(|| find_string_reference_hover(&context))
- .or_else(|| find_field_hover(&context))
- .or_else(|| find_entry_type_hover(&context))?;
+ let result = label::find_hover(&context)
+ .or_else(|| citation::find_hover(&context))
+ .or_else(|| component::find_hover(&context))
+ .or_else(|| string_ref::find_hover(&context))
+ .or_else(|| field::find_hover(&context))
+ .or_else(|| entry_type::find_hover(&context))?;
+
+ let line_index = context.document.contents(db).line_index(db);
Some(Hover {
contents: HoverContents::Markup(MarkupContent {
kind: result.value_kind,
value: result.value,
}),
- range: Some(
- context
- .request
- .main_document()
- .line_index
- .line_col_lsp_range(result.range),
- ),
+ range: Some(line_index.line_col_lsp_range(result.range)),
})
}