@@ -81,12 +81,21 @@ where
8181}
8282
8383#[derive(Debug, Serialize, Deserialize)]
84−#[serde(deny_unknown_fields)]
84+#[serde(rename_all = "kebab-case", deny_unknown_fields)]
8585pub struct Configuration {
86+ #[serde(rename = "use-grammars")]
87+ pub grammar_selection: Option<GrammarSelection>,
8688 pub language: Vec<LanguageConfiguration>,
8789 pub grammar: Vec<GrammarConfiguration>,
8890}
8991
92+#[derive(Debug, Serialize, Deserialize)]
93+#[serde(rename_all = "lowercase", untagged)]
94+pub enum GrammarSelection {
95+ Only(HashSet<String>),
96+ Except(HashSet<String>),
97+}
98+
9099// largely based on tree-sitter/cli/src/loader.rs
91100#[derive(Debug, Serialize, Deserialize)]
92101#[serde(rename_all = "kebab-case", deny_unknown_fields)]
@@ -2110,6 +2119,7 @@ mod test {
21102119 let loader = Loader::new(Configuration {
21112120 language: vec![],
21122121 grammar: vec![],
2122+ grammar_selection: None,
21132123 });
21142124
21152125 let language = get_language(&crate::RUNTIME_DIR, "Rust").unwrap();