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
466 467 468 469 |
# File 'lib/tree_haver/backends/java.rb', line 466 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).
478 479 480 481 |
# File 'lib/tree_haver/backends/java.rb', line 478 def language=(lang) # lang is already unwrapped by TreeHaver::Parser @parser.language = lang end |
#parse(source) ⇒ Tree
Parse source code
487 488 489 490 491 492 493 |
# File 'lib/tree_haver/backends/java.rb', line 487 def parse(source) java_result = @parser.parse(source) # jtreesitter 0.26.0 returns Optional<Tree> java_tree = unwrap_optional(java_result) raise TreeHaver::Error, "Parser returned no tree" unless java_tree 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.
507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 |
# File 'lib/tree_haver/backends/java.rb', line 507 def parse_string(old_tree, source) # old_tree is already unwrapped to Tree wrapper's impl by TreeHaver::Parser if old_tree # Get the actual Java Tree object java_old_tree = if old_tree.is_a?(Tree) old_tree.impl else unwrap_optional(old_tree) end java_result = if java_old_tree # jtreesitter 0.26.0 API: parse(String source, Tree oldTree) @parser.parse(source, java_old_tree) else @parser.parse(source) end else java_result = @parser.parse(source) end # jtreesitter 0.26.0 returns Optional<Tree> java_tree = unwrap_optional(java_result) raise TreeHaver::Error, "Parser returned no tree" unless java_tree Tree.new(java_tree) end |