use include_dir::{Dir, File, include_dir};
pub static QUERIES: Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/assets/queries");
pub fn files_for(lang: &str) -> Vec<&'static File<'static>> {
QUERIES
.get_dir(lang)
.map(|d| d.files().collect())
.unwrap_or_default()
}
pub fn bundled_query_names(lang: &str) -> Vec<String> {
let mut names: Vec<String> = files_for(lang)
.iter()
.filter_map(|f| {
let path = f.path();
if path.extension().and_then(|s| s.to_str()) != Some("scm") {
return None;
}
path.file_stem()
.and_then(|s| s.to_str())
.map(|s| s.to_string())
})
.collect();
names.sort();
names
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn rust_has_bundled_highlights() {
let names = bundled_query_names("rust");
assert!(
names.iter().any(|n| n == "highlights"),
"expected highlights.scm in bundled rust queries, got {:?}",
names
);
}
#[test]
fn unknown_language_returns_empty() {
assert!(files_for("definitely-no-such-language").is_empty());
assert!(bundled_query_names("definitely-no-such-language").is_empty());
}
}