diff options
Diffstat (limited to 'support/texlab/src/features/hover/field.rs')
-rw-r--r-- | support/texlab/src/features/hover/field.rs | 115 |
1 files changed, 8 insertions, 107 deletions
diff --git a/support/texlab/src/features/hover/field.rs b/support/texlab/src/features/hover/field.rs index daa0c301cd..6102bd6b68 100644 --- a/support/texlab/src/features/hover/field.rs +++ b/support/texlab/src/features/hover/field.rs @@ -1,11 +1,11 @@ -use lsp_types::{Hover, HoverContents, HoverParams, MarkupContent}; +use lsp_types::{HoverParams, MarkupKind}; use rowan::ast::AstNode; -use crate::{features::cursor::CursorContext, syntax::bibtex, LineIndexExt, LANGUAGE_DATA}; +use crate::{features::cursor::CursorContext, syntax::bibtex, LANGUAGE_DATA}; -pub fn find_field_hover(context: &CursorContext<HoverParams>) -> Option<Hover> { - let main_document = context.request.main_document(); +use super::HoverResult; +pub(super) fn find_field_hover(context: &CursorContext<HoverParams>) -> Option<HoverResult> { let name = context .cursor .as_bibtex() @@ -14,108 +14,9 @@ pub fn find_field_hover(context: &CursorContext<HoverParams>) -> Option<Hover> { bibtex::Field::cast(name.parent()?)?; let docs = LANGUAGE_DATA.field_documentation(name.text())?; - Some(Hover { - contents: HoverContents::Markup(MarkupContent { - kind: lsp_types::MarkupKind::Markdown, - value: docs.to_string(), - }), - range: Some( - main_document - .line_index - .line_col_lsp_range(name.text_range()), - ), + Some(HoverResult { + range: name.text_range(), + value: docs.to_string(), + value_kind: MarkupKind::Markdown, }) } - -#[cfg(test)] -mod tests { - use lsp_types::{MarkupKind, 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_field_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_field_hover(&context); - - assert_eq!(actual_hover, None); - } - - #[test] - fn test_known_field() { - let request = FeatureTester::builder() - .files(vec![("main.bib", r#"@article{foo, author = bar}"#)]) - .main("main.bib") - .line(0) - .character(15) - .build() - .hover(); - - let context = CursorContext::new(request); - let actual_hover = find_field_hover(&context).unwrap(); - let expected_hover = Hover { - contents: HoverContents::Markup(MarkupContent { - kind: MarkupKind::Markdown, - value: LANGUAGE_DATA.field_documentation("author").unwrap().into(), - }), - range: Some(Range::new_simple(0, 14, 0, 20)), - }; - assert_eq!(actual_hover, expected_hover); - } - - #[test] - fn test_unknown_field() { - let request = FeatureTester::builder() - .files(vec![("main.bib", r#"@article{foo, bar = baz}"#)]) - .main("main.bib") - .line(0) - .character(15) - .build() - .hover(); - - let context = CursorContext::new(request); - let actual_hover = find_field_hover(&context); - assert_eq!(actual_hover, None); - } - - #[test] - fn test_entry_key() { - let request = FeatureTester::builder() - .files(vec![("main.bib", r#"@article{foo, author = bar}"#)]) - .main("main.bib") - .line(0) - .character(11) - .build() - .hover(); - - let context = CursorContext::new(request); - let actual_hover = find_field_hover(&context); - assert_eq!(actual_hover, None); - } -} |