tree_sitter_powershell/
lib.rs1#![forbid(unsafe_code)]
8
9mod lex;
10mod scanner;
11
12use std::sync::LazyLock;
13
14use tree_sitter_language::{LanguageFn, LanguageTables, LexFn, ScannerCreateFn};
15
16static BLOB: &[u8] = include_bytes!("tables.bin");
18
19static TABLES: LazyLock<LanguageTables> = LazyLock::new(decode);
20
21pub const LANGUAGE: LanguageFn = LanguageFn::from_fn(language);
24
25pub fn language() -> &'static LanguageTables {
27 &TABLES
28}
29
30fn decode() -> LanguageTables {
31 let keyword_lex_fn: Option<LexFn> = None;
32 let scanner_create: Option<ScannerCreateFn> = Some(scanner::create);
33 LanguageTables::decode(BLOB, lex::ts_lex, keyword_lex_fn, scanner_create)
34}
35
36#[cfg(test)]
37mod tests {
38 #[test]
39 fn language_constant() {
40 let language = tree_sitter::Language::new(super::LANGUAGE);
41 assert_eq!(language, super::LANGUAGE.into());
42 assert!(std::ptr::eq(super::LANGUAGE.tables(), super::language()));
43 let mut parser = tree_sitter::Parser::new();
44 parser.set_language(&language).unwrap();
45 assert!(parser.parse("", None).is_some());
46 }
47
48 #[test]
49 fn tables_decode() {
50 let language = super::language();
51 assert_eq!(language.abi_version, 15);
52 assert_eq!(language.state_count, 2127);
53 assert_eq!(language.symbol_count, 415);
54 }
55}