Skip to main content

tokensave_large_treesitters/
lib.rs

1//! All tree-sitter grammars for tokensave.
2//!
3//! Tier: **large** — 47 languages (includes all medium-tier languages).
4//!
5//! Additional languages: Zig, Nix, Protobuf, Perl, Fortran, Pascal,
6//! PowerShell, VB.NET, Objective-C, Batch, COBOL, MSBASIC2, GW-BASIC, QBasic,
7//! GLSL, Markdown, R, SQL, Julia, Haskell, OCaml, Clojure, Erlang, Elixir,
8//! F#, Lean 4, Quint, Kotlin, TOML
9
10pub use tokensave_medium_treesitters;
11pub use tree_sitter;
12
13pub mod languages {
14    pub use arborium_kotlin;
15    pub use arborium_lean;
16    pub use tokensave_medium_treesitters::languages::*;
17    pub use tree_sitter_batch;
18    pub use tree_sitter_clojure_orchard;
19    pub use tree_sitter_elixir;
20    pub use tree_sitter_erlang;
21    pub use tree_sitter_fortran;
22    pub use tree_sitter_fsharp;
23    pub use tree_sitter_glsl;
24    pub use tree_sitter_gwbasic;
25    pub use tree_sitter_haskell;
26    pub use tree_sitter_julia;
27    pub use tree_sitter_msbasic2;
28    pub use tree_sitter_nix;
29    pub use tree_sitter_objc;
30    pub use tree_sitter_ocaml;
31    pub use tree_sitter_pascal;
32    pub use tree_sitter_perl;
33    pub use tree_sitter_powershell;
34    pub use tree_sitter_qbasic;
35    pub use tree_sitter_r;
36    pub use tree_sitter_sequel;
37    pub use tree_sitter_toml_ng;
38    pub use tree_sitter_vb_dotnet;
39    pub use tree_sitter_zig;
40}
41
42/// Vendored tree-sitter-protobuf grammar (compiled from C source via build.rs).
43pub mod protobuf {
44    unsafe extern "C" {
45        fn tree_sitter_protobuf() -> *const ();
46    }
47
48    pub const LANGUAGE: tree_sitter_language::LanguageFn =
49        unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_protobuf) };
50}
51
52/// Vendored tree-sitter-cobol grammar (compiled from C source via build.rs).
53pub mod cobol {
54    unsafe extern "C" {
55        fn tree_sitter_COBOL() -> *const ();
56    }
57
58    pub const LANGUAGE: tree_sitter_language::LanguageFn =
59        unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_COBOL) };
60}
61
62/// Vendored tree-sitter-markdown grammars (block + inline) from
63/// `tree-sitter-grammars/tree-sitter-markdown`. The block parser produces
64/// `(document … (inline))` nodes; each `(inline)` byte range should be
65/// re-parsed with `inline::LANGUAGE` to extract links, emphasis, etc.
66pub mod markdown {
67    unsafe extern "C" {
68        fn tree_sitter_markdown() -> *const ();
69    }
70
71    pub const LANGUAGE: tree_sitter_language::LanguageFn =
72        unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_markdown) };
73
74    pub mod inline {
75        unsafe extern "C" {
76            fn tree_sitter_markdown_inline() -> *const ();
77        }
78
79        pub const LANGUAGE: tree_sitter_language::LanguageFn =
80            unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_markdown_inline) };
81    }
82}
83
84/// tree-sitter-dockerfile exports a `language()` function, not a `LanguageFn`
85/// constant. Reference the C symbol directly so we get a `LanguageFn`.
86pub mod dockerfile {
87    unsafe extern "C" {
88        fn tree_sitter_dockerfile() -> *const ();
89    }
90
91    pub const LANGUAGE: tree_sitter_language::LanguageFn =
92        unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_dockerfile) };
93}
94
95/// Vendored tree-sitter-quint grammar (compiled from C source via build.rs).
96/// Source: zdavison/tree-sitter-quint @ 5155d17 — no Rust bindings published.
97pub mod quint {
98    unsafe extern "C" {
99        fn tree_sitter_quint() -> *const ();
100    }
101
102    pub const LANGUAGE: tree_sitter_language::LanguageFn =
103        unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_quint) };
104}
105
106/// `arborium-lean` exposes a `language()` fn (returning `tree_sitter::Language`)
107/// rather than a `LanguageFn` constant; re-export it under a typed module.
108pub mod lean {
109    pub use arborium_lean::language;
110}
111
112/// `arborium-kotlin` exposes a `language()` fn rather than a `LanguageFn`
113/// constant; re-export it under a typed module.
114pub mod kotlin {
115    pub use arborium_kotlin::language;
116}
117
118pub mod toml {
119    pub use tree_sitter_toml_ng::LANGUAGE;
120}
121
122/// Returns (name, language_fn) pairs for all large-tier languages.
123pub fn all_languages() -> Vec<(&'static str, tree_sitter_language::LanguageFn)> {
124    let mut langs = tokensave_medium_treesitters::all_languages();
125    langs.extend([
126        ("zig", tree_sitter_zig::LANGUAGE),
127        ("nix", tree_sitter_nix::LANGUAGE),
128        ("protobuf", protobuf::LANGUAGE),
129        ("perl", tree_sitter_perl::LANGUAGE),
130        ("fortran", tree_sitter_fortran::LANGUAGE),
131        ("pascal", tree_sitter_pascal::LANGUAGE),
132        ("powershell", tree_sitter_powershell::LANGUAGE),
133        ("vbnet", tree_sitter_vb_dotnet::LANGUAGE),
134        ("objc", tree_sitter_objc::LANGUAGE),
135        ("batch", tree_sitter_batch::LANGUAGE),
136        ("cobol", cobol::LANGUAGE),
137        ("msbasic2", tree_sitter_msbasic2::LANGUAGE),
138        ("gwbasic", tree_sitter_gwbasic::LANGUAGE),
139        ("qbasic", tree_sitter_qbasic::LANGUAGE),
140        ("glsl", tree_sitter_glsl::LANGUAGE_GLSL),
141        ("dockerfile", dockerfile::LANGUAGE),
142        ("markdown", markdown::LANGUAGE),
143        ("r", tree_sitter_r::LANGUAGE),
144        ("sql", tree_sitter_sequel::LANGUAGE),
145        ("julia", tree_sitter_julia::LANGUAGE),
146        ("haskell", tree_sitter_haskell::LANGUAGE),
147        ("ocaml", tree_sitter_ocaml::LANGUAGE_OCAML),
148        ("clojure", tree_sitter_clojure_orchard::LANGUAGE),
149        ("erlang", tree_sitter_erlang::LANGUAGE),
150        ("elixir", tree_sitter_elixir::LANGUAGE),
151        ("fsharp", tree_sitter_fsharp::LANGUAGE_FSHARP),
152        ("lean", arborium_lean::language()),
153        ("kotlin", arborium_kotlin::language()),
154        ("toml", tree_sitter_toml_ng::LANGUAGE),
155        ("quint", quint::LANGUAGE),
156    ]);
157    langs
158}