tree_haver v2.0.0 released!
2.0.0 - 2025-12-15
- TAG: v2.0.0
- COVERAGE: 82.78% – 601/726 lines in 11 files
- BRANCH COVERAGE: 70.45% – 186/264 branches in 11 files
- 91.90% documented
Added
- Added support for Citrus backend (
backends/citrus.rb) - a pure Ruby grammar parser with its own distinct grammar structure - Added
TreeHaver::Treeunified wrapper class providing consistent API across all backends - Added
TreeHaver::Nodeunified wrapper class providing consistent API across all backends - Added
TreeHaver::Pointclass that works as both object and hash for position compatibility - Added passthrough mechanism via
method_missingfor accessing backend-specific features - Added
inner_nodeaccessor onTreeHaver::Nodefor advanced backend-specific usage - Added
inner_treeaccessor onTreeHaver::Treefor advanced backend-specific usage - Added comprehensive test suite for
TreeHaver::Nodewrapper class (88 examples) - Added comprehensive test suite for
TreeHaver::Treewrapper class (17 examples) - Added comprehensive test suite for
TreeHaver::Parserclass (12 examples) - Added complete test coverage for Citrus backend (41 examples)
- Enhanced
TreeHaver::Languagetests for dynamic language helpers
Changed
- BREAKING: All backends now return
TreeHaver::TreefromParser#parseandParser#parse_string - BREAKING:
TreeHaver::Tree#root_nodenow returnsTreeHaver::Nodeinstead of backend-specific node - BREAKING: All child/sibling/parent methods on nodes now return
TreeHaver::Nodewrappers - Updated MRI backend (
backends/mri.rb) to return wrappedTreeHaver::Treewith source - Updated Rust backend (
backends/rust.rb) to return wrappedTreeHaver::Treewith source - Updated FFI backend (
backends/ffi.rb) to return wrappedTreeHaver::Treewith source - Updated Java backend (
backends/java.rb) to return wrappedTreeHaver::Treewith source - Updated Citrus backend (
backends/citrus.rb) to return wrappedTreeHaver::Treewith source - Disabled old pass-through stub classes in
tree_haver.rb(wrapped inif falsefor reference)
Fixed
- Fixed
TreeHaver::Tree#supports_editing?and#editto handle Delegator wrappers correctly by using.method(:edit)check instead ofrespond_to? - Fixed
PathValidatorto accept versioned.sofiles (e.g.,.so.0,.so.14) which are standard on Linux systems - Fixed backend portability - code now works identically across MRI, Rust, FFI, Java, and Citrus backends
- Fixed inconsistent API -
node.typenow works on all backends (wasnode.kindon TreeStump) - Fixed position objects -
start_pointandend_pointnow return objects that work as both.rowand[:row] - Fixed child iteration -
node.eachandnode.childrennow consistently returnTreeHaver::Nodeobjects - Fixed text extraction -
node.textnow works consistently by storing source inTreeHaver::Tree
Many paths lead to being a sponsor or a backer of this project. Are you on such a path?