Module: TreeHaver::Backends::Parslet

Defined in:
lib/tree_haver/backends/parslet.rb

Overview

Note:

This backend requires a Parslet grammar class for the specific language

Parslet backend using pure Ruby PEG parser

This backend wraps Parslet-based parsers (like the toml gem) to provide a pure Ruby alternative to tree-sitter. Parslet is a PEG (Parsing Expression Grammar) parser generator written in Ruby that produces Hash/Array/Slice results rather than a traditional AST.

Unlike tree-sitter backends which are language-agnostic runtime parsers, Parslet parsers are grammar-specific and defined as Ruby classes. Each language needs its own Parslet grammar (e.g., TOML::Parslet for TOML).

Examples:

Using with toml gem

require "toml"

parser = TreeHaver::Parser.new
# For Parslet, "language" is actually a grammar class
parser.language = TOML::Parslet
tree = parser.parse(toml_source)

See Also:

Defined Under Namespace

Classes: Language, Node, Parser, Tree

Class Method Summary collapse

Class Method Details

.available?Boolean

Returns:

  • (Boolean)


41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/tree_haver/backends/parslet.rb', line 41

def available?
  return @loaded if @load_attempted

  @load_attempted = true
  begin
    require 'parslet'
    @loaded = true
  rescue LoadError
    @loaded = false
  rescue StandardError
    @loaded = false
  end
  @loaded
end

.capabilitiesHash{Symbol => Object}

Get capabilities supported by this backend

Examples:

TreeHaver::Backends::Parslet.capabilities
# => { backend: :parslet, query: false, bytes_field: true, incremental: false, comment_support: :none }

Returns:

  • (Hash{Symbol => Object})

    capability map



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/tree_haver/backends/parslet.rb', line 71

def capabilities
  return {} unless available?

  {
    backend: :parslet,
    query: false,          # Parslet doesn't have a query API like tree-sitter
    bytes_field: true,     # Parslet::Slice provides offset and length
    incremental: false,    # Parslet doesn't support incremental parsing
    pure_ruby: true,       # Parslet is pure Ruby (portable)
    comment_support: :none
  }
end

.reset!void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Reset the load state (primarily for testing)



60
61
62
63
# File 'lib/tree_haver/backends/parslet.rb', line 60

def reset!
  @load_attempted = false
  @loaded = false
end