diff options
Diffstat (limited to 'support/texlab/src/hover/latex_component.rs')
-rw-r--r-- | support/texlab/src/hover/latex_component.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/support/texlab/src/hover/latex_component.rs b/support/texlab/src/hover/latex_component.rs new file mode 100644 index 0000000000..4d262a6891 --- /dev/null +++ b/support/texlab/src/hover/latex_component.rs @@ -0,0 +1,39 @@ +use crate::completion::DATABASE; +use crate::range::RangeExt; +use crate::syntax::*; +use crate::workspace::*; +use futures_boxed::boxed; +use lsp_types::{Hover, HoverContents, TextDocumentPositionParams}; + +#[derive(Debug, PartialEq, Eq, Clone)] +pub struct LatexComponentHoverProvider; + +impl FeatureProvider for LatexComponentHoverProvider { + type Params = TextDocumentPositionParams; + type Output = Option<Hover>; + + #[boxed] + async fn execute<'a>( + &'a self, + request: &'a FeatureRequest<TextDocumentPositionParams>, + ) -> Option<Hover> { + if let SyntaxTree::Latex(tree) = &request.document().tree { + for include in &tree.includes { + if include.kind == LatexIncludeKind::Package + || include.kind == LatexIncludeKind::Class + { + for path in include.paths() { + if path.range().contains(request.params.position) { + let documentation = DATABASE.documentation(path.text())?; + return Some(Hover { + contents: HoverContents::Markup(documentation), + range: Some(path.range()), + }); + } + } + } + } + } + None + } +} |