Module: TreeHaver::Backends
- Defined in:
- lib/tree_haver.rb,
lib/tree_haver/backends/ffi.rb,
lib/tree_haver/backends/mri.rb,
lib/tree_haver/backends/java.rb,
lib/tree_haver/backends/rust.rb,
lib/tree_haver/backends/prism.rb,
lib/tree_haver/backends/psych.rb,
lib/tree_haver/backends/citrus.rb,
lib/tree_haver/backends/markly.rb,
lib/tree_haver/backends/commonmarker.rb
Overview
Namespace for backend implementations
TreeHaver provides multiple backends to support different Ruby implementations:
-
MRI - Uses ruby_tree_sitter (MRI C extension)
-
Rust - Uses tree_stump (Rust extension with precompiled binaries)
-
FFI - Uses Ruby FFI to call libtree-sitter directly
-
Java - Uses JRuby’s Java integration
-
Citrus - Uses Citrus PEG parser (pure Ruby, portable)
-
Prism - Uses Ruby’s built-in Prism parser (Ruby-only, stdlib in 3.4+)
Defined Under Namespace
Modules: Citrus, Commonmarker, FFI, Java, MRI, Markly, Prism, Psych, Rust
Constant Summary collapse
- BLOCKED_BY =
Known backend conflicts
Maps each backend to an array of backends that block it from working. For example, :ffi is blocked by :mri because once ruby_tree_sitter loads, FFI calls to ts_parser_set_language will segfault.
{ mri: [], rust: [], ffi: [:mri], # FFI segfaults if MRI (ruby_tree_sitter) has been loaded java: [], citrus: [], prism: [], # Prism has no conflicts with other backends psych: [], # Psych has no conflicts with other backends commonmarker: [], # Commonmarker has no conflicts with other backends markly: [], # Markly has no conflicts with other backends }.freeze