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}