on d9d59cd help sign in
89 lines 2.1 kB history raw
1use tree_sitter::Language;
3#[macro_export]
4macro_rules! mk_extern {
5 ( $( $name:ident ),* ) => {
6 $(
7 extern "C" { pub fn $name() -> Language; }
8 )*
9 };
12#[macro_export]
13macro_rules! mk_enum {
14 ( $( $camel:ident ),* ) => {
15 #[derive(Clone, Copy, Debug, PartialEq)]
16 pub enum LANG {
17 $(
18 $camel,
19 )*
20 }
21 };
24#[macro_export]
25macro_rules! mk_get_language {
26 ( $( ($camel:ident, $name:ident) ),* ) => {
27 #[must_use]
28 pub fn get_language(lang: LANG) -> Language {
29 unsafe {
30 match lang {
31 $(
32 LANG::$camel => $name(),
33 )*
34 }
35 }
36 }
37 };
40#[macro_export]
41macro_rules! mk_get_language_name {
42 ( $( $camel:ident ),* ) => {
43 #[must_use]
44 pub const fn get_language_name(lang: LANG) -> &'static str {
45 match lang {
46 $(
47 LANG::$camel => stringify!($camel),
48 )*
49 }
50 }
51 };
54#[macro_export]
55macro_rules! mk_langs {
56 ( $( ($camel:ident, $name:ident) ),* ) => {
57 mk_extern!($( $name ),*);
58 mk_enum!($( $camel ),*);
59 mk_get_language!($( ($camel, $name) ),*);
60 mk_get_language_name!($( $camel ),*);
61 };
64mk_langs!(
65 // 1) Name for enum
66 // 2) tree-sitter function to call to get a Language
67 (Agda, tree_sitter_agda),
68 (Bash, tree_sitter_bash),
69 (C, tree_sitter_c),
70 (CSharp, tree_sitter_c_sharp),
71 // (Cpp, tree_sitter_cpp),
72 (Css, tree_sitter_css),
73 (Go, tree_sitter_go),
74 (Haskell, tree_sitter_haskell),
75 (Html, tree_sitter_html),
76 (Java, tree_sitter_java),
77 (Javascript, tree_sitter_javascript),
78 (Json, tree_sitter_json),
79 (Julia, tree_sitter_julia),
80 (Php, tree_sitter_php),
81 (Python, tree_sitter_python),
82 (Ruby, tree_sitter_ruby),
83 (Rust, tree_sitter_rust),
84 (Scala, tree_sitter_scala),
85 (Swift, tree_sitter_swift),
86 (Toml, tree_sitter_toml),
87 (Tsx, tree_sitter_tsx),
88 (Typescript, tree_sitter_typescript)
89);