tree_sitter_php_only/
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);
25
26pub fn language() -> &'static LanguageTables {
28 &TABLES
29}
30
31fn decode() -> LanguageTables {
32 let keyword_lex_fn: Option<LexFn> = Some(lex::ts_lex_keywords);
33 let scanner_create: Option<ScannerCreateFn> = Some(scanner::create);
34 LanguageTables::decode(BLOB, lex::ts_lex, keyword_lex_fn, scanner_create)
35}
36
37#[cfg(test)]
38mod tests {
39 #[test]
40 fn language_constant() {
41 let language = tree_sitter::Language::new(super::LANGUAGE);
42 assert_eq!(language, super::LANGUAGE.into());
43 assert!(std::ptr::eq(super::LANGUAGE.tables(), super::language()));
44 let mut parser = tree_sitter::Parser::new();
45 parser.set_language(&language).unwrap();
46 assert!(parser.parse("", None).is_some());
47 }
48
49 #[test]
50 fn tables_decode() {
51 let language = super::language();
52 language.validate().unwrap();
53 assert_eq!(language.abi_version, 15);
54 assert_eq!(language.state_count, 3385);
55 assert_eq!(language.symbol_count, 428);
56 }
57}