1#![feature(new_range_api)]
2#![warn(missing_docs)]
3#![doc = "Hover information provider for Oak languages."]
4use core::range::Range;
10use oak_core::{language::Language, tree::RedNode};
11use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct Hover {
16 pub contents: String,
18 #[serde(with = "oak_core::serde_range::option", bound(serialize = "", deserialize = ""))]
20 pub range: Option<Range<usize>>,
21}
22
23pub trait HoverProvider<L: Language> {
25 fn hover(&self, root: &RedNode<L>, range: Range<usize>) -> Option<Hover>;
27}