diff options
Diffstat (limited to 'support/texlab/crates/hover/src/label.rs')
-rw-r--r-- | support/texlab/crates/hover/src/label.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/support/texlab/crates/hover/src/label.rs b/support/texlab/crates/hover/src/label.rs new file mode 100644 index 0000000000..c5f72a287e --- /dev/null +++ b/support/texlab/crates/hover/src/label.rs @@ -0,0 +1,28 @@ +use base_db::{ + semantics::tex, + util::{ + queries::{self, Object}, + render_label, + }, +}; + +use crate::{Hover, HoverData, HoverParams}; + +pub(super) fn find_hover<'db>(params: &'db HoverParams<'db>) -> Option<Hover<'db>> { + let data = params.document.data.as_tex()?; + let cursor = queries::object_at_cursor( + &data.semantics.labels, + params.offset, + queries::SearchMode::Full, + )?; + + let (_, definition) = tex::Label::find_all(¶ms.project) + .filter(|(_, label)| label.kind == tex::LabelKind::Definition) + .find(|(_, label)| label.name_text() == cursor.object.name_text())?; + + let label = render_label(¶ms.workspace, ¶ms.project, definition)?; + Some(Hover { + range: cursor.range, + data: HoverData::Label(label), + }) +} |