diff options
Diffstat (limited to 'support/texlab/src/features/hover/component.rs')
-rw-r--r-- | support/texlab/src/features/hover/component.rs | 96 |
1 files changed, 12 insertions, 84 deletions
diff --git a/support/texlab/src/features/hover/component.rs b/support/texlab/src/features/hover/component.rs index 7b7e6c6e02..737a99d3ea 100644 --- a/support/texlab/src/features/hover/component.rs +++ b/support/texlab/src/features/hover/component.rs @@ -1,97 +1,25 @@ -use lsp_types::{Hover, HoverContents, HoverParams}; +use lsp_types::{HoverParams, MarkupKind}; -use crate::{ - component_db::COMPONENT_DATABASE, features::cursor::CursorContext, syntax::latex, LineIndexExt, -}; +use crate::{component_db::COMPONENT_DATABASE, features::cursor::CursorContext, syntax::latex}; -pub fn find_component_hover(context: &CursorContext<HoverParams>) -> Option<Hover> { - let main_document = context.request.main_document(); - let data = main_document.data.as_latex()?; +use super::HoverResult; + +pub(super) fn find_component_hover(context: &CursorContext<HoverParams>) -> Option<HoverResult> { + let data = context.request.main_document().data.as_latex()?; for link in &data.extras.explicit_links { if matches!( link.kind, latex::ExplicitLinkKind::Package | latex::ExplicitLinkKind::Class ) && link.stem_range.contains_inclusive(context.offset) { - let docs = COMPONENT_DATABASE.documentation(&link.stem)?; - return Some(Hover { - contents: HoverContents::Markup(docs), - range: Some(main_document.line_index.line_col_lsp_range(link.stem_range)), + let value = COMPONENT_DATABASE.documentation(&link.stem)?.value; + return Some(HoverResult { + value, + value_kind: MarkupKind::PlainText, + range: link.stem_range, }); } } - None -} - -#[cfg(test)] -mod tests { - use lsp_types::Range; - - use crate::{features::testing::FeatureTester, RangeExt}; - - use super::*; - - #[test] - fn test_empty_latex_document() { - let request = FeatureTester::builder() - .files(vec![("main.tex", "")]) - .main("main.tex") - .line(0) - .character(0) - .build() - .hover(); - - let context = CursorContext::new(request); - let actual_hover = find_component_hover(&context); - - assert_eq!(actual_hover, None); - } - - #[test] - fn test_empty_bibtex_document() { - let request = FeatureTester::builder() - .files(vec![("main.bib", "")]) - .main("main.bib") - .line(0) - .character(0) - .build() - .hover(); - - let context = CursorContext::new(request); - let actual_hover = find_component_hover(&context); - - assert_eq!(actual_hover, None); - } - #[test] - fn test_known_package() { - let request = FeatureTester::builder() - .files(vec![("main.tex", r#"\usepackage{amsmath}"#)]) - .main("main.tex") - .line(0) - .character(15) - .build() - .hover(); - - let context = CursorContext::new(request); - let actual_hover = find_component_hover(&context).unwrap(); - - assert_eq!(actual_hover.range.unwrap(), Range::new_simple(0, 12, 0, 19)); - } - - #[test] - fn test_unknown_class() { - let request = FeatureTester::builder() - .files(vec![("main.tex", r#"\documentclass{abcdefghijklmnop}"#)]) - .main("main.tex") - .line(0) - .character(20) - .build() - .hover(); - - let context = CursorContext::new(request); - let actual_hover = find_component_hover(&context); - - assert_eq!(actual_hover, None); - } + None } |