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
473 474 475 476 |
# File 'lib/tree_haver/backends/java.rb', line 473 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).
485 486 487 488 |
# File 'lib/tree_haver/backends/java.rb', line 485 def language=(lang) # lang is already unwrapped by TreeHaver::Parser @parser.language = lang end |
#parse(source) ⇒ Tree
Parse source code
494 495 496 497 498 499 500 |
# File 'lib/tree_haver/backends/java.rb', line 494 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.
514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 |
# File 'lib/tree_haver/backends/java.rb', line 514 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 |