diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 39de8918..c7440fcc 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -1,23 +1,16 @@ mod docgen; mod helpers; mod path; -mod querycheck; -mod theme_check; use std::{env, error::Error}; type DynError = Box; pub mod tasks { - use crate::docgen::{lang_features, static_commands, typable_commands, write}; - use crate::docgen::{ - LANG_SUPPORT_MD_OUTPUT, STATIC_COMMANDS_MD_OUTPUT, TYPABLE_COMMANDS_MD_OUTPUT, - }; - use crate::querycheck::query_check; - use crate::theme_check::theme_check; use crate::DynError; pub fn docgen() -> Result<(), DynError> { + use crate::docgen::*; write(TYPABLE_COMMANDS_MD_OUTPUT, &typable_commands()?); write(STATIC_COMMANDS_MD_OUTPUT, &static_commands()?); write(LANG_SUPPORT_MD_OUTPUT, &lang_features()?); @@ -25,11 +18,73 @@ pub mod tasks { } pub fn querycheck() -> Result<(), DynError> { - query_check() + 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; + let grammar_name = language.grammar.as_ref().unwrap_or(language_name); + for query_file in query_files { + let language = get_language(grammar_name); + let query_text = read_query(language_name, query_file); + if let Ok(lang) = language { + if !query_text.is_empty() { + if let Err(reason) = Query::new(&lang, &query_text) { + return Err(format!( + "Failed to parse {} queries for {}: {}", + query_file, language_name, reason + ) + .into()); + } + } + } + } + } + + println!("Query check succeeded"); + + Ok(()) } pub fn themecheck() -> Result<(), DynError> { - theme_check() + use helix_view::theme::Loader; + + let theme_names = [ + vec!["default".to_string(), "base16_default".to_string()], + Loader::read_names(&crate::path::themes()), + ] + .concat(); + let loader = Loader::new(&[crate::path::runtime()]); + let mut errors_present = false; + + for name in theme_names { + let (_, warnings) = loader.load_with_warnings(&name).unwrap(); + + if !warnings.is_empty() { + errors_present = true; + println!("Theme '{name}' loaded with errors:"); + for warning in warnings { + println!("\t* {}", warning); + } + } + } + + match errors_present { + true => Err("Errors found when loading bundled themes".into()), + false => { + println!("Theme check successful!"); + Ok(()) + } + } } pub fn print_help() { @@ -40,6 +95,7 @@ Usage: Run with `cargo xtask `, eg. `cargo xtask docgen`. Tasks: docgen: Generate files to be included in the mdbook output. query-check: Check that tree-sitter queries are valid. + theme-check: Check that theme files in runtime/themes are valid. " ); } diff --git a/xtask/src/querycheck.rs b/xtask/src/querycheck.rs deleted file mode 100644 index a27f85e6..00000000 --- a/xtask/src/querycheck.rs +++ /dev/null @@ -1,39 +0,0 @@ -use crate::DynError; - -pub fn query_check() -> Result<(), DynError> { - 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; - let grammar_name = language.grammar.as_ref().unwrap_or(language_name); - for query_file in query_files { - let language = get_language(grammar_name); - let query_text = read_query(language_name, query_file); - if let Ok(lang) = language { - if !query_text.is_empty() { - if let Err(reason) = Query::new(&lang, &query_text) { - return Err(format!( - "Failed to parse {} queries for {}: {}", - query_file, language_name, reason - ) - .into()); - } - } - } - } - } - - println!("Query check succeeded"); - - Ok(()) -} diff --git a/xtask/src/theme_check.rs b/xtask/src/theme_check.rs deleted file mode 100644 index a2719ede..00000000 --- a/xtask/src/theme_check.rs +++ /dev/null @@ -1,33 +0,0 @@ -use helix_view::theme::Loader; - -use crate::{path, DynError}; - -pub fn theme_check() -> Result<(), DynError> { - let theme_names = [ - vec!["default".to_string(), "base16_default".to_string()], - Loader::read_names(&path::themes()), - ] - .concat(); - let loader = Loader::new(&[path::runtime()]); - let mut errors_present = false; - - for name in theme_names { - let (_, warnings) = loader.load_with_warnings(&name).unwrap(); - - if !warnings.is_empty() { - errors_present = true; - println!("Theme '{name}' loaded with errors:"); - for warning in warnings { - println!("\t* {}", warning); - } - } - } - - match errors_present { - true => Err("Errors found when loading bundled themes".into()), - false => { - println!("Theme check successful!"); - Ok(()) - } - } -}