oak_hover/
lib.rs

1#![feature(new_range_api)]
2use core::range::Range;
3use oak_core::{language::Language, tree::RedNode};
4use serde::{Deserialize, Serialize};
5
6/// Represents hover information.
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct Hover {
9    /// The hover's content as a markdown string.
10    pub contents: String,
11    /// An optional span to which this hover applies.
12    #[serde(with = "oak_core::serde_range::option", bound(serialize = "", deserialize = ""))]
13    pub range: Option<Range<usize>>,
14}
15
16/// Trait for languages that support hover information.
17pub trait HoverProvider<L: Language> {
18    /// Returns hover information at the given range.
19    fn hover(&self, root: &RedNode<L>, range: Range<usize>) -> Option<Hover>;
20}