zed/languages/rust/config.toml 🔗
@@ -0,0 +1,2 @@
+name = "Rust"
+path_suffixes = ["rs"]
Antonio Scandurra created
zed/languages/rust/config.toml | 2 +
zed/src/editor/display_map/mod.rs | 13 ++++++++--
zed/src/language.rs | 37 +++++++++++++++++++++-----------
3 files changed, 36 insertions(+), 16 deletions(-)
@@ -0,0 +1,2 @@
+name = "Rust"
+path_suffixes = ["rs"]
@@ -450,7 +450,11 @@ pub fn collapse_tabs(
#[cfg(test)]
mod tests {
use super::*;
- use crate::{language::Language, settings::Theme, test::*};
+ use crate::{
+ language::{Language, LanguageConfig},
+ settings::Theme,
+ test::*,
+ };
use buffer::History;
use std::sync::Arc;
@@ -520,10 +524,13 @@ mod tests {
)
.unwrap();
let lang = Arc::new(Language {
- name: "Test".to_string(),
+ config: LanguageConfig {
+ name: "Test".to_string(),
+ path_suffixes: vec![".test".to_string()],
+ ..Default::default()
+ },
grammar: grammar.clone(),
highlight_query: query,
- path_suffixes: vec![".test".to_string()],
theme_mapping: Default::default(),
});
lang.set_theme(&theme);
@@ -1,20 +1,25 @@
use crate::settings::{Theme, ThemeMap};
use parking_lot::Mutex;
use rust_embed::RustEmbed;
-use std::{path::Path, sync::Arc};
+use serde::Deserialize;
+use std::{path::Path, str, sync::Arc};
use tree_sitter::{Language as Grammar, Query};
-
pub use tree_sitter::{Parser, Tree};
#[derive(RustEmbed)]
#[folder = "languages"]
pub struct LanguageDir;
-pub struct Language {
+#[derive(Default, Deserialize)]
+pub struct LanguageConfig {
pub name: String,
+ pub path_suffixes: Vec<String>,
+}
+
+pub struct Language {
+ pub config: LanguageConfig,
pub grammar: Grammar,
pub highlight_query: Query,
- pub path_suffixes: Vec<String>,
pub theme_mapping: Mutex<ThemeMap>,
}
@@ -35,16 +40,15 @@ impl Language {
impl LanguageRegistry {
pub fn new() -> Self {
let grammar = tree_sitter_rust::language();
+ let rust_config = toml::from_slice(&LanguageDir::get("rust/config.toml").unwrap()).unwrap();
let rust_language = Language {
- name: "Rust".to_string(),
+ config: rust_config,
grammar,
highlight_query: Query::new(
grammar,
- std::str::from_utf8(LanguageDir::get("rust/highlights.scm").unwrap().as_ref())
- .unwrap(),
+ str::from_utf8(LanguageDir::get("rust/highlights.scm").unwrap().as_ref()).unwrap(),
)
.unwrap(),
- path_suffixes: vec!["rs".to_string()],
theme_mapping: Mutex::new(ThemeMap::default()),
};
@@ -66,6 +70,7 @@ impl LanguageRegistry {
let path_suffixes = [extension, filename];
self.languages.iter().find(|language| {
language
+ .config
.path_suffixes
.iter()
.any(|suffix| path_suffixes.contains(&Some(suffix.as_str())))
@@ -83,17 +88,23 @@ mod tests {
let registry = LanguageRegistry {
languages: vec![
Arc::new(Language {
- name: "Rust".to_string(),
+ config: LanguageConfig {
+ name: "Rust".to_string(),
+ path_suffixes: vec!["rs".to_string()],
+ ..Default::default()
+ },
grammar,
highlight_query: Query::new(grammar, "").unwrap(),
- path_suffixes: vec!["rs".to_string()],
theme_mapping: Default::default(),
}),
Arc::new(Language {
- name: "Make".to_string(),
+ config: LanguageConfig {
+ name: "Make".to_string(),
+ path_suffixes: vec!["Makefile".to_string(), "mk".to_string()],
+ ..Default::default()
+ },
grammar,
highlight_query: Query::new(grammar, "").unwrap(),
- path_suffixes: vec!["Makefile".to_string(), "mk".to_string()],
theme_mapping: Default::default(),
}),
],
@@ -121,7 +132,7 @@ mod tests {
assert_eq!(registry.select_language("zed/sumk").map(get_name), None);
fn get_name(language: &Arc<Language>) -> &str {
- language.name.as_str()
+ language.config.name.as_str()
}
}
}