oak_structural_view/
lib.rs1#![feature(new_range_api)]
2#![warn(missing_docs)]
3#![doc = include_str!("readme.md")]
4use core::range::Range;
5use oak_core::{
6 language::{Language, UniversalElementRole},
7 tree::RedNode,
8};
9
10#[derive(Debug, Clone)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub struct StructureItem {
14 pub name: String,
16 pub detail: Option<String>,
18 pub role: UniversalElementRole,
20 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range", bound(serialize = "", deserialize = "")))]
22 pub range: Range<usize>,
23 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range", bound(serialize = "", deserialize = "")))]
26 pub selection_range: Range<usize>,
27 pub deprecated: bool,
29 pub children: Vec<StructureItem>,
31}
32
33pub trait StructureProvider<L: Language> {
37 fn structure(&self, root: &RedNode<L>) -> Vec<StructureItem>;
39}