aboutsummaryrefslogtreecommitdiff
path: root/xtask
diff options
context:
space:
mode:
authorMichael Davis2022-08-25 22:24:09 +0000
committerBlaž Hrastnik2022-08-31 08:45:23 +0000
commit4e4c6da3bfdea0e50e460298eedf41d835f2a551 (patch)
tree54d82fb907d7e01d61fea6ceb3ada7584117c916 /xtask
parentfa1dc7e5086e598eb04a34407d8c09e5605b3760 (diff)
Add query-check xtask
Diffstat (limited to 'xtask')
-rw-r--r--xtask/Cargo.toml1
-rw-r--r--xtask/src/main.rs37
2 files changed, 38 insertions, 0 deletions
diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml
index 717530d0..76c38c99 100644
--- a/xtask/Cargo.toml
+++ b/xtask/Cargo.toml
@@ -8,4 +8,5 @@ edition = "2021"
[dependencies]
helix-term = { version = "0.6", path = "../helix-term" }
helix-core = { version = "0.6", path = "../helix-core" }
+helix-loader = { version = "0.6", path = "../helix-loader" }
toml = "0.5"
diff --git a/xtask/src/main.rs b/xtask/src/main.rs
index f66fb4f4..c7640cd1 100644
--- a/xtask/src/main.rs
+++ b/xtask/src/main.rs
@@ -217,6 +217,41 @@ pub mod tasks {
Ok(())
}
+ pub fn query_check() -> Result<(), String> {
+ use crate::helpers::lang_config;
+ use helix_core::{syntax::read_query, tree_sitter::Query};
+ use helix_loader::grammar::get_language;
+
+ let query_files = [
+ "highlights.scm",
+ "locals.scm",
+ "injections.scm",
+ "textobjects.scm",
+ "indents.scm",
+ ];
+
+ for language in lang_config().language {
+ let language_name = language.language_id.to_ascii_lowercase();
+ let grammar_name = language.grammar.unwrap_or(language.language_id);
+ for query_file in query_files {
+ let language = get_language(&grammar_name);
+ let query_text = read_query(&language_name, query_file);
+ if !query_text.is_empty() && language.is_ok() {
+ if let Err(reason) = Query::new(language.unwrap(), &query_text) {
+ return Err(format!(
+ "Failed to parse {} queries for {}: {}",
+ query_file, language_name, reason
+ ));
+ }
+ }
+ }
+ }
+
+ println!("Query check succeeded");
+
+ Ok(())
+ }
+
pub fn print_help() {
println!(
"
@@ -224,6 +259,7 @@ Usage: Run with `cargo xtask <task>`, eg. `cargo xtask docgen`.
Tasks:
docgen: Generate files to be included in the mdbook output.
+ query-check: Check that tree-sitter queries are valid.
"
);
}
@@ -235,6 +271,7 @@ fn main() -> Result<(), DynError> {
None => tasks::print_help(),
Some(t) => match t.as_str() {
"docgen" => tasks::docgen()?,
+ "query-check" => tasks::query_check()?,
invalid => return Err(format!("Invalid task name: {}", invalid).into()),
},
};