Skip to main content

oak_hover/
lib.rs

1#![feature(new_range_api)]
2#![warn(missing_docs)]
3#![doc = "Hover information provider for Oak languages."]
4//! Hover support for the Oak language framework.
5//!
6//! This crate provides traits and structures for providing hover information
7//! (documentation, type info, etc.) for code elements in an editor.
8
9use core::range::Range;
10use oak_core::{language::Language, tree::RedNode};
11use serde::{Deserialize, Serialize};
12
13/// Represents hover information.
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct Hover {
16    /// The hover's content as a markdown string.
17    pub contents: String,
18    /// An optional span to which this hover applies.
19    #[serde(with = "oak_core::serde_range::option", bound(serialize = "", deserialize = ""))]
20    pub range: Option<Range<usize>>,
21}
22
23/// Trait for languages that support hover information.
24pub trait HoverProvider<L: Language> {
25    /// Returns hover information at the given range.
26    fn hover(&self, root: &RedNode<L>, range: Range<usize>) -> Option<Hover>;
27}