Skip to main content

oak_semantic_tokens/
lib.rs

1use oak_core::{language::Language, source::Source, tree::RedNode};
2use oak_vfs::LineMap;
3use serde::{Deserialize, Serialize};
4
5/// Represents a semantic token for syntax highlighting.
6///
7/// Benchmarked against LSP's Semantic Tokens.
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct SemanticToken {
10    pub delta_line: u32,
11    pub delta_start: u32,
12    pub length: u32,
13    pub token_type: u32,
14    pub token_modifiers_bitset: u32,
15}
16
17/// Trait for languages that support semantic highlighting.
18pub trait SemanticTokensProvider<L: Language> {
19    /// Returns the semantic tokens for the given document.
20    fn semantic_tokens<S: Source + ?Sized>(&self, root: &RedNode<L>, source: &S, line_map: &LineMap) -> Vec<SemanticToken>;
21}