• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kettle-rb / tree_haver / 20811468724

08 Jan 2026 09:07AM UTC coverage: 91.873% (+5.0%) from 86.828%
20811468724

push

github

pboling
♻️ Major refactor

### Added

- **BackendRegistry**: New `TreeHaver::BackendRegistry` module for registering backend availability checkers
  - Allows external gems (like `commonmarker-merge`, `markly-merge`, `rbs-merge`) to register their availability checkers
  - `register_availability_checker(backend_name, &block)` - Register a callable that returns true if backend is available
  - `available?(backend_name)` - Check if a backend is available (results are cached)
  - `registered?(backend_name)` - Check if a checker is registered
  - `registered_backends` - Get all registered backend names
  - Used by `TreeHaver::RSpec::DependencyTags` for dynamic backend detection
- **Plugin System**: `commonmarker-merge` and `markly-merge` now provide their own backends via `TreeHaver`'s registry system, removing them from `TreeHaver` core.
- **Backend Architecture Documentation**: Added comprehensive documentation to base classes and all tree-sitter backends explaining the two backend categories:
  - Tree-sitter backends (MRI, Rust, FFI, Java): Use `TreeHaver::Tree` and `TreeHaver::Node` wrappers for raw tree-sitter objects
  - Pure-Ruby/Plugin backends (Citrus, Prism, Psych, Commonmarker, Markly): Define own `Backend::X::Tree` and `Backend::X::Node` classes

### Changed

- **Base Class Inheritance**: `TreeHaver::Tree` and `TreeHaver::Node` now properly inherit from their respective `Base::` classes
  - `TreeHaver::Tree < Base::Tree` - inherits `inner_tree`, `source`, `lines` attributes and default implementations
  - `TreeHaver::Node < Base::Node` - inherits `inner_node`, `source`, `lines` attributes and API contract
  - Base classes document the API contract; subclasses document divergence
- **Base::Node#initialize**: Now accepts keyword arguments `source:` and `lines:` instead of positional for consistency with subclasses
- **DependencyTags**: Now uses `BackendRegistry.available?(:backend_name)` instead of hardcoded `TreeHaver::Backends::*` checks
- **TreeHaver*... (continued)

805 of 956 branches covered (84.21%)

Branch coverage included in aggregate %.

385 of 404 new or added lines in 17 files covered. (95.3%)

1 existing line in 1 file now uncovered.

2021 of 2120 relevant lines covered (95.33%)

43.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

80.85
/lib/tree_haver/backends/java.rb


Source Not Available

The file "lib/tree_haver/backends/java.rb" isn't available on github. Either it's been removed, or the repo root directory needs to be updated.

STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc