Class: TreeHaver::Backends::Rust::Parser
- Inherits:
-
Object
- Object
- TreeHaver::Backends::Rust::Parser
- 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
-
#initialize ⇒ Parser
constructor
Create a new parser instance.
-
#language=(lang) ⇒ Language, String
Set the language for this parser.
-
#parse(source) ⇒ TreeStump::Tree
Parse source code.
-
#parse_string(old_tree, source) ⇒ TreeStump::Tree
Parse source code with optional incremental parsing.
Constructor Details
#initialize ⇒ Parser
Create a new parser instance
160 161 162 163 |
# File 'lib/tree_haver/backends/rust.rb', line 160 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.
173 174 175 176 177 178 179 |
# File 'lib/tree_haver/backends/rust.rb', line 173 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
185 186 187 188 |
# File 'lib/tree_haver/backends/rust.rb', line 185 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.
198 199 200 201 202 |
# File 'lib/tree_haver/backends/rust.rb', line 198 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 |