ast-merge 4.0.2 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 29e3c1eb54812e59b30a8ae0dc42792486ef2e4992dbd43234452cfce0f2b1ab
4
- data.tar.gz: bb1b200aa2a2d8a48c127952510984cf2ccd71e2517ced1d422fe542a7969c78
3
+ metadata.gz: 72301b52fa4f37e5f4224041c08fe9ace0117f84521e37b8b1c8b354bc5af500
4
+ data.tar.gz: 16c3d01ce0e56c17998fcf7e0e4629832fc52db44dc64d07b897004e9981f6ea
5
5
  SHA512:
6
- metadata.gz: b0823b5b64b77947faa3213463c18289a4275b5b8fd7d5a0dcf258c1ae4088dcc50a34923f459944473cfae67e7c18dd646e3236f7ff6eb0898edfdb8b5d9ab2
7
- data.tar.gz: 0f8dafa6c932a75504c898793fb0f51dfa9977d288f70e6e8e9fc8aff9f0f3452742a0302dbdd23aee33db8ab4528834048322af37d7c4d44ec9fb473e682855
6
+ metadata.gz: e0ab85926e6944d30500a5ced0144c86fa966d6a18252cda9c6c8091e4827e62b8743119be97944c30145d9a1e64f8c2fad52c5e9fd6f50d09b3ff70417ce64d
7
+ data.tar.gz: f57d3ce4c7cdb62dbbe59493581bbe2fb721a62ea029bf327a527edd2e76d394be554b34ad97fe68a82f009abf56e39225994835f03315663b8c3b137e56a459
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,29 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [4.0.3] - 2026-01-19
34
+
35
+ - TAG: [v4.0.3][4.0.3t]
36
+ - COVERAGE: 97.30% -- 2739/2815 lines in 53 files
37
+ - BRANCH COVERAGE: 89.84% -- 893/994 branches in 53 files
38
+ - 98.81% documented
39
+
40
+ ### Added
41
+
42
+ - **`Ast::Merge::RSpec::MergeGemRegistry.register_known_gems`**: Selective registration of known merge gems for RSpec dependency tags
43
+ - Allows test suites to explicitly register only the merge gems they need, avoiding overhead of registering all known gems
44
+ - Usage in `spec/config/tree_haver.rb`: `MergeGemRegistry.register_known_gems(:prism_merge, :commonmarker_merge)`
45
+ - Enables proper RSpec tag-based test skipping for optional merge gem dependencies
46
+ - Example: Tests tagged with `:prism_merge` are automatically skipped when prism-merge isn't available
47
+
48
+ ### Changed
49
+
50
+ - Upgrade to [tree_haver v5.0.2](https://github.com/kettle-rb/tree_haver/releases/tag/v5.0.2)
51
+ - **RSpec dependency tag load order pattern**: Merge gems now load tree_haver and dependency tags early via `spec/config/tree_haver.rb`
52
+ - Ensures `TreeHaver::RSpec::DependencyTags` is loaded before gems register themselves
53
+ - Pattern: Load tree_haver/rspec → Load ast/merge/rspec → Register known gems → Load library
54
+ - Applied to markdown-merge and markly-merge; other merge gems should follow this pattern
55
+
33
56
  ## [4.0.2] - 2026-01-12
34
57
 
35
58
  - TAG: [v4.0.2][4.0.2t]
data/README.md CHANGED
@@ -62,7 +62,7 @@ The `*-merge` gem family provides intelligent, AST-based merging for various fil
62
62
 
63
63
  | Gem | Version | CI | | Language<br>/ Format | Parser Backend(s) | Description |
64
64
  |------------------------------------------|----------------------------------------------------------------|--------------------------------------------------------------|----------|-------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|-------------|
65
- | [tree_haver][tree_haver] | [![Version][tree_haver-gem-i]][tree_haver-gem] | [![Version][tree_haver-ci-i]][tree_haver-ci] | Multi | MRI C, Rust, FFI, Java, Prism, Psych, Commonmarker, Markly, Citrus, Parslet | **Foundation**: Cross-Ruby adapter for parsing libraries (like Faraday for HTTP) |
65
+ | [tree_haver][tree_haver] | [![Version][tree_haver-gem-i]][tree_haver-gem] | [![Version][tree_haver-ci-i]][tree_haver-ci] | Multi | Supported Backends: MRI C, Rust, FFI, Java, Prism, Psych, Commonmarker, Markly, Citrus, Parslet | **Foundation**: Cross-Ruby adapter for parsing libraries (like Faraday for HTTP) |
66
66
  | [ast-merge][ast-merge] | [![Version][ast-merge-gem-i]][ast-merge-gem] | [![Version][ast-merge-ci-i]][ast-merge-ci] | Text | internal | **Infrastructure**: Shared base classes and merge logic for all `*-merge` gems |
67
67
  | [bash-merge][bash-merge] | [![Version][bash-merge-gem-i]][bash-merge-gem] | [![Version][bash-merge-ci-i]][bash-merge-ci] | Bash | [tree-sitter-bash][ts-bash] (via tree_haver) | Smart merge for Bash scripts |
68
68
  | [commonmarker-merge][commonmarker-merge] | [![Version][commonmarker-merge-gem-i]][commonmarker-merge-gem] | [![Version][commonmarker-merge-ci-i]][commonmarker-merge-ci] | Markdown | [Commonmarker][commonmarker] (via tree_haver) | Smart merge for Markdown (CommonMark via comrak Rust) |
@@ -80,18 +80,18 @@ The `*-merge` gem family provides intelligent, AST-based merging for various fil
80
80
 
81
81
  tree_haver supports multiple parsing backends, but not all backends work on all Ruby platforms:
82
82
 
83
- | Platform 👉️<br> TreeHaver Backend 👇️ | MRI | JRuby | TruffleRuby | Notes |
84
- |------------------------------------------------|:---:|:-----:|:-----------:|-----------------------------------------------------|
85
- | **MRI** ([ruby_tree_sitter][ruby_tree_sitter]) | ✅ | ❌ | ❌ | C extension, MRI only |
86
- | **Rust** ([tree_stump][tree_stump]) | ✅ | ❌ | ❌ | Rust extension via magnus/rb-sys, MRI only |
87
- | **FFI** | ✅ | ✅ | ❌ | TruffleRuby's FFI doesn't support `STRUCT_BY_VALUE` |
88
- | **Java** ([jtreesitter][jtreesitter]) | ❌ | ✅ | ❌ | JRuby only, requires grammar JARs |
89
- | **Prism** | ✅ | ✅ | ✅ | Ruby parsing, stdlib in Ruby 3.4+ |
90
- | **Psych** | ✅ | ✅ | ✅ | YAML parsing, stdlib |
91
- | **Citrus** | ✅ | ✅ | ✅ | Pure Ruby PEG parser, no native dependencies |
92
- | **Parslet** | ✅ | ✅ | ✅ | Pure Ruby PEG parser, no native dependencies |
93
- | **Commonmarker** | ✅ | ❌ | ❓ | Rust extension for Markdown |
94
- | **Markly** | ✅ | ❌ | ❓ | C extension for Markdown |
83
+ | Platform 👉️<br> TreeHaver Backend 👇️ | MRI | JRuby | TruffleRuby | Notes |
84
+ |-------------------------------------------------|:---:|:-----:|:-----------:|----------------------------------------------------------------------------|
85
+ | **MRI** ([ruby_tree_sitter][ruby_tree_sitter]) | ✅ | ❌ | ❌ | C extension, MRI only |
86
+ | **Rust** ([tree_stump][tree_stump]) | ✅ | ❌ | ❌ | Rust extension via magnus/rb-sys, MRI only |
87
+ | **FFI** ([ffi][ffi]) | ✅ | ✅ | ❌ | TruffleRuby's FFI doesn't support `STRUCT_BY_VALUE` |
88
+ | **Java** ([jtreesitter][jtreesitter]) | ❌ | ✅ | ❌ | JRuby only, requires grammar JARs |
89
+ | **Prism** ([prism][prism]) | ✅ | ✅ | ✅ | Ruby parsing, stdlib in Ruby 3.4+ |
90
+ | **Psych** ([psych][psych]) | ✅ | ✅ | ✅ | YAML parsing, stdlib |
91
+ | **Citrus** ([citrus][citrus]) | ✅ | ✅ | ✅ | Pure Ruby PEG parser, no native dependencies |
92
+ | **Parslet** ([parslet][parslet]) | ✅ | ✅ | ✅ | Pure Ruby PEG parser, no native dependencies |
93
+ | **Commonmarker** ([commonmarker][commonmarker]) | ✅ | ❌ | ❓ | Rust extension for Markdown (via [commonmarker-merge][commonmarker-merge]) |
94
+ | **Markly** ([markly][markly]) | ✅ | ❌ | ❓ | C extension for Markdown (via [markly-merge][markly-merge]) |
95
95
 
96
96
  **Legend**: ✅ = Works, ❌ = Does not work, ❓ = Untested
97
97
 
@@ -185,6 +185,7 @@ tree_haver supports multiple parsing backends, but not all backends work on all
185
185
  [kettle-jem-ci]: https://github.com/kettle-rb/kettle-jem/actions/workflows/current.yml
186
186
  [prism]: https://github.com/ruby/prism
187
187
  [psych]: https://github.com/ruby/psych
188
+ [ffi]: https://github.com/ffi/ffi
188
189
  [ts-json]: https://github.com/tree-sitter/tree-sitter-json
189
190
  [ts-jsonc]: https://gitlab.com/WhyNotHugo/tree-sitter-jsonc
190
191
  [ts-bash]: https://github.com/tree-sitter/tree-sitter-bash
@@ -199,6 +200,8 @@ tree_haver supports multiple parsing backends, but not all backends work on all
199
200
  [ruby_tree_sitter]: https://github.com/Faveod/ruby-tree-sitter
200
201
  [tree_stump]: https://github.com/joker1007/tree_stump
201
202
  [jtreesitter]: https://central.sonatype.com/artifact/io.github.tree-sitter/jtreesitter
203
+ [citrus]: https://github.com/mjackson/citrus
204
+ [parslet]: https://github.com/kschiess/parslet
202
205
 
203
206
  ### Architecture: tree\_haver + ast-merge
204
207
 
@@ -788,7 +791,7 @@ Support us with a monthly donation and help us continue our activities. \[[Becom
788
791
  NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
789
792
 
790
793
  <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
791
- No backers yet. Be the first\!
794
+ No backers yet. Be the first!
792
795
  <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
793
796
 
794
797
  ### Open Collective for Organizations
@@ -798,7 +801,7 @@ Become a sponsor and get your logo on our README on GitHub with a link to your s
798
801
  NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
799
802
 
800
803
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
801
- No sponsors yet. Be the first\!
804
+ No sponsors yet. Be the first!
802
805
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
803
806
 
804
807
  [kettle-readme-backers]: https://github.com/kettle-rb/ast-merge/blob/main/exe/kettle-readme-backers
@@ -84,6 +84,21 @@ module Ast
84
84
  end
85
85
  end
86
86
 
87
+ # NOTE: Known merge gems (KNOWN_GEMS) are NOT automatically registered here.
88
+ # Each test suite should explicitly register only the gems it needs in its
89
+ # spec/config/tree_haver.rb file using:
90
+ #
91
+ # Ast::Merge::RSpec::MergeGemRegistry.register_known_gems(:gem1, :gem2, ...)
92
+ #
93
+ # This avoids wasting time registering gems that aren't needed for a particular
94
+ # test suite. Only the gems that are actually required for testing should be registered.
95
+ #
96
+ # Example for a gem that needs to test with optional markdown backends:
97
+ # Ast::Merge::RSpec::MergeGemRegistry.register_known_gems(
98
+ # :commonmarker_merge,
99
+ # :markly_merge
100
+ # )
101
+
87
102
  # Configure RSpec with dependency-based exclusion filters
88
103
  RSpec.configure do |config|
89
104
  deps = Ast::Merge::RSpec::DependencyTags
@@ -253,6 +253,48 @@ module Ast
253
253
  end
254
254
  end
255
255
 
256
+ # Register one or more known gems for RSpec dependency tag support
257
+ #
258
+ # This allows test suites to explicitly register only the merge gems they need
259
+ # for their tests, avoiding the overhead of registering all known gems.
260
+ #
261
+ # @param gem_names [Array<Symbol>] list of gem names from KNOWN_GEMS to register
262
+ # @return [void]
263
+ #
264
+ # @example In spec/config/tree_haver.rb
265
+ # # Only register the markdown merge gems that markly-merge tests depend on
266
+ # Ast::Merge::RSpec::MergeGemRegistry.register_known_gems(:prism_merge)
267
+ #
268
+ # @example Register multiple gems
269
+ # Ast::Merge::RSpec::MergeGemRegistry.register_known_gems(
270
+ # :commonmarker_merge,
271
+ # :markly_merge
272
+ # )
273
+ def register_known_gems(*gem_names)
274
+ gem_names.each do |tag_name|
275
+ tag_sym = tag_name.to_sym
276
+
277
+ # Skip if not in KNOWN_GEMS
278
+ unless KNOWN_GEMS.key?(tag_sym)
279
+ warn("Unknown gem: #{tag_name}. Available: #{KNOWN_GEMS.keys.join(", ")}")
280
+ next
281
+ end
282
+
283
+ # Skip if already registered
284
+ next if registered?(tag_sym)
285
+
286
+ metadata = KNOWN_GEMS[tag_sym]
287
+ register(
288
+ tag_sym,
289
+ require_path: metadata[:require_path],
290
+ merger_class: metadata[:merger_class],
291
+ test_source: metadata[:test_source],
292
+ category: metadata[:category],
293
+ skip_instantiation: metadata[:skip_instantiation],
294
+ )
295
+ end
296
+ end
297
+
256
298
  # Get all registered gem tag names (including pre-configured known gems)
257
299
  #
258
300
  # @return [Array<Symbol>] list of registered tag names
@@ -5,7 +5,7 @@ module Ast
5
5
  # Version information for Ast::Merge
6
6
  module Version
7
7
  # Current version of the ast-merge gem
8
- VERSION = "4.0.2"
8
+ VERSION = "4.0.3"
9
9
  end
10
10
  VERSION = Version::VERSION # traditional location
11
11
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ast-merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.2
4
+ version: 4.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -66,7 +66,7 @@ dependencies:
66
66
  version: '5.0'
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 5.0.1
69
+ version: 5.0.2
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '5.0'
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 5.0.1
79
+ version: 5.0.2
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: kettle-dev
82
82
  requirement: !ruby/object:Gem::Requirement
@@ -382,10 +382,10 @@ licenses:
382
382
  - MIT
383
383
  metadata:
384
384
  homepage_uri: https://ast-merge.galtzo.com/
385
- source_code_uri: https://github.com/kettle-rb/ast-merge/tree/v4.0.2
386
- changelog_uri: https://github.com/kettle-rb/ast-merge/blob/v4.0.2/CHANGELOG.md
385
+ source_code_uri: https://github.com/kettle-rb/ast-merge/tree/v4.0.3
386
+ changelog_uri: https://github.com/kettle-rb/ast-merge/blob/v4.0.3/CHANGELOG.md
387
387
  bug_tracker_uri: https://github.com/kettle-rb/ast-merge/issues
388
- documentation_uri: https://www.rubydoc.info/gems/ast-merge/4.0.2
388
+ documentation_uri: https://www.rubydoc.info/gems/ast-merge/4.0.3
389
389
  funding_uri: https://github.com/sponsors/pboling
390
390
  wiki_uri: https://github.com/kettle-rb/ast-merge/wiki
391
391
  news_uri: https://www.railsbling.com/tags/ast-merge
@@ -414,7 +414,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
414
414
  - !ruby/object:Gem::Version
415
415
  version: '0'
416
416
  requirements: []
417
- rubygems_version: 4.0.3
417
+ rubygems_version: 4.0.4
418
418
  specification_version: 4
419
419
  summary: "☯️ Shared infrastructure for the *-merge gem family"
420
420
  test_files: []
metadata.gz.sig CHANGED
Binary file