Class: TreeHaver::Backends::Java::Parser
- Inherits:
-
Object
- Object
- TreeHaver::Backends::Java::Parser
- Defined in:
- lib/tree_haver/backends/java.rb
Overview
Wrapper for java-tree-sitter Parser
Instance Method Summary collapse
-
#initialize ⇒ Parser
constructor
Create a new parser instance.
-
#language=(lang) ⇒ void
Set the language for this parser.
-
#parse(source) ⇒ Tree
Parse source code.
-
#parse_string(old_tree, source) ⇒ Tree
Parse source code with optional incremental parsing.
Constructor Details
#initialize ⇒ Parser
Create a new parser instance
423 424 425 426 |
# File 'lib/tree_haver/backends/java.rb', line 423 def initialize raise TreeHaver::NotAvailable, "Java backend not available" unless Java.available? @parser = Java.java_classes[:Parser].new end |
Instance Method Details
#language=(lang) ⇒ void
This method returns an undefined value.
Set the language for this parser
Note: TreeHaver::Parser unwraps language objects before calling this method. This backend receives the Language wrapper’s inner impl (java Language object).
435 436 437 438 |
# File 'lib/tree_haver/backends/java.rb', line 435 def language=(lang) # lang is already unwrapped by TreeHaver::Parser @parser.language = lang end |
#parse(source) ⇒ Tree
Parse source code
444 445 446 447 448 |
# File 'lib/tree_haver/backends/java.rb', line 444 def parse(source) java_tree = @parser.parse(source) # Return raw Java::Tree - TreeHaver::Parser will wrap it Tree.new(java_tree) end |
#parse_string(old_tree, source) ⇒ Tree
Parse source code with optional incremental parsing
Note: old_tree is already unwrapped by TreeHaver::Parser before reaching this method. The backend receives the raw Tree wrapper’s impl, not a TreeHaver::Tree.
When old_tree is provided and has been edited, tree-sitter will reuse unchanged nodes for better performance.
462 463 464 465 466 467 468 469 470 471 472 |
# File 'lib/tree_haver/backends/java.rb', line 462 def parse_string(old_tree, source) # old_tree is already unwrapped to Tree wrapper's impl by TreeHaver::Parser if old_tree java_old_tree = old_tree.is_a?(Tree) ? old_tree.impl : old_tree java_tree = @parser.parse(java_old_tree, source) else java_tree = @parser.parse(source) end # Return raw Java::Tree - TreeHaver::Parser will wrap it Tree.new(java_tree) end |