Add query-check xtask

pull/3612/head
Michael Davis 2 years ago committed by Blaž Hrastnik
parent fa1dc7e508
commit 4e4c6da3bf

@ -131,3 +131,23 @@ jobs:
|| (echo "Run 'cargo xtask docgen', commit the changes and push again" \ || (echo "Run 'cargo xtask docgen', commit the changes and push again" \
&& exit 1) && exit 1)
queries:
name: Tree-sitter queries
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v3
- name: Install stable toolchain
uses: helix-editor/rust-toolchain@v1
with:
profile: minimal
override: true
- uses: Swatinem/rust-cache@v1
- name: Generate docs
uses: actions-rs/cargo@v1
with:
command: xtask
args: query-check

1
Cargo.lock generated

@ -1476,6 +1476,7 @@ name = "xtask"
version = "0.6.0" version = "0.6.0"
dependencies = [ dependencies = [
"helix-core", "helix-core",
"helix-loader",
"helix-term", "helix-term",
"toml", "toml",
] ]

@ -334,7 +334,7 @@ impl TextObjectQuery {
} }
} }
fn read_query(language: &str, filename: &str) -> String { pub fn read_query(language: &str, filename: &str) -> String {
static INHERITS_REGEX: Lazy<Regex> = static INHERITS_REGEX: Lazy<Regex> =
Lazy::new(|| Regex::new(r";+\s*inherits\s*:?\s*([a-z_,()-]+)\s*").unwrap()); Lazy::new(|| Regex::new(r";+\s*inherits\s*:?\s*([a-z_,()-]+)\s*").unwrap());

@ -8,4 +8,5 @@ edition = "2021"
[dependencies] [dependencies]
helix-term = { version = "0.6", path = "../helix-term" } helix-term = { version = "0.6", path = "../helix-term" }
helix-core = { version = "0.6", path = "../helix-core" } helix-core = { version = "0.6", path = "../helix-core" }
helix-loader = { version = "0.6", path = "../helix-loader" }
toml = "0.5" toml = "0.5"

@ -217,6 +217,41 @@ pub mod tasks {
Ok(()) 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() { pub fn print_help() {
println!( println!(
" "
@ -224,6 +259,7 @@ Usage: Run with `cargo xtask <task>`, eg. `cargo xtask docgen`.
Tasks: Tasks:
docgen: Generate files to be included in the mdbook output. 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(), None => tasks::print_help(),
Some(t) => match t.as_str() { Some(t) => match t.as_str() {
"docgen" => tasks::docgen()?, "docgen" => tasks::docgen()?,
"query-check" => tasks::query_check()?,
invalid => return Err(format!("Invalid task name: {}", invalid).into()), invalid => return Err(format!("Invalid task name: {}", invalid).into()),
}, },
}; };

Loading…
Cancel
Save