Class: TreeHaver::Backends::Rust::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/tree_haver/backends/rust.rb

Overview

Wrapper for tree_stump Parser

Provides TreeHaver-compatible interface to tree_stump’s parser.

Instance Method Summary collapse

Constructor Details

#initializeParser

Create a new parser instance

Raises:



172
173
174
175
# File 'lib/tree_haver/backends/rust.rb', line 172

def initialize
  raise TreeHaver::NotAvailable, "tree_stump not available" unless Rust.available?
  @parser = ::TreeStump::Parser.new
end

Instance Method Details

#language=(lang) ⇒ Language, String

Set the language for this parser

Note: TreeHaver::Parser unwraps language objects before calling this method. When called from TreeHaver::Parser, receives String (language name). For backward compatibility and backend tests, also handles Language wrapper.

Parameters:

  • lang (Language, String)

    the language wrapper or name string

Returns:

  • (Language, String)

    the language that was set



185
186
187
188
189
190
191
# File 'lib/tree_haver/backends/rust.rb', line 185

def language=(lang)
  # Extract language name (handle both wrapper and raw string)
  lang_name = lang.respond_to?(:name) ? lang.name : lang.to_s
  # tree_stump uses set_language with a string name
  @parser.set_language(lang_name)
  lang # rubocop:disable Lint/Void (intentional return value)
end

#parse(source) ⇒ TreeStump::Tree

Parse source code

Parameters:

  • source (String)

    the source code to parse

Returns:

  • (TreeStump::Tree)

    raw backend tree (wrapping happens in TreeHaver::Parser)



197
198
199
200
# File 'lib/tree_haver/backends/rust.rb', line 197

def parse(source)
  # Return raw tree_stump tree - TreeHaver::Parser will wrap it
  @parser.parse(source)
end

#parse_string(old_tree, source) ⇒ TreeStump::Tree

Parse source code with optional incremental parsing

Note: TreeStump does not currently expose incremental parsing to Ruby. The parse method always does a full parse, ignoring old_tree.

Parameters:

  • old_tree (TreeHaver::Tree, nil)

    previous tree for incremental parsing (ignored)

  • source (String)

    the source code to parse

Returns:

  • (TreeStump::Tree)

    raw backend tree (wrapping happens in TreeHaver::Parser)



210
211
212
213
214
# File 'lib/tree_haver/backends/rust.rb', line 210

def parse_string(old_tree, source) # rubocop:disable Lint/UnusedMethodArgument
  # TreeStump's parse method only accepts source as a single argument
  # and internally always passes None for the old tree (no incremental parsing support)
  @parser.parse(source)
end