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.

Returns:

  • (Hash{Symbol => Array<Symbol>})
{
  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