highlight_map.rs

 1use std::sync::Arc;
 2
 3#[derive(Clone, Debug)]
 4pub struct HighlightMap(Arc<[HighlightId]>);
 5
 6#[derive(Clone, Copy, Debug, PartialEq, Eq)]
 7pub struct HighlightId(pub u32);
 8
 9const DEFAULT_SYNTAX_HIGHLIGHT_ID: HighlightId = HighlightId(u32::MAX);
10
11impl HighlightMap {
12    #[inline]
13    pub fn from_ids(highlight_ids: impl IntoIterator<Item = HighlightId>) -> Self {
14        Self(highlight_ids.into_iter().collect())
15    }
16
17    #[inline]
18    pub fn get(&self, capture_id: u32) -> HighlightId {
19        self.0
20            .get(capture_id as usize)
21            .copied()
22            .unwrap_or(DEFAULT_SYNTAX_HIGHLIGHT_ID)
23    }
24}
25
26impl HighlightId {
27    pub const TABSTOP_INSERT_ID: HighlightId = HighlightId(u32::MAX - 1);
28    pub const TABSTOP_REPLACE_ID: HighlightId = HighlightId(u32::MAX - 2);
29
30    #[inline]
31    pub fn is_default(&self) -> bool {
32        *self == DEFAULT_SYNTAX_HIGHLIGHT_ID
33    }
34}
35
36impl Default for HighlightMap {
37    fn default() -> Self {
38        Self(Arc::new([]))
39    }
40}
41
42impl Default for HighlightId {
43    fn default() -> Self {
44        DEFAULT_SYNTAX_HIGHLIGHT_ID
45    }
46}
47
48impl From<HighlightId> for usize {
49    fn from(value: HighlightId) -> Self {
50        value.0 as usize
51    }
52}