1use buffer::{Language, LanguageRegistry};
2use rust_embed::RustEmbed;
3use std::borrow::Cow;
4use std::{str, sync::Arc};
5
6#[derive(RustEmbed)]
7#[folder = "languages"]
8struct LanguageDir;
9
10pub fn build_language_registry() -> LanguageRegistry {
11 let mut languages = LanguageRegistry::default();
12 languages.add(Arc::new(rust()));
13 languages
14}
15
16fn rust() -> Language {
17 let grammar = tree_sitter_rust::language();
18 let rust_config =
19 toml::from_slice(&LanguageDir::get("rust/config.toml").unwrap().data).unwrap();
20 Language::new(rust_config, grammar)
21 .with_highlights_query(load_query("rust/highlights.scm").as_ref())
22 .unwrap()
23 .with_brackets_query(load_query("rust/brackets.scm").as_ref())
24 .unwrap()
25}
26
27fn load_query(path: &str) -> Cow<'static, str> {
28 match LanguageDir::get(path).unwrap().data {
29 Cow::Borrowed(s) => Cow::Borrowed(str::from_utf8(s).unwrap()),
30 Cow::Owned(s) => Cow::Owned(String::from_utf8(s).unwrap()),
31 }
32}