language.rs

 1use crate::{HighlightMap, SyntaxTheme};
 2use parking_lot::Mutex;
 3use serde::Deserialize;
 4use std::str;
 5use tree_sitter::{Language as Grammar, Query};
 6pub use tree_sitter::{Parser, Tree};
 7
 8#[derive(Default, Deserialize)]
 9pub struct LanguageConfig {
10    pub name: String,
11    pub path_suffixes: Vec<String>,
12}
13
14#[derive(Deserialize)]
15pub struct BracketPair {
16    pub start: String,
17    pub end: String,
18}
19
20pub struct Language {
21    pub config: LanguageConfig,
22    pub grammar: Grammar,
23    pub highlight_query: Query,
24    pub brackets_query: Query,
25    pub highlight_map: Mutex<HighlightMap>,
26}
27
28impl Language {
29    pub fn name(&self) -> &str {
30        self.config.name.as_str()
31    }
32
33    pub fn highlight_map(&self) -> HighlightMap {
34        self.highlight_map.lock().clone()
35    }
36
37    pub fn set_theme(&self, theme: &SyntaxTheme) {
38        *self.highlight_map.lock() = HighlightMap::new(self.highlight_query.capture_names(), theme);
39    }
40}