summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/hover/field.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/hover/field.rs')
-rw-r--r--support/texlab/src/features/hover/field.rs115
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);
- }
-}