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
431 432 433 434 |
# File 'lib/tree_haver/backends/java.rb', line 431 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).
443 444 445 446 |
# File 'lib/tree_haver/backends/java.rb', line 443 def language=(lang) # lang is already unwrapped by TreeHaver::Parser @parser.language = lang end |
#parse(source) ⇒ Tree
Parse source code
452 453 454 455 456 |
# File 'lib/tree_haver/backends/java.rb', line 452 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.
470 471 472 473 474 475 476 477 478 479 480 |
# File 'lib/tree_haver/backends/java.rb', line 470 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 |