summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/hover/entry_type.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/features/hover/entry_type.rs')
-rw-r--r--support/texlab/src/features/hover/entry_type.rs123
1 files changed, 9 insertions, 114 deletions
diff --git a/support/texlab/src/features/hover/entry_type.rs b/support/texlab/src/features/hover/entry_type.rs
index ab36177ae8..41a561395c 100644
--- a/support/texlab/src/features/hover/entry_type.rs
+++ b/support/texlab/src/features/hover/entry_type.rs
@@ -1,124 +1,19 @@
-use lsp_types::{Hover, HoverContents, HoverParams, MarkupContent};
+use lsp_types::{HoverParams, MarkupKind};
-use crate::{features::cursor::CursorContext, syntax::bibtex, LineIndexExt, LANGUAGE_DATA};
+use crate::{features::cursor::CursorContext, syntax::bibtex, LANGUAGE_DATA};
-pub fn find_entry_type_hover(context: &CursorContext<HoverParams>) -> Option<Hover> {
+use super::HoverResult;
+
+pub(super) fn find_entry_type_hover(context: &CursorContext<HoverParams>) -> Option<HoverResult> {
let name = context
.cursor
.as_bibtex()
.filter(|token| token.kind() == bibtex::TYPE)?;
let docs = LANGUAGE_DATA.entry_type_documentation(&name.text()[1..])?;
- Some(Hover {
- contents: HoverContents::Markup(MarkupContent {
- kind: lsp_types::MarkupKind::Markdown,
- value: docs.to_string(),
- }),
- range: Some(
- context
- .request
- .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_entry_type_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_entry_type_hover(&context);
-
- assert_eq!(actual_hover, None);
- }
-
- #[test]
- fn test_known_entry_type() {
- let request = FeatureTester::builder()
- .files(vec![("main.bib", r#"@article{foo,}"#)])
- .main("main.bib")
- .line(0)
- .character(3)
- .build()
- .hover();
-
- let context = CursorContext::new(request);
- let actual_hover = find_entry_type_hover(&context).unwrap();
-
- let expected_hover = Hover {
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: LANGUAGE_DATA
- .entry_type_documentation("article")
- .unwrap()
- .into(),
- }),
- range: Some(Range::new_simple(0, 0, 0, 8)),
- };
- assert_eq!(actual_hover, expected_hover);
- }
-
- #[test]
- fn test_unknown_field() {
- let request = FeatureTester::builder()
- .files(vec![("main.bib", r#"@foo{bar,}"#)])
- .main("main.bib")
- .line(0)
- .character(3)
- .build()
- .hover();
-
- let context = CursorContext::new(request);
- let actual_hover = find_entry_type_hover(&context);
-
- assert_eq!(actual_hover, None);
- }
-
- #[test]
- fn test_entry_key() {
- let request = FeatureTester::builder()
- .files(vec![("main.bib", r#"@article{foo,}"#)])
- .main("main.bib")
- .line(0)
- .character(11)
- .build()
- .hover();
-
- let context = CursorContext::new(request);
- let actual_hover = find_entry_type_hover(&context);
-
- assert_eq!(actual_hover, None);
- }
-}