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+)

  • Psych - Uses Ruby’s built-in Psych parser (YAML-only, stdlib)

  • Commonmarker - Uses commonmarker gem (Markdown)

  • Markly - Uses markly gem (Markdown/GFM)

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
PURE_RUBY_BACKENDS =

Pure Ruby backends that parse specific languages These are language-specific and register themselves via LanguageRegistry

Returns:

  • (Hash{Symbol => Hash})

    Maps backend name to language and module info

{
  prism: {language: :ruby, module_name: "Prism"},
  psych: {language: :yaml, module_name: "Psych"},
  commonmarker: {language: :markdown, module_name: "Commonmarker"},
  markly: {language: :markdown, module_name: "Markly"},
}.freeze