@@ -81,12 +81,21 @@ where
83#[derive(Debug, Serialize, Deserialize)]
83#[derive(Debug, Serialize, Deserialize)]
84−#[serde(deny_unknown_fields)]
84+#[serde(rename_all = "kebab-case", deny_unknown_fields)]
85pub struct Configuration {
85pub struct Configuration {
86+ #[serde(rename = "use-grammars")]
87+ pub grammar_selection: Option<GrammarSelection>,
86 pub language: Vec<LanguageConfiguration>,
88 pub language: Vec<LanguageConfiguration>,
87 pub grammar: Vec<GrammarConfiguration>,
89 pub grammar: Vec<GrammarConfiguration>,
92+#[derive(Debug, Serialize, Deserialize)]
93+#[serde(rename_all = "lowercase", untagged)]
94+pub enum GrammarSelection {
95+ Only(HashSet<String>),
96+ Except(HashSet<String>),
90// largely based on tree-sitter/cli/src/loader.rs
99// largely based on tree-sitter/cli/src/loader.rs
91#[derive(Debug, Serialize, Deserialize)]
100#[derive(Debug, Serialize, Deserialize)]
92#[serde(rename_all = "kebab-case", deny_unknown_fields)]
101#[serde(rename_all = "kebab-case", deny_unknown_fields)]
@@ -2110,6 +2119,7 @@ mod test {
2110 let loader = Loader::new(Configuration {
2119 let loader = Loader::new(Configuration {
2111 language: vec![],
2120 language: vec![],
2112 grammar: vec![],
2121 grammar: vec![],
2122+ grammar_selection: None,
2115 let language = get_language(&crate::RUNTIME_DIR, "Rust").unwrap();
2125 let language = get_language(&crate::RUNTIME_DIR, "Rust").unwrap();