aboutsummaryrefslogtreecommitdiff
path: root/helix-core/src
diff options
context:
space:
mode:
authorMichael Davis2022-02-13 18:11:44 +0000
committerBlaž Hrastnik2022-03-10 08:31:57 +0000
commitc1f90a127b972c8b41b0d24dcacb3bdd480be9c5 (patch)
tree9ffb639d81d28f82dabf88cb3b577459600d2076 /helix-core/src
parentfbb98300dfa4cf12c8aacb1242baab3644e54951 (diff)
add tree-sitter sources to languages.toml
Here we add syntax to the languages.toml languge [[grammar]] name = "<name>" source = { .. } Which can be used to specify a tree-sitter grammar separately of the language that defines it, and we make this distinction for two reasons: * In later commits, we will separate this code from helix-core and bring it to a new helix-loader crate. Using separate schemas for language and grammar configurations allows for a nice divide between the types needed to be declared in helix-loader and in helix-core/syntax * Two different languages may use the same grammar. This is currently the case with llvm-mir-yaml and yaml. We could accomplish a config that works for this with just `[[languages]]`, but it gets a bit dicey with languages depending on one another. If you enable llvm-mir-yaml and disable yaml, does helix still need to fetch and build tree-sitter-yaml? It could be a matter of interpretation.
Diffstat (limited to 'helix-core/src')
-rw-r--r--helix-core/src/indent.rs1
-rw-r--r--helix-core/src/syntax.rs29
2 files changed, 29 insertions, 1 deletions
diff --git a/helix-core/src/indent.rs b/helix-core/src/indent.rs
index 9a329d95..83b2be94 100644
--- a/helix-core/src/indent.rs
+++ b/helix-core/src/indent.rs
@@ -444,6 +444,7 @@ where
debugger: None,
auto_pairs: None,
}],
+ grammar: vec![],
});
// set runtime path so we can find the queries
diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs
index c39e0584..53d20da3 100644
--- a/helix-core/src/syntax.rs
+++ b/helix-core/src/syntax.rs
@@ -54,6 +54,7 @@ where
#[serde(deny_unknown_fields)]
pub struct Configuration {
pub language: Vec<LanguageConfiguration>,
+ pub grammar: Vec<GrammarConfiguration>,
}
// largely based on tree-sitter/cli/src/loader.rs
@@ -239,6 +240,29 @@ pub struct IndentQuery {
pub outdent: HashSet<String>,
}
+#[derive(Debug, Serialize, Deserialize)]
+pub struct GrammarConfiguration {
+ #[serde(rename = "name")]
+ pub grammar_id: String, // c-sharp, rust
+ pub source: GrammarSource,
+ pub path: Option<String>,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+#[serde(rename_all = "lowercase")]
+#[serde(untagged)]
+pub enum GrammarSource {
+ Local {
+ path: String,
+ },
+ Git {
+ #[serde(rename = "git")]
+ remote: String,
+ #[serde(rename = "rev")]
+ revision: String,
+ },
+}
+
#[derive(Debug)]
pub struct TextObjectQuery {
pub query: Query,
@@ -2055,7 +2079,10 @@ mod test {
.map(String::from)
.collect();
- let loader = Loader::new(Configuration { language: vec![] });
+ let loader = Loader::new(Configuration {
+ language: vec![],
+ grammar: vec![],
+ });
let language = get_language(&crate::RUNTIME_DIR, "Rust").unwrap();
let config = HighlightConfiguration::new(