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}