ast-merge v4.0.1 released!
4.0.1 - 2026-01-11
- TAG: v4.0.1
- COVERAGE: 96.45% – 2553/2647 lines in 51 files
- BRANCH COVERAGE: 87.41% – 812/929 branches in 51 files
- 98.80% documented
Added
Ast::Merge::RSpec::MergeGemRegistry- Fully dynamic merge gem registration for RSpec dependency tagsregister(tag_name, require_path:, merger_class:, test_source:, category:)- Register a merge gemavailable?(tag_name)- Check if a merge gem is available and functionalregistered_gems- Get all registered gem tag namesgems_by_category(category)- Filter gems by category (:markdown, :data, :code, :config, :other)summary- Get availability status of all registered gems- Automatically defines
*_available?methods onDependencyTagsat registration time - External merge gems can now get full RSpec tag support without modifying ast-merge
Changed
- Upgrade to tree_haver v5.0.1
Ast::Merge::AstNodenow inherits fromTreeHaver::Base::Node- Ensures synthetic nodes stay in sync with the canonical Node API
- Inherits
Comparable,Enumerablefrom base class - Retains all existing methods and behavior (Point, Location, signature, etc.)
- Constructor calls
super(self, source: source)to properly initialize base class
- RSpec Dependency Tags refactored to use MergeGemRegistry
- Removed hardcoded merge gem availability checks
- Removed
MERGE_GEM_TEST_SOURCESconstant *_available?methods are now defined dynamically when gems registerany_markdown_merge_available?now queries registry by category- RSpec exclusion filters are configured dynamically from registry
Ast::Merge::Testing::TestableNodenow delegates toTreeHaver::RSpec::TestableNode- The TestableNode implementation has been moved to tree_haver for sharing across all merge gems
spec/support/testable_node.rbnow requires and re-exports the tree_haver version- Backward compatible: existing tests continue to work unchanged
spec/ast/merge/node_wrapper_base_spec.rbrefactored to useTestableNodeinstead of mocks- Real TreeHaver::Node behavior for most tests
- Mocks only retained for edge case testing (e.g., invalid end_line before start_line)
Many paths lead to being a sponsor or a backer of this project. Are you on such a path?