diff --git a/.gitignore b/.gitignore
index 47dfeb723..51328a2d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,8 @@
/log/
/pkg/
**/results/
+!gems/kettle-jem/benchmarks/results/
+!gems/kettle-jem/benchmarks/results/README.md
/tmp/
/vendor/bundle/
.env.local
diff --git a/.kettle-family.yml b/.kettle-family.yml
index 398693343..0710807e9 100644
--- a/.kettle-family.yml
+++ b/.kettle-family.yml
@@ -4,6 +4,8 @@ family:
members_root: gems
members:
+ exclude:
+ - "**/benchmarks/**"
order:
mode: dependency
hints:
@@ -17,6 +19,7 @@ members:
- bash-merge
- dotenv-merge
- rbs-merge
+ - html-merge
- json-merge
- yaml-merge
- toml-merge
@@ -114,7 +117,7 @@ release:
publish_command: bundle exec kettle-release
env:
GALTZO_FLOSS_DEV: false
- KETTLE_RB_DEV: false
+ KETTLE_DEV_DEV: false
STRUCTUREDMERGE_DEV: false
TSLP_DEV: ""
family_changelog:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9e99e1f9d..551dc1fbd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,17 +20,38 @@ Please file a bug if you notice a violation of semantic versioning.
### Added
+- `ast-crispr` now provides `Ast::Crispr::DeleteBatch` for deleting matches from
+ multiple structural selectors through one parsed document context.
+- Added `html-merge` as a StructuredMerge Ruby family member with TreeHaver
+ HTML parsing, feature profile reporting, and an initial ast-crispr-backed HTML
+ structural edit adapter.
- TreeHaver RSpec dependency tags now support parser capability checks, and
`ruby-merge` exposes TSLP Ruby capability tags for import records, top-level
call records, and namespace-form equivalence.
+- `kettle-jem` benchmark results now include README timing breakdowns for both
+ the baseline and fastest non-baseline variant.
### Changed
+- `kettle-jem` now migrates existing SimpleCov bootstrap files for packaged
+ monorepo subgems even when the selected template profile does not otherwise
+ manage per-gem harness files.
- `kettle-jem` RuboCop guidance now treats `.rubocop_gradual.lock` as a work
list rather than a baseline, and documents explicit config and inline
exceptions for intentional style deviations.
- Current CI now detects changed monorepo gems and runs each changed gem's own
`kettle-test` suite instead of installing the root aggregate bundle.
+- `kettle-jem` templating now defaults no-option runs to classified thread
+ planning and file work with half of the available CPU cores.
+- `kettle-jem` Ractor-backed file work now batches file units by worker count
+ instead of spawning one Ractor per file.
+- `kettle-jem` README processing now reuses structural owner scans and batches
+ several Markdown deletions to reduce repeated parser passes.
+- `kettle-jem` main Gemfile templating now removes repeated direct sibling
+ execution blocks left behind by older `nomono` bootstrap output while applying
+ the simplified `require "nomono/bundler"` loader.
+- `smorg-rb` diff-driver output now appends a unified review hunk with exact
+ removed and added source text after the semantic structured-diff summary.
- Retemplated generated project metadata, support documentation, CI workflows,
binstubs, and development dependency floors across the StructuredMerge Ruby
gem family with `kettle-jem` v7.0.0.
@@ -39,12 +60,38 @@ Please file a bug if you notice a violation of semantic versioning.
on bespoke workspace scripts.
- `kettle-jem` gem templates now require `kettle-dev` 2.0.8 or newer.
- `ast-merge` now requires `token-resolver` 2.0.1 or newer.
-- Gems that use `tree_sitter_language_pack` now resolve it through the
- StructuredMerge Ruby 4-compatible fork branch in their development Gemfiles
- until an upstream Ruby 4-compatible release is available.
+- `ast-merge` now provides shared comment/layout emission helpers for root
+ boundary text, leading segments, retained blank lines, and equivalent-region
+ ownership checks, and RBS, Bash, dotenv, and Psych merges now use that common
+ path where their semantics are format-neutral. Those helpers reuse shared
+ line-range normalization instead of duplicating owner location handling.
+- RBS, Bash, and dotenv removal-mode comment promotion now uses the shared
+ `ast-merge` removed-owner preservation path for leading segments, trailing
+ regions, and fallback layout gaps.
+- `ast-merge` now provides shared source-region report helpers for comment-block
+ attachment and blank interstitial ownership, and `ruby-merge` uses those
+ helpers for its Ruby fixture/report APIs instead of carrying local copies of
+ format-neutral ownership mechanics. The shared helpers now also cover
+ interstitial region construction, public owner projection, source spans,
+ source content slices, and attached leading comment regions.
+- `kettle-jem` benchmark runs now support `--only` and
+ `KETTLE_JEM_BENCHMARK_ONLY` selectors so combined worker variants can be
+ measured without also running planning-only and file-only split variants.
+- Root architecture specs now guard merge emission files against new ad hoc
+ comment or blank-line ownership scans, keeping the remaining cleanup debt
+ explicit while shared ast-merge attachment and layout helpers are adopted.
+- Development Gemfiles for gems that use `tree_sitter_language_pack` now default
+ to the StructuredMerge fork branch with the Ruby ABI platform-gem fix until
+ that fix is released upstream.
- Structured merge gems now fail closed when no registered TreeHaver backend is
available instead of falling back to direct parser-library paths outside the
TreeHaver and ast-merge stack.
+- `TreeHaver.parser_for` now accepts backend-type and contract constraints so
+ substrate gems can request normalized tree-sitter semantics without being
+ hijacked by parser-specific provider gems registered for the same language.
+- `yaml-merge` now routes merge emission through TreeHaver/TSLP-backed AST
+ owners and ast-merge result mechanics instead of canonicalizing merged YAML
+ through Ruby object rendering.
### Deprecated
@@ -55,6 +102,41 @@ Please file a bug if you notice a violation of semantic versioning.
### Fixed
+- TreeHaver now smoke-tests `tree_sitter_language_pack` parser execution for the
+ requested language before registering the TSLP backend, so broken native gem
+ artifacts fail closed with a useful reason instead of surfacing parser
+ self-conversion `TypeError`s during JSON merges.
+- `json-merge` file analysis now registers its TreeHaver JSON backend before
+ direct parsing, preventing templating from failing with `No parser registered
+ for json` when JSON smart merges instantiate file analysis directly.
+- RBS recursive member merges no longer duplicate destination-owned comments
+ before matched nested declarations across repeated templating runs.
+- RBS merges now preserve retained declaration and nested member blank-line
+ gaps, preventing templating from compacting existing `.rbs` whitespace.
+- Bash merges now preserve floating first-owner and removed-node comment gaps,
+ and avoid duplicating a comment block that was already promoted from a removed
+ destination-only node.
+- Bash and RBS removal-mode merges no longer duplicate a blank gap when a
+ removed destination-only owner preserves the same gap later seen as a retained
+ matched owner's leading gap.
+- Bash, dotenv, and RBS merges now share a retained blank-gap compliance
+ contract and preserve destination-owned blank gaps between retained matched
+ owners, including template-preferred matched output.
+- RBS recursive member merges now use a shared retained blank-gap contract and
+ preserve destination-owned nested member separators when template-preferred
+ member bodies are emitted.
+- TOML template-preferred merges now preserve destination-owned retained blank
+ gaps for matched top-level keys and keys inside matched tables.
+- JSON template-preferred merges now preserve destination-owned retained blank
+ gaps for matched top-level and nested object pairs.
+- Ruby merges now preserve destination-owned retained blank gaps between matched
+ top-level declarations when emitting TSLP-backed merge results.
+- YAML merges now preserve comments, blank lines, anchors, aliases,
+ multi-document separators, and scalar spelling for the shared formatting
+ preservation fixture while retaining destination-owned sequence values.
+- Markdown backend feature fixtures now account for optional provider backends
+ that are only available after their provider gems register concrete TreeHaver
+ integrations in the current process.
- Ast-merge changed-gem CI no longer times out or fails when exercising
isolated fixture integrations that require Prism-backed Ruby merging.
- Changed-gem CI suites now pass in isolated gem bundles by loading required
@@ -65,6 +147,9 @@ Please file a bug if you notice a violation of semantic versioning.
template-only direct methods during scoped intra-owner declaration merges.
- TreeHaver now normalizes nested object fields from tree-sitter-language-pack
process results, including span objects, before building parser analysis.
+- `bash-merge` now routes explicit `parser_path:` overrides through scoped
+ TreeHaver language registration instead of passing parser library paths
+ directly to parser construction.
- Byte-offset rewrites in `kettle-jem` and `prism-merge` now splice source with
byte-aware slicing so non-ASCII content before an edited AST node does not
@@ -82,7 +167,7 @@ Please file a bug if you notice a violation of semantic versioning.
- `kettle-jem` JRuby 9.4 workflow templates now install RubyGems 3.6.9 and
Bundler 2.6.9 instead of using the default JRuby toolchain.
- Local template stack reinstalls now uninstall the selected StructuredMerge Ruby
- gems before reinstalling them, and no longer install sibling `kettle-rb` or
+ gems before reinstalling them, and no longer install sibling `kettle-dev` or
`galtzo-floss` gems by default.
- Ruby merges now place template-only top-level nodes at their template anchor by
default instead of appending them to the destination tail.
@@ -102,6 +187,10 @@ Please file a bug if you notice a violation of semantic versioning.
raising during recursive merge policy checks.
- `kettle-jem` now normalizes GitHub Actions pins for all existing workflow
files after templating, including workflows outside the active recipe set.
+- `kettle-jem install` now completes raw `bundle gem` skeleton bootstrap by
+ generating the modular Gemfiles required by the generated Gemfile before
+ running setup, and skips RuboCop Gradual autocorrect when the destination does
+ not define that task.
### Security
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 581f09b2f..1c039b23f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -116,7 +116,7 @@ Troubleshooting Git diffs
- Use `git diff --no-ext-diff` to compare against Git's built-in diff output.
- Use `git diff --no-textconv` when a textconv projection obscures the raw file bytes you need to inspect.
- If Git reports a missing `smorg-*` executable, rerun `bundle install` and the setup command above, then check `git config --local --get-regexp '^diff\.smorg-'`.
-- To remove managed local entries, run `K_JEM_TEMPLATING=true kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-ruby.command`.
+- To remove managed local entries, run `K_JEM_TEMPLATING=true kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-rb.command`.
For a quick starting point, this repository’s `mise.toml` defines the shared defaults, and `.env.local` can override them locally. Copy `.env.local.example` to `.env.local`, use `KEY=value` lines, and either activate `mise` in your shell or run commands through `mise exec -C /path/to/project -- ...`.
diff --git a/Gemfile b/Gemfile
index 26178427d..0fc912c07 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,26 +1,17 @@
-kettle_rb_dev = ENV.fetch("KETTLE_RB_DEV", "false")
+kettle_dev_dev = ENV.fetch("KETTLE_DEV_DEV", "false")
source "https://rubygems.org"
-tslp_dev = ENV.fetch("TSLP_DEV", nil)
-if tslp_dev.to_s.empty?
- gem(
- "tree_sitter_language_pack",
- git: "https://github.com/structuredmerge/tree-sitter-language-pack.git",
- branch: "fix/ruby-parser-api-methods",
- glob: "packages/ruby/*.gemspec",
- )
-else
- gem "tree_sitter_language_pack", path: tslp_dev
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem "tree_sitter_language_pack", "~> 1.13", ">= 1.13.3"
-unless kettle_rb_dev.casecmp("false").zero?
+unless kettle_dev_dev.casecmp("false").zero?
require "nomono/bundler"
eval_nomono_gems(
gems: %w[kettle-dev kettle-family kettle-test],
- prefix: "KETTLE_RB",
- path_env: "KETTLE_RB_DEV",
+ prefix: "KETTLE_DEV",
+ path_env: "KETTLE_DEV_DEV",
vendored_gems_env: "VENDORED_GEMS",
vendor_gem_dir_env: "VENDOR_GEM_DIR",
debug_env: "KETTLE_DEV_DEBUG",
@@ -79,10 +70,10 @@ gem "appraisal2", "~> 3.1", ">= 3.1.1"
gem "bundler-audit", "~> 0.9.3"
-if kettle_rb_dev.casecmp("false").zero?
+if kettle_dev_dev.casecmp("false").zero?
gem "kettle-dev", "~> 2.2", ">= 2.2.25"
- gem "kettle-family", ">= 1.0.0"
+ gem "kettle-family", ">= 1.0.4"
gem "kettle-test", "~> 2.0", ">= 2.0.11"
end
diff --git a/Gemfile.lock b/Gemfile.lock
index 39c4925de..a2d4cfaff 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,13 +1,3 @@
-GIT
- remote: https://github.com/structuredmerge/tree-sitter-language-pack.git
- revision: 85cac7836bb2f8cfcd3041a191b7bd11bf10924a
- branch: fix/ruby-parser-api-methods
- glob: packages/ruby/*.gemspec
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
PATH
remote: gems/ast-crispr-markdown-markly
specs:
@@ -228,6 +218,7 @@ PATH
smorg-rb (7.1.0)
ast-merge (= 7.1.0)
ast-merge-git (= 7.1.0)
+ diff-lcs (~> 1.5)
go-merge (= 7.1.0)
json-merge (= 7.1.0)
kettle-jem (= 7.1.0)
@@ -249,7 +240,7 @@ PATH
tree_haver (7.1.0)
citrus (~> 3.0)
parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
version_gem (~> 1.1, >= 1.1.9)
PATH
@@ -305,25 +296,25 @@ GEM
diff-lcs (1.6.2)
docopt_ng (0.7.1)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gitmoji-regex (2.0.4)
version_gem (~> 1.1, >= 1.1.13)
io-console (0.8.2)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-family (1.0.0)
+ kettle-drift (1.0.6)
+ version_gem (~> 1.1, >= 1.1.14)
+ kettle-family (1.0.4)
command_kit (~> 0.6)
command_kit-completion (~> 0.1)
kettle-dev (~> 2.3, >= 2.3.4)
kettle-test (~> 2.0, >= 2.0.10)
tsort (~> 0.2)
- kettle-rb (0.1.4)
- kettle-test (2.0.11)
+ kettle-rb (0.1.5)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -350,9 +341,6 @@ GEM
public_suffix (7.0.5)
racc (1.8.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -391,7 +379,7 @@ GEM
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- sorbet-runtime (0.6.13342)
+ sorbet-runtime (0.6.13351)
stone_checksums (1.0.6)
version_gem (~> 1.1, >= 1.1.13)
thor (1.5.0)
@@ -400,14 +388,16 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
+ version_gem (~> 1.1, >= 1.1.14)
toml (0.3.0)
parslet (>= 1.8.0, < 3.0.0)
toml-rb (4.2.0)
citrus (~> 3.0, > 3.0)
racc (~> 1.7)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -439,7 +429,7 @@ DEPENDENCIES
json-merge!
kettle-dev (~> 2.2, ~> 2.0, >= 2.2.25)
kettle-drift (~> 1.0, >= 1.0.5)
- kettle-family (>= 1.0.0)
+ kettle-family (>= 1.0.4)
kettle-jem!
kettle-test (~> 2.0, >= 2.0.9, >= 2.0.11)
kramdown-merge!
@@ -463,7 +453,7 @@ DEPENDENCIES
toml-merge!
toml-rb (~> 4.1)
tree_haver!
- tree_sitter_language_pack!
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
turbo_tests2 (~> 3.2, ~> 3.1, >= 3.2.0, >= 3.1.14)
typescript-merge!
yaml-merge!
@@ -482,6 +472,7 @@ CHECKSUMS
bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
citrus-toml-merge (7.1.0)
@@ -497,17 +488,17 @@ CHECKSUMS
docopt_ng (0.7.1) sha256=a024148ee4fa3ab1a8a04411aa4370f39cf2b446e63562097d418b7974a15667
dotenv-merge (7.1.0)
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
go-merge (7.1.0)
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-family (1.0.0) sha256=4c1c158fede8c4e369b6e5576cb540ad38891011cfc7721aea0ade813b13e3c1
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-drift (1.0.6) sha256=46eda08fa4411d1f3c6682a95eef1c9df4e94611b3949f49d4c7b43c0ed356a3
+ kettle-family (1.0.4) sha256=bd6d111e997ae07f531c553f86dfd3c8f31eb37d4b3eefaef65655f7d6bc6c51
kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
kramdown-merge (7.1.0)
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
@@ -526,8 +517,6 @@ CHECKSUMS
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
rbs-merge (7.1.0)
reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
@@ -550,17 +539,17 @@ CHECKSUMS
service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
toml-merge (7.1.0)
toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
typescript-merge (7.1.0)
@@ -570,4 +559,4 @@ CHECKSUMS
zip-merge (7.1.0)
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/README.md b/README.md
index 8ced3bea3..c4a6f16dd 100644
--- a/README.md
+++ b/README.md
@@ -275,10 +275,10 @@ Provider and recipe gems:
## Portability
-The Ruby gems are developed against the shared StructuredMerge fixtures. Those
-fixtures define the cross-language behavior expected from the Go, TypeScript,
-Rust, and Ruby implementations. Conformance checks live in gem specs and in the
-shared spec/fixture tooling rather than in a static status document.
+The Ruby gems are developed against the [shared StructuredMerge fixtures][structuredmerge-fixtures].
+Those fixtures define the cross-language behavior expected from the Go,
+TypeScript, Rust, and Ruby implementations. Conformance checks live in gem specs
+and in the shared spec/fixture tooling rather than in a static status document.
## Development
diff --git a/gems/ast-crispr-markdown-markly/.kettle-drift.lock b/gems/ast-crispr-markdown-markly/.kettle-drift.lock
deleted file mode 100644
index 09df60df7..000000000
--- a/gems/ast-crispr-markdown-markly/.kettle-drift.lock
+++ /dev/null
@@ -1,317 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 93,
- 133,
- 173,
- 213,
- 253,
- 293,
- 333,
- 373
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 82,
- 122,
- 162,
- 202,
- 242,
- 282,
- 322,
- 362
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 60,
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 110,
- 150,
- 190,
- 230,
- 270,
- 310,
- 350,
- 390
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 35,
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 69,
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 48,
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 44,
- 88,
- 128,
- 168,
- 208,
- 248,
- 288,
- 328,
- 368
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 103,
- 143,
- 183,
- 223,
- 263,
- 303,
- 343,
- 383
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 97,
- 137,
- 177,
- 217,
- 257,
- 297,
- 337,
- 377
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 106,
- 146,
- 186,
- 226,
- 266,
- 306,
- 346,
- 386
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/ast-crispr-markdown-markly/.rubocop_gradual.lock b/gems/ast-crispr-markdown-markly/.rubocop_gradual.lock
index 67ec8026a..5624f80ed 100644
--- a/gems/ast-crispr-markdown-markly/.rubocop_gradual.lock
+++ b/gems/ast-crispr-markdown-markly/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:971555246": [
+ ".simplecov:2930391605": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:4085821453": [
@@ -21,13 +21,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -63,6 +70,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -72,64 +86,47 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
"lib/ast-crispr-markdown-markly.rb:374208510": [
[1, 1, 0, "Naming/FileName: The name of this source file (`ast-crispr-markdown-markly.rb`) should use snake_case.", 5381]
],
- "lib/ast/crispr/markdown/markly.rb:2564514831": [
+ "lib/ast/crispr/markdown/markly.rb:1124197915": [
[11, 7, 13, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Markdown::Markly`.", 95841343],
[14, 9, 13, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Markdown::Markly::Adapter`.", 2579377404],
- [14, 9, 13970, "Metrics/ClassLength: Class has too many lines. [335/100]", 429557235],
- [64, 11, 700, "Metrics/MethodLength: Method has too many lines. [15/10]", 196504356],
- [90, 13, 87, "Style/RaiseArgs: Provide an exception class and message as arguments to `raise`.", 1878059440],
- [93, 11, 1781, "Metrics/MethodLength: Method has too many lines. [39/10]", 2020253431],
- [137, 11, 739, "Metrics/AbcSize: Assignment Branch Condition size for `build_heading_sections` is too high. [<5, 16, 3> 17.03/17]", 3186655060],
- [137, 11, 739, "Metrics/MethodLength: Method has too many lines. [14/10]", 3186655060],
- [156, 11, 915, "Metrics/AbcSize: Assignment Branch Condition size for `build_link_definitions` is too high. [<2, 19, 7> 20.35/17]", 2943708156],
- [156, 11, 915, "Metrics/MethodLength: Method has too many lines. [18/10]", 2943708156],
- [195, 11, 1750, "Metrics/AbcSize: Assignment Branch Condition size for `build_table_rows` is too high. [<16, 44, 17> 49.81/17]", 3931509409],
- [195, 11, 1750, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `build_table_rows` is too high. [16/7]", 3931509409],
- [195, 11, 1750, "Metrics/MethodLength: Method has too many lines. [34/10]", 3931509409],
- [195, 11, 1750, "Metrics/PerceivedComplexity: Perceived complexity for `build_table_rows` is too high. [16/8]", 3931509409],
- [253, 11, 768, "Metrics/MethodLength: Method has too many lines. [14/10]", 737914131],
- [297, 11, 622, "Metrics/MethodLength: Method has too many lines. [18/10]", 1706283245],
- [320, 11, 717, "Metrics/MethodLength: Method has too many lines. [15/10]", 1919892283],
- [341, 11, 977, "Metrics/AbcSize: Assignment Branch Condition size for `inline_link_reference_at` is too high. [<6, 17, 11> 21.12/17]", 2987695093],
- [341, 11, 977, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `inline_link_reference_at` is too high. [8/7]", 2987695093],
- [341, 11, 977, "Metrics/MethodLength: Method has too many lines. [19/10]", 2987695093],
- [366, 37, 83, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 2884863618],
- [379, 11, 404, "Metrics/MethodLength: Method has too many lines. [13/10]", 427422621],
- [396, 9, 16, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Markdown::Markly::Selectors`.", 2133324825],
- [396, 9, 8840, "Metrics/ModuleLength: Module has too many lines. [186/100]", 1134016796],
- [399, 11, 1452, "Metrics/AbcSize: Assignment Branch Condition size for `heading_section` is too high. [<2, 21, 7> 22.23/17]", 1578141243],
- [399, 11, 1452, "Metrics/MethodLength: Method has too many lines. [30/10]", 1578141243],
- [399, 30, 73, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 515735878],
- [433, 11, 1397, "Metrics/AbcSize: Assignment Branch Condition size for `link_definition` is too high. [<2, 22, 8> 23.49/17]", 2035221200],
- [433, 11, 1397, "Metrics/MethodLength: Method has too many lines. [29/10]", 2035221200],
- [433, 30, 68, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 2927391196],
- [466, 11, 1236, "Metrics/MethodLength: Method has too many lines. [27/10]", 2705412671],
- [497, 11, 1632, "Metrics/AbcSize: Assignment Branch Condition size for `inline_reference` is too high. [<2, 25, 7> 26.04/17]", 2822954343],
- [497, 11, 1632, "Metrics/MethodLength: Method has too many lines. [32/10]", 2822954343],
- [497, 31, 79, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 871966347],
- [533, 11, 3009, "Metrics/AbcSize: Assignment Branch Condition size for `html_comment_block` is too high. [<14, 43, 23> 50.73/17]", 1757586727],
- [533, 11, 3009, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `html_comment_block` is too high. [18/7]", 1757586727],
- [533, 11, 3009, "Metrics/MethodLength: Method has too many lines. [56/10]", 1757586727],
- [533, 11, 3009, "Metrics/PerceivedComplexity: Perceived complexity for `html_comment_block` is too high. [18/8]", 1757586727],
- [533, 33, 148, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4247948333],
- [545, 23, 2311, "Metrics/BlockLength: Block has too many lines. [43/25]", 3166751632],
- [550, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 236074548]
- ],
- "spec/ast/crispr/markdown/markly_spec.rb:4192197438": [
- [3, 1, 13013, "Metrics/BlockLength: Block has too many lines. [238/25]", 467937705],
- [28, 3, 10302, "Metrics/BlockLength: Block has too many lines. [182/25]", 3591393606],
- [132, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 2063489827],
- [134, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 2916348790],
+ [23, 11, 695, "Metrics/MethodLength: Method has too many lines. [15/10]", 2384506812],
+ [49, 13, 87, "Style/RaiseArgs: Provide an exception class and message as arguments to `raise`.", 1878059440],
+ [52, 11, 1781, "Metrics/MethodLength: Method has too many lines. [39/10]", 2020253431],
+ [95, 9, 16, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Markdown::Markly::Selectors`.", 2133324825],
+ [95, 9, 8840, "Metrics/ModuleLength: Module has too many lines. [186/100]", 1134016796],
+ [98, 11, 1452, "Metrics/AbcSize: Assignment Branch Condition size for `heading_section` is too high. [<2, 21, 7> 22.23/17]", 1578141243],
+ [98, 11, 1452, "Metrics/MethodLength: Method has too many lines. [30/10]", 1578141243],
+ [98, 30, 73, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 515735878],
+ [132, 11, 1397, "Metrics/AbcSize: Assignment Branch Condition size for `link_definition` is too high. [<2, 22, 8> 23.49/17]", 2035221200],
+ [132, 11, 1397, "Metrics/MethodLength: Method has too many lines. [29/10]", 2035221200],
+ [132, 30, 68, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 2927391196],
+ [165, 11, 1236, "Metrics/MethodLength: Method has too many lines. [27/10]", 2705412671],
+ [196, 11, 1632, "Metrics/AbcSize: Assignment Branch Condition size for `inline_reference` is too high. [<2, 25, 7> 26.04/17]", 2822954343],
+ [196, 11, 1632, "Metrics/MethodLength: Method has too many lines. [32/10]", 2822954343],
+ [196, 31, 79, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 871966347],
+ [232, 11, 3009, "Metrics/AbcSize: Assignment Branch Condition size for `html_comment_block` is too high. [<14, 43, 23> 50.73/17]", 1757586727],
+ [232, 11, 3009, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `html_comment_block` is too high. [18/7]", 1757586727],
+ [232, 11, 3009, "Metrics/MethodLength: Method has too many lines. [56/10]", 1757586727],
+ [232, 11, 3009, "Metrics/PerceivedComplexity: Perceived complexity for `html_comment_block` is too high. [18/8]", 1757586727],
+ [232, 33, 148, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4247948333],
+ [244, 23, 2311, "Metrics/BlockLength: Block has too many lines. [43/25]", 3166751632],
+ [249, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 236074548]
+ ],
+ "spec/ast/crispr/markdown/markly_spec.rb:479377118": [
+ [3, 1, 13025, "Metrics/BlockLength: Block has too many lines. [238/25]", 467937705],
+ [28, 3, 10314, "Metrics/BlockLength: Block has too many lines. [182/25]", 3591393606],
+ [132, 121, 35, "Layout/LineLength: Line is too long. [155/120]", 2413317061],
+ [134, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 3021964175],
[152, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 3082451518],
[154, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 3021964175],
[267, 3, 1687, "Metrics/BlockLength: Block has too many lines. [33/25]", 4221412326]
diff --git a/gems/ast-crispr-markdown-markly/.simplecov b/gems/ast-crispr-markdown-markly/.simplecov
index 4321d8879..da2d4d8b2 100644
--- a/gems/ast-crispr-markdown-markly/.simplecov
+++ b/gems/ast-crispr-markdown-markly/.simplecov
@@ -4,15 +4,11 @@
# ast-crispr-markdown-markly will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/ast-crispr-markdown-markly/.structuredmerge/kettle-jem.yml b/gems/ast-crispr-markdown-markly/.structuredmerge/kettle-jem.yml
index 2880a0c69..e93b16bb5 100644
--- a/gems/ast-crispr-markdown-markly/.structuredmerge/kettle-jem.yml
+++ b/gems/ast-crispr-markdown-markly/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/ast/crispr/markdown/markly/version.rb
- source: sig/gem.rbs
diff --git a/gems/ast-crispr-markdown-markly/Gemfile b/gems/ast-crispr-markdown-markly/Gemfile
index 86b7488a2..dfcb2477c 100644
--- a/gems/ast-crispr-markdown-markly/Gemfile
+++ b/gems/ast-crispr-markdown-markly/Gemfile
@@ -37,300 +37,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -339,8 +47,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -352,62 +58,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -415,7 +67,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/ast-crispr-markdown-markly/Gemfile.lock b/gems/ast-crispr-markdown-markly/Gemfile.lock
index 9e99f39dd..b8f03a0d7 100644
--- a/gems/ast-crispr-markdown-markly/Gemfile.lock
+++ b/gems/ast-crispr-markdown-markly/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
markly-merge (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +16,30 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-crispr (7.1.0)
+ ast-merge (= 7.1.0)
+ service_actor (~> 3.9)
+ version_gem (~> 1.1, >= 1.1.9)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +47,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +77,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +96,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +120,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,21 +129,19 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
+ markdown-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
markly (0.16.0)
+ markly-merge (7.1.0)
+ markdown-merge (= 7.1.0)
+ markly (~> 0.9)
+ version_gem (~> 1.1, >= 1.1.9)
mutex_m (0.3.0)
- nokogiri (1.19.4-aarch64-linux-gnu)
- racc (~> 1.4)
- nokogiri (1.19.4-aarch64-linux-musl)
- racc (~> 1.4)
- nokogiri (1.19.4-arm64-darwin)
- racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-linux-musl)
- racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +162,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +217,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +232,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +271,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -535,23 +297,19 @@ GEM
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +322,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +345,16 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +364,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -624,120 +391,78 @@ GEM
zlib (3.2.3)
PLATFORMS
- aarch64-linux
- aarch64-linux-gnu
- aarch64-linux-musl
- arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
- x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
ast-crispr (7.1.0)
ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,24 +471,20 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
@@ -772,35 +493,23 @@ CHECKSUMS
markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
- nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
- nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
- nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
- nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +527,38 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +567,16 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,8 +584,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/ast-crispr-markdown-markly/LICENSE.md b/gems/ast-crispr-markdown-markly/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/ast-crispr-markdown-markly/LICENSE.md
+++ b/gems/ast-crispr-markdown-markly/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/ast-crispr-markdown-markly/README.md b/gems/ast-crispr-markdown-markly/README.md
index 6e7bc7285..4da7d7abc 100644
--- a/gems/ast-crispr-markdown-markly/README.md
+++ b/gems/ast-crispr-markdown-markly/README.md
@@ -36,8 +36,8 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -176,7 +176,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -202,6 +202,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-crispr-markdown-markly
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Ast::Crispr::Markdown::Markly-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -246,7 +248,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/ast-crispr-markdown-markly
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/ast-crispr-markdown-markly
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-crispr-markdown-markly
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/cgi/vHEAD.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage_local.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage_local.gemfile
index b8907c400..f7d539edd 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage_local.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[ast-crispr-markdown-markly] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation_local.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..18152b19b 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation_local.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-crispr-markdown-markly] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/optional.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/optional.gemfile
index 942b2a369..9ea429538 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/optional.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-crispr-markdown-markly templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/runtime_heads.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/runtime_heads.gemfile
index 00205cc5f..ebf17c529 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-crispr-markdown-markly templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/style.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/style.gemfile
index 58fdd6d59..4dbcc02c0 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/style.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during ast-crispr-markdown-markly templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/style_local.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/style_local.gemfile
index ce75bbe21..e46481c22 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/style_local.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-crispr-markdown-markly] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/templating.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/templating.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/templating_local.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/templating_local.gemfile
index d2e0871f3..e9e55ce10 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/templating_local.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[ast-crispr-markdown-markly] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[ast-crispr-markdown-markly] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[ast-crispr-markdown-markly] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/webrick/vHEAD.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/ast-crispr-markdown-markly/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/ast-crispr-markdown-markly/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/ast-crispr-markdown-markly/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/ast-crispr-markdown-markly/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly.rb b/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly.rb
index ec5dbc6a9..6116514df 100644
--- a/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly.rb
+++ b/gems/ast-crispr-markdown-markly/lib/ast/crispr/markdown/markly.rb
@@ -90,9 +90,6 @@ def structure_profile(owner_scope: :shared_default)
raise Ast::Crispr::Error.new('Unsupported CRISPR owner scope', details: { owner_scope: owner_scope })
end
end
-
- private
-
end
module Selectors
diff --git a/gems/ast-crispr-markdown-markly/spec/spec_helper.rb b/gems/ast-crispr-markdown-markly/spec/spec_helper.rb
index 4173fdcf7..a890c92b2 100644
--- a/gems/ast-crispr-markdown-markly/spec/spec_helper.rb
+++ b/gems/ast-crispr-markdown-markly/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/ast-crispr-ruby-prism/.kettle-drift.lock b/gems/ast-crispr-ruby-prism/.kettle-drift.lock
deleted file mode 100644
index aa01ca527..000000000
--- a/gems/ast-crispr-ruby-prism/.kettle-drift.lock
+++ /dev/null
@@ -1,317 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 90,
- 130,
- 170,
- 210,
- 250,
- 290,
- 330,
- 370
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 95,
- 135,
- 175,
- 215,
- 255,
- 295,
- 335,
- 375
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 59,
- 99,
- 139,
- 179,
- 219,
- 259,
- 299,
- 339,
- 379
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 42,
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 34,
- 78,
- 118,
- 158,
- 198,
- 238,
- 278,
- 318,
- 358
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 68,
- 108,
- 148,
- 188,
- 228,
- 268,
- 308,
- 348,
- 388
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 84,
- 124,
- 164,
- 204,
- 244,
- 284,
- 324,
- 364
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 47,
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 105,
- 145,
- 185,
- 225,
- 265,
- 305,
- 345,
- 385
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/ast-crispr-ruby-prism/.rubocop_gradual.lock b/gems/ast-crispr-ruby-prism/.rubocop_gradual.lock
index fb145ae36..768794b33 100644
--- a/gems/ast-crispr-ruby-prism/.rubocop_gradual.lock
+++ b/gems/ast-crispr-ruby-prism/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:865688206": [
+ ".simplecov:1593094101": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:3255760589": [
@@ -8,7 +8,7 @@
[163, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 1367093088],
[166, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3881946477]
],
- "ast-crispr-ruby-prism.gemspec:2503381071": [
+ "ast-crispr-ruby-prism.gemspec:640716287": [
[128, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2821357214],
[143, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 3888612416],
[144, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949],
@@ -21,13 +21,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -63,6 +70,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -72,40 +86,38 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
"lib/ast-crispr-ruby-prism.rb:2918105648": [
[1, 1, 0, "Naming/FileName: The name of this source file (`ast-crispr-ruby-prism.rb`) should use snake_case.", 5381]
],
- "lib/ast/crispr/ruby/prism.rb:2237214827": [
+ "lib/ast/crispr/ruby/prism.rb:1398725874": [
[11, 7, 12, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Ruby::Prism`.", 2860768938],
[14, 9, 12, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Ruby::Prism::Utils`.", 2857494984],
- [42, 9, 13, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Ruby::Prism::Adapter`.", 2579377404],
- [63, 11, 854, "Metrics/AbcSize: Assignment Branch Condition size for `comment_regions_for` is too high. [<5, 17, 7> 19.05/17]", 4216699018],
- [63, 11, 854, "Metrics/MethodLength: Method has too many lines. [15/10]", 4216699018],
- [86, 11, 901, "Metrics/MethodLength: Method has too many lines. [18/10]", 3779252009],
- [108, 9, 16, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Ruby::Prism::Selectors`.", 2133324825],
- [124, 11, 640, "Metrics/MethodLength: Method has too many lines. [11/10]", 2463541954],
- [124, 41, 180, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4151508598],
- [139, 11, 3285, "Metrics/AbcSize: Assignment Branch Condition size for `comment_line_block` is too high. [<14, 47, 23> 54.17/17]", 880218168],
- [139, 11, 3285, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `comment_line_block` is too high. [18/7]", 880218168],
- [139, 11, 3285, "Metrics/MethodLength: Method has too many lines. [62/10]", 880218168],
- [139, 11, 3285, "Metrics/PerceivedComplexity: Perceived complexity for `comment_line_block` is too high. [18/8]", 880218168],
- [139, 33, 148, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4247948333],
- [151, 23, 2581, "Metrics/BlockLength: Block has too many lines. [49/25]", 2576202082]
- ],
- "spec/ast/crispr/ruby/prism_spec.rb:859649124": [
- [3, 1, 11152, "Metrics/BlockLength: Block has too many lines. [242/25]", 4253230906],
- [32, 3, 4284, "Metrics/BlockLength: Block has too many lines. [87/25]", 1755930986],
- [186, 3, 4456, "Metrics/BlockLength: Block has too many lines. [98/25]", 451830228],
- [205, 5, 1855, "Metrics/BlockLength: Block has too many lines. [42/25]", 3479234350],
- [256, 5, 1717, "Metrics/BlockLength: Block has too many lines. [36/25]", 3873040073],
- [298, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2088544858],
- [299, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2089183955]
+ [26, 9, 13, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Ruby::Prism::Adapter`.", 2579377404],
+ [63, 11, 901, "Metrics/MethodLength: Method has too many lines. [18/10]", 3779252009],
+ [85, 9, 16, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Ruby::Prism::Selectors`.", 2133324825],
+ [101, 11, 640, "Metrics/MethodLength: Method has too many lines. [11/10]", 2463541954],
+ [101, 41, 180, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4151508598],
+ [116, 11, 3285, "Metrics/AbcSize: Assignment Branch Condition size for `comment_line_block` is too high. [<14, 47, 23> 54.17/17]", 880218168],
+ [116, 11, 3285, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `comment_line_block` is too high. [18/7]", 880218168],
+ [116, 11, 3285, "Metrics/MethodLength: Method has too many lines. [62/10]", 880218168],
+ [116, 11, 3285, "Metrics/PerceivedComplexity: Perceived complexity for `comment_line_block` is too high. [18/8]", 880218168],
+ [116, 33, 148, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4247948333],
+ [128, 23, 2581, "Metrics/BlockLength: Block has too many lines. [49/25]", 2576202082]
+ ],
+ "spec/ast/crispr/ruby/prism_spec.rb:2051561249": [
+ [3, 1, 11519, "Metrics/BlockLength: Block has too many lines. [249/25]", 1483165423],
+ [41, 3, 4284, "Metrics/BlockLength: Block has too many lines. [87/25]", 1755930986],
+ [195, 3, 4456, "Metrics/BlockLength: Block has too many lines. [98/25]", 451830228],
+ [214, 5, 1855, "Metrics/BlockLength: Block has too many lines. [42/25]", 3479234350],
+ [265, 5, 1717, "Metrics/BlockLength: Block has too many lines. [36/25]", 3873040073],
+ [307, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2088544858],
+ [308, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2089183955]
]
}
diff --git a/gems/ast-crispr-ruby-prism/.simplecov b/gems/ast-crispr-ruby-prism/.simplecov
index 896dbb45e..1bad9bc37 100644
--- a/gems/ast-crispr-ruby-prism/.simplecov
+++ b/gems/ast-crispr-ruby-prism/.simplecov
@@ -4,15 +4,11 @@
# ast-crispr-ruby-prism will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/ast-crispr-ruby-prism/.structuredmerge/kettle-jem.yml b/gems/ast-crispr-ruby-prism/.structuredmerge/kettle-jem.yml
index 25286add0..670ff2d95 100644
--- a/gems/ast-crispr-ruby-prism/.structuredmerge/kettle-jem.yml
+++ b/gems/ast-crispr-ruby-prism/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/ast/crispr/ruby/prism/version.rb
- source: sig/gem.rbs
diff --git a/gems/ast-crispr-ruby-prism/Gemfile b/gems/ast-crispr-ruby-prism/Gemfile
index 43f132f05..66e4af466 100644
--- a/gems/ast-crispr-ruby-prism/Gemfile
+++ b/gems/ast-crispr-ruby-prism/Gemfile
@@ -25,6 +25,7 @@ gem 'nomono', *nomono_requirements, require: false # ruby >= 2.2
# Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV)
direct_sibling_gems = %w[
ast-crispr
+ prism-merge
]
direct_sibling_dev = ENV.fetch('STRUCTUREDMERGE_DEV', '')
direct_sibling_local =
@@ -36,300 +37,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -338,8 +47,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -351,62 +58,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -414,7 +67,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/ast-crispr-ruby-prism/Gemfile.lock b/gems/ast-crispr-ruby-prism/Gemfile.lock
index 06a81f5a4..6a9a61958 100644
--- a/gems/ast-crispr-ruby-prism/Gemfile.lock
+++ b/gems/ast-crispr-ruby-prism/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
prism-merge (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,18 +16,30 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-crispr (7.1.0)
+ ast-merge (= 7.1.0)
+ service_actor (~> 3.9)
+ version_gem (~> 1.1, >= 1.1.9)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -301,7 +47,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -332,7 +77,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -351,24 +96,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -379,6 +120,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -386,13 +129,10 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-linux-musl)
- racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -406,6 +146,10 @@ GEM
prettyprint
prettyprint (0.2.0)
prism (1.9.0)
+ prism-merge (7.1.0)
+ prism (~> 1.6)
+ ruby-merge (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
psych (5.4.0)
date
stringio
@@ -413,9 +157,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -471,6 +212,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -478,13 +227,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -504,6 +266,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -515,6 +284,10 @@ GEM
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-ast (>= 1.44.0, < 2.0)
+ ruby-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
@@ -523,23 +296,19 @@ GEM
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -552,6 +321,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -569,14 +344,16 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -586,6 +363,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -613,110 +391,76 @@ GEM
PLATFORMS
x86_64-linux-gnu
- x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
- ast-crispr-markdown-markly!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -725,57 +469,43 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
- nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -793,35 +523,39 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -830,20 +564,16 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -851,8 +581,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/ast-crispr-ruby-prism/LICENSE.md b/gems/ast-crispr-ruby-prism/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/ast-crispr-ruby-prism/LICENSE.md
+++ b/gems/ast-crispr-ruby-prism/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/ast-crispr-ruby-prism/README.md b/gems/ast-crispr-ruby-prism/README.md
index 044ce4a5c..2c6281a5d 100644
--- a/gems/ast-crispr-ruby-prism/README.md
+++ b/gems/ast-crispr-ruby-prism/README.md
@@ -35,8 +35,8 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -165,7 +165,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -191,6 +191,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-crispr-ruby-prism
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Ast::Crispr::Ruby::Prism-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -235,7 +237,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/ast-crispr-ruby-prism
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/ast-crispr-ruby-prism
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-crispr-ruby-prism
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/cgi/vHEAD.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage_local.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage_local.gemfile
index 6863a1b38..1c618d554 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage_local.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[ast-crispr-ruby-prism] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation_local.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..4d4680eb4 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation_local.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-crispr-ruby-prism] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/optional.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/optional.gemfile
index 51682c331..9ea429538 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/optional.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-crispr-ruby-prism templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/runtime_heads.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/runtime_heads.gemfile
index 1c63f1df0..ebf17c529 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-crispr-ruby-prism templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/style.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/style.gemfile
index b5b38fa1f..4dbcc02c0 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/style.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during ast-crispr-ruby-prism templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/style_local.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/style_local.gemfile
index ce75bbe21..5eed4e5dc 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/style_local.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-crispr-ruby-prism] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/templating.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/templating.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/templating_local.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/templating_local.gemfile
index b5268538e..d961394fd 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/templating_local.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[ast-crispr-ruby-prism] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[ast-crispr-ruby-prism] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[ast-crispr-ruby-prism] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/webrick/vHEAD.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/ast-crispr-ruby-prism/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/ast-crispr-ruby-prism/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/ast-crispr-ruby-prism/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/ast-crispr-ruby-prism/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/ast-crispr-ruby-prism/spec/spec_helper.rb b/gems/ast-crispr-ruby-prism/spec/spec_helper.rb
index 65c8fc84b..b0be21944 100644
--- a/gems/ast-crispr-ruby-prism/spec/spec_helper.rb
+++ b/gems/ast-crispr-ruby-prism/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/ast-crispr/.kettle-drift.lock b/gems/ast-crispr/.kettle-drift.lock
index aa01ca527..25b4603d6 100644
--- a/gems/ast-crispr/.kettle-drift.lock
+++ b/gems/ast-crispr/.kettle-drift.lock
@@ -5,12 +5,7 @@
"lines": [
79,
119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
+ 159
]
}
],
@@ -20,12 +15,7 @@
"lines": [
90,
130,
- 170,
- 210,
- 250,
- 290,
- 330,
- 370
+ 170
]
}
],
@@ -35,12 +25,7 @@
"lines": [
80,
120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
+ 160
]
}
],
@@ -50,12 +35,7 @@
"lines": [
92,
132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
+ 172
]
}
],
@@ -65,12 +45,7 @@
"lines": [
95,
135,
- 175,
- 215,
- 255,
- 295,
- 335,
- 375
+ 175
]
}
],
@@ -80,12 +55,7 @@
"lines": [
81,
121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
+ 161
]
}
],
@@ -96,12 +66,7 @@
59,
99,
139,
- 179,
- 219,
- 259,
- 299,
- 339,
- 379
+ 179
]
}
],
@@ -111,12 +76,7 @@
"lines": [
100,
140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
+ 180
]
}
],
@@ -127,12 +87,7 @@
42,
86,
126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
+ 166
]
}
],
@@ -142,12 +97,7 @@
"lines": [
109,
149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
+ 189
]
}
],
@@ -158,12 +108,7 @@
34,
78,
118,
- 158,
- 198,
- 238,
- 278,
- 318,
- 358
+ 158
]
}
],
@@ -174,12 +119,7 @@
68,
108,
148,
- 188,
- 228,
- 268,
- 308,
- 348,
- 388
+ 188
]
}
],
@@ -189,12 +129,7 @@
"lines": [
84,
124,
- 164,
- 204,
- 244,
- 284,
- 324,
- 364
+ 164
]
}
],
@@ -205,12 +140,7 @@
47,
91,
131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
+ 171
]
}
],
@@ -221,12 +151,7 @@
43,
87,
127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
+ 167
]
}
],
@@ -236,12 +161,7 @@
"lines": [
85,
125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
+ 165
]
}
],
@@ -251,12 +171,7 @@
"lines": [
102,
142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
+ 182
]
}
],
@@ -266,12 +181,7 @@
"lines": [
101,
141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
+ 181
]
}
],
@@ -281,12 +191,7 @@
"lines": [
96,
136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
+ 176
]
}
],
@@ -296,21 +201,7 @@
"lines": [
105,
145,
- 185,
- 225,
- 265,
- 305,
- 345,
- 385
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
+ 185
]
}
]
diff --git a/gems/ast-crispr/.rubocop_gradual.lock b/gems/ast-crispr/.rubocop_gradual.lock
index d920cf89f..613886555 100644
--- a/gems/ast-crispr/.rubocop_gradual.lock
+++ b/gems/ast-crispr/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:3928423310": [
+ ".simplecov:955928789": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:918344237": [
@@ -21,13 +21,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -63,6 +70,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -72,17 +86,17 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
"lib/ast-crispr.rb:247837913": [
[1, 1, 0, "Naming/FileName: The name of this source file (`ast-crispr.rb`) should use snake_case.", 5381]
],
- "lib/ast/crispr.rb:3730230259": [
+ "lib/ast/crispr.rb:2551127366": [
[12, 5, 11, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Error`.", 62528179],
[22, 5, 11, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Limit`.", 51888158],
[47, 7, 622, "Metrics/MethodLength: Method has too many lines. [14/10]", 2816807495],
@@ -96,96 +110,93 @@
[124, 5, 11, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Match`.", 52676120],
[127, 21, 73, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 344717847],
[172, 5, 18, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::MatchProfile`.", 365273299],
- [172, 5, 4350, "Metrics/ClassLength: Class has too many lines. [115/100]", 1575766989],
+ [172, 5, 3799, "Metrics/ClassLength: Class has too many lines. [109/100]", 180580438],
[273, 7, 596, "Metrics/MethodLength: Method has too many lines. [14/10]", 2070486858],
- [314, 5, 24, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::DestinationProfile`.", 3442102524],
- [314, 5, 4581, "Metrics/ClassLength: Class has too many lines. [119/100]", 3503477661],
- [352, 21, 126, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 931636409],
- [417, 7, 667, "Metrics/MethodLength: Method has too many lines. [15/10]", 4004247638],
- [460, 5, 27, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::DestinationResolution`.", 1305107769],
- [474, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::StructureProfile`.", 614380405],
- [512, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::SelectionProfile`.", 2464089216],
- [531, 21, 165, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 1182500333],
- [566, 7, 585, "Metrics/MethodLength: Method has too many lines. [13/10]", 13786997],
- [583, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::OperationProfile`.", 1974079861],
- [607, 21, 188, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 2526147676],
- [662, 7, 478, "Metrics/MethodLength: Method has too many lines. [11/10]", 795235914],
- [695, 7, 10, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Adapters::Null`.", 3515430288],
- [728, 5, 21, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::DocumentContext`.", 594998459],
- [788, 5, 19, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::OwnerSelector`.", 3092459999],
- [791, 21, 81, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 2293822273],
- [853, 7, 606, "Metrics/MethodLength: Method has too many lines. [16/10]", 422136278],
- [883, 5, 16, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Selectors`.", 2133324825],
- [883, 5, 5586, "Metrics/ModuleLength: Module has too many lines. [130/100]", 3440946513],
- [886, 7, 1642, "Metrics/AbcSize: Assignment Branch Condition size for `owner_filter` is too high. [<6, 18, 11> 21.93/17]", 3224577904],
- [886, 7, 1642, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `owner_filter` is too high. [10/7]", 3224577904],
- [886, 7, 1642, "Metrics/MethodLength: Method has too many lines. [37/10]", 3224577904],
- [886, 7, 1642, "Metrics/PerceivedComplexity: Perceived complexity for `owner_filter` is too high. [11/8]", 3224577904],
- [886, 23, 135, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 3231562627],
- [930, 7, 1936, "Metrics/AbcSize: Assignment Branch Condition size for `comment_region_owned_owner` is too high. [<7, 16, 7> 18.81/17]", 2629441148],
- [930, 7, 1936, "Metrics/MethodLength: Method has too many lines. [40/10]", 2629441148],
- [930, 37, 190, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 4159525724],
- [931, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 940069302],
- [975, 7, 1731, "Metrics/AbcSize: Assignment Branch Condition size for `line_block` is too high. [<12, 22, 14> 28.71/17]", 1307990669],
- [975, 7, 1731, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `line_block` is too high. [12/7]", 1307990669],
- [975, 7, 1731, "Metrics/MethodLength: Method has too many lines. [38/10]", 1307990669],
- [975, 7, 1731, "Metrics/PerceivedComplexity: Perceived complexity for `line_block` is too high. [12/8]", 1307990669],
- [975, 21, 130, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 515174999],
- [1027, 5, 23, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::OperationSupport`.", 343849029],
- [1027, 5, 6491, "Metrics/ModuleLength: Module has too many lines. [139/100]", 2271788056],
- [1072, 7, 1758, "Metrics/AbcSize: Assignment Branch Condition size for `insertion_from` is too high. [<5, 21, 11> 24.23/17]", 29011294],
- [1072, 7, 1758, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `insertion_from` is too high. [9/7]", 29011294],
- [1072, 7, 1758, "Metrics/MethodLength: Method has too many lines. [28/10]", 29011294],
- [1072, 7, 1758, "Metrics/PerceivedComplexity: Perceived complexity for `insertion_from` is too high. [10/8]", 29011294],
- [1115, 7, 827, "Metrics/AbcSize: Assignment Branch Condition size for `splice_after_anchor` is too high. [<4, 19, 2> 19.52/17]", 14691010],
- [1115, 7, 827, "Metrics/MethodLength: Method has too many lines. [16/10]", 14691010],
- [1119, 9, 72, "Style/RaiseArgs: Provide an exception class and message as arguments to `raise`.", 789091243],
- [1121, 23, 72, "Style/StringConcatenation: Prefer string interpolation to string concatenation.", 2503424841],
- [1153, 9, 25, "Style/StringConcatenation: Prefer string interpolation to string concatenation.", 768340433],
- [1197, 5, 26, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::OperationProfilable`.", 4114431854],
- [1206, 7, 19, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::OperationProfilable::ClassMethods`.", 3606528253],
- [1218, 5, 13, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Replace`.", 1563590855],
- [1243, 7, 643, "Metrics/AbcSize: Assignment Branch Condition size for `call` is too high. [<10, 32, 3> 33.66/17]", 3656683885],
- [1243, 7, 643, "Metrics/MethodLength: Method has too many lines. [14/10]", 3656683885],
- [1262, 5, 12, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Delete`.", 2011475922],
- [1286, 7, 538, "Metrics/AbcSize: Assignment Branch Condition size for `call` is too high. [<7, 21, 1> 22.16/17]", 2655200768],
- [1286, 7, 538, "Metrics/MethodLength: Method has too many lines. [13/10]", 2655200768],
- [1304, 5, 12, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Insert`.", 1590185308],
- [1338, 5, 10, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Move`.", 3515667002],
- [1366, 7, 1182, "Metrics/AbcSize: Assignment Branch Condition size for `call` is too high. [<14, 40, 7> 42.95/17]", 172197360],
- [1366, 7, 1182, "Metrics/MethodLength: Method has too many lines. [22/10]", 172197360],
- [1383, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2688172402],
- [1396, 3, 13, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr`.", 315644438],
- [1396, 3, 12758, "Metrics/ModuleLength: Module has too many lines. [180/100]", 2662313186],
- [1397, 5, 33, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::ProfileReportCompatibility`.", 3039519892],
- [1419, 5, 18, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::MatchProfile`.", 365273299],
- [1431, 7, 28, "Lint/DuplicateMethods: Method `Ast::Crispr::MatchProfile#normalize_start_boundary` is defined at both lib/ast/crispr.rb:292 and lib/ast/crispr.rb:1431.", 2362701855],
- [1435, 7, 26, "Lint/DuplicateMethods: Method `Ast::Crispr::MatchProfile#normalize_end_boundary` is defined at both lib/ast/crispr.rb:299 and lib/ast/crispr.rb:1435.", 2613594544],
- [1439, 7, 26, "Lint/DuplicateMethods: Method `Ast::Crispr::MatchProfile#normalize_payload_kind` is defined at both lib/ast/crispr.rb:306 and lib/ast/crispr.rb:1439.", 2604742721],
- [1444, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::SelectionProfile`.", 2464089216],
- [1466, 7, 14, "Lint/DuplicateMethods: Method `Ast::Crispr::SelectionProfile#initialize` is defined at both lib/ast/crispr.rb:531 and lib/ast/crispr.rb:1466.", 956205738],
- [1466, 7, 773, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `initialize` is too high. [8/7]", 771809109],
- [1466, 7, 773, "Metrics/MethodLength: Method has too many lines. [11/10]", 771809109],
- [1466, 21, 190, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 4167448336],
- [1481, 7, 1286, "Metrics/AbcSize: Assignment Branch Condition size for `report` is too high. [<5, 29, 13> 32.17/17]", 1720478959],
- [1481, 7, 1286, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `report` is too high. [11/7]", 1720478959],
- [1481, 7, 1286, "Metrics/MethodLength: Method has too many lines. [17/10]", 1720478959],
- [1481, 7, 1286, "Metrics/PerceivedComplexity: Perceived complexity for `report` is too high. [11/8]", 1720478959],
- [1496, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 1470192175],
- [1520, 5, 24, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::DestinationProfile`.", 3442102524],
- [1534, 7, 29, "Lint/DuplicateMethods: Method `Ast::Crispr::DestinationProfile#normalize_resolution_kind` is defined at both lib/ast/crispr.rb:437 and lib/ast/crispr.rb:1534.", 99310177],
- [1538, 7, 31, "Lint/DuplicateMethods: Method `Ast::Crispr::DestinationProfile#normalize_resolution_source` is defined at both lib/ast/crispr.rb:444 and lib/ast/crispr.rb:1538.", 1692065396],
- [1542, 7, 29, "Lint/DuplicateMethods: Method `Ast::Crispr::DestinationProfile#normalize_anchor_boundary` is defined at both lib/ast/crispr.rb:452 and lib/ast/crispr.rb:1542.", 3028754726],
- [1547, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::OperationProfile`.", 1974079861],
- [1550, 7, 733, "Metrics/MethodLength: Method has too many lines. [13/10]", 2619513218],
- [1570, 7, 25, "Lint/DuplicateMethods: Method `Ast::Crispr::OperationProfile#normalize_requirement` is defined at both lib/ast/crispr.rb:678 and lib/ast/crispr.rb:1570.", 440444039],
- [1574, 7, 32, "Lint/DuplicateMethods: Method `Ast::Crispr::OperationProfile#normalize_replacement_source` is defined at both lib/ast/crispr.rb:686 and lib/ast/crispr.rb:1574.", 3533021156],
- [1579, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::StructureProfile`.", 614380405],
- [1595, 5, 6309, "Metrics/ClassLength: Class has too many lines. [172/100]", 1270437788],
- [1600, 7, 2717, "Metrics/MethodLength: Method has too many lines. [67/10]", 1469599129],
- [1665, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 259030389],
- [1678, 28, 247, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 3385598543],
- [1710, 28, 242, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1038219895]
+ [305, 5, 24, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::DestinationProfile`.", 3442102524],
+ [305, 5, 3968, "Metrics/ClassLength: Class has too many lines. [112/100]", 2145439366],
+ [343, 21, 126, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 931636409],
+ [408, 7, 667, "Metrics/MethodLength: Method has too many lines. [15/10]", 4004247638],
+ [441, 5, 27, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::DestinationResolution`.", 1305107769],
+ [455, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::StructureProfile`.", 614380405],
+ [493, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::SelectionProfile`.", 2464089216],
+ [512, 7, 794, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `initialize` is too high. [8/7]", 3998501304],
+ [512, 7, 794, "Metrics/MethodLength: Method has too many lines. [11/10]", 3998501304],
+ [512, 21, 211, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 1155506365],
+ [552, 7, 585, "Metrics/MethodLength: Method has too many lines. [13/10]", 13786997],
+ [569, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::OperationProfile`.", 1974079861],
+ [601, 21, 188, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 2526147676],
+ [656, 7, 478, "Metrics/MethodLength: Method has too many lines. [11/10]", 795235914],
+ [682, 7, 10, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Adapters::Null`.", 3515430288],
+ [715, 5, 21, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::DocumentContext`.", 594998459],
+ [775, 5, 19, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::OwnerSelector`.", 3092459999],
+ [778, 21, 81, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 2293822273],
+ [840, 7, 606, "Metrics/MethodLength: Method has too many lines. [16/10]", 422136278],
+ [870, 5, 16, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::Selectors`.", 2133324825],
+ [870, 5, 5586, "Metrics/ModuleLength: Module has too many lines. [130/100]", 3440946513],
+ [873, 7, 1642, "Metrics/AbcSize: Assignment Branch Condition size for `owner_filter` is too high. [<6, 18, 11> 21.93/17]", 3224577904],
+ [873, 7, 1642, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `owner_filter` is too high. [10/7]", 3224577904],
+ [873, 7, 1642, "Metrics/MethodLength: Method has too many lines. [37/10]", 3224577904],
+ [873, 7, 1642, "Metrics/PerceivedComplexity: Perceived complexity for `owner_filter` is too high. [11/8]", 3224577904],
+ [873, 23, 135, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 3231562627],
+ [917, 7, 1936, "Metrics/AbcSize: Assignment Branch Condition size for `comment_region_owned_owner` is too high. [<7, 16, 7> 18.81/17]", 2629441148],
+ [917, 7, 1936, "Metrics/MethodLength: Method has too many lines. [40/10]", 2629441148],
+ [917, 37, 190, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 4159525724],
+ [918, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 940069302],
+ [962, 7, 1731, "Metrics/AbcSize: Assignment Branch Condition size for `line_block` is too high. [<12, 22, 14> 28.71/17]", 1307990669],
+ [962, 7, 1731, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `line_block` is too high. [12/7]", 1307990669],
+ [962, 7, 1731, "Metrics/MethodLength: Method has too many lines. [38/10]", 1307990669],
+ [962, 7, 1731, "Metrics/PerceivedComplexity: Perceived complexity for `line_block` is too high. [12/8]", 1307990669],
+ [962, 21, 130, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 515174999],
+ [1014, 5, 23, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::OperationSupport`.", 343849029],
+ [1014, 5, 9160, "Metrics/ModuleLength: Module has too many lines. [203/100]", 4118890580],
+ [1055, 7, 983, "Metrics/MethodLength: Method has too many lines. [23/10]", 152504950],
+ [1137, 7, 1758, "Metrics/AbcSize: Assignment Branch Condition size for `insertion_from` is too high. [<5, 21, 11> 24.23/17]", 29011294],
+ [1137, 7, 1758, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `insertion_from` is too high. [9/7]", 29011294],
+ [1137, 7, 1758, "Metrics/MethodLength: Method has too many lines. [28/10]", 29011294],
+ [1137, 7, 1758, "Metrics/PerceivedComplexity: Perceived complexity for `insertion_from` is too high. [10/8]", 29011294],
+ [1180, 7, 827, "Metrics/AbcSize: Assignment Branch Condition size for `splice_after_anchor` is too high. [<4, 19, 2> 19.52/17]", 14691010],
+ [1180, 7, 827, "Metrics/MethodLength: Method has too many lines. [16/10]", 14691010],
+ [1184, 9, 72, "Style/RaiseArgs: Provide an exception class and message as arguments to `raise`.", 789091243],
+ [1186, 23, 72, "Style/StringConcatenation: Prefer string interpolation to string concatenation.", 2503424841],
+ [1218, 9, 25, "Style/StringConcatenation: Prefer string interpolation to string concatenation.", 768340433],
+ [1262, 5, 26, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::OperationProfilable`.", 4114431854],
+ [1271, 7, 19, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::OperationProfilable::ClassMethods`.", 3606528253],
+ [1283, 5, 18, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::MergeReplace`.", 395761599],
+ [1311, 7, 789, "Metrics/AbcSize: Assignment Branch Condition size for `call` is too high. [<11, 35, 3> 36.81/17]", 793163309],
+ [1311, 7, 789, "Metrics/MethodLength: Method has too many lines. [20/10]", 793163309],
+ [1336, 5, 13, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Replace`.", 1563590855],
+ [1361, 7, 643, "Metrics/AbcSize: Assignment Branch Condition size for `call` is too high. [<10, 32, 3> 33.66/17]", 3656683885],
+ [1361, 7, 643, "Metrics/MethodLength: Method has too many lines. [14/10]", 3656683885],
+ [1380, 5, 12, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Delete`.", 2011475922],
+ [1404, 7, 538, "Metrics/AbcSize: Assignment Branch Condition size for `call` is too high. [<7, 21, 1> 22.16/17]", 2655200768],
+ [1404, 7, 538, "Metrics/MethodLength: Method has too many lines. [13/10]", 2655200768],
+ [1422, 5, 17, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::DeleteBatch`.", 727028494],
+ [1446, 7, 866, "Metrics/AbcSize: Assignment Branch Condition size for `call` is too high. [<14, 35, 5> 38.03/17]", 19628260],
+ [1446, 7, 866, "Metrics/MethodLength: Method has too many lines. [20/10]", 19628260],
+ [1472, 5, 12, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Insert`.", 1590185308],
+ [1506, 5, 10, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::Move`.", 3515667002],
+ [1534, 7, 1182, "Metrics/AbcSize: Assignment Branch Condition size for `call` is too high. [<14, 40, 7> 42.95/17]", 172197360],
+ [1534, 7, 1182, "Metrics/MethodLength: Method has too many lines. [22/10]", 172197360],
+ [1551, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2688172402],
+ [1564, 3, 13, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr`.", 315644438],
+ [1564, 3, 10812, "Metrics/ModuleLength: Module has too many lines. [180/100]", 1841926844],
+ [1565, 5, 33, "Style/Documentation: Missing top-level documentation comment for `module Ast::Crispr::ProfileReportCompatibility`.", 3039519892],
+ [1587, 5, 18, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::MatchProfile`.", 365273299],
+ [1600, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::SelectionProfile`.", 2464089216],
+ [1622, 7, 1286, "Metrics/AbcSize: Assignment Branch Condition size for `report` is too high. [<5, 29, 13> 32.17/17]", 1720478959],
+ [1622, 7, 1286, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `report` is too high. [11/7]", 1720478959],
+ [1622, 7, 1286, "Metrics/MethodLength: Method has too many lines. [17/10]", 1720478959],
+ [1622, 7, 1286, "Metrics/PerceivedComplexity: Perceived complexity for `report` is too high. [11/8]", 1720478959],
+ [1637, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 1470192175],
+ [1643, 5, 24, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::DestinationProfile`.", 3442102524],
+ [1658, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::OperationProfile`.", 1974079861],
+ [1661, 7, 733, "Metrics/MethodLength: Method has too many lines. [13/10]", 2619513218],
+ [1678, 5, 22, "Style/Documentation: Missing top-level documentation comment for `class Ast::Crispr::StructureProfile`.", 614380405],
+ [1686, 5, 6309, "Metrics/ClassLength: Class has too many lines. [172/100]", 1270437788],
+ [1691, 7, 2717, "Metrics/MethodLength: Method has too many lines. [67/10]", 1469599129],
+ [1756, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 259030389],
+ [1769, 28, 247, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 3385598543],
+ [1801, 28, 242, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1038219895]
],
"lib/ast/crispr/rspec/shared_examples/destination_profile.rb:2529475135": [
[3, 1, 2386, "Metrics/BlockLength: Block has too many lines. [28/25]", 2846758965],
@@ -197,17 +208,22 @@
"lib/ast/crispr/rspec/shared_examples/operation_profile.rb:3583567850": [
[3, 1, 2148, "Metrics/BlockLength: Block has too many lines. [26/25]", 2745151209]
],
- "spec/old_runtime_spec.rb:1564590841": [
- [3, 1, 17728, "Metrics/BlockLength: Block has too many lines. [383/25]", 205400157],
- [4, 3, 69, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 3712453399],
- [5, 3, 68, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 1429320782],
- [6, 3, 59, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 253007150],
- [8, 3, 891, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 361389624],
- [18, 37, 11, "Lint/UnusedMethodArgument: Unused method argument - `owner_scope`.", 3846606321],
- [22, 46, 6, "Lint/UnusedMethodArgument: Unused method argument - `region`.", 2124512157],
- [22, 64, 11, "Lint/UnusedMethodArgument: Unused method argument - `owner_scope`.", 3846606321],
- [73, 3, 8534, "Metrics/BlockLength: Block has too many lines. [176/25]", 3042299525],
- [313, 3, 3640, "Metrics/BlockLength: Block has too many lines. [72/25]", 1133370152],
- [418, 3, 1663, "Metrics/BlockLength: Block has too many lines. [41/25]", 115074475]
+ "spec/old_runtime_spec.rb:682575016": [
+ [5, 1, 22396, "Metrics/BlockLength: Block has too many lines. [485/25]", 3050657641],
+ [6, 3, 69, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 3712453399],
+ [7, 3, 68, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 1429320782],
+ [8, 3, 59, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 253007150],
+ [10, 3, 965, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 315542089],
+ [24, 37, 11, "Lint/UnusedMethodArgument: Unused method argument - `owner_scope`.", 3846606321],
+ [28, 46, 6, "Lint/UnusedMethodArgument: Unused method argument - `region`.", 2124512157],
+ [28, 64, 11, "Lint/UnusedMethodArgument: Unused method argument - `owner_scope`.", 3846606321],
+ [87, 3, 8534, "Metrics/BlockLength: Block has too many lines. [176/25]", 3042299525],
+ [327, 3, 5459, "Metrics/BlockLength: Block has too many lines. [108/25]", 2383759627],
+ [507, 3, 1417, "Metrics/BlockLength: Block has too many lines. [28/25]", 1907697465],
+ [508, 5, 1365, "Metrics/BlockLength: Block has too many lines. [26/25]", 3735259564],
+ [540, 3, 1663, "Metrics/BlockLength: Block has too many lines. [41/25]", 115074475]
+ ],
+ "spec/provider_architecture_spec.rb:3233381474": [
+ [3, 1, 1743, "Metrics/BlockLength: Block has too many lines. [28/25]", 896214455]
]
}
diff --git a/gems/ast-crispr/.simplecov b/gems/ast-crispr/.simplecov
index dd7e12623..e7a9c8ac8 100644
--- a/gems/ast-crispr/.simplecov
+++ b/gems/ast-crispr/.simplecov
@@ -4,15 +4,11 @@
# ast-crispr will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/ast-crispr/.structuredmerge/kettle-jem.yml b/gems/ast-crispr/.structuredmerge/kettle-jem.yml
index e8a8182a8..a9ac7a16e 100644
--- a/gems/ast-crispr/.structuredmerge/kettle-jem.yml
+++ b/gems/ast-crispr/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/ast/crispr/version.rb
- source: sig/gem.rbs
diff --git a/gems/ast-crispr/Gemfile b/gems/ast-crispr/Gemfile
index 408241295..fc1c4d762 100644
--- a/gems/ast-crispr/Gemfile
+++ b/gems/ast-crispr/Gemfile
@@ -37,298 +37,6 @@ if direct_sibling_gems.any? &&
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
@@ -351,62 +59,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -414,7 +68,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/ast-crispr/Gemfile.lock b/gems/ast-crispr/Gemfile.lock
index 0b6a216c5..d34e5295a 100644
--- a/gems/ast-crispr/Gemfile.lock
+++ b/gems/ast-crispr/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
service_actor (~> 3.9)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +16,26 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +43,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +73,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +92,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +116,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,21 +125,10 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
- nokogiri (1.19.4-aarch64-linux-gnu)
- racc (~> 1.4)
- nokogiri (1.19.4-aarch64-linux-musl)
- racc (~> 1.4)
- nokogiri (1.19.4-arm64-darwin)
- racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-linux-musl)
- racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +149,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +204,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +219,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +258,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -535,23 +284,19 @@ GEM
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +309,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +332,16 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +351,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -624,120 +378,77 @@ GEM
zlib (3.2.3)
PLATFORMS
- aarch64-linux
- aarch64-linux-gnu
- aarch64-linux-musl
- arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
- x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.16) sha256=d6ca5dd440c24f9abce9844cf44cc8e18c6a553de65a47efb4544137af92c47d
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,61 +457,42 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
- nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
- nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
- nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
- nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +510,38 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +550,16 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,7 +567,6 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
diff --git a/gems/ast-crispr/README.md b/gems/ast-crispr/README.md
index ba2da8bec..8ed7f1c77 100644
--- a/gems/ast-crispr/README.md
+++ b/gems/ast-crispr/README.md
@@ -36,7 +36,7 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
@@ -196,6 +196,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-crispr
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Ast::Crispr-3C2D2D.svg?style=square&logo=ruby&logoColor=white
diff --git a/gems/ast-crispr/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/ast-crispr/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/ast-crispr/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/ast-crispr/gemfiles/modular/cgi/vHEAD.gemfile b/gems/ast-crispr/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/ast-crispr/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/ast-crispr/gemfiles/modular/coverage.gemfile b/gems/ast-crispr/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/ast-crispr/gemfiles/modular/coverage.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/ast-crispr/gemfiles/modular/coverage_local.gemfile b/gems/ast-crispr/gemfiles/modular/coverage_local.gemfile
index 8fef2c50e..9b7dad77d 100644
--- a/gems/ast-crispr/gemfiles/modular/coverage_local.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require "nomono/bundler"
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[ast-crispr] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-crispr/gemfiles/modular/documentation.gemfile b/gems/ast-crispr/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/ast-crispr/gemfiles/modular/documentation.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/ast-crispr/gemfiles/modular/documentation_local.gemfile b/gems/ast-crispr/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..610362699 100644
--- a/gems/ast-crispr/gemfiles/modular/documentation_local.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require "nomono/bundler"
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-crispr] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/ast-crispr/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/ast-crispr/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-crispr/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-crispr/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/ast-crispr/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-crispr/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-crispr/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/ast-crispr/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/ast-crispr/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/ast-crispr/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/ast-crispr/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/ast-crispr/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/ast-crispr/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/ast-crispr/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/ast-crispr/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/ast-crispr/gemfiles/modular/optional.gemfile b/gems/ast-crispr/gemfiles/modular/optional.gemfile
index c6b1a82a7..9ea429538 100644
--- a/gems/ast-crispr/gemfiles/modular/optional.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-crispr templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/ast-crispr/gemfiles/modular/runtime_heads.gemfile b/gems/ast-crispr/gemfiles/modular/runtime_heads.gemfile
index a60320ea2..ebf17c529 100644
--- a/gems/ast-crispr/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-crispr templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/ast-crispr/gemfiles/modular/style.gemfile b/gems/ast-crispr/gemfiles/modular/style.gemfile
index c85c9954b..4dbcc02c0 100644
--- a/gems/ast-crispr/gemfiles/modular/style.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during ast-crispr templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/ast-crispr/gemfiles/modular/style_local.gemfile b/gems/ast-crispr/gemfiles/modular/style_local.gemfile
index ce75bbe21..1d53a3076 100644
--- a/gems/ast-crispr/gemfiles/modular/style_local.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require "nomono/bundler"
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-crispr] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/ast-crispr/gemfiles/modular/templating.gemfile b/gems/ast-crispr/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/ast-crispr/gemfiles/modular/templating.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/ast-crispr/gemfiles/modular/templating_local.gemfile b/gems/ast-crispr/gemfiles/modular/templating_local.gemfile
index 33f003f01..ecbe542ab 100644
--- a/gems/ast-crispr/gemfiles/modular/templating_local.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require "nomono/bundler"
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[ast-crispr] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[ast-crispr] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[ast-crispr] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-crispr/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/ast-crispr/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/ast-crispr/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/ast-crispr/gemfiles/modular/webrick/vHEAD.gemfile b/gems/ast-crispr/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/ast-crispr/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/ast-crispr/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/ast-crispr/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/ast-crispr/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/ast-crispr/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/ast-crispr/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/ast-crispr/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/ast-crispr/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/ast-crispr/lib/ast/crispr.rb b/gems/ast-crispr/lib/ast/crispr.rb
index 04d239161..c1488c75f 100644
--- a/gems/ast-crispr/lib/ast/crispr.rb
+++ b/gems/ast-crispr/lib/ast/crispr.rb
@@ -580,6 +580,10 @@ class OperationProfile
family: :removal,
description: 'Delete selected content without inserting replacement text'
},
+ delete_batch: {
+ family: :removal,
+ description: 'Delete content selected by multiple structural selectors in one source pass'
+ },
insert: {
family: :insertion,
description: 'Insert explicit text at a destination anchor or append fallback'
@@ -665,7 +669,7 @@ def to_h
private
- def normalize_requirement(value, field_name)
+ def normalize_requirement(value, _field_name)
value&.to_sym
end
@@ -1021,6 +1025,11 @@ def context_for(content:, source_label:, target: nil)
DocumentContext.new(content: content, source_label: source_label, adapter: adapter || Adapters::Null.new)
end
+ def context_for_targets(content:, source_label:, targets:)
+ first_target = Array(targets).first
+ context_for(content: content, source_label: source_label, target: first_target)
+ end
+
def enforce_limit!(target, count)
return if target.limit.allows?(count)
@@ -1410,6 +1419,56 @@ def call
end
end
+ class DeleteBatch < Actor
+ include OperationSupport
+ include OperationProfilable
+
+ declare_operation_profile(
+ operation_kind: :delete_batch,
+ source_requirement: :required,
+ destination_requirement: :none,
+ replacement_source: :none,
+ captures_source_text: true,
+ supports_if_missing: false
+ )
+
+ input :content, type: String
+ input :targets, default: -> { [] }
+ input :source_label, type: String, default: 'source'
+
+ output :updated_content
+ output :matches, default: -> { [] }
+ output :match_count, type: Integer, default: 0
+ output :changed, default: false
+ output :captured_text, allow_nil: true, default: nil
+ output :operation_profile
+
+ def call
+ self.operation_profile = self.class.operation_profile
+ selector_targets = Array(targets)
+ if selector_targets.empty?
+ self.updated_content = content
+ self.changed = false
+ return
+ end
+
+ context = context_for_targets(content: content, source_label: source_label, targets: selector_targets)
+ self.matches = selector_targets.flat_map { |target| normalize_matches(target, context) }
+ self.match_count = matches.size
+ self.captured_text = capture_text(content, matches)
+ if matches.empty?
+ self.updated_content = content
+ self.changed = false
+ return
+ end
+
+ self.updated_content = replace_line_ranges(content, matches, '')
+ self.changed = updated_content != content
+ rescue Error => e
+ crispr_fail!(e)
+ end
+ end
+
class Insert < Actor
include OperationSupport
include OperationProfilable
diff --git a/gems/ast-crispr/spec/old_runtime_spec.rb b/gems/ast-crispr/spec/old_runtime_spec.rb
index 7e8509493..d03f762b9 100644
--- a/gems/ast-crispr/spec/old_runtime_spec.rb
+++ b/gems/ast-crispr/spec/old_runtime_spec.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
require 'json'
-require 'pathname'
RSpec.describe Ast::Crispr do
FakeLocation = Struct.new(:start_line, :end_line, keyword_init: true)
@@ -9,12 +8,16 @@
FakeOwner = Struct.new(:location, :key, keyword_init: true)
class FakeAdapter
+ attr_reader :read_count
+
def initialize(owners:, comments:)
@owners = owners
@comments = comments
+ @read_count = 0
end
def read_ast(_document)
+ @read_count += 1
{ owners: @owners, comments: @comments }
end
@@ -382,6 +385,26 @@ def read_json(path)
it_behaves_like 'Ast::Crispr::OperationProfile contract'
end
+ describe Ast::Crispr::DeleteBatch do
+ let(:operation_profile) { described_class.operation_profile }
+ let(:expected_operation_kind) { :delete_batch }
+ let(:expected_operation_family) { :removal }
+ let(:expected_known_operation_kind) { true }
+ let(:expected_source_requirement) { :required }
+ let(:expected_destination_requirement) { :none }
+ let(:expected_replacement_source) { :none }
+ let(:expected_captures_source_text) { true }
+ let(:expected_supports_if_missing) { false }
+ let(:expected_selects_source) { true }
+ let(:expected_requires_source) { true }
+ let(:expected_supports_destination) { false }
+ let(:expected_requires_destination) { false }
+ let(:expected_explicit_replacement) { false }
+ let(:expected_may_reuse_captured_text) { false }
+
+ it_behaves_like 'Ast::Crispr::OperationProfile contract'
+ end
+
describe Ast::Crispr::Insert do
let(:operation_profile) { described_class.operation_profile }
let(:expected_operation_kind) { :insert }
@@ -446,6 +469,41 @@ def read_json(path)
end
end
+ describe described_class::DeleteBatch do
+ it 'deletes matches from multiple selectors using one document context' do
+ content = <<~TEXT
+ ### MANAGED SNIPPET
+ puts "one"
+
+ ### MANAGED SNIPPET
+ puts "two"
+ puts "still managed"
+
+ ### STABLE
+ puts "stable"
+ TEXT
+ selector_one = Ast::Crispr::Selectors.owner_filter(
+ id: 'managed-one',
+ adapter: adapter,
+ limit: { exactly: 1 }
+ ) { |_context, owner| owner.key == :managed_one }
+ selector_two = Ast::Crispr::Selectors.owner_filter(
+ id: 'stable',
+ adapter: adapter,
+ limit: { exactly: 1 }
+ ) { |_context, owner| owner.key == :stable }
+
+ actor = described_class.call(content: content, targets: [selector_one, selector_two])
+
+ expect(actor.changed).to be(true)
+ expect(actor.match_count).to eq(2)
+ expect(actor.captured_text).to include('puts "one"')
+ expect(actor.captured_text).to include('puts "stable"')
+ expect(actor.updated_content).to eq("\n### MANAGED SNIPPET\nputs \"two\"\nputs \"still managed\"\n\n")
+ expect(adapter.read_count).to eq(1)
+ end
+ end
+
describe described_class::MergeReplace do
it 'merges replacement text into the selected slice before splicing it back' do
fixture = read_json(fixtures_root.join('diagnostics', 'slice-1018-crispr-slice-merge',
diff --git a/gems/ast-crispr/spec/provider_architecture_spec.rb b/gems/ast-crispr/spec/provider_architecture_spec.rb
index d816944b9..123f09b8c 100644
--- a/gems/ast-crispr/spec/provider_architecture_spec.rb
+++ b/gems/ast-crispr/spec/provider_architecture_spec.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'pathname'
-
RSpec.describe 'Ast::Crispr provider architecture' do
let(:repo_root) { Pathname(__dir__).join('..', '..', '..').expand_path }
let(:provider_lib_files) { repo_root.join('gems').glob('ast-crispr-*/lib/**/*.rb') }
diff --git a/gems/ast-crispr/spec/spec_helper.rb b/gems/ast-crispr/spec/spec_helper.rb
index f97c61e87..9bd936172 100644
--- a/gems/ast-crispr/spec/spec_helper.rb
+++ b/gems/ast-crispr/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/ast-merge-git/.kettle-drift.lock b/gems/ast-merge-git/.kettle-drift.lock
deleted file mode 100644
index e3a4ed60c..000000000
--- a/gems/ast-merge-git/.kettle-drift.lock
+++ /dev/null
@@ -1,337 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360,
- 400
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371,
- 411
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361,
- 401
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 93,
- 133,
- 173,
- 213,
- 253,
- 293,
- 333,
- 373,
- 413
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376,
- 416
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 82,
- 122,
- 162,
- 202,
- 242,
- 282,
- 322,
- 362,
- 402
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 60,
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380,
- 420
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381,
- 421
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367,
- 407
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 110,
- 150,
- 190,
- 230,
- 270,
- 310,
- 350,
- 390,
- 430
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 35,
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359,
- 399
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 69,
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389,
- 429
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365,
- 405
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 48,
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372,
- 412
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 44,
- 88,
- 128,
- 168,
- 208,
- 248,
- 288,
- 328,
- 368,
- 408
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366,
- 406
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 103,
- 143,
- 183,
- 223,
- 263,
- 303,
- 343,
- 383,
- 423
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382,
- 422
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 97,
- 137,
- 177,
- 217,
- 257,
- 297,
- 337,
- 377,
- 417
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 106,
- 146,
- 186,
- 226,
- 266,
- 306,
- 346,
- 386,
- 426
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/ast-merge-git/.rubocop_gradual.lock b/gems/ast-merge-git/.rubocop_gradual.lock
index ff0066794..4088e89b4 100644
--- a/gems/ast-merge-git/.rubocop_gradual.lock
+++ b/gems/ast-merge-git/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:1859435982": [
+ ".simplecov:2758685973": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:1078627597": [
@@ -21,13 +21,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -63,6 +70,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -72,10 +86,10 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
diff --git a/gems/ast-merge-git/.simplecov b/gems/ast-merge-git/.simplecov
index 80bb5187d..afdbb1755 100644
--- a/gems/ast-merge-git/.simplecov
+++ b/gems/ast-merge-git/.simplecov
@@ -4,15 +4,11 @@
# ast-merge-git will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/ast-merge-git/.structuredmerge/kettle-jem.yml b/gems/ast-merge-git/.structuredmerge/kettle-jem.yml
index 276c6e7bb..53f002c15 100644
--- a/gems/ast-merge-git/.structuredmerge/kettle-jem.yml
+++ b/gems/ast-merge-git/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/ast/merge/git/version.rb
- source: sig/gem.rbs
diff --git a/gems/ast-merge-git/Gemfile b/gems/ast-merge-git/Gemfile
index d8a97d415..ee961dec3 100644
--- a/gems/ast-merge-git/Gemfile
+++ b/gems/ast-merge-git/Gemfile
@@ -37,260 +37,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -299,8 +47,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -312,142 +58,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -455,7 +67,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/ast-merge-git/Gemfile.lock b/gems/ast-merge-git/Gemfile.lock
index 6c4aeff4b..5c10515c9 100644
--- a/gems/ast-merge-git/Gemfile.lock
+++ b/gems/ast-merge-git/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
json-merge (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +16,26 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +43,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +73,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +92,24 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ json-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +120,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,21 +129,10 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
- nokogiri (1.19.4-aarch64-linux-gnu)
- racc (~> 1.4)
- nokogiri (1.19.4-aarch64-linux-musl)
- racc (~> 1.4)
- nokogiri (1.19.4-arm64-darwin)
- racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-linux-musl)
- racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +153,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +208,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +223,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +262,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +283,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +311,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +334,16 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +353,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -624,120 +380,77 @@ GEM
zlib (3.2.3)
PLATFORMS
- aarch64-linux
- aarch64-linux-gnu
- aarch64-linux-musl
- arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
- x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
ast-merge-git!
- ast-template!
- bash-merge!
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,61 +459,43 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
- nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
- nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
- nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
- nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +513,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +552,16 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,8 +569,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/ast-merge-git/LICENSE.md b/gems/ast-merge-git/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/ast-merge-git/LICENSE.md
+++ b/gems/ast-merge-git/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/ast-merge-git/README.md b/gems/ast-merge-git/README.md
index 6206226da..43d47a409 100644
--- a/gems/ast-merge-git/README.md
+++ b/gems/ast-merge-git/README.md
@@ -35,8 +35,8 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -154,7 +154,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -180,6 +180,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-merge-git
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Ast::Merge::Git-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -224,7 +226,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/ast-merge-git
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/ast-merge-git
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-merge-git
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/ast-merge-git/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/ast-merge-git/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/ast-merge-git/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/ast-merge-git/gemfiles/modular/cgi/vHEAD.gemfile b/gems/ast-merge-git/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/ast-merge-git/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/ast-merge-git/gemfiles/modular/coverage.gemfile b/gems/ast-merge-git/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/ast-merge-git/gemfiles/modular/coverage.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/ast-merge-git/gemfiles/modular/coverage_local.gemfile b/gems/ast-merge-git/gemfiles/modular/coverage_local.gemfile
index f2d1ad9c2..1fb5c6d9b 100644
--- a/gems/ast-merge-git/gemfiles/modular/coverage_local.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[ast-merge-git] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-merge-git/gemfiles/modular/documentation.gemfile b/gems/ast-merge-git/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/ast-merge-git/gemfiles/modular/documentation.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/ast-merge-git/gemfiles/modular/documentation_local.gemfile b/gems/ast-merge-git/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..32de7815d 100644
--- a/gems/ast-merge-git/gemfiles/modular/documentation_local.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-merge-git] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/ast-merge-git/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/ast-merge-git/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-merge-git/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-merge-git/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/ast-merge-git/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-merge-git/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-merge-git/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/ast-merge-git/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/ast-merge-git/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/ast-merge-git/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/ast-merge-git/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/ast-merge-git/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/ast-merge-git/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/ast-merge-git/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/ast-merge-git/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/ast-merge-git/gemfiles/modular/optional.gemfile b/gems/ast-merge-git/gemfiles/modular/optional.gemfile
index d254d7d3c..9ea429538 100644
--- a/gems/ast-merge-git/gemfiles/modular/optional.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-merge-git templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/ast-merge-git/gemfiles/modular/runtime_heads.gemfile b/gems/ast-merge-git/gemfiles/modular/runtime_heads.gemfile
index f5084bf14..ebf17c529 100644
--- a/gems/ast-merge-git/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-merge-git templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/ast-merge-git/gemfiles/modular/style.gemfile b/gems/ast-merge-git/gemfiles/modular/style.gemfile
index a740fe017..4dbcc02c0 100644
--- a/gems/ast-merge-git/gemfiles/modular/style.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during ast-merge-git templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/ast-merge-git/gemfiles/modular/style_local.gemfile b/gems/ast-merge-git/gemfiles/modular/style_local.gemfile
index ce75bbe21..6be28c0e3 100644
--- a/gems/ast-merge-git/gemfiles/modular/style_local.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-merge-git] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/ast-merge-git/gemfiles/modular/templating.gemfile b/gems/ast-merge-git/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/ast-merge-git/gemfiles/modular/templating.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/ast-merge-git/gemfiles/modular/templating_local.gemfile b/gems/ast-merge-git/gemfiles/modular/templating_local.gemfile
index 62371754c..3392b5d85 100644
--- a/gems/ast-merge-git/gemfiles/modular/templating_local.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[ast-merge-git] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[ast-merge-git] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[ast-merge-git] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-merge-git/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/ast-merge-git/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/ast-merge-git/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/ast-merge-git/gemfiles/modular/webrick/vHEAD.gemfile b/gems/ast-merge-git/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/ast-merge-git/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/ast-merge-git/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/ast-merge-git/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/ast-merge-git/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/ast-merge-git/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/ast-merge-git/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/ast-merge-git/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/ast-merge-git/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/ast-merge-git/spec/spec_helper.rb b/gems/ast-merge-git/spec/spec_helper.rb
index 62706556e..a6f48671d 100644
--- a/gems/ast-merge-git/spec/spec_helper.rb
+++ b/gems/ast-merge-git/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/ast-merge/.kettle-drift.lock b/gems/ast-merge/.kettle-drift.lock
index 06ea1c460..e8ac7ef1f 100644
--- a/gems/ast-merge/.kettle-drift.lock
+++ b/gems/ast-merge/.kettle-drift.lock
@@ -5,12 +5,7 @@
"lines": [
79,
119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
+ 159
]
}
],
@@ -20,12 +15,7 @@
"lines": [
90,
130,
- 170,
- 210,
- 250,
- 290,
- 330,
- 370
+ 170
]
}
],
@@ -35,12 +25,7 @@
"lines": [
80,
120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
+ 160
]
}
],
@@ -50,12 +35,7 @@
"lines": [
92,
132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
+ 172
]
}
],
@@ -65,12 +45,7 @@
"lines": [
95,
135,
- 175,
- 215,
- 255,
- 295,
- 335,
- 375
+ 175
]
}
],
@@ -80,12 +55,7 @@
"lines": [
81,
121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
+ 161
]
}
],
@@ -96,12 +66,7 @@
59,
99,
139,
- 179,
- 219,
- 259,
- 299,
- 339,
- 379
+ 179
]
}
],
@@ -111,12 +76,7 @@
"lines": [
100,
140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
+ 180
]
}
],
@@ -127,12 +87,7 @@
42,
86,
126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
+ 166
]
}
],
@@ -142,12 +97,7 @@
"lines": [
109,
149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
+ 189
]
}
],
@@ -158,12 +108,7 @@
34,
78,
118,
- 158,
- 198,
- 238,
- 278,
- 318,
- 358
+ 158
]
}
],
@@ -174,12 +119,7 @@
68,
108,
148,
- 188,
- 228,
- 268,
- 308,
- 348,
- 388
+ 188
]
}
],
@@ -189,12 +129,7 @@
"lines": [
84,
124,
- 164,
- 204,
- 244,
- 284,
- 324,
- 364
+ 164
]
}
],
@@ -205,12 +140,7 @@
47,
91,
131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
+ 171
]
}
],
@@ -221,12 +151,7 @@
43,
87,
127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
+ 167
]
}
],
@@ -236,12 +161,7 @@
"lines": [
85,
125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
+ 165
]
}
],
@@ -251,12 +171,7 @@
"lines": [
102,
142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
+ 182
]
}
],
@@ -266,12 +181,7 @@
"lines": [
101,
141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
+ 181
]
}
],
@@ -281,12 +191,7 @@
"lines": [
96,
136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
+ 176
]
}
],
@@ -296,12 +201,7 @@
"lines": [
105,
145,
- 185,
- 225,
- 265,
- 305,
- 345,
- 385
+ 185
]
}
],
@@ -309,17 +209,8 @@
{
"file": "spec/spec_helper.rb",
"lines": [
- 35,
- 42
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
+ 40,
+ 47
]
}
]
diff --git a/gems/ast-merge/.rubocop_gradual.lock b/gems/ast-merge/.rubocop_gradual.lock
index bc6712ed3..80f95ef30 100644
--- a/gems/ast-merge/.rubocop_gradual.lock
+++ b/gems/ast-merge/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:3463276878": [
+ ".simplecov:3026903189": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:429706125": [
@@ -15,20 +15,27 @@
[145, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949],
[152, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 4229808912]
],
- "gemfiles/modular/benchmark/r4/v0.5.gemfile:3644720371": [
- [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
+ "gemfiles/modular/benchmark/r4/v0.5.gemfile:5381": [
+ [1, 1, 0, "Lint/EmptyFile: Empty file detected.", 5381]
+ ],
+ "gemfiles/modular/benchmark/vHEAD.gemfile:5381": [
+ [1, 1, 0, "Lint/EmptyFile: Empty file detected.", 5381],
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381]
],
- "gemfiles/modular/benchmark/vHEAD.gemfile:2838879269": [
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
- [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -64,6 +71,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -73,493 +87,493 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
"lib/ast-merge.rb:3005639624": [
[1, 1, 0, "Naming/FileName: The name of this source file (`ast-merge.rb`) should use snake_case.", 5381]
],
- "lib/ast/merge.rb:3429747270": [
+ "lib/ast/merge.rb:3962755273": [
[11, 3, 12, "Style/Documentation: Missing top-level documentation comment for `module Ast::Merge`.", 2866359175],
- [11, 3, 270037, "Metrics/ModuleLength: Module has too many lines. [5702/100]", 2847709439],
+ [11, 3, 270298, "Metrics/ModuleLength: Module has too many lines. [5705/100]", 2774418219],
[22, 5, 16, "Style/Documentation: Missing top-level documentation comment for `class Ast::Merge::ParseError`.", 362242086],
[33, 7, 362, "Metrics/AbcSize: Assignment Branch Condition size for `build_message` is too high. [<2, 16, 6> 17.2/17]", 3988736327],
[47, 5, 31, "Style/Documentation: Missing top-level documentation comment for `class Ast::Merge::PlaceholderCollisionError`.", 218924302],
- [161, 7, 337, "Metrics/MethodLength: Method has too many lines. [11/10]", 2388996629],
- [178, 7, 327, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `to_h` is too high. [8/7]", 979795121],
- [309, 7, 383, "Metrics/MethodLength: Method has too many lines. [11/10]", 634650261],
- [473, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 3450568485],
- [474, 7, 461, "Metrics/MethodLength: Method has too many lines. [12/10]", 43929779],
- [491, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1299979089],
- [492, 7, 377, "Metrics/MethodLength: Method has too many lines. [11/10]", 3704151253],
- [508, 121, 39, "Layout/LineLength: Line is too long. [159/120]", 85503958],
- [509, 7, 447, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `to_h` is too high. [8/7]", 298553749],
- [509, 7, 447, "Metrics/MethodLength: Method has too many lines. [12/10]", 298553749],
- [538, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1441148616],
- [539, 7, 453, "Metrics/MethodLength: Method has too many lines. [14/10]", 1899007021],
- [558, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193342990],
- [559, 7, 400, "Metrics/MethodLength: Method has too many lines. [11/10]", 298553749],
- [588, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860750],
- [589, 7, 411, "Metrics/MethodLength: Method has too many lines. [12/10]", 2893925621],
- [606, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3137791633],
- [607, 7, 454, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `to_h` is too high. [8/7]", 298553749],
- [607, 7, 454, "Metrics/MethodLength: Method has too many lines. [12/10]", 298553749],
- [666, 7, 385, "Metrics/MethodLength: Method has too many lines. [11/10]", 794265461],
- [703, 7, 419, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `to_h` is too high. [10/7]", 3313546353],
- [703, 7, 419, "Metrics/PerceivedComplexity: Perceived complexity for `to_h` is too high. [10/8]", 3313546353],
- [753, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 398187770],
- [765, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 2746783933],
- [812, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860841],
- [820, 121, 156, "Layout/LineLength: Line is too long. [276/120]", 1149525480],
- [825, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 2538424426],
- [837, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 2285382915],
- [847, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3962419360],
- [860, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 398187770],
- [862, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 3195178507],
- [866, 121, 85, "Layout/LineLength: Line is too long. [205/120]", 4238980637],
- [868, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 2678411233],
- [870, 121, 39, "Layout/LineLength: Line is too long. [159/120]", 4028520110],
- [881, 121, 110, "Layout/LineLength: Line is too long. [230/120]", 3837814921],
- [895, 5, 2283, "Metrics/MethodLength: Method has too many lines. [57/10]", 2282416447],
- [955, 5, 2654, "Metrics/MethodLength: Method has too many lines. [63/10]", 2491520565],
- [1006, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1823519875],
- [1015, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1874311968],
- [1021, 5, 10660, "Metrics/AbcSize: Assignment Branch Condition size for `ruby_downstream_merge_gem_feature_matrix` is too high. [<0, 21, 0> 21/17]", 2277322577],
- [1021, 5, 10660, "Metrics/MethodLength: Method has too many lines. [248/10]", 2277322577],
- [1272, 5, 1546, "Metrics/MethodLength: Method has too many lines. [37/10]", 208933754],
- [1306, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 2658452668],
- [1312, 5, 4206, "Metrics/MethodLength: Method has too many lines. [96/10]", 1997530776],
- [1389, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 183246985],
- [1405, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 3268438356],
- [1411, 5, 1598, "Metrics/MethodLength: Method has too many lines. [46/10]", 849757258],
- [1454, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1323237892],
- [1460, 5, 1164, "Metrics/MethodLength: Method has too many lines. [36/10]", 1477831421],
- [1493, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 931876829],
- [1499, 5, 1699, "Metrics/MethodLength: Method has too many lines. [43/10]", 1125544678],
- [1545, 5, 1016, "Metrics/MethodLength: Method has too many lines. [27/10]", 2194427985],
- [1575, 5, 1058, "Metrics/MethodLength: Method has too many lines. [30/10]", 47860722],
- [1608, 5, 1186, "Metrics/MethodLength: Method has too many lines. [31/10]", 676863486],
- [1636, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 2689509078],
- [1642, 5, 1517, "Metrics/MethodLength: Method has too many lines. [41/10]", 3855445172],
- [1655, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 817380904],
- [1680, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 409671963],
- [1686, 5, 2116, "Metrics/MethodLength: Method has too many lines. [61/10]", 524104794],
- [1750, 5, 820, "Metrics/MethodLength: Method has too many lines. [12/10]", 1888457180],
- [1750, 37, 298, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [10/5]", 789483382],
- [1751, 121, 100, "Layout/LineLength: Line is too long. [220/120]", 3288750271],
- [1766, 5, 3595, "Metrics/AbcSize: Assignment Branch Condition size for `initial_profile_promotion_policy` is too high. [<9, 20, 0> 21.93/17]", 83685787],
- [1766, 5, 3595, "Metrics/MethodLength: Method has too many lines. [77/10]", 83685787],
- [1846, 5, 768, "Metrics/MethodLength: Method has too many lines. [17/10]", 314059802],
- [1867, 5, 1493, "Metrics/AbcSize: Assignment Branch Condition size for `evaluate_profile_selection_requirement` is too high. [<7, 23, 9> 25.67/17]", 3177555163],
- [1867, 5, 1493, "Metrics/MethodLength: Method has too many lines. [29/10]", 3177555163],
- [1868, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2145168012],
- [1875, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 683002336],
- [1909, 5, 985, "Metrics/AbcSize: Assignment Branch Condition size for `profile_promotion_blocking_reasons` is too high. [<4, 25, 13> 28.46/17]", 1146627465],
- [1909, 5, 985, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `profile_promotion_blocking_reasons` is too high. [10/7]", 1146627465],
- [1909, 5, 985, "Metrics/MethodLength: Method has too many lines. [18/10]", 1146627465],
- [1909, 5, 985, "Metrics/PerceivedComplexity: Perceived complexity for `profile_promotion_blocking_reasons` is too high. [10/8]", 1146627465],
- [1930, 5, 3173, "Metrics/AbcSize: Assignment Branch Condition size for `validate_language_backend_profile` is too high. [<25, 68, 20> 75.16/17]", 2100389324],
- [1930, 5, 3173, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `validate_language_backend_profile` is too high. [21/7]", 2100389324],
- [1930, 5, 3173, "Metrics/MethodLength: Method has too many lines. [60/10]", 2100389324],
- [1930, 5, 3173, "Metrics/PerceivedComplexity: Perceived complexity for `validate_language_backend_profile` is too high. [23/8]", 2100389324],
- [2002, 5, 1523, "Metrics/AbcSize: Assignment Branch Condition size for `validate_backend_inventory` is too high. [<13, 38, 13> 42.21/17]", 1899037537],
- [2002, 5, 1523, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `validate_backend_inventory` is too high. [13/7]", 1899037537],
- [2002, 5, 1523, "Metrics/MethodLength: Method has too many lines. [25/10]", 1899037537],
- [2002, 5, 1523, "Metrics/PerceivedComplexity: Perceived complexity for `validate_backend_inventory` is too high. [13/8]", 1899037537],
- [2045, 5, 906, "Metrics/MethodLength: Method has too many lines. [20/10]", 3137959843],
- [2068, 5, 2744, "Metrics/AbcSize: Assignment Branch Condition size for `detect_raw_merge_inconsistencies` is too high. [<8, 43, 21> 48.52/17]", 3717440692],
- [2068, 5, 2744, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `detect_raw_merge_inconsistencies` is too high. [17/7]", 3717440692],
- [2068, 5, 2744, "Metrics/MethodLength: Method has too many lines. [53/10]", 3717440692],
- [2068, 5, 2744, "Metrics/PerceivedComplexity: Perceived complexity for `detect_raw_merge_inconsistencies` is too high. [17/8]", 3717440692],
- [2083, 7, 1894, "Metrics/BlockLength: Block has too many lines. [33/25]", 758887611],
- [2129, 5, 762, "Metrics/MethodLength: Method has too many lines. [11/10]", 3021402342],
- [2143, 5, 490, "Metrics/MethodLength: Method has too many lines. [11/10]", 578473475],
- [2157, 5, 881, "Metrics/AbcSize: Assignment Branch Condition size for `execute_independent_commutative_insertions` is too high. [<6, 16, 7> 18.47/17]", 259417386],
- [2157, 5, 881, "Metrics/MethodLength: Method has too many lines. [21/10]", 259417386],
- [2184, 5, 1107, "Metrics/AbcSize: Assignment Branch Condition size for `execute_independent_keyed_member_edits` is too high. [<10, 31, 15> 35.86/17]", 4271501385],
- [2184, 5, 1107, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `execute_independent_keyed_member_edits` is too high. [14/7]", 4271501385],
- [2184, 5, 1107, "Metrics/MethodLength: Method has too many lines. [24/10]", 4271501385],
- [2184, 5, 1107, "Metrics/PerceivedComplexity: Perceived complexity for `execute_independent_keyed_member_edits` is too high. [14/8]", 4271501385],
- [2228, 5, 3149, "Metrics/AbcSize: Assignment Branch Condition size for `parse_compact_ruleset` is too high. [<16, 68, 24> 73.86/17]", 3149098803],
- [2228, 5, 3149, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `parse_compact_ruleset` is too high. [22/7]", 3149098803],
- [2228, 5, 3149, "Metrics/MethodLength: Method has too many lines. [67/10]", 3149098803],
- [2228, 5, 3149, "Metrics/PerceivedComplexity: Perceived complexity for `parse_compact_ruleset` is too high. [23/8]", 3149098803],
- [2234, 7, 2544, "Metrics/BlockLength: Block has too many lines. [50/25]", 2484860466],
- [2261, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193420054],
- [2307, 5, 2658, "Metrics/AbcSize: Assignment Branch Condition size for `compact_ruleset_feature_profile` is too high. [<11, 67, 38> 77.81/17]", 4022599673],
- [2307, 5, 2658, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `compact_ruleset_feature_profile` is too high. [29/7]", 4022599673],
- [2307, 5, 2658, "Metrics/MethodLength: Method has too many lines. [66/10]", 4022599673],
- [2307, 5, 2658, "Metrics/PerceivedComplexity: Perceived complexity for `compact_ruleset_feature_profile` is too high. [16/8]", 4022599673],
- [2325, 7, 2243, "Metrics/BlockLength: Block has too many lines. [47/25]", 965041772],
- [2392, 5, 2733, "Metrics/AbcSize: Assignment Branch Condition size for `classify_template_target_path` is too high. [<4, 36, 23> 42.91/17]", 3661828596],
- [2392, 5, 2733, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `classify_template_target_path` is too high. [21/7]", 3661828596],
- [2392, 5, 2733, "Metrics/MethodLength: Method has too many lines. [39/10]", 3661828596],
- [2392, 5, 2733, "Metrics/PerceivedComplexity: Perceived complexity for `classify_template_target_path` is too high. [17/8]", 3661828596],
- [2424, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
- [2438, 5, 416, "Metrics/MethodLength: Method has too many lines. [12/10]", 1388641773],
- [2481, 5, 388, "Metrics/MethodLength: Method has too many lines. [12/10]", 2360583514],
- [2510, 5, 820, "Metrics/MethodLength: Method has too many lines. [13/10]", 354674808],
- [2526, 5, 929, "Metrics/AbcSize: Assignment Branch Condition size for `enrich_template_plan_entries` is too high. [<9, 12, 10> 18.03/17]", 2666747528],
- [2526, 5, 929, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `enrich_template_plan_entries` is too high. [9/7]", 2666747528],
- [2526, 5, 929, "Metrics/MethodLength: Method has too many lines. [19/10]", 2666747528],
- [2526, 5, 929, "Metrics/PerceivedComplexity: Perceived complexity for `enrich_template_plan_entries` is too high. [10/8]", 2666747528],
- [2549, 5, 1245, "Metrics/AbcSize: Assignment Branch Condition size for `enrich_template_plan_entries_with_token_state` is too high. [<11, 23, 14> 29.09/17]", 1507113977],
- [2549, 5, 1245, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `enrich_template_plan_entries_with_token_state` is too high. [13/7]", 1507113977],
- [2549, 5, 1245, "Metrics/MethodLength: Method has too many lines. [19/10]", 1507113977],
- [2549, 5, 1245, "Metrics/PerceivedComplexity: Perceived complexity for `enrich_template_plan_entries_with_token_state` is too high. [13/8]", 1507113977],
- [2573, 5, 1353, "Metrics/AbcSize: Assignment Branch Condition size for `prepare_template_entries` is too high. [<6, 18, 11> 21.93/17]", 2774310942],
- [2573, 5, 1353, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `prepare_template_entries` is too high. [11/7]", 2774310942],
- [2573, 5, 1353, "Metrics/MethodLength: Method has too many lines. [24/10]", 2774310942],
- [2573, 5, 1353, "Metrics/PerceivedComplexity: Perceived complexity for `prepare_template_entries` is too high. [12/8]", 2774310942],
- [2603, 5, 1494, "Metrics/AbcSize: Assignment Branch Condition size for `plan_template_execution` is too high. [<8, 22, 17> 28.93/17]", 3876421385],
- [2603, 5, 1494, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `plan_template_execution` is too high. [14/7]", 3876421385],
- [2603, 5, 1494, "Metrics/MethodLength: Method has too many lines. [29/10]", 3876421385],
- [2603, 5, 1494, "Metrics/PerceivedComplexity: Perceived complexity for `plan_template_execution` is too high. [15/8]", 3876421385],
- [2604, 7, 1421, "Metrics/BlockLength: Block has too many lines. [27/25]", 2887810383],
- [2637, 5, 822, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 2749235529],
- [2637, 37, 220, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 447165880],
- [2638, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 518382509],
- [2652, 5, 2060, "Metrics/AbcSize: Assignment Branch Condition size for `preview_template_execution` is too high. [<11, 42, 26> 50.61/17]", 2270817206],
- [2652, 5, 2060, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `preview_template_execution` is too high. [25/7]", 2270817206],
- [2652, 5, 2060, "Metrics/MethodLength: Method has too many lines. [39/10]", 2270817206],
- [2652, 5, 2060, "Metrics/PerceivedComplexity: Perceived complexity for `preview_template_execution` is too high. [23/8]", 2270817206],
- [2662, 7, 1809, "Metrics/BlockLength: Block has too many lines. [28/25]", 310337564],
- [2700, 5, 2513, "Metrics/AbcSize: Assignment Branch Condition size for `apply_template_execution` is too high. [<14, 50, 25> 57.63/17]", 177708331],
- [2700, 5, 2513, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `apply_template_execution` is too high. [26/7]", 177708331],
- [2700, 5, 2513, "Metrics/MethodLength: Method has too many lines. [50/10]", 177708331],
- [2700, 5, 2513, "Metrics/PerceivedComplexity: Perceived complexity for `apply_template_execution` is too high. [23/8]", 177708331],
- [2711, 7, 2239, "Metrics/BlockLength: Block has too many lines. [38/25]", 1651205014],
- [2761, 5, 1696, "Metrics/AbcSize: Assignment Branch Condition size for `evaluate_template_tree_convergence` is too high. [<11, 29, 17> 35.37/17]", 2507998041],
- [2761, 5, 1696, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `evaluate_template_tree_convergence` is too high. [17/7]", 2507998041],
- [2761, 5, 1696, "Metrics/MethodLength: Method has too many lines. [35/10]", 2507998041],
- [2761, 5, 1696, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 2507998041],
- [2761, 5, 1696, "Metrics/PerceivedComplexity: Perceived complexity for `evaluate_template_tree_convergence` is too high. [17/8]", 2507998041],
- [2761, 43, 198, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4214374277],
- [2762, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 2983874608],
- [2804, 5, 688, "Metrics/MethodLength: Method has too many lines. [15/10]", 3064253784],
- [2804, 5, 688, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 3064253784],
- [2804, 36, 216, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 448029307],
- [2805, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3840139076],
- [2848, 5, 664, "Metrics/MethodLength: Method has too many lines. [13/10]", 995637868],
- [2848, 5, 664, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 995637868],
- [2848, 53, 202, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 4227116196],
- [2849, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 418683952],
- [2866, 5, 649, "Metrics/MethodLength: Method has too many lines. [13/10]", 1831524792],
- [2866, 5, 649, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 1831524792],
- [2866, 54, 178, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 2962381850],
- [2867, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 3690915627],
- [2884, 5, 1280, "Metrics/AbcSize: Assignment Branch Condition size for `apply_template_tree_execution_to_directory` is too high. [<6, 16, 6> 18.11/17]", 305449363],
- [2884, 5, 1280, "Metrics/MethodLength: Method has too many lines. [23/10]", 305449363],
- [2884, 5, 1280, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 305449363],
- [2884, 51, 200, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 1352434212],
- [2885, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 1139621482],
- [2913, 5, 2199, "Metrics/AbcSize: Assignment Branch Condition size for `report_template_tree_run` is too high. [<15, 42, 31> 54.31/17]", 975627723],
- [2913, 5, 2199, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `report_template_tree_run` is too high. [25/7]", 975627723],
- [2913, 5, 2199, "Metrics/MethodLength: Method has too many lines. [38/10]", 975627723],
- [2913, 5, 2199, "Metrics/PerceivedComplexity: Perceived complexity for `report_template_tree_run` is too high. [26/8]", 975627723],
- [2957, 5, 1515, "Metrics/AbcSize: Assignment Branch Condition size for `report_template_directory_apply` is too high. [<13, 35, 21> 42.84/17]", 3710254295],
- [2957, 5, 1515, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `report_template_directory_apply` is too high. [17/7]", 3710254295],
- [2957, 5, 1515, "Metrics/MethodLength: Method has too many lines. [26/10]", 3710254295],
- [2957, 5, 1515, "Metrics/PerceivedComplexity: Perceived complexity for `report_template_directory_apply` is too high. [17/8]", 3710254295],
- [2972, 20, 1, "Style/DoubleNegation: Avoid the use of double negation (`!!`).", 177540],
- [2989, 5, 1656, "Metrics/AbcSize: Assignment Branch Condition size for `report_template_directory_plan` is too high. [<11, 24, 25> 36.36/17]", 2946319293],
- [2989, 5, 1656, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `report_template_directory_plan` is too high. [18/7]", 2946319293],
- [2989, 5, 1656, "Metrics/MethodLength: Method has too many lines. [36/10]", 2946319293],
- [2989, 5, 1656, "Metrics/PerceivedComplexity: Perceived complexity for `report_template_directory_plan` is too high. [16/8]", 2946319293],
- [3061, 7, 9, "Style/MultilineBlockChain: Avoid multi-line chains of blocks.", 3648222389],
- [3082, 5, 410, "Metrics/MethodLength: Method has too many lines. [12/10]", 248324428],
- [3088, 7, 11, "Style/MultilineBlockChain: Avoid multi-line chains of blocks.", 848344986],
- [3132, 5, 712, "Metrics/MethodLength: Method has too many lines. [12/10]", 2500743043],
- [3132, 27, 178, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 873705194],
- [3132, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3023611470],
- [3158, 42, 167, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 2002181571],
- [3171, 5, 1097, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `structured_edit_selection_profile` is too high. [8/7]", 1149325233],
- [3171, 5, 1097, "Metrics/MethodLength: Method has too many lines. [14/10]", 1149325233],
- [3171, 42, 311, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [11/5]", 3814063337],
- [3172, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 198450264],
- [3185, 34, 47, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 3204815976],
- [3190, 5, 869, "Metrics/MethodLength: Method has too many lines. [11/10]", 83957392],
- [3190, 41, 250, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 1486072775],
- [3191, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1967186495],
- [3201, 36, 47, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 3204815976],
- [3206, 5, 1156, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `structured_edit_match_profile` is too high. [10/7]", 4112674787],
- [3206, 5, 1156, "Metrics/MethodLength: Method has too many lines. [15/10]", 4112674787],
- [3206, 5, 1156, "Metrics/PerceivedComplexity: Perceived complexity for `structured_edit_match_profile` is too high. [10/8]", 4112674787],
- [3206, 38, 321, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [12/5]", 823565876],
- [3207, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5859667],
- [3208, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3673982236],
- [3226, 5, 933, "Metrics/MethodLength: Method has too many lines. [14/10]", 2099388915],
- [3226, 37, 319, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [12/5]", 250907892],
- [3227, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177545],
- [3228, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 4154814685],
- [3245, 5, 907, "Metrics/MethodLength: Method has too many lines. [12/10]", 2242846328],
- [3245, 42, 275, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 246196330],
- [3246, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1439117336],
- [3262, 5, 1057, "Metrics/MethodLength: Method has too many lines. [14/10]", 2891607970],
- [3262, 44, 323, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [11/5]", 1386547750],
- [3263, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 1676243675],
- [3264, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 4154814685],
- [3281, 5, 1375, "Metrics/AbcSize: Assignment Branch Condition size for `structured_edit_request` is too high. [<11, 25, 10> 29.09/17]", 4153786554],
- [3281, 5, 1375, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `structured_edit_request` is too high. [11/7]", 4153786554],
- [3281, 5, 1375, "Metrics/MethodLength: Method has too many lines. [16/10]", 4153786554],
- [3281, 5, 1375, "Metrics/PerceivedComplexity: Perceived complexity for `structured_edit_request` is too high. [11/8]", 4153786554],
- [3281, 32, 370, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [13/5]", 2381882467],
- [3282, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177545],
- [3303, 5, 728, "Metrics/MethodLength: Method has too many lines. [11/10]", 4026157473],
- [3303, 31, 175, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 773121544],
- [3335, 5, 597, "Metrics/MethodLength: Method has too many lines. [11/10]", 4143495860],
- [3374, 5, 577, "Metrics/MethodLength: Method has too many lines. [11/10]", 4169131743],
- [3389, 5, 1011, "Metrics/AbcSize: Assignment Branch Condition size for `structured_edit_execution_report` is too high. [<7, 16, 7> 18.81/17]", 876221899],
- [3389, 5, 1011, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `structured_edit_execution_report` is too high. [8/7]", 876221899],
- [3389, 5, 1011, "Metrics/MethodLength: Method has too many lines. [12/10]", 876221899],
- [3389, 41, 245, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 2484440861],
- [3390, 121, 55, "Layout/LineLength: Line is too long. [175/120]", 4036992717],
- [3415, 55, 170, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 668161765],
- [3438, 5, 819, "Metrics/MethodLength: Method has too many lines. [12/10]", 2287133436],
- [3438, 56, 217, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 3198032135],
- [3439, 121, 51, "Layout/LineLength: Line is too long. [171/120]", 3526181051],
- [3472, 5, 663, "Metrics/MethodLength: Method has too many lines. [11/10]", 1853778635],
- [3481, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
- [3513, 5, 663, "Metrics/MethodLength: Method has too many lines. [11/10]", 1132214891],
- [3522, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
- [3544, 5, 678, "Metrics/MethodLength: Method has too many lines. [11/10]", 556747511],
- [3553, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1808630920],
- [3575, 5, 708, "Metrics/MethodLength: Method has too many lines. [11/10]", 3590891170],
- [3584, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1367166441],
- [3607, 5, 678, "Metrics/MethodLength: Method has too many lines. [11/10]", 689748855],
- [3616, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1808630920],
- [3638, 5, 708, "Metrics/MethodLength: Method has too many lines. [11/10]", 1478642210],
- [3647, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1367166441],
- [3671, 5, 663, "Metrics/MethodLength: Method has too many lines. [11/10]", 239506091],
- [3680, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
- [3702, 5, 693, "Metrics/MethodLength: Method has too many lines. [11/10]", 3803476550],
- [3711, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
- [3734, 5, 728, "Metrics/MethodLength: Method has too many lines. [11/10]", 748161230],
- [3743, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 2807086497],
- [3765, 5, 758, "Metrics/MethodLength: Method has too many lines. [11/10]", 3900524558],
- [3774, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3463884836],
- [3798, 5, 748, "Metrics/MethodLength: Method has too many lines. [11/10]", 2076716686],
- [3807, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 609414023],
- [3829, 5, 778, "Metrics/MethodLength: Method has too many lines. [11/10]", 867958318],
- [3833, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193343749],
- [3838, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 1202823007],
- [3862, 5, 728, "Metrics/MethodLength: Method has too many lines. [11/10]", 2078323790],
- [3871, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 2807086497],
- [3893, 5, 758, "Metrics/MethodLength: Method has too many lines. [11/10]", 121025422],
- [3902, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3463884836],
- [3924, 5, 733, "Metrics/MethodLength: Method has too many lines. [11/10]", 1216456558],
- [3933, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 145839927],
- [3955, 5, 763, "Metrics/MethodLength: Method has too many lines. [11/10]", 2946525998],
- [3964, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 275709226],
- [3988, 5, 768, "Metrics/MethodLength: Method has too many lines. [11/10]", 3281402414],
- [3992, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177656],
- [3997, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 1427340581],
- [4034, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3673982236],
- [4091, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193417070],
- [4102, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 2768444],
- [4109, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3833204035],
- [4117, 5, 863, "Metrics/MethodLength: Method has too many lines. [11/10]", 3731153486],
- [4121, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 4054494590],
- [4126, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 2084326338],
- [4132, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 4201858364],
- [4136, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861122],
- [4140, 5, 873, "Metrics/MethodLength: Method has too many lines. [11/10]", 1866057614],
- [4144, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 3893180930],
- [4149, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 863421408],
- [4155, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 3247130491],
- [4159, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1171438608],
- [4163, 5, 883, "Metrics/MethodLength: Method has too many lines. [11/10]", 2352924462],
- [4163, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860841],
- [4164, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861334],
- [4167, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 465221046],
- [4172, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 1922522532],
- [4188, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 4067226670],
- [4192, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2033573170],
- [4196, 5, 893, "Metrics/MethodLength: Method has too many lines. [11/10]", 1633175534],
- [4196, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087926422],
- [4197, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087421565],
- [4200, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 615151909],
- [4205, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 884393597],
- [4231, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 417844693],
- [4235, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1233681340],
- [4239, 5, 903, "Metrics/MethodLength: Method has too many lines. [11/10]", 3964877742],
- [4239, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873471],
- [4240, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1322899615],
- [4243, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 3471008807],
- [4248, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 627945471],
- [4254, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 2960084092],
- [4258, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2148514258],
- [4262, 5, 913, "Metrics/MethodLength: Method has too many lines. [11/10]", 385546958],
- [4262, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2970472935],
- [4263, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 3808956371],
- [4266, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 3412499338],
- [4271, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 3274208144],
- [4277, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 4275923717],
- [4285, 5, 848, "Metrics/MethodLength: Method has too many lines. [11/10]", 457851502],
- [4289, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 413805135],
- [4294, 121, 45, "Layout/LineLength: Line is too long. [165/120]", 951908917],
- [4300, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 1859200227],
- [4308, 5, 808, "Metrics/MethodLength: Method has too many lines. [11/10]", 884695726],
- [4312, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 2011807620],
- [4317, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 384138219],
- [4323, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1176320663],
- [4331, 5, 798, "Metrics/MethodLength: Method has too many lines. [11/10]", 1422521838],
- [4335, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3247420006],
- [4340, 121, 35, "Layout/LineLength: Line is too long. [155/120]", 1408316702],
- [4346, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 938465266],
- [4354, 5, 803, "Metrics/MethodLength: Method has too many lines. [11/10]", 2370839950],
- [4358, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 74128911],
- [4363, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 1364659899],
- [4369, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2059517661],
- [4377, 5, 803, "Metrics/MethodLength: Method has too many lines. [11/10]", 3379336814],
- [4381, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 74128911],
- [4386, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 1364659899],
- [4434, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 4281772560],
- [4442, 5, 833, "Metrics/MethodLength: Method has too many lines. [11/10]", 3245498510],
- [4446, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3542644754],
- [4451, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 1916814773],
- [4457, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 859690879],
- [4465, 5, 833, "Metrics/MethodLength: Method has too many lines. [11/10]", 4138830126],
- [4469, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3542644754],
- [4474, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 1916814773],
- [4480, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3880141603],
- [4488, 5, 828, "Metrics/MethodLength: Method has too many lines. [11/10]", 3621010990],
- [4492, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3917260126],
- [4497, 121, 41, "Layout/LineLength: Line is too long. [161/120]", 1879260859],
- [4503, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 1776611011],
- [4511, 5, 838, "Metrics/MethodLength: Method has too many lines. [11/10]", 514585454],
- [4515, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1353518231],
- [4520, 121, 43, "Layout/LineLength: Line is too long. [163/120]", 1228459824],
- [4526, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 3932349968],
- [4530, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087903307],
- [4534, 5, 878, "Metrics/MethodLength: Method has too many lines. [11/10]", 1525737454],
- [4534, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
- [4535, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177538],
- [4538, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 2895681070],
- [4543, 121, 51, "Layout/LineLength: Line is too long. [171/120]", 4040662298],
- [4549, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 66929045],
- [4557, 5, 808, "Metrics/MethodLength: Method has too many lines. [11/10]", 1626746606],
- [4561, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 2011807620],
- [4566, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 384138219],
- [4580, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 849230508],
- [4588, 5, 838, "Metrics/MethodLength: Method has too many lines. [11/10]", 3531122670],
- [4592, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1353518231],
- [4597, 121, 43, "Layout/LineLength: Line is too long. [163/120]", 1228459824],
- [4612, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1176320663],
- [4620, 5, 798, "Metrics/MethodLength: Method has too many lines. [11/10]", 1118421486],
- [4624, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3247420006],
- [4629, 121, 35, "Layout/LineLength: Line is too long. [155/120]", 1408316702],
- [4651, 5, 693, "Metrics/MethodLength: Method has too many lines. [11/10]", 1668406662],
- [4660, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
- [4674, 5, 648, "Metrics/MethodLength: Method has too many lines. [11/10]", 3479836893],
- [4683, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193343749],
- [4705, 5, 678, "Metrics/MethodLength: Method has too many lines. [11/10]", 3147549879],
- [4714, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1808630920],
- [4749, 5, 677, "Metrics/MethodLength: Method has too many lines. [11/10]", 1206941784],
- [4758, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3937819337],
- [4781, 5, 672, "Metrics/MethodLength: Method has too many lines. [11/10]", 3634903061],
- [4790, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
- [4812, 5, 683, "Metrics/MethodLength: Method has too many lines. [11/10]", 3417053461],
- [4821, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
- [4845, 5, 668, "Metrics/MethodLength: Method has too many lines. [11/10]", 1540762726],
- [4854, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1808630920],
- [4876, 5, 698, "Metrics/MethodLength: Method has too many lines. [11/10]", 2804825893],
- [4885, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1367166441],
- [4908, 5, 683, "Metrics/MethodLength: Method has too many lines. [11/10]", 3165010613],
- [4917, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
- [4939, 5, 713, "Metrics/MethodLength: Method has too many lines. [11/10]", 2795628035],
- [4948, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 497133415],
- [4954, 5, 864, "Metrics/MethodLength: Method has too many lines. [12/10]", 1086224878],
- [4954, 50, 268, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 4022739767],
- [4955, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1607400384],
- [4979, 5, 658, "Metrics/MethodLength: Method has too many lines. [11/10]", 3999796489],
- [4988, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 102058825],
- [5002, 59, 179, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1569981428],
- [5003, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 1515849732],
- [5034, 5, 694, "Metrics/MethodLength: Method has too many lines. [11/10]", 3830236120],
- [5043, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2250857971],
- [5057, 5, 673, "Metrics/MethodLength: Method has too many lines. [11/10]", 2413908653],
- [5066, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1225026887],
- [5080, 5, 663, "Metrics/MethodLength: Method has too many lines. [11/10]", 3935895659],
- [5089, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
- [5103, 5, 692, "Metrics/MethodLength: Method has too many lines. [11/10]", 3660669627],
- [5112, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3558241761],
- [5126, 5, 612, "Metrics/MethodLength: Method has too many lines. [11/10]", 100391811],
- [5165, 5, 693, "Metrics/MethodLength: Method has too many lines. [11/10]", 3138587622],
- [5174, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
- [5196, 5, 688, "Metrics/MethodLength: Method has too many lines. [11/10]", 2736088861],
- [5205, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1992103013],
- [5228, 5, 678, "Metrics/MethodLength: Method has too many lines. [11/10]", 2275602867],
- [5237, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 3598350322],
- [5260, 5, 602, "Metrics/MethodLength: Method has too many lines. [11/10]", 3023166371],
- [5275, 36, 181, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 1071580945],
- [5288, 5, 787, "Metrics/AbcSize: Assignment Branch Condition size for `group_projected_child_review_cases` is too high. [<4, 17, 4> 17.92/17]", 3391527151],
- [5288, 5, 787, "Metrics/MethodLength: Method has too many lines. [18/10]", 3391527151],
- [5312, 5, 705, "Metrics/MethodLength: Method has too many lines. [13/10]", 2629923275],
- [5339, 5, 547, "Metrics/MethodLength: Method has too many lines. [12/10]", 1911190850],
- [5364, 5, 1516, "Metrics/AbcSize: Assignment Branch Condition size for `review_projected_child_groups` is too high. [<11, 21, 9> 25.36/17]", 3333110579],
- [5364, 5, 1516, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `review_projected_child_groups` is too high. [8/7]", 3333110579],
- [5364, 5, 1516, "Metrics/MethodLength: Method has too many lines. [39/10]", 3333110579],
- [5364, 5, 1516, "Metrics/PerceivedComplexity: Perceived complexity for `review_projected_child_groups` is too high. [9/8]", 3333110579],
- [5398, 7, 7, "Style/MultilineBlockChain: Avoid multi-line chains of blocks.", 4045560504],
- [5410, 5, 562, "Metrics/MethodLength: Method has too many lines. [14/10]", 3083915102],
- [5429, 5, 1898, "Metrics/AbcSize: Assignment Branch Condition size for `resolve_delegated_child_outputs` is too high. [<11, 21, 6> 24.45/17]", 2739722546],
- [5429, 5, 1898, "Metrics/MethodLength: Method has too many lines. [49/10]", 2739722546],
- [5484, 5, 942, "Metrics/AbcSize: Assignment Branch Condition size for `execute_nested_merge` is too high. [<3, 17, 6> 18.28/17]", 766157172],
- [5484, 5, 942, "Metrics/MethodLength: Method has too many lines. [20/10]", 766157172],
- [5484, 29, 144, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1404367793],
- [5511, 5, 652, "Metrics/MethodLength: Method has too many lines. [13/10]", 2105803856],
- [5530, 38, 140, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1682835820],
- [5560, 5, 577, "Metrics/MethodLength: Method has too many lines. [12/10]", 2659610443],
- [5629, 5, 569, "Metrics/MethodLength: Method has too many lines. [14/10]", 20616641],
- [5657, 5, 772, "Metrics/AbcSize: Assignment Branch Condition size for `conformance_manifest_review_request_ids` is too high. [<7, 16, 8> 19.21/17]", 3577418475],
- [5657, 5, 772, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `conformance_manifest_review_request_ids` is too high. [9/7]", 3577418475],
- [5657, 5, 772, "Metrics/MethodLength: Method has too many lines. [14/10]", 3577418475],
- [5657, 5, 772, "Metrics/PerceivedComplexity: Perceived complexity for `conformance_manifest_review_request_ids` is too high. [9/8]", 3577418475],
- [5711, 5, 606, "Metrics/MethodLength: Method has too many lines. [11/10]", 2675086662],
- [5726, 5, 562, "Metrics/MethodLength: Method has too many lines. [11/10]", 3811715870],
- [5741, 5, 578, "Metrics/MethodLength: Method has too many lines. [11/10]", 1776197415],
- [5756, 5, 1298, "Metrics/AbcSize: Assignment Branch Condition size for `resolve_conformance_family_context` is too high. [<7, 28, 9> 30.23/17]", 4265202259],
- [5756, 5, 1298, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `resolve_conformance_family_context` is too high. [10/7]", 4265202259],
- [5756, 5, 1298, "Metrics/MethodLength: Method has too many lines. [23/10]", 4265202259],
- [5756, 5, 1298, "Metrics/PerceivedComplexity: Perceived complexity for `resolve_conformance_family_context` is too high. [10/8]", 4265202259],
- [5785, 5, 1994, "Metrics/AbcSize: Assignment Branch Condition size for `review_conformance_family_context` is too high. [<12, 24, 10> 28.64/17]", 2834851944],
- [5785, 5, 1994, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `review_conformance_family_context` is too high. [10/7]", 2834851944],
- [5785, 5, 1994, "Metrics/MethodLength: Method has too many lines. [41/10]", 2834851944],
- [5785, 5, 1994, "Metrics/PerceivedComplexity: Perceived complexity for `review_conformance_family_context` is too high. [11/8]", 2834851944],
- [5808, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 641612328],
- [5845, 5, 1844, "Metrics/AbcSize: Assignment Branch Condition size for `select_conformance_case` is too high. [<2, 43, 14> 45.27/17]", 670673209],
- [5845, 5, 1844, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `select_conformance_case` is too high. [14/7]", 670673209],
- [5845, 5, 1844, "Metrics/MethodLength: Method has too many lines. [30/10]", 670673209],
- [5845, 5, 1844, "Metrics/PerceivedComplexity: Perceived complexity for `select_conformance_case` is too high. [16/8]", 670673209],
- [5850, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 2135503892],
- [5852, 121, 41, "Layout/LineLength: Line is too long. [161/120]", 3932054828],
- [5861, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 3169124957],
- [5883, 5, 509, "Metrics/MethodLength: Method has too many lines. [11/10]", 3552283123],
- [5972, 5, 4195, "Metrics/AbcSize: Assignment Branch Condition size for `review_conformance_manifest` is too high. [<37, 63, 16> 74.79/17]", 2166560528],
- [5972, 5, 4195, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `review_conformance_manifest` is too high. [14/7]", 2166560528],
- [5972, 5, 4195, "Metrics/MethodLength: Method has too many lines. [89/10]", 2166560528],
- [5972, 5, 4195, "Metrics/PerceivedComplexity: Perceived complexity for `review_conformance_manifest` is too high. [17/8]", 2166560528],
- [6037, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2746826653],
- [6053, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 3035993839],
- [6075, 5, 676, "Metrics/MethodLength: Method has too many lines. [15/10]", 3048335475],
- [6098, 5, 1054, "Metrics/AbcSize: Assignment Branch Condition size for `plan_conformance_suite` is too high. [<11, 18, 8> 22.56/17]", 1855254788],
- [6098, 5, 1054, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `plan_conformance_suite` is too high. [8/7]", 1855254788],
- [6098, 5, 1054, "Metrics/MethodLength: Method has too many lines. [25/10]", 1855254788],
- [6098, 31, 84, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 172854173],
- [6163, 5, 1274, "Metrics/AbcSize: Assignment Branch Condition size for `plan_named_conformance_suites_with_diagnostics` is too high. [<11, 21, 7> 24.72/17]", 3991300730],
- [6163, 5, 1274, "Metrics/MethodLength: Method has too many lines. [27/10]", 3991300730],
- [6190, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 3035993839],
- [6255, 5, 2071, "Metrics/AbcSize: Assignment Branch Condition size for `review_decision_for_family_context` is too high. [<7, 22, 16> 28.09/17]", 4245377184],
- [6255, 5, 2071, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `review_decision_for_family_context` is too high. [12/7]", 4245377184],
- [6255, 5, 2071, "Metrics/MethodLength: Method has too many lines. [46/10]", 4245377184],
- [6255, 5, 2071, "Metrics/PerceivedComplexity: Perceived complexity for `review_decision_for_family_context` is too high. [12/8]", 4245377184],
- [6260, 7, 1766, "Metrics/BlockLength: Block has too many lines. [40/25]", 65448241],
- [6312, 5, 686, "Metrics/MethodLength: Method has too many lines. [13/10]", 4030291682]
+ [164, 7, 337, "Metrics/MethodLength: Method has too many lines. [11/10]", 2388996629],
+ [181, 7, 327, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `to_h` is too high. [8/7]", 979795121],
+ [312, 7, 383, "Metrics/MethodLength: Method has too many lines. [11/10]", 634650261],
+ [476, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 3450568485],
+ [477, 7, 461, "Metrics/MethodLength: Method has too many lines. [12/10]", 43929779],
+ [494, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1299979089],
+ [495, 7, 377, "Metrics/MethodLength: Method has too many lines. [11/10]", 3704151253],
+ [511, 121, 39, "Layout/LineLength: Line is too long. [159/120]", 85503958],
+ [512, 7, 447, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `to_h` is too high. [8/7]", 298553749],
+ [512, 7, 447, "Metrics/MethodLength: Method has too many lines. [12/10]", 298553749],
+ [541, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1441148616],
+ [542, 7, 453, "Metrics/MethodLength: Method has too many lines. [14/10]", 1899007021],
+ [561, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193342990],
+ [562, 7, 400, "Metrics/MethodLength: Method has too many lines. [11/10]", 298553749],
+ [591, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860750],
+ [592, 7, 411, "Metrics/MethodLength: Method has too many lines. [12/10]", 2893925621],
+ [609, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3137791633],
+ [610, 7, 454, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `to_h` is too high. [8/7]", 298553749],
+ [610, 7, 454, "Metrics/MethodLength: Method has too many lines. [12/10]", 298553749],
+ [669, 7, 385, "Metrics/MethodLength: Method has too many lines. [11/10]", 794265461],
+ [706, 7, 419, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `to_h` is too high. [10/7]", 3313546353],
+ [706, 7, 419, "Metrics/PerceivedComplexity: Perceived complexity for `to_h` is too high. [10/8]", 3313546353],
+ [756, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 398187770],
+ [768, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 2746783933],
+ [815, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860841],
+ [823, 121, 156, "Layout/LineLength: Line is too long. [276/120]", 1149525480],
+ [828, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 2538424426],
+ [840, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 2285382915],
+ [850, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3962419360],
+ [863, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 398187770],
+ [865, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 3195178507],
+ [869, 121, 85, "Layout/LineLength: Line is too long. [205/120]", 4238980637],
+ [871, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 2678411233],
+ [873, 121, 39, "Layout/LineLength: Line is too long. [159/120]", 4028520110],
+ [884, 121, 110, "Layout/LineLength: Line is too long. [230/120]", 3837814921],
+ [898, 5, 2283, "Metrics/MethodLength: Method has too many lines. [57/10]", 2282416447],
+ [958, 5, 2654, "Metrics/MethodLength: Method has too many lines. [63/10]", 2491520565],
+ [1009, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1823519875],
+ [1018, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1874311968],
+ [1024, 5, 10660, "Metrics/AbcSize: Assignment Branch Condition size for `ruby_downstream_merge_gem_feature_matrix` is too high. [<0, 21, 0> 21/17]", 2277322577],
+ [1024, 5, 10660, "Metrics/MethodLength: Method has too many lines. [248/10]", 2277322577],
+ [1275, 5, 1546, "Metrics/MethodLength: Method has too many lines. [37/10]", 208933754],
+ [1309, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 2658452668],
+ [1315, 5, 4206, "Metrics/MethodLength: Method has too many lines. [96/10]", 1997530776],
+ [1392, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 183246985],
+ [1408, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 3268438356],
+ [1414, 5, 1598, "Metrics/MethodLength: Method has too many lines. [46/10]", 849757258],
+ [1457, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1323237892],
+ [1463, 5, 1164, "Metrics/MethodLength: Method has too many lines. [36/10]", 1477831421],
+ [1496, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 931876829],
+ [1502, 5, 1699, "Metrics/MethodLength: Method has too many lines. [43/10]", 1125544678],
+ [1548, 5, 1016, "Metrics/MethodLength: Method has too many lines. [27/10]", 2194427985],
+ [1578, 5, 1058, "Metrics/MethodLength: Method has too many lines. [30/10]", 47860722],
+ [1611, 5, 1186, "Metrics/MethodLength: Method has too many lines. [31/10]", 676863486],
+ [1639, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 2689509078],
+ [1645, 5, 1517, "Metrics/MethodLength: Method has too many lines. [41/10]", 3855445172],
+ [1658, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 817380904],
+ [1683, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 409671963],
+ [1689, 5, 2116, "Metrics/MethodLength: Method has too many lines. [61/10]", 524104794],
+ [1753, 5, 820, "Metrics/MethodLength: Method has too many lines. [12/10]", 1888457180],
+ [1753, 37, 298, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [10/5]", 789483382],
+ [1754, 121, 100, "Layout/LineLength: Line is too long. [220/120]", 3288750271],
+ [1769, 5, 3595, "Metrics/AbcSize: Assignment Branch Condition size for `initial_profile_promotion_policy` is too high. [<9, 20, 0> 21.93/17]", 83685787],
+ [1769, 5, 3595, "Metrics/MethodLength: Method has too many lines. [77/10]", 83685787],
+ [1849, 5, 768, "Metrics/MethodLength: Method has too many lines. [17/10]", 314059802],
+ [1870, 5, 1493, "Metrics/AbcSize: Assignment Branch Condition size for `evaluate_profile_selection_requirement` is too high. [<7, 23, 9> 25.67/17]", 3177555163],
+ [1870, 5, 1493, "Metrics/MethodLength: Method has too many lines. [29/10]", 3177555163],
+ [1871, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2145168012],
+ [1878, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 683002336],
+ [1912, 5, 985, "Metrics/AbcSize: Assignment Branch Condition size for `profile_promotion_blocking_reasons` is too high. [<4, 25, 13> 28.46/17]", 1146627465],
+ [1912, 5, 985, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `profile_promotion_blocking_reasons` is too high. [10/7]", 1146627465],
+ [1912, 5, 985, "Metrics/MethodLength: Method has too many lines. [18/10]", 1146627465],
+ [1912, 5, 985, "Metrics/PerceivedComplexity: Perceived complexity for `profile_promotion_blocking_reasons` is too high. [10/8]", 1146627465],
+ [1933, 5, 3173, "Metrics/AbcSize: Assignment Branch Condition size for `validate_language_backend_profile` is too high. [<25, 68, 20> 75.16/17]", 2100389324],
+ [1933, 5, 3173, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `validate_language_backend_profile` is too high. [21/7]", 2100389324],
+ [1933, 5, 3173, "Metrics/MethodLength: Method has too many lines. [60/10]", 2100389324],
+ [1933, 5, 3173, "Metrics/PerceivedComplexity: Perceived complexity for `validate_language_backend_profile` is too high. [23/8]", 2100389324],
+ [2005, 5, 1523, "Metrics/AbcSize: Assignment Branch Condition size for `validate_backend_inventory` is too high. [<13, 38, 13> 42.21/17]", 1899037537],
+ [2005, 5, 1523, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `validate_backend_inventory` is too high. [13/7]", 1899037537],
+ [2005, 5, 1523, "Metrics/MethodLength: Method has too many lines. [25/10]", 1899037537],
+ [2005, 5, 1523, "Metrics/PerceivedComplexity: Perceived complexity for `validate_backend_inventory` is too high. [13/8]", 1899037537],
+ [2048, 5, 906, "Metrics/MethodLength: Method has too many lines. [20/10]", 3137959843],
+ [2071, 5, 2744, "Metrics/AbcSize: Assignment Branch Condition size for `detect_raw_merge_inconsistencies` is too high. [<8, 43, 21> 48.52/17]", 3717440692],
+ [2071, 5, 2744, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `detect_raw_merge_inconsistencies` is too high. [17/7]", 3717440692],
+ [2071, 5, 2744, "Metrics/MethodLength: Method has too many lines. [53/10]", 3717440692],
+ [2071, 5, 2744, "Metrics/PerceivedComplexity: Perceived complexity for `detect_raw_merge_inconsistencies` is too high. [17/8]", 3717440692],
+ [2086, 7, 1894, "Metrics/BlockLength: Block has too many lines. [33/25]", 758887611],
+ [2132, 5, 762, "Metrics/MethodLength: Method has too many lines. [11/10]", 3021402342],
+ [2146, 5, 490, "Metrics/MethodLength: Method has too many lines. [11/10]", 578473475],
+ [2160, 5, 881, "Metrics/AbcSize: Assignment Branch Condition size for `execute_independent_commutative_insertions` is too high. [<6, 16, 7> 18.47/17]", 259417386],
+ [2160, 5, 881, "Metrics/MethodLength: Method has too many lines. [21/10]", 259417386],
+ [2187, 5, 1107, "Metrics/AbcSize: Assignment Branch Condition size for `execute_independent_keyed_member_edits` is too high. [<10, 31, 15> 35.86/17]", 4271501385],
+ [2187, 5, 1107, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `execute_independent_keyed_member_edits` is too high. [14/7]", 4271501385],
+ [2187, 5, 1107, "Metrics/MethodLength: Method has too many lines. [24/10]", 4271501385],
+ [2187, 5, 1107, "Metrics/PerceivedComplexity: Perceived complexity for `execute_independent_keyed_member_edits` is too high. [14/8]", 4271501385],
+ [2231, 5, 3149, "Metrics/AbcSize: Assignment Branch Condition size for `parse_compact_ruleset` is too high. [<16, 68, 24> 73.86/17]", 3149098803],
+ [2231, 5, 3149, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `parse_compact_ruleset` is too high. [22/7]", 3149098803],
+ [2231, 5, 3149, "Metrics/MethodLength: Method has too many lines. [67/10]", 3149098803],
+ [2231, 5, 3149, "Metrics/PerceivedComplexity: Perceived complexity for `parse_compact_ruleset` is too high. [23/8]", 3149098803],
+ [2237, 7, 2544, "Metrics/BlockLength: Block has too many lines. [50/25]", 2484860466],
+ [2264, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193420054],
+ [2310, 5, 2658, "Metrics/AbcSize: Assignment Branch Condition size for `compact_ruleset_feature_profile` is too high. [<11, 67, 38> 77.81/17]", 4022599673],
+ [2310, 5, 2658, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `compact_ruleset_feature_profile` is too high. [29/7]", 4022599673],
+ [2310, 5, 2658, "Metrics/MethodLength: Method has too many lines. [66/10]", 4022599673],
+ [2310, 5, 2658, "Metrics/PerceivedComplexity: Perceived complexity for `compact_ruleset_feature_profile` is too high. [16/8]", 4022599673],
+ [2328, 7, 2243, "Metrics/BlockLength: Block has too many lines. [47/25]", 965041772],
+ [2395, 5, 2733, "Metrics/AbcSize: Assignment Branch Condition size for `classify_template_target_path` is too high. [<4, 36, 23> 42.91/17]", 3661828596],
+ [2395, 5, 2733, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `classify_template_target_path` is too high. [21/7]", 3661828596],
+ [2395, 5, 2733, "Metrics/MethodLength: Method has too many lines. [39/10]", 3661828596],
+ [2395, 5, 2733, "Metrics/PerceivedComplexity: Perceived complexity for `classify_template_target_path` is too high. [17/8]", 3661828596],
+ [2427, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
+ [2441, 5, 416, "Metrics/MethodLength: Method has too many lines. [12/10]", 1388641773],
+ [2484, 5, 388, "Metrics/MethodLength: Method has too many lines. [12/10]", 2360583514],
+ [2513, 5, 820, "Metrics/MethodLength: Method has too many lines. [13/10]", 354674808],
+ [2529, 5, 929, "Metrics/AbcSize: Assignment Branch Condition size for `enrich_template_plan_entries` is too high. [<9, 12, 10> 18.03/17]", 2666747528],
+ [2529, 5, 929, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `enrich_template_plan_entries` is too high. [9/7]", 2666747528],
+ [2529, 5, 929, "Metrics/MethodLength: Method has too many lines. [19/10]", 2666747528],
+ [2529, 5, 929, "Metrics/PerceivedComplexity: Perceived complexity for `enrich_template_plan_entries` is too high. [10/8]", 2666747528],
+ [2552, 5, 1245, "Metrics/AbcSize: Assignment Branch Condition size for `enrich_template_plan_entries_with_token_state` is too high. [<11, 23, 14> 29.09/17]", 1507113977],
+ [2552, 5, 1245, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `enrich_template_plan_entries_with_token_state` is too high. [13/7]", 1507113977],
+ [2552, 5, 1245, "Metrics/MethodLength: Method has too many lines. [19/10]", 1507113977],
+ [2552, 5, 1245, "Metrics/PerceivedComplexity: Perceived complexity for `enrich_template_plan_entries_with_token_state` is too high. [13/8]", 1507113977],
+ [2576, 5, 1353, "Metrics/AbcSize: Assignment Branch Condition size for `prepare_template_entries` is too high. [<6, 18, 11> 21.93/17]", 2774310942],
+ [2576, 5, 1353, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `prepare_template_entries` is too high. [11/7]", 2774310942],
+ [2576, 5, 1353, "Metrics/MethodLength: Method has too many lines. [24/10]", 2774310942],
+ [2576, 5, 1353, "Metrics/PerceivedComplexity: Perceived complexity for `prepare_template_entries` is too high. [12/8]", 2774310942],
+ [2606, 5, 1494, "Metrics/AbcSize: Assignment Branch Condition size for `plan_template_execution` is too high. [<8, 22, 17> 28.93/17]", 3876421385],
+ [2606, 5, 1494, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `plan_template_execution` is too high. [14/7]", 3876421385],
+ [2606, 5, 1494, "Metrics/MethodLength: Method has too many lines. [29/10]", 3876421385],
+ [2606, 5, 1494, "Metrics/PerceivedComplexity: Perceived complexity for `plan_template_execution` is too high. [15/8]", 3876421385],
+ [2607, 7, 1421, "Metrics/BlockLength: Block has too many lines. [27/25]", 2887810383],
+ [2640, 5, 822, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 2749235529],
+ [2640, 37, 220, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 447165880],
+ [2641, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 518382509],
+ [2655, 5, 2060, "Metrics/AbcSize: Assignment Branch Condition size for `preview_template_execution` is too high. [<11, 42, 26> 50.61/17]", 2270817206],
+ [2655, 5, 2060, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `preview_template_execution` is too high. [25/7]", 2270817206],
+ [2655, 5, 2060, "Metrics/MethodLength: Method has too many lines. [39/10]", 2270817206],
+ [2655, 5, 2060, "Metrics/PerceivedComplexity: Perceived complexity for `preview_template_execution` is too high. [23/8]", 2270817206],
+ [2665, 7, 1809, "Metrics/BlockLength: Block has too many lines. [28/25]", 310337564],
+ [2703, 5, 2513, "Metrics/AbcSize: Assignment Branch Condition size for `apply_template_execution` is too high. [<14, 50, 25> 57.63/17]", 177708331],
+ [2703, 5, 2513, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `apply_template_execution` is too high. [26/7]", 177708331],
+ [2703, 5, 2513, "Metrics/MethodLength: Method has too many lines. [50/10]", 177708331],
+ [2703, 5, 2513, "Metrics/PerceivedComplexity: Perceived complexity for `apply_template_execution` is too high. [23/8]", 177708331],
+ [2714, 7, 2239, "Metrics/BlockLength: Block has too many lines. [38/25]", 1651205014],
+ [2764, 5, 1696, "Metrics/AbcSize: Assignment Branch Condition size for `evaluate_template_tree_convergence` is too high. [<11, 29, 17> 35.37/17]", 2507998041],
+ [2764, 5, 1696, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `evaluate_template_tree_convergence` is too high. [17/7]", 2507998041],
+ [2764, 5, 1696, "Metrics/MethodLength: Method has too many lines. [35/10]", 2507998041],
+ [2764, 5, 1696, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 2507998041],
+ [2764, 5, 1696, "Metrics/PerceivedComplexity: Perceived complexity for `evaluate_template_tree_convergence` is too high. [17/8]", 2507998041],
+ [2764, 43, 198, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 4214374277],
+ [2765, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 2983874608],
+ [2807, 5, 688, "Metrics/MethodLength: Method has too many lines. [15/10]", 3064253784],
+ [2807, 5, 688, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 3064253784],
+ [2807, 36, 216, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 448029307],
+ [2808, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3840139076],
+ [2851, 5, 664, "Metrics/MethodLength: Method has too many lines. [13/10]", 995637868],
+ [2851, 5, 664, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 995637868],
+ [2851, 53, 202, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 4227116196],
+ [2852, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 418683952],
+ [2869, 5, 649, "Metrics/MethodLength: Method has too many lines. [13/10]", 1831524792],
+ [2869, 5, 649, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 1831524792],
+ [2869, 54, 178, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 2962381850],
+ [2870, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 3690915627],
+ [2887, 5, 1280, "Metrics/AbcSize: Assignment Branch Condition size for `apply_template_tree_execution_to_directory` is too high. [<6, 16, 6> 18.11/17]", 305449363],
+ [2887, 5, 1280, "Metrics/MethodLength: Method has too many lines. [23/10]", 305449363],
+ [2887, 5, 1280, "Metrics/ParameterLists: Method has too many optional parameters. [5/3]", 305449363],
+ [2887, 51, 200, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 1352434212],
+ [2888, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 1139621482],
+ [2916, 5, 2199, "Metrics/AbcSize: Assignment Branch Condition size for `report_template_tree_run` is too high. [<15, 42, 31> 54.31/17]", 975627723],
+ [2916, 5, 2199, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `report_template_tree_run` is too high. [25/7]", 975627723],
+ [2916, 5, 2199, "Metrics/MethodLength: Method has too many lines. [38/10]", 975627723],
+ [2916, 5, 2199, "Metrics/PerceivedComplexity: Perceived complexity for `report_template_tree_run` is too high. [26/8]", 975627723],
+ [2960, 5, 1515, "Metrics/AbcSize: Assignment Branch Condition size for `report_template_directory_apply` is too high. [<13, 35, 21> 42.84/17]", 3710254295],
+ [2960, 5, 1515, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `report_template_directory_apply` is too high. [17/7]", 3710254295],
+ [2960, 5, 1515, "Metrics/MethodLength: Method has too many lines. [26/10]", 3710254295],
+ [2960, 5, 1515, "Metrics/PerceivedComplexity: Perceived complexity for `report_template_directory_apply` is too high. [17/8]", 3710254295],
+ [2975, 20, 1, "Style/DoubleNegation: Avoid the use of double negation (`!!`).", 177540],
+ [2992, 5, 1656, "Metrics/AbcSize: Assignment Branch Condition size for `report_template_directory_plan` is too high. [<11, 24, 25> 36.36/17]", 2946319293],
+ [2992, 5, 1656, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `report_template_directory_plan` is too high. [18/7]", 2946319293],
+ [2992, 5, 1656, "Metrics/MethodLength: Method has too many lines. [36/10]", 2946319293],
+ [2992, 5, 1656, "Metrics/PerceivedComplexity: Perceived complexity for `report_template_directory_plan` is too high. [16/8]", 2946319293],
+ [3064, 7, 9, "Style/MultilineBlockChain: Avoid multi-line chains of blocks.", 3648222389],
+ [3085, 5, 410, "Metrics/MethodLength: Method has too many lines. [12/10]", 248324428],
+ [3091, 7, 11, "Style/MultilineBlockChain: Avoid multi-line chains of blocks.", 848344986],
+ [3135, 5, 712, "Metrics/MethodLength: Method has too many lines. [12/10]", 2500743043],
+ [3135, 27, 178, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 873705194],
+ [3135, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3023611470],
+ [3161, 42, 167, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 2002181571],
+ [3174, 5, 1097, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `structured_edit_selection_profile` is too high. [8/7]", 1149325233],
+ [3174, 5, 1097, "Metrics/MethodLength: Method has too many lines. [14/10]", 1149325233],
+ [3174, 42, 311, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [11/5]", 3814063337],
+ [3175, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 198450264],
+ [3188, 34, 47, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 3204815976],
+ [3193, 5, 869, "Metrics/MethodLength: Method has too many lines. [11/10]", 83957392],
+ [3193, 41, 250, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 1486072775],
+ [3194, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1967186495],
+ [3204, 36, 47, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 3204815976],
+ [3209, 5, 1156, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `structured_edit_match_profile` is too high. [10/7]", 4112674787],
+ [3209, 5, 1156, "Metrics/MethodLength: Method has too many lines. [15/10]", 4112674787],
+ [3209, 5, 1156, "Metrics/PerceivedComplexity: Perceived complexity for `structured_edit_match_profile` is too high. [10/8]", 4112674787],
+ [3209, 38, 321, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [12/5]", 823565876],
+ [3210, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5859667],
+ [3211, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3673982236],
+ [3229, 5, 933, "Metrics/MethodLength: Method has too many lines. [14/10]", 2099388915],
+ [3229, 37, 319, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [12/5]", 250907892],
+ [3230, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177545],
+ [3231, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 4154814685],
+ [3248, 5, 907, "Metrics/MethodLength: Method has too many lines. [12/10]", 2242846328],
+ [3248, 42, 275, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 246196330],
+ [3249, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1439117336],
+ [3265, 5, 1057, "Metrics/MethodLength: Method has too many lines. [14/10]", 2891607970],
+ [3265, 44, 323, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [11/5]", 1386547750],
+ [3266, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 1676243675],
+ [3267, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 4154814685],
+ [3284, 5, 1375, "Metrics/AbcSize: Assignment Branch Condition size for `structured_edit_request` is too high. [<11, 25, 10> 29.09/17]", 4153786554],
+ [3284, 5, 1375, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `structured_edit_request` is too high. [11/7]", 4153786554],
+ [3284, 5, 1375, "Metrics/MethodLength: Method has too many lines. [16/10]", 4153786554],
+ [3284, 5, 1375, "Metrics/PerceivedComplexity: Perceived complexity for `structured_edit_request` is too high. [11/8]", 4153786554],
+ [3284, 32, 370, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [13/5]", 2381882467],
+ [3285, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177545],
+ [3306, 5, 728, "Metrics/MethodLength: Method has too many lines. [11/10]", 4026157473],
+ [3306, 31, 175, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 773121544],
+ [3338, 5, 597, "Metrics/MethodLength: Method has too many lines. [11/10]", 4143495860],
+ [3377, 5, 577, "Metrics/MethodLength: Method has too many lines. [11/10]", 4169131743],
+ [3392, 5, 1011, "Metrics/AbcSize: Assignment Branch Condition size for `structured_edit_execution_report` is too high. [<7, 16, 7> 18.81/17]", 876221899],
+ [3392, 5, 1011, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `structured_edit_execution_report` is too high. [8/7]", 876221899],
+ [3392, 5, 1011, "Metrics/MethodLength: Method has too many lines. [12/10]", 876221899],
+ [3392, 41, 245, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 2484440861],
+ [3393, 121, 55, "Layout/LineLength: Line is too long. [175/120]", 4036992717],
+ [3418, 55, 170, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 668161765],
+ [3441, 5, 819, "Metrics/MethodLength: Method has too many lines. [12/10]", 2287133436],
+ [3441, 56, 217, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 3198032135],
+ [3442, 121, 51, "Layout/LineLength: Line is too long. [171/120]", 3526181051],
+ [3475, 5, 663, "Metrics/MethodLength: Method has too many lines. [11/10]", 1853778635],
+ [3484, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
+ [3516, 5, 663, "Metrics/MethodLength: Method has too many lines. [11/10]", 1132214891],
+ [3525, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
+ [3547, 5, 678, "Metrics/MethodLength: Method has too many lines. [11/10]", 556747511],
+ [3556, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1808630920],
+ [3578, 5, 708, "Metrics/MethodLength: Method has too many lines. [11/10]", 3590891170],
+ [3587, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1367166441],
+ [3610, 5, 678, "Metrics/MethodLength: Method has too many lines. [11/10]", 689748855],
+ [3619, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1808630920],
+ [3641, 5, 708, "Metrics/MethodLength: Method has too many lines. [11/10]", 1478642210],
+ [3650, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1367166441],
+ [3674, 5, 663, "Metrics/MethodLength: Method has too many lines. [11/10]", 239506091],
+ [3683, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
+ [3705, 5, 693, "Metrics/MethodLength: Method has too many lines. [11/10]", 3803476550],
+ [3714, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
+ [3737, 5, 728, "Metrics/MethodLength: Method has too many lines. [11/10]", 748161230],
+ [3746, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 2807086497],
+ [3768, 5, 758, "Metrics/MethodLength: Method has too many lines. [11/10]", 3900524558],
+ [3777, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3463884836],
+ [3801, 5, 748, "Metrics/MethodLength: Method has too many lines. [11/10]", 2076716686],
+ [3810, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 609414023],
+ [3832, 5, 778, "Metrics/MethodLength: Method has too many lines. [11/10]", 867958318],
+ [3836, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193343749],
+ [3841, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 1202823007],
+ [3865, 5, 728, "Metrics/MethodLength: Method has too many lines. [11/10]", 2078323790],
+ [3874, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 2807086497],
+ [3896, 5, 758, "Metrics/MethodLength: Method has too many lines. [11/10]", 121025422],
+ [3905, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3463884836],
+ [3927, 5, 733, "Metrics/MethodLength: Method has too many lines. [11/10]", 1216456558],
+ [3936, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 145839927],
+ [3958, 5, 763, "Metrics/MethodLength: Method has too many lines. [11/10]", 2946525998],
+ [3967, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 275709226],
+ [3991, 5, 768, "Metrics/MethodLength: Method has too many lines. [11/10]", 3281402414],
+ [3995, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177656],
+ [4000, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 1427340581],
+ [4037, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3673982236],
+ [4094, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193417070],
+ [4105, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 2768444],
+ [4112, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3833204035],
+ [4120, 5, 863, "Metrics/MethodLength: Method has too many lines. [11/10]", 3731153486],
+ [4124, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 4054494590],
+ [4129, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 2084326338],
+ [4135, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 4201858364],
+ [4139, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861122],
+ [4143, 5, 873, "Metrics/MethodLength: Method has too many lines. [11/10]", 1866057614],
+ [4147, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 3893180930],
+ [4152, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 863421408],
+ [4158, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 3247130491],
+ [4162, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1171438608],
+ [4166, 5, 883, "Metrics/MethodLength: Method has too many lines. [11/10]", 2352924462],
+ [4166, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860841],
+ [4167, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861334],
+ [4170, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 465221046],
+ [4175, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 1922522532],
+ [4191, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 4067226670],
+ [4195, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2033573170],
+ [4199, 5, 893, "Metrics/MethodLength: Method has too many lines. [11/10]", 1633175534],
+ [4199, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087926422],
+ [4200, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087421565],
+ [4203, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 615151909],
+ [4208, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 884393597],
+ [4234, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 417844693],
+ [4238, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1233681340],
+ [4242, 5, 903, "Metrics/MethodLength: Method has too many lines. [11/10]", 3964877742],
+ [4242, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873471],
+ [4243, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1322899615],
+ [4246, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 3471008807],
+ [4251, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 627945471],
+ [4257, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 2960084092],
+ [4261, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2148514258],
+ [4265, 5, 913, "Metrics/MethodLength: Method has too many lines. [11/10]", 385546958],
+ [4265, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2970472935],
+ [4266, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 3808956371],
+ [4269, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 3412499338],
+ [4274, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 3274208144],
+ [4280, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 4275923717],
+ [4288, 5, 848, "Metrics/MethodLength: Method has too many lines. [11/10]", 457851502],
+ [4292, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 413805135],
+ [4297, 121, 45, "Layout/LineLength: Line is too long. [165/120]", 951908917],
+ [4303, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 1859200227],
+ [4311, 5, 808, "Metrics/MethodLength: Method has too many lines. [11/10]", 884695726],
+ [4315, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 2011807620],
+ [4320, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 384138219],
+ [4326, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1176320663],
+ [4334, 5, 798, "Metrics/MethodLength: Method has too many lines. [11/10]", 1422521838],
+ [4338, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3247420006],
+ [4343, 121, 35, "Layout/LineLength: Line is too long. [155/120]", 1408316702],
+ [4349, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 938465266],
+ [4357, 5, 803, "Metrics/MethodLength: Method has too many lines. [11/10]", 2370839950],
+ [4361, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 74128911],
+ [4366, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 1364659899],
+ [4372, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2059517661],
+ [4380, 5, 803, "Metrics/MethodLength: Method has too many lines. [11/10]", 3379336814],
+ [4384, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 74128911],
+ [4389, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 1364659899],
+ [4437, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 4281772560],
+ [4445, 5, 833, "Metrics/MethodLength: Method has too many lines. [11/10]", 3245498510],
+ [4449, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3542644754],
+ [4454, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 1916814773],
+ [4460, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 859690879],
+ [4468, 5, 833, "Metrics/MethodLength: Method has too many lines. [11/10]", 4138830126],
+ [4472, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3542644754],
+ [4477, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 1916814773],
+ [4483, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3880141603],
+ [4491, 5, 828, "Metrics/MethodLength: Method has too many lines. [11/10]", 3621010990],
+ [4495, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3917260126],
+ [4500, 121, 41, "Layout/LineLength: Line is too long. [161/120]", 1879260859],
+ [4506, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 1776611011],
+ [4514, 5, 838, "Metrics/MethodLength: Method has too many lines. [11/10]", 514585454],
+ [4518, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1353518231],
+ [4523, 121, 43, "Layout/LineLength: Line is too long. [163/120]", 1228459824],
+ [4529, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 3932349968],
+ [4533, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087903307],
+ [4537, 5, 878, "Metrics/MethodLength: Method has too many lines. [11/10]", 1525737454],
+ [4537, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
+ [4538, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177538],
+ [4541, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 2895681070],
+ [4546, 121, 51, "Layout/LineLength: Line is too long. [171/120]", 4040662298],
+ [4552, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 66929045],
+ [4560, 5, 808, "Metrics/MethodLength: Method has too many lines. [11/10]", 1626746606],
+ [4564, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 2011807620],
+ [4569, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 384138219],
+ [4583, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 849230508],
+ [4591, 5, 838, "Metrics/MethodLength: Method has too many lines. [11/10]", 3531122670],
+ [4595, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1353518231],
+ [4600, 121, 43, "Layout/LineLength: Line is too long. [163/120]", 1228459824],
+ [4615, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1176320663],
+ [4623, 5, 798, "Metrics/MethodLength: Method has too many lines. [11/10]", 1118421486],
+ [4627, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3247420006],
+ [4632, 121, 35, "Layout/LineLength: Line is too long. [155/120]", 1408316702],
+ [4654, 5, 693, "Metrics/MethodLength: Method has too many lines. [11/10]", 1668406662],
+ [4663, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
+ [4677, 5, 648, "Metrics/MethodLength: Method has too many lines. [11/10]", 3479836893],
+ [4686, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193343749],
+ [4708, 5, 678, "Metrics/MethodLength: Method has too many lines. [11/10]", 3147549879],
+ [4717, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1808630920],
+ [4752, 5, 677, "Metrics/MethodLength: Method has too many lines. [11/10]", 1206941784],
+ [4761, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 3937819337],
+ [4784, 5, 672, "Metrics/MethodLength: Method has too many lines. [11/10]", 3634903061],
+ [4793, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
+ [4815, 5, 683, "Metrics/MethodLength: Method has too many lines. [11/10]", 3417053461],
+ [4824, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
+ [4848, 5, 668, "Metrics/MethodLength: Method has too many lines. [11/10]", 1540762726],
+ [4857, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 1808630920],
+ [4879, 5, 698, "Metrics/MethodLength: Method has too many lines. [11/10]", 2804825893],
+ [4888, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1367166441],
+ [4911, 5, 683, "Metrics/MethodLength: Method has too many lines. [11/10]", 3165010613],
+ [4920, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
+ [4942, 5, 713, "Metrics/MethodLength: Method has too many lines. [11/10]", 2795628035],
+ [4951, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 497133415],
+ [4957, 5, 864, "Metrics/MethodLength: Method has too many lines. [12/10]", 1086224878],
+ [4957, 50, 268, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [9/5]", 4022739767],
+ [4958, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1607400384],
+ [4982, 5, 658, "Metrics/MethodLength: Method has too many lines. [11/10]", 3999796489],
+ [4991, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 102058825],
+ [5005, 59, 179, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1569981428],
+ [5006, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 1515849732],
+ [5037, 5, 694, "Metrics/MethodLength: Method has too many lines. [11/10]", 3830236120],
+ [5046, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2250857971],
+ [5060, 5, 673, "Metrics/MethodLength: Method has too many lines. [11/10]", 2413908653],
+ [5069, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1225026887],
+ [5083, 5, 663, "Metrics/MethodLength: Method has too many lines. [11/10]", 3935895659],
+ [5092, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2162352564],
+ [5106, 5, 692, "Metrics/MethodLength: Method has too many lines. [11/10]", 3660669627],
+ [5115, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3558241761],
+ [5129, 5, 612, "Metrics/MethodLength: Method has too many lines. [11/10]", 100391811],
+ [5168, 5, 693, "Metrics/MethodLength: Method has too many lines. [11/10]", 3138587622],
+ [5177, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 926808928],
+ [5199, 5, 688, "Metrics/MethodLength: Method has too many lines. [11/10]", 2736088861],
+ [5208, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1992103013],
+ [5231, 5, 678, "Metrics/MethodLength: Method has too many lines. [11/10]", 2275602867],
+ [5240, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 3598350322],
+ [5263, 5, 602, "Metrics/MethodLength: Method has too many lines. [11/10]", 3023166371],
+ [5278, 36, 181, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 1071580945],
+ [5291, 5, 787, "Metrics/AbcSize: Assignment Branch Condition size for `group_projected_child_review_cases` is too high. [<4, 17, 4> 17.92/17]", 3391527151],
+ [5291, 5, 787, "Metrics/MethodLength: Method has too many lines. [18/10]", 3391527151],
+ [5315, 5, 705, "Metrics/MethodLength: Method has too many lines. [13/10]", 2629923275],
+ [5342, 5, 547, "Metrics/MethodLength: Method has too many lines. [12/10]", 1911190850],
+ [5367, 5, 1516, "Metrics/AbcSize: Assignment Branch Condition size for `review_projected_child_groups` is too high. [<11, 21, 9> 25.36/17]", 3333110579],
+ [5367, 5, 1516, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `review_projected_child_groups` is too high. [8/7]", 3333110579],
+ [5367, 5, 1516, "Metrics/MethodLength: Method has too many lines. [39/10]", 3333110579],
+ [5367, 5, 1516, "Metrics/PerceivedComplexity: Perceived complexity for `review_projected_child_groups` is too high. [9/8]", 3333110579],
+ [5401, 7, 7, "Style/MultilineBlockChain: Avoid multi-line chains of blocks.", 4045560504],
+ [5413, 5, 562, "Metrics/MethodLength: Method has too many lines. [14/10]", 3083915102],
+ [5432, 5, 1898, "Metrics/AbcSize: Assignment Branch Condition size for `resolve_delegated_child_outputs` is too high. [<11, 21, 6> 24.45/17]", 2739722546],
+ [5432, 5, 1898, "Metrics/MethodLength: Method has too many lines. [49/10]", 2739722546],
+ [5487, 5, 942, "Metrics/AbcSize: Assignment Branch Condition size for `execute_nested_merge` is too high. [<3, 17, 6> 18.28/17]", 766157172],
+ [5487, 5, 942, "Metrics/MethodLength: Method has too many lines. [20/10]", 766157172],
+ [5487, 29, 144, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1404367793],
+ [5514, 5, 652, "Metrics/MethodLength: Method has too many lines. [13/10]", 2105803856],
+ [5533, 38, 140, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1682835820],
+ [5563, 5, 577, "Metrics/MethodLength: Method has too many lines. [12/10]", 2659610443],
+ [5632, 5, 569, "Metrics/MethodLength: Method has too many lines. [14/10]", 20616641],
+ [5660, 5, 772, "Metrics/AbcSize: Assignment Branch Condition size for `conformance_manifest_review_request_ids` is too high. [<7, 16, 8> 19.21/17]", 3577418475],
+ [5660, 5, 772, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `conformance_manifest_review_request_ids` is too high. [9/7]", 3577418475],
+ [5660, 5, 772, "Metrics/MethodLength: Method has too many lines. [14/10]", 3577418475],
+ [5660, 5, 772, "Metrics/PerceivedComplexity: Perceived complexity for `conformance_manifest_review_request_ids` is too high. [9/8]", 3577418475],
+ [5714, 5, 606, "Metrics/MethodLength: Method has too many lines. [11/10]", 2675086662],
+ [5729, 5, 562, "Metrics/MethodLength: Method has too many lines. [11/10]", 3811715870],
+ [5744, 5, 578, "Metrics/MethodLength: Method has too many lines. [11/10]", 1776197415],
+ [5759, 5, 1298, "Metrics/AbcSize: Assignment Branch Condition size for `resolve_conformance_family_context` is too high. [<7, 28, 9> 30.23/17]", 4265202259],
+ [5759, 5, 1298, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `resolve_conformance_family_context` is too high. [10/7]", 4265202259],
+ [5759, 5, 1298, "Metrics/MethodLength: Method has too many lines. [23/10]", 4265202259],
+ [5759, 5, 1298, "Metrics/PerceivedComplexity: Perceived complexity for `resolve_conformance_family_context` is too high. [10/8]", 4265202259],
+ [5788, 5, 1994, "Metrics/AbcSize: Assignment Branch Condition size for `review_conformance_family_context` is too high. [<12, 24, 10> 28.64/17]", 2834851944],
+ [5788, 5, 1994, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `review_conformance_family_context` is too high. [10/7]", 2834851944],
+ [5788, 5, 1994, "Metrics/MethodLength: Method has too many lines. [41/10]", 2834851944],
+ [5788, 5, 1994, "Metrics/PerceivedComplexity: Perceived complexity for `review_conformance_family_context` is too high. [11/8]", 2834851944],
+ [5811, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 641612328],
+ [5848, 5, 1844, "Metrics/AbcSize: Assignment Branch Condition size for `select_conformance_case` is too high. [<2, 43, 14> 45.27/17]", 670673209],
+ [5848, 5, 1844, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `select_conformance_case` is too high. [14/7]", 670673209],
+ [5848, 5, 1844, "Metrics/MethodLength: Method has too many lines. [30/10]", 670673209],
+ [5848, 5, 1844, "Metrics/PerceivedComplexity: Perceived complexity for `select_conformance_case` is too high. [16/8]", 670673209],
+ [5853, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 2135503892],
+ [5855, 121, 41, "Layout/LineLength: Line is too long. [161/120]", 3932054828],
+ [5864, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 3169124957],
+ [5886, 5, 509, "Metrics/MethodLength: Method has too many lines. [11/10]", 3552283123],
+ [5975, 5, 4195, "Metrics/AbcSize: Assignment Branch Condition size for `review_conformance_manifest` is too high. [<37, 63, 16> 74.79/17]", 2166560528],
+ [5975, 5, 4195, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `review_conformance_manifest` is too high. [14/7]", 2166560528],
+ [5975, 5, 4195, "Metrics/MethodLength: Method has too many lines. [89/10]", 2166560528],
+ [5975, 5, 4195, "Metrics/PerceivedComplexity: Perceived complexity for `review_conformance_manifest` is too high. [17/8]", 2166560528],
+ [6040, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2746826653],
+ [6056, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 3035993839],
+ [6078, 5, 676, "Metrics/MethodLength: Method has too many lines. [15/10]", 3048335475],
+ [6101, 5, 1054, "Metrics/AbcSize: Assignment Branch Condition size for `plan_conformance_suite` is too high. [<11, 18, 8> 22.56/17]", 1855254788],
+ [6101, 5, 1054, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `plan_conformance_suite` is too high. [8/7]", 1855254788],
+ [6101, 5, 1054, "Metrics/MethodLength: Method has too many lines. [25/10]", 1855254788],
+ [6101, 31, 84, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 172854173],
+ [6166, 5, 1274, "Metrics/AbcSize: Assignment Branch Condition size for `plan_named_conformance_suites_with_diagnostics` is too high. [<11, 21, 7> 24.72/17]", 3991300730],
+ [6166, 5, 1274, "Metrics/MethodLength: Method has too many lines. [27/10]", 3991300730],
+ [6193, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 3035993839],
+ [6258, 5, 2071, "Metrics/AbcSize: Assignment Branch Condition size for `review_decision_for_family_context` is too high. [<7, 22, 16> 28.09/17]", 4245377184],
+ [6258, 5, 2071, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `review_decision_for_family_context` is too high. [12/7]", 4245377184],
+ [6258, 5, 2071, "Metrics/MethodLength: Method has too many lines. [46/10]", 4245377184],
+ [6258, 5, 2071, "Metrics/PerceivedComplexity: Perceived complexity for `review_decision_for_family_context` is too high. [12/8]", 4245377184],
+ [6263, 7, 1766, "Metrics/BlockLength: Block has too many lines. [40/25]", 65448241],
+ [6315, 5, 686, "Metrics/MethodLength: Method has too many lines. [13/10]", 4030291682]
],
"lib/ast/merge/ast_node.rb:2037773320": [
[44, 5, 7086, "Metrics/ClassLength: Class has too many lines. [114/100]", 201314721],
@@ -689,6 +703,33 @@
[99, 11, 553, "Metrics/AbcSize: Assignment Branch Condition size for `line_text_from` is too high. [<4, 20, 4> 20.78/17]", 2680273536],
[99, 11, 553, "Metrics/MethodLength: Method has too many lines. [13/10]", 2680273536]
],
+ "lib/ast/merge/comment_layout_emission_support.rb:3192614990": [
+ [12, 5, 14039, "Metrics/ModuleLength: Module has too many lines. [287/100]", 2115648988],
+ [18, 40, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [29, 40, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [88, 43, 149, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1025246092],
+ [100, 7, 916, "Metrics/MethodLength: Method has too many lines. [11/10]", 3294772058],
+ [100, 57, 163, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1661656204],
+ [122, 7, 730, "Metrics/MethodLength: Method has too many lines. [13/10]", 2493279555],
+ [139, 62, 6, "Lint/UnusedMethodArgument: Unused method argument - `owners`.", 1719502071],
+ [193, 7, 477, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `retained_owner_leading_gap_for` is too high. [8/7]", 974771614],
+ [193, 7, 477, "Metrics/PerceivedComplexity: Perceived complexity for `retained_owner_leading_gap_for` is too high. [9/8]", 974771614],
+ [194, 40, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [220, 23, 24, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 1487466207],
+ [243, 7, 1015, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `root_boundary_lines_for` is too high. [11/7]", 2612519600],
+ [243, 7, 1015, "Metrics/MethodLength: Method has too many lines. [13/10]", 2612519600],
+ [243, 7, 1015, "Metrics/PerceivedComplexity: Perceived complexity for `root_boundary_lines_for` is too high. [11/8]", 2612519600],
+ [247, 34, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [271, 7, 959, "Metrics/AbcSize: Assignment Branch Condition size for `owner_bound_root_boundary_lines_for` is too high. [<8, 22, 17> 28.93/17]", 238225688],
+ [271, 7, 959, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `owner_bound_root_boundary_lines_for` is too high. [16/7]", 238225688],
+ [271, 7, 959, "Metrics/MethodLength: Method has too many lines. [17/10]", 238225688],
+ [271, 7, 959, "Metrics/PerceivedComplexity: Perceived complexity for `owner_bound_root_boundary_lines_for` is too high. [15/8]", 238225688],
+ [307, 7, 912, "Metrics/AbcSize: Assignment Branch Condition size for `root_boundary_range` is too high. [<6, 22, 12> 25.77/17]", 2821370782],
+ [307, 7, 912, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `root_boundary_range` is too high. [11/7]", 2821370782],
+ [307, 7, 912, "Metrics/MethodLength: Method has too many lines. [21/10]", 2821370782],
+ [307, 7, 912, "Metrics/PerceivedComplexity: Perceived complexity for `root_boundary_range` is too high. [12/8]", 2821370782],
+ [350, 7, 401, "Metrics/MethodLength: Method has too many lines. [11/10]", 559624650]
+ ],
"lib/ast/merge/composite_match_refiner.rb:1718969703": [
[58, 7, 668, "Metrics/MethodLength: Method has too many lines. [14/10]", 2649148714]
],
@@ -754,8 +795,8 @@
[90, 9, 2162, "Metrics/BlockLength: Block has too many lines. [50/25]", 3403609416],
[169, 7, 394, "Metrics/MethodLength: Method has too many lines. [11/10]", 2028641628]
],
- "lib/ast/merge/emitter_base.rb:655463559": [
- [26, 5, 14449, "Metrics/ClassLength: Class has too many lines. [226/100]", 2015391034],
+ "lib/ast/merge/emitter_base.rb:4280054392": [
+ [26, 5, 14922, "Metrics/ClassLength: Class has too many lines. [232/100]", 2015391034],
[95, 7, 653, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_comment_region` is too high. [9/7]", 24580929],
[95, 7, 653, "Metrics/MethodLength: Method has too many lines. [12/10]", 24580929],
[95, 7, 653, "Metrics/PerceivedComplexity: Perceived complexity for `emit_comment_region` is too high. [9/8]", 24580929],
@@ -776,17 +817,17 @@
[186, 33, 218, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 1552587384],
[187, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 1763090185],
[189, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1371312610],
- [256, 31, 17, "Style/NumericPredicate: Use `@indent_level.positive?` instead of `@indent_level > 0`.", 1892475678],
- [302, 56, 12, "Lint/UnusedMethodArgument: Unused method argument - `current_line`. You can also write as `inline_comment_region_target_column(*)` if you want the method to accept any arguments but don't care about them.", 2091263933],
- [306, 42, 6, "Lint/UnusedMethodArgument: Unused method argument - `region`.", 2124512157],
- [306, 51, 13, "Lint/UnusedMethodArgument: Unused method argument - `target_column`.", 3246375805],
- [321, 7, 1141, "Metrics/AbcSize: Assignment Branch Condition size for `inline_comment_node_text` is too high. [<6, 29, 8> 30.68/17]", 2583471562],
- [321, 7, 1141, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `inline_comment_node_text` is too high. [9/7]", 2583471562],
- [321, 7, 1141, "Metrics/MethodLength: Method has too many lines. [22/10]", 2583471562],
- [321, 7, 1141, "Metrics/PerceivedComplexity: Perceived complexity for `inline_comment_node_text` is too high. [9/8]", 2583471562],
- [339, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861626],
- [350, 7, 510, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_region_gap_lines` is too high. [8/7]", 1999747697],
- [350, 7, 510, "Metrics/PerceivedComplexity: Perceived complexity for `emit_region_gap_lines` is too high. [9/8]", 1999747697]
+ [271, 31, 17, "Style/NumericPredicate: Use `@indent_level.positive?` instead of `@indent_level > 0`.", 1892475678],
+ [317, 56, 12, "Lint/UnusedMethodArgument: Unused method argument - `current_line`. You can also write as `inline_comment_region_target_column(*)` if you want the method to accept any arguments but don't care about them.", 2091263933],
+ [321, 42, 6, "Lint/UnusedMethodArgument: Unused method argument - `region`.", 2124512157],
+ [321, 51, 13, "Lint/UnusedMethodArgument: Unused method argument - `target_column`.", 3246375805],
+ [336, 7, 1141, "Metrics/AbcSize: Assignment Branch Condition size for `inline_comment_node_text` is too high. [<6, 29, 8> 30.68/17]", 2583471562],
+ [336, 7, 1141, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `inline_comment_node_text` is too high. [9/7]", 2583471562],
+ [336, 7, 1141, "Metrics/MethodLength: Method has too many lines. [22/10]", 2583471562],
+ [336, 7, 1141, "Metrics/PerceivedComplexity: Perceived complexity for `inline_comment_node_text` is too high. [9/8]", 2583471562],
+ [354, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861626],
+ [365, 7, 510, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_region_gap_lines` is too high. [8/7]", 1999747697],
+ [365, 7, 510, "Metrics/PerceivedComplexity: Perceived complexity for `emit_region_gap_lines` is too high. [9/8]", 1999747697]
],
"lib/ast/merge/emitter_line_metadata_support.rb:3153033769": [
[5, 5, 33, "Style/Documentation: Missing top-level documentation comment for `module Ast::Merge::EmitterLineMetadataSupport`.", 2926748997],
@@ -857,15 +898,15 @@
"lib/ast/merge/layout.rb:3670500101": [
[23, 36, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765]
],
- "lib/ast/merge/layout/augmenter.rb:2556116722": [
- [8, 7, 5498, "Metrics/ClassLength: Class has too many lines. [129/100]", 3693754698],
- [21, 23, 125, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 3395039982],
- [53, 9, 1795, "Metrics/AbcSize: Assignment Branch Condition size for `build!` is too high. [<20, 32, 17> 41.39/17]", 3542913254],
- [53, 9, 1795, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `build!` is too high. [15/7]", 3542913254],
- [53, 9, 1795, "Metrics/MethodLength: Method has too many lines. [43/10]", 3542913254],
- [53, 9, 1795, "Metrics/PerceivedComplexity: Perceived complexity for `build!` is too high. [15/8]", 3542913254],
- [58, 11, 1227, "Metrics/BlockLength: Block has too many lines. [29/25]", 55360131],
- [105, 9, 504, "Metrics/MethodLength: Method has too many lines. [16/10]", 1953725517]
+ "lib/ast/merge/layout/augmenter.rb:3229088287": [
+ [8, 7, 5440, "Metrics/ClassLength: Class has too many lines. [128/100]", 2306720287],
+ [23, 23, 125, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 3395039982],
+ [55, 9, 1795, "Metrics/AbcSize: Assignment Branch Condition size for `build!` is too high. [<20, 32, 17> 41.39/17]", 3542913254],
+ [55, 9, 1795, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `build!` is too high. [15/7]", 3542913254],
+ [55, 9, 1795, "Metrics/MethodLength: Method has too many lines. [43/10]", 3542913254],
+ [55, 9, 1795, "Metrics/PerceivedComplexity: Perceived complexity for `build!` is too high. [15/8]", 3542913254],
+ [60, 11, 1227, "Metrics/BlockLength: Block has too many lines. [29/25]", 55360131],
+ [107, 9, 504, "Metrics/MethodLength: Method has too many lines. [16/10]", 1953725517]
],
"lib/ast/merge/layout/gap.rb:1678106201": [
[11, 7, 7558, "Metrics/ClassLength: Class has too many lines. [151/100]", 2254377349],
@@ -876,29 +917,35 @@
[203, 9, 688, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `validate_adjacency!` is too high. [10/7]", 1112786311],
[203, 9, 688, "Metrics/MethodLength: Method has too many lines. [13/10]", 1112786311]
],
+ "lib/ast/merge/line_range_support.rb:773479830": [
+ [13, 7, 430, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `object_start_line` is too high. [8/7]", 2485070052],
+ [13, 7, 430, "Metrics/PerceivedComplexity: Perceived complexity for `object_start_line` is too high. [9/8]", 2485070052],
+ [25, 7, 414, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `object_end_line` is too high. [8/7]", 3545256164],
+ [25, 7, 414, "Metrics/PerceivedComplexity: Perceived complexity for `object_end_line` is too high. [9/8]", 3545256164]
+ ],
"lib/ast/merge/match_refiner_base.rb:1760054866": [
[248, 7, 503, "Metrics/MethodLength: Method has too many lines. [11/10]", 2844230268],
[275, 7, 1056, "Metrics/AbcSize: Assignment Branch Condition size for `greedy_match` is too high. [<9, 24, 8> 26.85/17]", 2497617815],
[275, 7, 1056, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `greedy_match` is too high. [8/7]", 2497617815],
[275, 7, 1056, "Metrics/MethodLength: Method has too many lines. [24/10]", 2497617815]
],
- "lib/ast/merge/merge_result_base.rb:764500297": [
- [17, 5, 18646, "Metrics/ClassLength: Class has too many lines. [335/100]", 314460772],
+ "lib/ast/merge/merge_result_base.rb:1342312150": [
+ [17, 5, 19111, "Metrics/ClassLength: Class has too many lines. [341/100]", 1211564896],
[88, 21, 187, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 1067369198],
- [187, 7, 843, "Metrics/AbcSize: Assignment Branch Condition size for `normalize_blank_line_runs!` is too high. [<12, 12, 10> 19.7/17]", 2347011594],
- [187, 7, 843, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `normalize_blank_line_runs!` is too high. [9/7]", 2347011594],
- [187, 7, 843, "Metrics/MethodLength: Method has too many lines. [22/10]", 2347011594],
- [187, 7, 843, "Metrics/PerceivedComplexity: Perceived complexity for `normalize_blank_line_runs!` is too high. [10/8]", 2347011594],
- [227, 7, 1004, "Metrics/MethodLength: Method has too many lines. [21/10]", 59539336],
- [227, 35, 211, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 709487711],
- [266, 7, 602, "Metrics/MethodLength: Method has too many lines. [13/10]", 320027623],
- [341, 7, 927, "Metrics/AbcSize: Assignment Branch Condition size for `validate_review_state_compatibility!` is too high. [<8, 15, 4> 17.46/17]", 1596840080],
- [341, 7, 927, "Metrics/MethodLength: Method has too many lines. [16/10]", 1596840080],
- [403, 7, 936, "Metrics/AbcSize: Assignment Branch Condition size for `review_state_metadata` is too high. [<7, 18, 4> 19.72/17]", 4128292066],
- [403, 7, 936, "Metrics/MethodLength: Method has too many lines. [14/10]", 4128292066],
- [413, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 20421901],
- [438, 7, 1194, "Metrics/MethodLength: Method has too many lines. [21/10]", 4289697646],
- [448, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3342583337]
+ [202, 7, 843, "Metrics/AbcSize: Assignment Branch Condition size for `normalize_blank_line_runs!` is too high. [<12, 12, 10> 19.7/17]", 2347011594],
+ [202, 7, 843, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `normalize_blank_line_runs!` is too high. [9/7]", 2347011594],
+ [202, 7, 843, "Metrics/MethodLength: Method has too many lines. [22/10]", 2347011594],
+ [202, 7, 843, "Metrics/PerceivedComplexity: Perceived complexity for `normalize_blank_line_runs!` is too high. [10/8]", 2347011594],
+ [242, 7, 1004, "Metrics/MethodLength: Method has too many lines. [21/10]", 59539336],
+ [242, 35, 211, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [8/5]", 709487711],
+ [281, 7, 602, "Metrics/MethodLength: Method has too many lines. [13/10]", 320027623],
+ [356, 7, 927, "Metrics/AbcSize: Assignment Branch Condition size for `validate_review_state_compatibility!` is too high. [<8, 15, 4> 17.46/17]", 1596840080],
+ [356, 7, 927, "Metrics/MethodLength: Method has too many lines. [16/10]", 1596840080],
+ [418, 7, 936, "Metrics/AbcSize: Assignment Branch Condition size for `review_state_metadata` is too high. [<7, 18, 4> 19.72/17]", 4128292066],
+ [418, 7, 936, "Metrics/MethodLength: Method has too many lines. [14/10]", 4128292066],
+ [428, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 20421901],
+ [453, 7, 1194, "Metrics/MethodLength: Method has too many lines. [21/10]", 4289697646],
+ [463, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3342583337]
],
"lib/ast/merge/merger_config.rb:3582657829": [
[46, 5, 10581, "Metrics/ClassLength: Class has too many lines. [148/100]", 1598770872],
@@ -1059,8 +1106,9 @@
[200, 9, 765, "Metrics/AbcSize: Assignment Branch Condition size for `register_known_gems` is too high. [<3, 17, 3> 17.52/17]", 1367620151],
[200, 9, 765, "Metrics/MethodLength: Method has too many lines. [17/10]", 1367620151]
],
- "lib/ast/merge/rspec/shared_examples.rb:2878318351": [
- [29, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 330577472]
+ "lib/ast/merge/rspec/shared_examples.rb:151517887": [
+ [27, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193426019],
+ [31, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 330577472]
],
"lib/ast/merge/rspec/shared_examples/comment_behavior_matrix.rb:3695671858": [
[36, 1, 27847, "Metrics/BlockLength: Block has too many lines. [540/25]", 3796645407],
@@ -1135,6 +1183,9 @@
"lib/ast/merge/rspec/shared_examples/reproducible_partial_merge.rb:524436129": [
[3, 1, 2321, "Metrics/BlockLength: Block has too many lines. [44/25]", 3206099540]
],
+ "lib/ast/merge/rspec/shared_examples/retained_blank_gap_compliance.rb:2798862618": [
+ [3, 1, 1409, "Metrics/BlockLength: Block has too many lines. [34/25]", 3708955218]
+ ],
"lib/ast/merge/rspec/shared_examples/runtime_debug_contract.rb:4244040583": [
[8, 1, 2808, "Metrics/BlockLength: Block has too many lines. [48/25]", 3274492878]
],
@@ -1249,7 +1300,7 @@
[245, 9, 1446, "Metrics/MethodLength: Method has too many lines. [28/10]", 525095633],
[245, 9, 1446, "Metrics/PerceivedComplexity: Perceived complexity for `merge_sections` is too high. [13/8]", 525095633]
],
- "lib/ast/merge/smart_merger_base.rb:4189972287": [
+ "lib/ast/merge/smart_merger_base.rb:1823596106": [
[109, 5, 15324, "Metrics/ClassLength: Class has too many lines. [172/100]", 3547407870],
[214, 7, 1974, "Metrics/AbcSize: Assignment Branch Condition size for `initialize` is too high. [<20, 14, 5> 24.92/17]", 2211610736],
[214, 7, 1974, "Metrics/MethodLength: Method has too many lines. [23/10]", 2211610736],
@@ -1260,15 +1311,37 @@
[424, 7, 1312, "Metrics/PerceivedComplexity: Perceived complexity for `parse_and_analyze` is too high. [10/8]", 1640248187],
[517, 12, 52, "Style/NumericPredicate: Use `result_class.instance_method(:initialize).arity.zero?` instead of `result_class.instance_method(:initialize).arity == 0`.", 1312375552]
],
+ "lib/ast/merge/source_region_report_support.rb:31261288": [
+ [10, 5, 9026, "Metrics/ModuleLength: Module has too many lines. [204/100]", 3211817308],
+ [13, 7, 1175, "Metrics/MethodLength: Method has too many lines. [19/10]", 351011969],
+ [13, 49, 232, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 1034046028],
+ [38, 7, 1409, "Metrics/AbcSize: Assignment Branch Condition size for `source_blank_line_ownership_regions` is too high. [<9, 23, 11> 27.04/17]", 280304508],
+ [38, 7, 1409, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `source_blank_line_ownership_regions` is too high. [9/7]", 280304508],
+ [38, 7, 1409, "Metrics/MethodLength: Method has too many lines. [26/10]", 280304508],
+ [38, 7, 1409, "Metrics/PerceivedComplexity: Perceived complexity for `source_blank_line_ownership_regions` is too high. [11/8]", 280304508],
+ [69, 7, 1345, "Metrics/AbcSize: Assignment Branch Condition size for `source_interleaved_regions_for_report` is too high. [<10, 13, 6> 17.46/17]", 253205841],
+ [69, 7, 1345, "Metrics/MethodLength: Method has too many lines. [32/10]", 253205841],
+ [109, 7, 1638, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `source_interstitial_region_for_report` is too high. [11/7]", 2543419072],
+ [109, 7, 1638, "Metrics/MethodLength: Method has too many lines. [32/10]", 2543419072],
+ [109, 7, 1638, "Metrics/PerceivedComplexity: Perceived complexity for `source_interstitial_region_for_report` is too high. [10/8]", 2543419072],
+ [109, 48, 133, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 2244283058],
+ [168, 7, 455, "Metrics/MethodLength: Method has too many lines. [12/10]", 1734550115],
+ [184, 7, 1444, "Metrics/AbcSize: Assignment Branch Condition size for `source_comment_block_attachment` is too high. [<7, 27, 17> 32.66/17]", 2744031837],
+ [184, 7, 1444, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `source_comment_block_attachment` is too high. [14/7]", 2744031837],
+ [184, 7, 1444, "Metrics/MethodLength: Method has too many lines. [21/10]", 2744031837],
+ [184, 7, 1444, "Metrics/PerceivedComplexity: Perceived complexity for `source_comment_block_attachment` is too high. [15/8]", 2744031837],
+ [184, 42, 133, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 2758724348],
+ [192, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177625]
+ ],
"lib/ast/merge/structural_edit/boundary.rb:2838060197": [
[20, 23, 93, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 3901214537],
[41, 38, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
[51, 38, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
[60, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087440865]
],
- "lib/ast/merge/structural_edit/boundary_support.rb:2036464761": [
- [31, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861061],
- [32, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 97596930]
+ "lib/ast/merge/structural_edit/boundary_support.rb:3537000977": [
+ [32, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861061],
+ [33, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 97596930]
],
"lib/ast/merge/structural_edit/plan_set.rb:538463647": [
[116, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 2855200692]
@@ -1434,6 +1507,19 @@
[4, 3, 3101, "Metrics/BlockLength: Block has too many lines. [63/25]", 1050939978],
[81, 3, 1313, "Metrics/BlockLength: Block has too many lines. [30/25]", 515655104]
],
+ "spec/ast/merge/comment_layout_emission_support_spec.rb:19704158": [
+ [3, 1, 7555, "Metrics/BlockLength: Block has too many lines. [186/25]", 980479163],
+ [4, 3, 73, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 3470206647],
+ [6, 3, 175, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 622428252],
+ [16, 3, 93, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 546547334],
+ [18, 3, 734, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 3226190975],
+ [21, 19, 120, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 3763716348],
+ [39, 27, 6, "Lint/UnusedMethodArgument: Unused method argument - `owners`. You can also write as `comment_augmenter(*)` if you want the method to accept any arguments but don't care about them.", 1719502071],
+ [44, 3, 574, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 1736750341],
+ [61, 3, 152, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 1212551629],
+ [101, 3, 1173, "Metrics/BlockLength: Block has too many lines. [27/25]", 2346194513],
+ [132, 3, 1624, "Metrics/BlockLength: Block has too many lines. [36/25]", 2359972174]
+ ],
"spec/ast/merge/comment_spec.rb:81945459": [
[3, 1, 15888, "Metrics/BlockLength: Block has too many lines. [384/25]", 2229554982],
[4, 3, 3957, "Metrics/BlockLength: Block has too many lines. [84/25]", 660667217],
@@ -1532,14 +1618,14 @@
[47, 5, 1938, "Metrics/BlockLength: Block has too many lines. [48/25]", 1904497583],
[191, 3, 1488, "Metrics/BlockLength: Block has too many lines. [43/25]", 1632956840]
],
- "spec/ast/merge/emitter_base_spec.rb:4197360291": [
- [3, 1, 11215, "Metrics/BlockLength: Block has too many lines. [282/25]", 4254840781],
- [30, 3, 4393, "Metrics/BlockLength: Block has too many lines. [102/25]", 3992142376],
- [134, 58, 12, "Lint/UnusedMethodArgument: Unused method argument - `current_line`. You can also write as `inline_comment_region_target_column(*)` if you want the method to accept any arguments but don't care about them.", 2091263933],
- [138, 44, 6, "Lint/UnusedMethodArgument: Unused method argument - `region`.", 2124512157],
- [159, 3, 1815, "Metrics/BlockLength: Block has too many lines. [39/25]", 719023387],
- [206, 3, 2233, "Metrics/BlockLength: Block has too many lines. [62/25]", 3754339775],
- [312, 3, 1059, "Metrics/BlockLength: Block has too many lines. [26/25]", 375007123]
+ "spec/ast/merge/emitter_base_spec.rb:1099876333": [
+ [3, 1, 11967, "Metrics/BlockLength: Block has too many lines. [301/25]", 2970792295],
+ [56, 3, 4393, "Metrics/BlockLength: Block has too many lines. [102/25]", 3992142376],
+ [160, 58, 12, "Lint/UnusedMethodArgument: Unused method argument - `current_line`. You can also write as `inline_comment_region_target_column(*)` if you want the method to accept any arguments but don't care about them.", 2091263933],
+ [164, 44, 6, "Lint/UnusedMethodArgument: Unused method argument - `region`.", 2124512157],
+ [185, 3, 1815, "Metrics/BlockLength: Block has too many lines. [39/25]", 719023387],
+ [232, 3, 2233, "Metrics/BlockLength: Block has too many lines. [62/25]", 3754339775],
+ [338, 3, 1059, "Metrics/BlockLength: Block has too many lines. [26/25]", 375007123]
],
"spec/ast/merge/fictive_language_harness_spec.rb:1179155480": [
[6, 1, 6693, "Metrics/BlockLength: Block has too many lines. [143/25]", 245088433],
@@ -1602,6 +1688,12 @@
[3, 1, 2758, "Metrics/BlockLength: Block has too many lines. [72/25]", 2052697931],
[9, 3, 1290, "Metrics/BlockLength: Block has too many lines. [28/25]", 3175967312]
],
+ "spec/ast/merge/line_range_support_spec.rb:872979873": [
+ [3, 1, 1564, "Metrics/BlockLength: Block has too many lines. [35/25]", 1133178812],
+ [4, 3, 65, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 2231059390],
+ [5, 3, 44, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 1230426940],
+ [7, 3, 135, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 1825860348]
+ ],
"spec/ast/merge/match_refiner_base_spec.rb:3961767223": [
[3, 1, 10604, "Metrics/BlockLength: Block has too many lines. [301/25]", 4290485382],
[4, 3, 1146, "Metrics/BlockLength: Block has too many lines. [37/25]", 108051658],
@@ -1628,15 +1720,15 @@
[417, 3, 1792, "Metrics/BlockLength: Block has too many lines. [45/25]", 3557977606],
[438, 5, 1121, "Metrics/BlockLength: Block has too many lines. [26/25]", 4236927298]
],
- "spec/ast/merge/merge_result_base_spec.rb:2262708492": [
- [3, 1, 19471, "Metrics/BlockLength: Block has too many lines. [529/25]", 4106058751],
+ "spec/ast/merge/merge_result_base_spec.rb:3826389024": [
+ [3, 1, 20371, "Metrics/BlockLength: Block has too many lines. [552/25]", 3965341976],
[38, 3, 2735, "Metrics/BlockLength: Block has too many lines. [80/25]", 1103243845],
- [279, 3, 1611, "Metrics/BlockLength: Block has too many lines. [39/25]", 1928511417],
- [280, 5, 1203, "Metrics/BlockLength: Block has too many lines. [26/25]", 857223227],
- [326, 3, 2070, "Metrics/BlockLength: Block has too many lines. [48/25]", 2552826824],
- [385, 3, 5769, "Metrics/BlockLength: Block has too many lines. [140/25]", 1457747735],
- [511, 5, 1306, "Metrics/BlockLength: Block has too many lines. [29/25]", 2980786372],
- [574, 3, 1308, "Metrics/BlockLength: Block has too many lines. [32/25]", 1342704008]
+ [312, 3, 1611, "Metrics/BlockLength: Block has too many lines. [39/25]", 1928511417],
+ [313, 5, 1203, "Metrics/BlockLength: Block has too many lines. [26/25]", 857223227],
+ [359, 3, 2070, "Metrics/BlockLength: Block has too many lines. [48/25]", 2552826824],
+ [418, 3, 5769, "Metrics/BlockLength: Block has too many lines. [140/25]", 1457747735],
+ [544, 5, 1306, "Metrics/BlockLength: Block has too many lines. [29/25]", 2980786372],
+ [607, 3, 1308, "Metrics/BlockLength: Block has too many lines. [32/25]", 1342704008]
],
"spec/ast/merge/merger_config_spec.rb:663896662": [
[5, 1, 7314, "Metrics/BlockLength: Block has too many lines. [189/25]", 1279589310],
@@ -1782,6 +1874,9 @@
"spec/ast/merge/rspec/shared_examples/reproducible_partial_merge_spec.rb:2862326360": [
[19, 3, 600, "Metrics/MethodLength: Method has too many lines. [13/10]", 1542875905]
],
+ "spec/ast/merge/rspec/tree_haver_backend_contract_spec.rb:3942689234": [
+ [20, 1, 1737, "Metrics/BlockLength: Block has too many lines. [29/25]", 2339568528]
+ ],
"spec/ast/merge/ruleset/config_spec.rb:1860949041": [
[3, 1, 9431, "Metrics/BlockLength: Block has too many lines. [236/25]", 4015119559],
[24, 3, 5341, "Metrics/BlockLength: Block has too many lines. [149/25]", 2361087446],
@@ -1847,6 +1942,14 @@
[416, 5, 1026, "Metrics/BlockLength: Block has too many lines. [33/25]", 1993879652],
[461, 3, 1031, "Metrics/BlockLength: Block has too many lines. [31/25]", 35315996]
],
+ "spec/ast/merge/source_region_report_support_spec.rb:3996528026": [
+ [3, 1, 5448, "Metrics/BlockLength: Block has too many lines. [186/25]", 2713581049],
+ [4, 3, 112, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 3709101366],
+ [6, 3, 295, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 1625952400],
+ [17, 3, 1473, "Metrics/BlockLength: Block has too many lines. [49/25]", 1435042916],
+ [70, 3, 1887, "Metrics/BlockLength: Block has too many lines. [66/25]", 1773930426],
+ [159, 3, 1109, "Metrics/BlockLength: Block has too many lines. [38/25]", 1457507554]
+ ],
"spec/ast/merge/structural_edit/boundary_support_spec.rb:863387845": [
[3, 1, 4226, "Metrics/BlockLength: Block has too many lines. [86/25]", 1889771490],
[16, 9, 42, "Lint/HashCompareByIdentity: Use `Hash#compare_by_identity` instead of using `object_id` for keys.", 1304492024],
@@ -1977,775 +2080,775 @@
[70, 3, 78, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 604224776],
[72, 3, 146, "Lint/ConstantDefinitionInBlock: Do not define constants this way within a block.", 3315091322]
],
- "spec/fixtures_integration_spec.rb:1145500459": [
+ "spec/fixtures_integration_spec.rb:1733315771": [
[595, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5859109],
[758, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 576909008],
[881, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087900170],
- [1806, 3, 816, "Metrics/MethodLength: Method has too many lines. [13/10]", 170960660],
- [1806, 39, 213, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [10/5]", 635200700],
- [1807, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3976306097],
- [1831, 38, 80, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 3297939075],
- [1916, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1745553512],
- [1917, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 118067488],
- [1918, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 196190368],
- [1919, 121, 41, "Layout/LineLength: Line is too long. [161/120]", 3371256193],
- [2090, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 3241114703],
- [2428, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
- [2567, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
- [2991, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3697593604],
- [2992, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
- [3113, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 179435314],
- [3122, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1182194285],
- [3124, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 3886107031],
- [3151, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1751849111],
- [3152, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1519587684],
- [3153, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 4086262880],
- [3170, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3568081822],
- [3171, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1776876782],
- [3173, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
- [3174, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1751849111],
- [3176, 121, 73, "Layout/LineLength: Line is too long. [193/120]", 3322243646],
- [3178, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1715153206],
- [3179, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
- [3180, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 504997180],
- [3181, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 1146860021],
- [3182, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 2312101607],
- [3183, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 1423779161],
- [3184, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1900897138],
- [3185, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 1689840383],
- [3186, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 1589056236],
- [3188, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 763176550],
- [3194, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 3957871310],
- [3196, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 763176550],
- [3198, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 919916608],
- [3199, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 919916608],
- [3200, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 3957871310],
- [3201, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 4073040612],
- [3202, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 763176550],
- [3203, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 667593075],
- [3205, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1310972770],
- [3206, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 311387795],
- [3207, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 724840266],
- [3208, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 2555878310],
- [3209, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1781078972],
- [3210, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
- [3213, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
- [3214, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1658060570],
- [3215, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 3085728851],
- [3216, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 3129400559],
- [3217, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3197516464],
- [3218, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087771520],
- [3219, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 3837194228],
- [3220, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 1312323543],
- [3221, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 2356847623],
- [3222, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
- [3223, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 3428073441],
- [3224, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 2891080552],
- [3225, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 3080737172],
- [3226, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 170445026],
- [3227, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3240051869],
- [3228, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 4266052680],
- [3229, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3376297786],
- [3230, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 398435913],
- [3231, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 4134940256],
- [3232, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 30370035],
- [3233, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 2862546359],
- [3234, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1901388514],
- [3235, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 838864274],
- [3236, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 3437460384],
- [3237, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 1567003152],
- [3238, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2609066305],
- [3239, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 4043187090],
- [3240, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3866430009],
- [3241, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 2182699083],
- [3242, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 3958792129],
- [3243, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 3449926560],
- [3244, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 399774089],
- [3245, 121, 68, "Layout/LineLength: Line is too long. [188/120]", 2119246799],
- [3247, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3592658842],
- [3248, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2905723409],
- [3249, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 3930305198],
- [3250, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 4186230052],
- [3251, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
- [3252, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2700200720],
- [3253, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 1630526402],
- [3254, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 3669244926],
- [3255, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2814234644],
- [3256, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 3109415933],
- [3257, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3643275044],
- [3258, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 3825290660],
- [3259, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1751849111],
- [3260, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 4112285398],
- [3261, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 1684279672],
- [3262, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 1616506266],
- [3264, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
- [3265, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1330093223],
- [3266, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 4084555566],
- [3267, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 2466867154],
- [3268, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 4088314613],
- [3269, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 2416893689],
- [3270, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 683312682],
- [3271, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 2516517934],
- [3272, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2414563355],
- [3273, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 2232595211],
- [3274, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 2940789369],
- [3275, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 941259913],
- [3276, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2133508098],
- [3277, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1621975014],
- [3278, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 35985461],
- [3279, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 746016305],
- [3280, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 435488100],
- [3281, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 2581129172],
- [3282, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 3495900774],
- [3283, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 1413120342],
- [3284, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
- [3285, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2333800791],
- [3286, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 2576906206],
- [3287, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 2986659874],
- [3288, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2811932564],
- [3289, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 1970813291],
- [3290, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 2904941246],
- [3291, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3745922508],
- [3292, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 735247237],
- [3293, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 3731320885],
- [3294, 121, 70, "Layout/LineLength: Line is too long. [190/120]", 3896022034],
- [3295, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 2827048584],
- [3296, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 2548596663],
- [3297, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 3812352018],
- [3298, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 1280243910],
- [3299, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 1742643292],
- [3300, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 3056442430],
- [3301, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 3144363287],
- [3302, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 477297993],
- [3303, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 3657857971],
- [3304, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3913984414],
- [3305, 121, 70, "Layout/LineLength: Line is too long. [190/120]", 336201058],
- [3306, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 485418789],
- [3307, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 453253839],
- [3308, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3673833034],
- [3309, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 1552836890],
- [3310, 121, 70, "Layout/LineLength: Line is too long. [190/120]", 2714635965],
- [3311, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 9336999],
- [3312, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 584857208],
- [3313, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 1394865213],
- [3314, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 3973222761],
- [3315, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 2020040051],
- [3316, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 3060994335],
- [3317, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 196286917],
- [3318, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 4168514178],
- [3319, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 810581246],
- [3320, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 1473417372],
- [3321, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 3008376885],
- [3322, 121, 84, "Layout/LineLength: Line is too long. [204/120]", 454816400],
- [3323, 121, 88, "Layout/LineLength: Line is too long. [208/120]", 1416223705],
- [3324, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 2896813919],
- [3325, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 957293983],
- [3326, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 2118117430],
- [3327, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 1367404612],
- [3328, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 2459902188],
- [3329, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 461483815],
- [3330, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 2791596520],
- [3331, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 203085787],
- [3332, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 2942095139],
- [3333, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 131861965],
- [3334, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 3340827551],
- [3335, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 102582610],
- [3336, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 762789354],
- [3337, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 3478337442],
- [3338, 121, 112, "Layout/LineLength: Line is too long. [232/120]", 4010607435],
- [3339, 121, 132, "Layout/LineLength: Line is too long. [252/120]", 3754747587],
- [3340, 121, 136, "Layout/LineLength: Line is too long. [256/120]", 379336923],
- [3341, 121, 108, "Layout/LineLength: Line is too long. [228/120]", 3366353902],
- [3342, 121, 128, "Layout/LineLength: Line is too long. [248/120]", 1686898289],
- [3343, 121, 132, "Layout/LineLength: Line is too long. [252/120]", 2005192241],
- [3344, 121, 104, "Layout/LineLength: Line is too long. [224/120]", 1868634464],
- [3345, 121, 124, "Layout/LineLength: Line is too long. [244/120]", 3939743614],
- [3346, 121, 128, "Layout/LineLength: Line is too long. [248/120]", 2978506702],
- [3347, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 3909866928],
- [3348, 121, 118, "Layout/LineLength: Line is too long. [238/120]", 2853032177],
- [3349, 121, 122, "Layout/LineLength: Line is too long. [242/120]", 2968366309],
- [3350, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 1753663643],
- [3351, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 3387619436],
- [3352, 121, 106, "Layout/LineLength: Line is too long. [226/120]", 197895496],
- [3353, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 576181861],
- [3354, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 2809313444],
- [3355, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 3963067112],
- [3356, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 1121380327],
- [3357, 121, 100, "Layout/LineLength: Line is too long. [220/120]", 31591211],
- [3358, 121, 104, "Layout/LineLength: Line is too long. [224/120]", 1946129497],
- [3359, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 767185096],
- [3360, 121, 100, "Layout/LineLength: Line is too long. [220/120]", 1092646020],
- [3361, 121, 104, "Layout/LineLength: Line is too long. [224/120]", 1328841270],
- [3362, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 2663749624],
- [3363, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 430318647],
- [3364, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 1650234037],
- [3365, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 1082269805],
- [3366, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 316397809],
- [3367, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 3145391348],
- [3368, 121, 112, "Layout/LineLength: Line is too long. [232/120]", 2808088654],
- [3369, 121, 116, "Layout/LineLength: Line is too long. [236/120]", 1035513748],
- [3370, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 2552800539],
- [3371, 121, 112, "Layout/LineLength: Line is too long. [232/120]", 1727699169],
- [3372, 121, 116, "Layout/LineLength: Line is too long. [236/120]", 1171566267],
- [3373, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 2994775049],
- [3374, 121, 110, "Layout/LineLength: Line is too long. [230/120]", 3860489151],
- [3375, 121, 114, "Layout/LineLength: Line is too long. [234/120]", 959496607],
- [3376, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 1694222439],
- [3377, 121, 114, "Layout/LineLength: Line is too long. [234/120]", 1501186331],
- [3378, 121, 118, "Layout/LineLength: Line is too long. [238/120]", 4059659418],
- [3379, 121, 110, "Layout/LineLength: Line is too long. [230/120]", 1899868779],
- [3380, 121, 130, "Layout/LineLength: Line is too long. [250/120]", 323324279],
- [3381, 121, 134, "Layout/LineLength: Line is too long. [254/120]", 3956414359],
- [3382, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 3506644741],
- [3383, 121, 116, "Layout/LineLength: Line is too long. [236/120]", 936139074],
- [3384, 121, 136, "Layout/LineLength: Line is too long. [256/120]", 4153213512],
- [3385, 121, 140, "Layout/LineLength: Line is too long. [260/120]", 1491976338],
- [3386, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 4061753206],
- [3387, 121, 106, "Layout/LineLength: Line is too long. [226/120]", 2410434304],
- [3388, 121, 124, "Layout/LineLength: Line is too long. [244/120]", 3518300264],
- [3389, 121, 144, "Layout/LineLength: Line is too long. [264/120]", 1040696046],
- [3390, 121, 148, "Layout/LineLength: Line is too long. [268/120]", 139604188],
- [3391, 121, 120, "Layout/LineLength: Line is too long. [240/120]", 231937793],
- [3392, 121, 140, "Layout/LineLength: Line is too long. [260/120]", 1835509805],
- [3393, 121, 144, "Layout/LineLength: Line is too long. [264/120]", 1629218396],
- [3394, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 2312875700],
- [3395, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 2933374083],
- [3396, 121, 106, "Layout/LineLength: Line is too long. [226/120]", 1719349671],
- [3397, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 2555579810],
- [3398, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 2023551624],
- [3399, 121, 114, "Layout/LineLength: Line is too long. [234/120]", 955231924],
- [3400, 121, 118, "Layout/LineLength: Line is too long. [238/120]", 4232993781],
- [3401, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 3472954835],
- [3402, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 3211922285],
- [3403, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 2874956332],
- [3404, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 1360335840],
- [3405, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2135379556],
- [3406, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3242768475],
- [3407, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 2789115918],
- [3408, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3346448124],
- [3409, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1538469817],
- [3410, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1543041113],
- [3411, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 3344741438],
- [3412, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2188404009],
- [3413, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1330398779],
- [3414, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 332468826],
- [3415, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 1905397598],
- [3416, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 438831062],
- [3417, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 3377667334],
- [3418, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3232541734],
- [3420, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2130930429],
- [3421, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 3684939371],
- [3423, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2361951097],
- [3424, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 1211447462],
- [3425, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3309872691],
- [3426, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 360053761],
- [3427, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 1310136493],
- [3428, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1950686342],
- [3429, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 1397845826],
- [3430, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 4191304724],
- [3431, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2354128498],
- [3432, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 1865717453],
- [3433, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 24220542],
- [3434, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 2618612673],
- [3437, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 3422918867],
- [3438, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 3689431739],
- [3482, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 4093564799],
- [3488, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1662653970],
- [3489, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 3967501655],
- [3490, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2178516622],
- [3491, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 1345346561],
- [3505, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193466072],
- [3625, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 3612393276],
- [3626, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 797303985],
- [3629, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1606320605],
- [3649, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1776876782],
- [3653, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 828742791],
- [3673, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3294617581],
- [3683, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 3519842846],
- [3693, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1966440909],
- [3694, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053864],
- [3700, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1606320605],
- [3723, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 1340744311],
- [3742, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1741893077],
- [3743, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053865],
- [3747, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193405204],
- [3761, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1401226501],
- [3764, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2085352569],
- [3767, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 696523922],
- [3782, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
- [3792, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2746826653],
- [4208, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 1138870161],
- [4770, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
- [4781, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 2132299307],
- [4828, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087775098],
- [4839, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 757851079],
- [4875, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
- [4886, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 441649198],
- [4909, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087903295],
- [4921, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 170442008],
- [4930, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
- [4932, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1888875443],
- [4969, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 398433651],
- [4980, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3921367744],
- [5003, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2422819473],
- [5009, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 194583095],
- [5015, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1901385496],
- [5024, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 490810486],
- [5026, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 586287746],
- [5030, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1310969752],
- [5050, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087389205],
- [5062, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2609063547],
- [5071, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
- [5073, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1370761696],
- [5096, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 2208661169],
- [5102, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1862604658],
- [5108, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 3958789371],
- [5117, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3449594464],
- [5119, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 692050524],
- [5123, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 802172558],
- [5193, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 2406691660],
- [5228, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
- [5239, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1811982742],
- [5266, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2562189319],
- [5272, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193430346],
- [5278, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2814237166],
- [5287, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2189106693],
- [5289, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 3874870868],
- [5293, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 179474914],
- [5326, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1751845165],
- [5337, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2617230371],
- [5341, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
- [5382, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
- [5393, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3793790598],
- [5428, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 4088312783],
- [5439, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3220724736],
- [5443, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087899888],
- [5462, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2552888401],
- [5468, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 194583095],
- [5474, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2414559905],
- [5483, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 626762179],
- [5485, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3969284923],
- [5489, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 1893261414],
- [5521, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2133507320],
- [5532, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 2101353476],
- [5536, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087685705],
- [5555, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2431380437],
- [5561, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 194583095],
- [5567, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 435489438],
- [5576, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 1520878209],
- [5578, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 2238995076],
- [5582, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 2789405913],
- [5615, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
- [5626, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3409328196],
- [5649, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087858069],
- [5661, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2811935086],
- [5670, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
- [5672, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1113346693],
- [5676, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3227128786],
- [5696, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 48793812],
- [5702, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 338440584],
- [5708, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 735248703],
- [5717, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 927473097],
- [5719, 121, 43, "Layout/LineLength: Line is too long. [163/120]", 1394536741],
- [5723, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3134012967],
- [5742, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 2967615316],
- [5748, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 2810710931],
- [5754, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 2548594701],
- [5757, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860796],
- [5759, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
- [5763, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 3549194295],
- [5765, 121, 55, "Layout/LineLength: Line is too long. [175/120]", 1074004741],
- [5769, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 2874423564],
- [5772, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087576526],
- [5774, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
- [5789, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 1696848307],
- [5795, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 2883501659],
- [5801, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 3056443076],
- [5806, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193405204],
- [5810, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 1487412605],
- [5812, 121, 51, "Layout/LineLength: Line is too long. [171/120]", 2021571284],
- [5816, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1975782995],
- [5819, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860796],
- [5821, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193405204],
- [5826, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 183236849],
- [5835, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 856018753],
- [5838, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
- [5841, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 2146546324],
- [5847, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3913983076],
- [5850, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 3491931666],
- [5852, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3536323546],
- [5856, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 356581191],
- [5858, 121, 63, "Layout/LineLength: Line is too long. [183/120]", 4144657639],
- [5862, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 1478616653],
- [5865, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1774852021],
- [5867, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3536323546],
- [5882, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 3884289787],
- [5888, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 1001503687],
- [5894, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3673836976],
- [5903, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 3164908550],
- [5905, 121, 43, "Layout/LineLength: Line is too long. [163/120]", 1134300778],
- [5909, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 1797165224],
- [5928, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 2508143995],
- [5934, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 3002532188],
- [5940, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 584857986],
- [5943, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860796],
- [5945, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
- [5949, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 749691384],
- [5951, 121, 55, "Layout/LineLength: Line is too long. [175/120]", 3389354954],
- [5955, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 3402045699],
- [5958, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087576526],
- [5960, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
- [5974, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 2447716612],
- [5980, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3201685099],
- [5986, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 3060990885],
- [5995, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 29396315],
- [5997, 121, 45, "Layout/LineLength: Line is too long. [165/120]", 1228645365],
- [6001, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1436742837],
- [6020, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 716917214],
- [6026, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 2175814211],
- [6032, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 1473420390],
- [6035, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193433391],
- [6037, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1422839111],
- [6041, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 1571170198],
- [6043, 121, 57, "Layout/LineLength: Line is too long. [177/120]", 2175059093],
- [6047, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3886666417],
- [6050, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 176753677],
- [6052, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1422839111],
- [6068, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 3471319495],
- [6074, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 1274038477],
- [6080, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 2896814693],
- [6083, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087576526],
- [6085, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 4114086530],
- [6089, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 250433828],
- [6091, 121, 59, "Layout/LineLength: Line is too long. [179/120]", 3910556848],
- [6095, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 4002014976],
- [6098, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 3491931666],
- [6100, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 4114086530],
- [6194, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861664],
- [6208, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087932582],
- [6222, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861664],
- [6238, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 876012844],
- [6240, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1756764194],
- [6241, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 4173216735],
- [6244, 121, 75, "Layout/LineLength: Line is too long. [195/120]", 911964425],
- [6245, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 173266907],
- [6246, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1412705933],
- [6249, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1756764194],
- [6250, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 2605683750],
- [6253, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 3182252139],
- [6255, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 1652557742],
- [6259, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 2240437058],
- [6260, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 173266907],
- [6261, 121, 101, "Layout/LineLength: Line is too long. [221/120]", 3694598076],
- [6263, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861152],
- [6264, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 179079542],
- [6265, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 3528944411],
- [6268, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3020159378],
- [6270, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 1652557742],
- [6276, 121, 84, "Layout/LineLength: Line is too long. [204/120]", 420843234],
- [6278, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1401226501],
- [6279, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 442915368],
- [6282, 121, 79, "Layout/LineLength: Line is too long. [199/120]", 4212444955],
- [6283, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053864],
- [6284, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1373660924],
- [6287, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1401226501],
- [6288, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 1539225758],
- [6291, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3020159378],
- [6293, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 4240691845],
- [6297, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 674553335],
- [6298, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053864],
- [6299, 121, 105, "Layout/LineLength: Line is too long. [225/120]", 4163432287],
- [6301, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2089555761],
- [6302, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 2034687276],
- [6303, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 3710905302],
- [6306, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 4204667212],
- [6308, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 4240691845],
- [6314, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 2071493433],
- [6316, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2085352569],
- [6317, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 2853066942],
- [6320, 121, 71, "Layout/LineLength: Line is too long. [191/120]", 2771467828],
- [6321, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193425976],
- [6322, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3025157142],
- [6325, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2085352569],
- [6326, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 3340824101],
- [6329, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 3999804761],
- [6331, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1999310973],
- [6335, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 835016333],
- [6336, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193425976],
- [6337, 121, 97, "Layout/LineLength: Line is too long. [217/120]", 3575893945],
- [6340, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193405945],
- [6341, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 1755858308],
- [6344, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 3182252139],
- [6346, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1999310973],
- [6352, 121, 70, "Layout/LineLength: Line is too long. [190/120]", 3033080032],
- [6354, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177549],
- [6355, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 2720985203],
- [6358, 121, 65, "Layout/LineLength: Line is too long. [185/120]", 3233424320],
- [6360, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873483],
- [6363, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177549],
- [6364, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 131859703],
- [6367, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1943494546],
- [6369, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 4016166830],
- [6373, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 1350760977],
- [6375, 121, 91, "Layout/LineLength: Line is too long. [211/120]", 4098706554],
- [6379, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 4059724765],
- [6382, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 1651955548],
- [6384, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 4016166830],
- [6390, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 1057495720],
- [6393, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1621971220],
- [6396, 121, 49, "Layout/LineLength: Line is too long. [169/120]", 1585717593],
- [6402, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 2942094233],
- [6405, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2624667704],
- [6407, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2317051977],
- [6411, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 1321610634],
- [6413, 121, 75, "Layout/LineLength: Line is too long. [195/120]", 2854688831],
- [6417, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 4185465554],
- [6420, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1169781875],
- [6422, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2317051977],
- [6428, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 1916545020],
- [6431, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1422839111],
- [6434, 121, 45, "Layout/LineLength: Line is too long. [165/120]", 910134593],
- [6440, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 203086561],
- [6443, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2939363812],
- [6445, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3155638331],
- [6449, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 1955758062],
- [6451, 121, 71, "Layout/LineLength: Line is too long. [191/120]", 3737424359],
- [6455, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 3597620692],
- [6458, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2624667704],
- [6460, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3155638331],
- [6466, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 1036052399],
- [6469, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 4114086530],
- [6472, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 1268266488],
- [6478, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 2791598354],
- [6481, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1302589368],
- [6483, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3533902728],
- [6487, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 3942276897],
- [6489, 121, 73, "Layout/LineLength: Line is too long. [193/120]", 1175941460],
- [6493, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 679697318],
- [6496, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 28126263],
- [6498, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3533902728],
- [6499, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 181895237],
- [6504, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 4057848448],
- [6507, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 4114086530],
- [6510, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 4067769399],
- [6516, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 461482909],
- [6519, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1302589368],
- [6521, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3533902728],
- [6525, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 3561204590],
- [6527, 121, 73, "Layout/LineLength: Line is too long. [193/120]", 880160795],
- [6531, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 1614719145],
- [6534, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 28126263],
- [6536, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3533902728],
- [6537, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 181895237],
- [6584, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193432306],
- [6598, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 1645945966],
- [6601, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3212740609],
- [6604, 121, 59, "Layout/LineLength: Line is too long. [179/120]", 3982698123],
- [6606, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193425997],
- [6610, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 2663750402],
- [6613, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2420297272],
- [6615, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1164389943],
- [6619, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 3483121581],
- [6621, 121, 85, "Layout/LineLength: Line is too long. [205/120]", 2271668600],
- [6625, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 804794365],
- [6628, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3659367004],
- [6630, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1164389943],
- [6631, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 561395486],
- [6636, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 1251661057],
- [6639, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3212740609],
- [6642, 121, 59, "Layout/LineLength: Line is too long. [179/120]", 3210109508],
- [6644, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193425997],
- [6648, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 430316685],
- [6651, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2420297272],
- [6653, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1164389943],
- [6657, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 2428160226],
- [6659, 121, 85, "Layout/LineLength: Line is too long. [205/120]", 2663295671],
- [6663, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 2822109938],
- [6666, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3659367004],
- [6668, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1164389943],
- [6669, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 561395486],
- [6674, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 857639785],
- [6677, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 3669622788],
- [6680, 121, 57, "Layout/LineLength: Line is too long. [177/120]", 140453799],
- [6682, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860765],
- [6686, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 1650236431],
- [6689, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 150699323],
- [6691, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 50618962],
- [6695, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 4205571164],
- [6697, 121, 83, "Layout/LineLength: Line is too long. [203/120]", 1549528021],
- [6701, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 1325488145],
- [6704, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 1510711065],
- [6706, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 50618962],
- [6712, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 3043205563],
- [6715, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2381137493],
- [6718, 121, 61, "Layout/LineLength: Line is too long. [181/120]", 2200345195],
- [6720, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087926498],
- [6724, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 1082269527],
- [6727, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 1510711065],
- [6729, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1104064739],
- [6733, 121, 68, "Layout/LineLength: Line is too long. [188/120]", 1652941658],
- [6735, 121, 87, "Layout/LineLength: Line is too long. [207/120]", 1440323819],
- [6739, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 802896260],
- [6742, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1943494546],
- [6744, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1104064739],
- [6750, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 788730815],
- [6752, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 2034687276],
- [6753, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 4226330106],
- [6756, 121, 77, "Layout/LineLength: Line is too long. [197/120]", 2414796320],
- [6757, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873470],
- [6758, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 3090817832],
- [6761, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 2034687276],
- [6762, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 2839148677],
- [6765, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 2393983240],
- [6767, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 2581936864],
- [6771, 121, 84, "Layout/LineLength: Line is too long. [204/120]", 3923254945],
- [6772, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873470],
- [6773, 121, 103, "Layout/LineLength: Line is too long. [223/120]", 580639726],
- [6775, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193419246],
- [6776, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1756764194],
- [6777, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 3202758044],
- [6780, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 912651721],
- [6782, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 2581936864],
- [6786, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1164293389],
- [6799, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860840],
- [6800, 121, 88, "Layout/LineLength: Line is too long. [208/120]", 574552570],
- [6802, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3845073641],
- [6803, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 543375177],
- [6806, 121, 83, "Layout/LineLength: Line is too long. [203/120]", 222410330],
- [6807, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3025157219],
- [6808, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1904561434],
- [6811, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 489872984],
- [6812, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 97325617],
- [6815, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 4204667212],
- [6817, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 4062673070],
- [6821, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 1451915960],
- [6822, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3025157219],
- [6823, 121, 109, "Layout/LineLength: Line is too long. [229/120]", 4200529758],
- [6825, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1497831350],
- [6826, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 4214367244],
- [6827, 121, 84, "Layout/LineLength: Line is too long. [204/120]", 399603517],
- [6830, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3423548875],
- [6832, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 4062673070],
- [6836, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 3279830097],
- [6848, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 659167322],
- [6860, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087926423],
- [6861, 121, 57, "Layout/LineLength: Line is too long. [177/120]", 3300294193],
- [6863, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 3172850966],
- [6864, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 2396187736],
- [6867, 121, 87, "Layout/LineLength: Line is too long. [207/120]", 1991888901],
- [6868, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1954380402],
- [6869, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2589970962],
- [6872, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 42340644],
- [6873, 121, 67, "Layout/LineLength: Line is too long. [187/120]", 479235996],
- [6876, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3423548875],
- [6878, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1462541970],
- [6882, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 1373978781],
- [6883, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1954380402],
- [6884, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 280641011],
- [6886, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1664110553],
- [6887, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1009650381],
- [6888, 121, 88, "Layout/LineLength: Line is too long. [208/120]", 909329343],
- [6891, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 2977589831],
- [6893, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1462541970],
- [6898, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873470],
- [6899, 121, 61, "Layout/LineLength: Line is too long. [181/120]", 1904101094],
- [6901, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2229256255],
- [6902, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 1839090017],
- [6905, 121, 91, "Layout/LineLength: Line is too long. [211/120]", 4260980907],
- [6906, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 4253118453],
- [6907, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 1536690221],
- [6909, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861152],
- [6910, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 209824656],
- [6911, 121, 71, "Layout/LineLength: Line is too long. [191/120]", 1530496074],
- [6914, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 2977589831],
- [6916, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 3261436902],
- [6920, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 3762694917],
- [6921, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 4253118453],
- [6922, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 3196230010],
- [6924, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3165598659],
- [6925, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 4264469493],
- [6926, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 3140690958],
- [6929, 121, 35, "Layout/LineLength: Line is too long. [155/120]", 2999583208],
- [6931, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 3261436902],
- [6937, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 326070599],
- [6940, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1621971220],
- [6943, 121, 49, "Layout/LineLength: Line is too long. [169/120]", 1689000214],
- [6949, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 2459904022],
- [6952, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2624667704],
- [6954, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2317051977],
- [6958, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 2842872837],
- [6960, 121, 75, "Layout/LineLength: Line is too long. [195/120]", 423884656],
- [6964, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 2673769885],
- [6967, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1169781875],
- [6969, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2317051977],
- [6970, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2126253911],
- [6986, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 2388292564],
- [6989, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2381137493],
- [6992, 121, 61, "Layout/LineLength: Line is too long. [181/120]", 1136762660],
- [6994, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087926498],
- [6998, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 2555581016],
- [7001, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 1510711065],
- [7003, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1104064739],
- [7007, 121, 68, "Layout/LineLength: Line is too long. [188/120]", 1986812885],
- [7009, 121, 87, "Layout/LineLength: Line is too long. [207/120]", 1864036132],
- [7013, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 3590180043],
- [7016, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1943494546],
- [7018, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1104064739],
- [7019, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2382712010],
- [7029, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1791534645],
- [7034, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 2403815412],
- [7037, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1422839111],
- [7040, 121, 45, "Layout/LineLength: Line is too long. [165/120]", 4046048864],
- [7046, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 3472955113],
- [7049, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2939363812],
- [7051, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3155638331],
- [7055, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3911469720],
- [7057, 121, 71, "Layout/LineLength: Line is too long. [191/120]", 272433263],
- [7061, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 634420444],
- [7064, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2624667704],
- [7066, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3155638331],
- [7067, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2088324682],
- [7080, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087906711],
- [7092, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2135380894],
- [7101, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
- [7103, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 4280757685],
- [7107, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 161599970],
- [7141, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053789],
- [7176, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2188407955],
- [7187, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3692322233],
- [7191, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087557694],
- [7214, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3197512522],
- [7223, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858840],
- [7225, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 85298067],
- [7282, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193418403],
- [7288, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193418403],
- [7311, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087432474],
- [7323, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2361949763],
- [7332, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
- [7334, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 581045160],
- [7338, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 4235011647],
- [7357, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1898147766],
- [7363, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177560],
- [7369, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 1310140439],
- [7378, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 681770239],
- [7380, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3821940657],
- [7384, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
- [7404, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861292],
- [7416, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2354124424],
- [7425, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087922021],
- [7427, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 3921370162],
- [8020, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 4083054536],
- [8048, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 4083054536],
- [8077, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 4083054536],
- [8135, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 632953222],
- [8164, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 732995265],
- [8214, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 1886249927],
- [8376, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 578751979],
- [8377, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 3803540269],
- [8386, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2238403955],
- [8387, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1028441932],
- [8388, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 1975950909],
- [8443, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1244043798]
+ [1810, 3, 816, "Metrics/MethodLength: Method has too many lines. [13/10]", 170960660],
+ [1810, 39, 213, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [10/5]", 635200700],
+ [1811, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3976306097],
+ [1835, 38, 80, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 3297939075],
+ [1920, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1745553512],
+ [1921, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 118067488],
+ [1922, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 196190368],
+ [1923, 121, 41, "Layout/LineLength: Line is too long. [161/120]", 3371256193],
+ [2094, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 3241114703],
+ [2432, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
+ [2571, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
+ [2995, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3697593604],
+ [2996, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
+ [3117, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 179435314],
+ [3126, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1182194285],
+ [3128, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 3886107031],
+ [3155, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1751849111],
+ [3156, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1519587684],
+ [3157, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 4086262880],
+ [3174, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3568081822],
+ [3175, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1776876782],
+ [3177, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
+ [3178, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1751849111],
+ [3180, 121, 73, "Layout/LineLength: Line is too long. [193/120]", 3322243646],
+ [3182, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1715153206],
+ [3183, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
+ [3184, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 504997180],
+ [3185, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 1146860021],
+ [3186, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 2312101607],
+ [3187, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 1423779161],
+ [3188, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1900897138],
+ [3189, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 1689840383],
+ [3190, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 1589056236],
+ [3192, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 763176550],
+ [3198, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 3957871310],
+ [3200, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 763176550],
+ [3202, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 919916608],
+ [3203, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 919916608],
+ [3204, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 3957871310],
+ [3205, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 4073040612],
+ [3206, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 763176550],
+ [3207, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 667593075],
+ [3209, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1310972770],
+ [3210, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 311387795],
+ [3211, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 724840266],
+ [3212, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 2555878310],
+ [3213, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1781078972],
+ [3214, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
+ [3217, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
+ [3218, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1658060570],
+ [3219, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 3085728851],
+ [3220, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 3129400559],
+ [3221, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3197516464],
+ [3222, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087771520],
+ [3223, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 3837194228],
+ [3224, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 1312323543],
+ [3225, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 2356847623],
+ [3226, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
+ [3227, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 3428073441],
+ [3228, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 2891080552],
+ [3229, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 3080737172],
+ [3230, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 170445026],
+ [3231, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3240051869],
+ [3232, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 4266052680],
+ [3233, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3376297786],
+ [3234, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 398435913],
+ [3235, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 4134940256],
+ [3236, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 30370035],
+ [3237, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 2862546359],
+ [3238, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1901388514],
+ [3239, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 838864274],
+ [3240, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 3437460384],
+ [3241, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 1567003152],
+ [3242, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2609066305],
+ [3243, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 4043187090],
+ [3244, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3866430009],
+ [3245, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 2182699083],
+ [3246, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 3958792129],
+ [3247, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 3449926560],
+ [3248, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 399774089],
+ [3249, 121, 68, "Layout/LineLength: Line is too long. [188/120]", 2119246799],
+ [3251, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3592658842],
+ [3252, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2905723409],
+ [3253, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 3930305198],
+ [3254, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 4186230052],
+ [3255, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
+ [3256, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2700200720],
+ [3257, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 1630526402],
+ [3258, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 3669244926],
+ [3259, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2814234644],
+ [3260, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 3109415933],
+ [3261, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3643275044],
+ [3262, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 3825290660],
+ [3263, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1751849111],
+ [3264, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 4112285398],
+ [3265, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 1684279672],
+ [3266, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 1616506266],
+ [3268, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
+ [3269, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1330093223],
+ [3270, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 4084555566],
+ [3271, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 2466867154],
+ [3272, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 4088314613],
+ [3273, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 2416893689],
+ [3274, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 683312682],
+ [3275, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 2516517934],
+ [3276, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2414563355],
+ [3277, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 2232595211],
+ [3278, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 2940789369],
+ [3279, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 941259913],
+ [3280, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2133508098],
+ [3281, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1621975014],
+ [3282, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 35985461],
+ [3283, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 746016305],
+ [3284, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 435488100],
+ [3285, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 2581129172],
+ [3286, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 3495900774],
+ [3287, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 1413120342],
+ [3288, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858795],
+ [3289, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2333800791],
+ [3290, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 2576906206],
+ [3291, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 2986659874],
+ [3292, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2811932564],
+ [3293, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 1970813291],
+ [3294, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 2904941246],
+ [3295, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3745922508],
+ [3296, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 735247237],
+ [3297, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 3731320885],
+ [3298, 121, 70, "Layout/LineLength: Line is too long. [190/120]", 3896022034],
+ [3299, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 2827048584],
+ [3300, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 2548596663],
+ [3301, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 3812352018],
+ [3302, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 1280243910],
+ [3303, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 1742643292],
+ [3304, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 3056442430],
+ [3305, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 3144363287],
+ [3306, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 477297993],
+ [3307, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 3657857971],
+ [3308, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3913984414],
+ [3309, 121, 70, "Layout/LineLength: Line is too long. [190/120]", 336201058],
+ [3310, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 485418789],
+ [3311, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 453253839],
+ [3312, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3673833034],
+ [3313, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 1552836890],
+ [3314, 121, 70, "Layout/LineLength: Line is too long. [190/120]", 2714635965],
+ [3315, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 9336999],
+ [3316, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 584857208],
+ [3317, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 1394865213],
+ [3318, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 3973222761],
+ [3319, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 2020040051],
+ [3320, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 3060994335],
+ [3321, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 196286917],
+ [3322, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 4168514178],
+ [3323, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 810581246],
+ [3324, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 1473417372],
+ [3325, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 3008376885],
+ [3326, 121, 84, "Layout/LineLength: Line is too long. [204/120]", 454816400],
+ [3327, 121, 88, "Layout/LineLength: Line is too long. [208/120]", 1416223705],
+ [3328, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 2896813919],
+ [3329, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 957293983],
+ [3330, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 2118117430],
+ [3331, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 1367404612],
+ [3332, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 2459902188],
+ [3333, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 461483815],
+ [3334, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 2791596520],
+ [3335, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 203085787],
+ [3336, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 2942095139],
+ [3337, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 131861965],
+ [3338, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 3340827551],
+ [3339, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 102582610],
+ [3340, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 762789354],
+ [3341, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 3478337442],
+ [3342, 121, 112, "Layout/LineLength: Line is too long. [232/120]", 4010607435],
+ [3343, 121, 132, "Layout/LineLength: Line is too long. [252/120]", 3754747587],
+ [3344, 121, 136, "Layout/LineLength: Line is too long. [256/120]", 379336923],
+ [3345, 121, 108, "Layout/LineLength: Line is too long. [228/120]", 3366353902],
+ [3346, 121, 128, "Layout/LineLength: Line is too long. [248/120]", 1686898289],
+ [3347, 121, 132, "Layout/LineLength: Line is too long. [252/120]", 2005192241],
+ [3348, 121, 104, "Layout/LineLength: Line is too long. [224/120]", 1868634464],
+ [3349, 121, 124, "Layout/LineLength: Line is too long. [244/120]", 3939743614],
+ [3350, 121, 128, "Layout/LineLength: Line is too long. [248/120]", 2978506702],
+ [3351, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 3909866928],
+ [3352, 121, 118, "Layout/LineLength: Line is too long. [238/120]", 2853032177],
+ [3353, 121, 122, "Layout/LineLength: Line is too long. [242/120]", 2968366309],
+ [3354, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 1753663643],
+ [3355, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 3387619436],
+ [3356, 121, 106, "Layout/LineLength: Line is too long. [226/120]", 197895496],
+ [3357, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 576181861],
+ [3358, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 2809313444],
+ [3359, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 3963067112],
+ [3360, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 1121380327],
+ [3361, 121, 100, "Layout/LineLength: Line is too long. [220/120]", 31591211],
+ [3362, 121, 104, "Layout/LineLength: Line is too long. [224/120]", 1946129497],
+ [3363, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 767185096],
+ [3364, 121, 100, "Layout/LineLength: Line is too long. [220/120]", 1092646020],
+ [3365, 121, 104, "Layout/LineLength: Line is too long. [224/120]", 1328841270],
+ [3366, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 2663749624],
+ [3367, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 430318647],
+ [3368, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 1650234037],
+ [3369, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 1082269805],
+ [3370, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 316397809],
+ [3371, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 3145391348],
+ [3372, 121, 112, "Layout/LineLength: Line is too long. [232/120]", 2808088654],
+ [3373, 121, 116, "Layout/LineLength: Line is too long. [236/120]", 1035513748],
+ [3374, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 2552800539],
+ [3375, 121, 112, "Layout/LineLength: Line is too long. [232/120]", 1727699169],
+ [3376, 121, 116, "Layout/LineLength: Line is too long. [236/120]", 1171566267],
+ [3377, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 2994775049],
+ [3378, 121, 110, "Layout/LineLength: Line is too long. [230/120]", 3860489151],
+ [3379, 121, 114, "Layout/LineLength: Line is too long. [234/120]", 959496607],
+ [3380, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 1694222439],
+ [3381, 121, 114, "Layout/LineLength: Line is too long. [234/120]", 1501186331],
+ [3382, 121, 118, "Layout/LineLength: Line is too long. [238/120]", 4059659418],
+ [3383, 121, 110, "Layout/LineLength: Line is too long. [230/120]", 1899868779],
+ [3384, 121, 130, "Layout/LineLength: Line is too long. [250/120]", 323324279],
+ [3385, 121, 134, "Layout/LineLength: Line is too long. [254/120]", 3956414359],
+ [3386, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 3506644741],
+ [3387, 121, 116, "Layout/LineLength: Line is too long. [236/120]", 936139074],
+ [3388, 121, 136, "Layout/LineLength: Line is too long. [256/120]", 4153213512],
+ [3389, 121, 140, "Layout/LineLength: Line is too long. [260/120]", 1491976338],
+ [3390, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 4061753206],
+ [3391, 121, 106, "Layout/LineLength: Line is too long. [226/120]", 2410434304],
+ [3392, 121, 124, "Layout/LineLength: Line is too long. [244/120]", 3518300264],
+ [3393, 121, 144, "Layout/LineLength: Line is too long. [264/120]", 1040696046],
+ [3394, 121, 148, "Layout/LineLength: Line is too long. [268/120]", 139604188],
+ [3395, 121, 120, "Layout/LineLength: Line is too long. [240/120]", 231937793],
+ [3396, 121, 140, "Layout/LineLength: Line is too long. [260/120]", 1835509805],
+ [3397, 121, 144, "Layout/LineLength: Line is too long. [264/120]", 1629218396],
+ [3398, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 2312875700],
+ [3399, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 2933374083],
+ [3400, 121, 106, "Layout/LineLength: Line is too long. [226/120]", 1719349671],
+ [3401, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 2555579810],
+ [3402, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 2023551624],
+ [3403, 121, 114, "Layout/LineLength: Line is too long. [234/120]", 955231924],
+ [3404, 121, 118, "Layout/LineLength: Line is too long. [238/120]", 4232993781],
+ [3405, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 3472954835],
+ [3406, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 3211922285],
+ [3407, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 2874956332],
+ [3408, 121, 102, "Layout/LineLength: Line is too long. [222/120]", 1360335840],
+ [3409, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2135379556],
+ [3410, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3242768475],
+ [3411, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 2789115918],
+ [3412, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 3346448124],
+ [3413, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1538469817],
+ [3414, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1543041113],
+ [3415, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 3344741438],
+ [3416, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2188404009],
+ [3417, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1330398779],
+ [3418, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 332468826],
+ [3419, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 1905397598],
+ [3420, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 438831062],
+ [3421, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 3377667334],
+ [3422, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3232541734],
+ [3424, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2130930429],
+ [3425, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 3684939371],
+ [3427, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2361951097],
+ [3428, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 1211447462],
+ [3429, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3309872691],
+ [3430, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 360053761],
+ [3431, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 1310136493],
+ [3432, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1950686342],
+ [3433, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 1397845826],
+ [3434, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 4191304724],
+ [3435, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2354128498],
+ [3436, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 1865717453],
+ [3437, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 24220542],
+ [3438, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 2618612673],
+ [3441, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 3422918867],
+ [3442, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 3689431739],
+ [3486, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 4093564799],
+ [3492, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1662653970],
+ [3493, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 3967501655],
+ [3494, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2178516622],
+ [3495, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 1345346561],
+ [3509, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193466072],
+ [3629, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 3612393276],
+ [3630, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 797303985],
+ [3633, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1606320605],
+ [3653, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1776876782],
+ [3657, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 828742791],
+ [3677, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3294617581],
+ [3687, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 3519842846],
+ [3697, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1966440909],
+ [3698, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053864],
+ [3704, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1606320605],
+ [3727, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 1340744311],
+ [3746, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1741893077],
+ [3747, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053865],
+ [3751, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193405204],
+ [3765, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1401226501],
+ [3768, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2085352569],
+ [3771, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 696523922],
+ [3786, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
+ [3796, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2746826653],
+ [4212, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 1138870161],
+ [4774, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
+ [4785, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 2132299307],
+ [4832, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087775098],
+ [4843, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 757851079],
+ [4879, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
+ [4890, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 441649198],
+ [4913, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087903295],
+ [4925, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 170442008],
+ [4934, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
+ [4936, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1888875443],
+ [4973, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 398433651],
+ [4984, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3921367744],
+ [5007, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2422819473],
+ [5013, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 194583095],
+ [5019, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1901385496],
+ [5028, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 490810486],
+ [5030, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 586287746],
+ [5034, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1310969752],
+ [5054, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087389205],
+ [5066, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2609063547],
+ [5075, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
+ [5077, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1370761696],
+ [5100, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 2208661169],
+ [5106, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1862604658],
+ [5112, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 3958789371],
+ [5121, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3449594464],
+ [5123, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 692050524],
+ [5127, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 802172558],
+ [5197, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 2406691660],
+ [5232, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
+ [5243, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1811982742],
+ [5270, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2562189319],
+ [5276, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193430346],
+ [5282, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 2814237166],
+ [5291, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2189106693],
+ [5293, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 3874870868],
+ [5297, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 179474914],
+ [5330, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1751845165],
+ [5341, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2617230371],
+ [5345, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
+ [5386, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
+ [5397, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3793790598],
+ [5432, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 4088312783],
+ [5443, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3220724736],
+ [5447, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087899888],
+ [5466, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2552888401],
+ [5472, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 194583095],
+ [5478, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2414559905],
+ [5487, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 626762179],
+ [5489, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3969284923],
+ [5493, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 1893261414],
+ [5525, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2133507320],
+ [5536, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 2101353476],
+ [5540, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087685705],
+ [5559, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2431380437],
+ [5565, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 194583095],
+ [5571, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 435489438],
+ [5580, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 1520878209],
+ [5582, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 2238995076],
+ [5586, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 2789405913],
+ [5619, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
+ [5630, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3409328196],
+ [5653, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087858069],
+ [5665, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2811935086],
+ [5674, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
+ [5676, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1113346693],
+ [5680, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3227128786],
+ [5700, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 48793812],
+ [5706, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 338440584],
+ [5712, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 735248703],
+ [5721, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 927473097],
+ [5723, 121, 43, "Layout/LineLength: Line is too long. [163/120]", 1394536741],
+ [5727, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3134012967],
+ [5746, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 2967615316],
+ [5752, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 2810710931],
+ [5758, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 2548594701],
+ [5761, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860796],
+ [5763, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
+ [5767, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 3549194295],
+ [5769, 121, 55, "Layout/LineLength: Line is too long. [175/120]", 1074004741],
+ [5773, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 2874423564],
+ [5776, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087576526],
+ [5778, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
+ [5793, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 1696848307],
+ [5799, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 2883501659],
+ [5805, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 3056443076],
+ [5810, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193405204],
+ [5814, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 1487412605],
+ [5816, 121, 51, "Layout/LineLength: Line is too long. [171/120]", 2021571284],
+ [5820, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1975782995],
+ [5823, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860796],
+ [5825, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193405204],
+ [5830, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 183236849],
+ [5839, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 856018753],
+ [5842, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
+ [5845, 121, 37, "Layout/LineLength: Line is too long. [157/120]", 2146546324],
+ [5851, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3913983076],
+ [5854, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 3491931666],
+ [5856, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3536323546],
+ [5860, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 356581191],
+ [5862, 121, 63, "Layout/LineLength: Line is too long. [183/120]", 4144657639],
+ [5866, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 1478616653],
+ [5869, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1774852021],
+ [5871, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3536323546],
+ [5886, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 3884289787],
+ [5892, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 1001503687],
+ [5898, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3673836976],
+ [5907, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 3164908550],
+ [5909, 121, 43, "Layout/LineLength: Line is too long. [163/120]", 1134300778],
+ [5913, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 1797165224],
+ [5932, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 2508143995],
+ [5938, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 3002532188],
+ [5944, 121, 44, "Layout/LineLength: Line is too long. [164/120]", 584857986],
+ [5947, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860796],
+ [5949, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
+ [5953, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 749691384],
+ [5955, 121, 55, "Layout/LineLength: Line is too long. [175/120]", 3389354954],
+ [5959, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 3402045699],
+ [5962, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087576526],
+ [5964, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 182097675],
+ [5978, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 2447716612],
+ [5984, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3201685099],
+ [5990, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 3060990885],
+ [5999, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 29396315],
+ [6001, 121, 45, "Layout/LineLength: Line is too long. [165/120]", 1228645365],
+ [6005, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1436742837],
+ [6024, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 716917214],
+ [6030, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 2175814211],
+ [6036, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 1473420390],
+ [6039, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193433391],
+ [6041, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1422839111],
+ [6045, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 1571170198],
+ [6047, 121, 57, "Layout/LineLength: Line is too long. [177/120]", 2175059093],
+ [6051, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 3886666417],
+ [6054, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 176753677],
+ [6056, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1422839111],
+ [6072, 121, 38, "Layout/LineLength: Line is too long. [158/120]", 3471319495],
+ [6078, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 1274038477],
+ [6084, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 2896814693],
+ [6087, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087576526],
+ [6089, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 4114086530],
+ [6093, 121, 40, "Layout/LineLength: Line is too long. [160/120]", 250433828],
+ [6095, 121, 59, "Layout/LineLength: Line is too long. [179/120]", 3910556848],
+ [6099, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 4002014976],
+ [6102, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 3491931666],
+ [6104, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 4114086530],
+ [6198, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861664],
+ [6212, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087932582],
+ [6226, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861664],
+ [6242, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 876012844],
+ [6244, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1756764194],
+ [6245, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 4173216735],
+ [6248, 121, 75, "Layout/LineLength: Line is too long. [195/120]", 911964425],
+ [6249, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 173266907],
+ [6250, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1412705933],
+ [6253, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1756764194],
+ [6254, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 2605683750],
+ [6257, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 3182252139],
+ [6259, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 1652557742],
+ [6263, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 2240437058],
+ [6264, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 173266907],
+ [6265, 121, 101, "Layout/LineLength: Line is too long. [221/120]", 3694598076],
+ [6267, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861152],
+ [6268, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 179079542],
+ [6269, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 3528944411],
+ [6272, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3020159378],
+ [6274, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 1652557742],
+ [6280, 121, 84, "Layout/LineLength: Line is too long. [204/120]", 420843234],
+ [6282, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1401226501],
+ [6283, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 442915368],
+ [6286, 121, 79, "Layout/LineLength: Line is too long. [199/120]", 4212444955],
+ [6287, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053864],
+ [6288, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 1373660924],
+ [6291, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1401226501],
+ [6292, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 1539225758],
+ [6295, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3020159378],
+ [6297, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 4240691845],
+ [6301, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 674553335],
+ [6302, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053864],
+ [6303, 121, 105, "Layout/LineLength: Line is too long. [225/120]", 4163432287],
+ [6305, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2089555761],
+ [6306, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 2034687276],
+ [6307, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 3710905302],
+ [6310, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 4204667212],
+ [6312, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 4240691845],
+ [6318, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 2071493433],
+ [6320, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2085352569],
+ [6321, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 2853066942],
+ [6324, 121, 71, "Layout/LineLength: Line is too long. [191/120]", 2771467828],
+ [6325, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193425976],
+ [6326, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3025157142],
+ [6329, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2085352569],
+ [6330, 121, 86, "Layout/LineLength: Line is too long. [206/120]", 3340824101],
+ [6333, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 3999804761],
+ [6335, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1999310973],
+ [6339, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 835016333],
+ [6340, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193425976],
+ [6341, 121, 97, "Layout/LineLength: Line is too long. [217/120]", 3575893945],
+ [6344, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193405945],
+ [6345, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 1755858308],
+ [6348, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 3182252139],
+ [6350, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 1999310973],
+ [6356, 121, 70, "Layout/LineLength: Line is too long. [190/120]", 3033080032],
+ [6358, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177549],
+ [6359, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 2720985203],
+ [6362, 121, 65, "Layout/LineLength: Line is too long. [185/120]", 3233424320],
+ [6364, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873483],
+ [6367, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177549],
+ [6368, 121, 80, "Layout/LineLength: Line is too long. [200/120]", 131859703],
+ [6371, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1943494546],
+ [6373, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 4016166830],
+ [6377, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 1350760977],
+ [6379, 121, 91, "Layout/LineLength: Line is too long. [211/120]", 4098706554],
+ [6383, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 4059724765],
+ [6386, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 1651955548],
+ [6388, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 4016166830],
+ [6394, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 1057495720],
+ [6397, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1621971220],
+ [6400, 121, 49, "Layout/LineLength: Line is too long. [169/120]", 1585717593],
+ [6406, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 2942094233],
+ [6409, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2624667704],
+ [6411, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2317051977],
+ [6415, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 1321610634],
+ [6417, 121, 75, "Layout/LineLength: Line is too long. [195/120]", 2854688831],
+ [6421, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 4185465554],
+ [6424, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1169781875],
+ [6426, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2317051977],
+ [6432, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 1916545020],
+ [6435, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1422839111],
+ [6438, 121, 45, "Layout/LineLength: Line is too long. [165/120]", 910134593],
+ [6444, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 203086561],
+ [6447, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2939363812],
+ [6449, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3155638331],
+ [6453, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 1955758062],
+ [6455, 121, 71, "Layout/LineLength: Line is too long. [191/120]", 3737424359],
+ [6459, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 3597620692],
+ [6462, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2624667704],
+ [6464, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3155638331],
+ [6470, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 1036052399],
+ [6473, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 4114086530],
+ [6476, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 1268266488],
+ [6482, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 2791598354],
+ [6485, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1302589368],
+ [6487, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3533902728],
+ [6491, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 3942276897],
+ [6493, 121, 73, "Layout/LineLength: Line is too long. [193/120]", 1175941460],
+ [6497, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 679697318],
+ [6500, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 28126263],
+ [6502, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3533902728],
+ [6503, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 181895237],
+ [6508, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 4057848448],
+ [6511, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 4114086530],
+ [6514, 121, 47, "Layout/LineLength: Line is too long. [167/120]", 4067769399],
+ [6520, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 461482909],
+ [6523, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1302589368],
+ [6525, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3533902728],
+ [6529, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 3561204590],
+ [6531, 121, 73, "Layout/LineLength: Line is too long. [193/120]", 880160795],
+ [6535, 121, 48, "Layout/LineLength: Line is too long. [168/120]", 1614719145],
+ [6538, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 28126263],
+ [6540, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 3533902728],
+ [6541, 121, 5, "Layout/LineLength: Line is too long. [125/120]", 181895237],
+ [6588, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193432306],
+ [6602, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 1645945966],
+ [6605, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3212740609],
+ [6608, 121, 59, "Layout/LineLength: Line is too long. [179/120]", 3982698123],
+ [6610, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193425997],
+ [6614, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 2663750402],
+ [6617, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2420297272],
+ [6619, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1164389943],
+ [6623, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 3483121581],
+ [6625, 121, 85, "Layout/LineLength: Line is too long. [205/120]", 2271668600],
+ [6629, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 804794365],
+ [6632, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3659367004],
+ [6634, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1164389943],
+ [6635, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 561395486],
+ [6640, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 1251661057],
+ [6643, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3212740609],
+ [6646, 121, 59, "Layout/LineLength: Line is too long. [179/120]", 3210109508],
+ [6648, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193425997],
+ [6652, 121, 74, "Layout/LineLength: Line is too long. [194/120]", 430316685],
+ [6655, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2420297272],
+ [6657, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1164389943],
+ [6661, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 2428160226],
+ [6663, 121, 85, "Layout/LineLength: Line is too long. [205/120]", 2663295671],
+ [6667, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 2822109938],
+ [6670, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3659367004],
+ [6672, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1164389943],
+ [6673, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 561395486],
+ [6678, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 857639785],
+ [6681, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 3669622788],
+ [6684, 121, 57, "Layout/LineLength: Line is too long. [177/120]", 140453799],
+ [6686, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860765],
+ [6690, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 1650236431],
+ [6693, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 150699323],
+ [6695, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 50618962],
+ [6699, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 4205571164],
+ [6701, 121, 83, "Layout/LineLength: Line is too long. [203/120]", 1549528021],
+ [6705, 121, 58, "Layout/LineLength: Line is too long. [178/120]", 1325488145],
+ [6708, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 1510711065],
+ [6710, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 50618962],
+ [6716, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 3043205563],
+ [6719, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2381137493],
+ [6722, 121, 61, "Layout/LineLength: Line is too long. [181/120]", 2200345195],
+ [6724, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087926498],
+ [6728, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 1082269527],
+ [6731, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 1510711065],
+ [6733, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1104064739],
+ [6737, 121, 68, "Layout/LineLength: Line is too long. [188/120]", 1652941658],
+ [6739, 121, 87, "Layout/LineLength: Line is too long. [207/120]", 1440323819],
+ [6743, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 802896260],
+ [6746, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1943494546],
+ [6748, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1104064739],
+ [6754, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 788730815],
+ [6756, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 2034687276],
+ [6757, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 4226330106],
+ [6760, 121, 77, "Layout/LineLength: Line is too long. [197/120]", 2414796320],
+ [6761, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873470],
+ [6762, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 3090817832],
+ [6765, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 2034687276],
+ [6766, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 2839148677],
+ [6769, 121, 26, "Layout/LineLength: Line is too long. [146/120]", 2393983240],
+ [6771, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 2581936864],
+ [6775, 121, 84, "Layout/LineLength: Line is too long. [204/120]", 3923254945],
+ [6776, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873470],
+ [6777, 121, 103, "Layout/LineLength: Line is too long. [223/120]", 580639726],
+ [6779, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193419246],
+ [6780, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1756764194],
+ [6781, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 3202758044],
+ [6784, 121, 28, "Layout/LineLength: Line is too long. [148/120]", 912651721],
+ [6786, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 2581936864],
+ [6790, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1164293389],
+ [6803, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5860840],
+ [6804, 121, 88, "Layout/LineLength: Line is too long. [208/120]", 574552570],
+ [6806, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3845073641],
+ [6807, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 543375177],
+ [6810, 121, 83, "Layout/LineLength: Line is too long. [203/120]", 222410330],
+ [6811, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3025157219],
+ [6812, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 1904561434],
+ [6815, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 489872984],
+ [6816, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 97325617],
+ [6819, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 4204667212],
+ [6821, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 4062673070],
+ [6825, 121, 90, "Layout/LineLength: Line is too long. [210/120]", 1451915960],
+ [6826, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 3025157219],
+ [6827, 121, 109, "Layout/LineLength: Line is too long. [229/120]", 4200529758],
+ [6829, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1497831350],
+ [6830, 121, 9, "Layout/LineLength: Line is too long. [129/120]", 4214367244],
+ [6831, 121, 84, "Layout/LineLength: Line is too long. [204/120]", 399603517],
+ [6834, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3423548875],
+ [6836, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 4062673070],
+ [6840, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 3279830097],
+ [6852, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 659167322],
+ [6864, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087926423],
+ [6865, 121, 57, "Layout/LineLength: Line is too long. [177/120]", 3300294193],
+ [6867, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 3172850966],
+ [6868, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 2396187736],
+ [6871, 121, 87, "Layout/LineLength: Line is too long. [207/120]", 1991888901],
+ [6872, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1954380402],
+ [6873, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2589970962],
+ [6876, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 42340644],
+ [6877, 121, 67, "Layout/LineLength: Line is too long. [187/120]", 479235996],
+ [6880, 121, 31, "Layout/LineLength: Line is too long. [151/120]", 3423548875],
+ [6882, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1462541970],
+ [6886, 121, 94, "Layout/LineLength: Line is too long. [214/120]", 1373978781],
+ [6887, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1954380402],
+ [6888, 121, 78, "Layout/LineLength: Line is too long. [198/120]", 280641011],
+ [6890, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1664110553],
+ [6891, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 1009650381],
+ [6892, 121, 88, "Layout/LineLength: Line is too long. [208/120]", 909329343],
+ [6895, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 2977589831],
+ [6897, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 1462541970],
+ [6902, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1165873470],
+ [6903, 121, 61, "Layout/LineLength: Line is too long. [181/120]", 1904101094],
+ [6905, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2229256255],
+ [6906, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 1839090017],
+ [6909, 121, 91, "Layout/LineLength: Line is too long. [211/120]", 4260980907],
+ [6910, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 4253118453],
+ [6911, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 1536690221],
+ [6913, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861152],
+ [6914, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 209824656],
+ [6915, 121, 71, "Layout/LineLength: Line is too long. [191/120]", 1530496074],
+ [6918, 121, 33, "Layout/LineLength: Line is too long. [153/120]", 2977589831],
+ [6920, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 3261436902],
+ [6924, 121, 98, "Layout/LineLength: Line is too long. [218/120]", 3762694917],
+ [6925, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 4253118453],
+ [6926, 121, 82, "Layout/LineLength: Line is too long. [202/120]", 3196230010],
+ [6928, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3165598659],
+ [6929, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 4264469493],
+ [6930, 121, 92, "Layout/LineLength: Line is too long. [212/120]", 3140690958],
+ [6933, 121, 35, "Layout/LineLength: Line is too long. [155/120]", 2999583208],
+ [6935, 121, 36, "Layout/LineLength: Line is too long. [156/120]", 3261436902],
+ [6941, 121, 54, "Layout/LineLength: Line is too long. [174/120]", 326070599],
+ [6944, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 1621971220],
+ [6947, 121, 49, "Layout/LineLength: Line is too long. [169/120]", 1689000214],
+ [6953, 121, 64, "Layout/LineLength: Line is too long. [184/120]", 2459904022],
+ [6956, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2624667704],
+ [6958, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2317051977],
+ [6962, 121, 56, "Layout/LineLength: Line is too long. [176/120]", 2842872837],
+ [6964, 121, 75, "Layout/LineLength: Line is too long. [195/120]", 423884656],
+ [6968, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 2673769885],
+ [6971, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 1169781875],
+ [6973, 121, 15, "Layout/LineLength: Line is too long. [135/120]", 2317051977],
+ [6974, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2126253911],
+ [6990, 121, 66, "Layout/LineLength: Line is too long. [186/120]", 2388292564],
+ [6993, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2381137493],
+ [6996, 121, 61, "Layout/LineLength: Line is too long. [181/120]", 1136762660],
+ [6998, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087926498],
+ [7002, 121, 76, "Layout/LineLength: Line is too long. [196/120]", 2555581016],
+ [7005, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 1510711065],
+ [7007, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1104064739],
+ [7011, 121, 68, "Layout/LineLength: Line is too long. [188/120]", 1986812885],
+ [7013, 121, 87, "Layout/LineLength: Line is too long. [207/120]", 1864036132],
+ [7017, 121, 62, "Layout/LineLength: Line is too long. [182/120]", 3590180043],
+ [7020, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1943494546],
+ [7022, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 1104064739],
+ [7023, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2382712010],
+ [7033, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1791534645],
+ [7038, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 2403815412],
+ [7041, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1422839111],
+ [7044, 121, 45, "Layout/LineLength: Line is too long. [165/120]", 4046048864],
+ [7050, 121, 60, "Layout/LineLength: Line is too long. [180/120]", 3472955113],
+ [7053, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 2939363812],
+ [7055, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3155638331],
+ [7059, 121, 52, "Layout/LineLength: Line is too long. [172/120]", 3911469720],
+ [7061, 121, 71, "Layout/LineLength: Line is too long. [191/120]", 272433263],
+ [7065, 121, 46, "Layout/LineLength: Line is too long. [166/120]", 634420444],
+ [7068, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2624667704],
+ [7070, 121, 13, "Layout/LineLength: Line is too long. [133/120]", 3155638331],
+ [7071, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2088324682],
+ [7084, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087906711],
+ [7096, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2135380894],
+ [7105, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
+ [7107, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 4280757685],
+ [7111, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 161599970],
+ [7145, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 830053789],
+ [7180, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 2188407955],
+ [7191, 121, 19, "Layout/LineLength: Line is too long. [139/120]", 3692322233],
+ [7195, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087557694],
+ [7218, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 3197512522],
+ [7227, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5858840],
+ [7229, 121, 21, "Layout/LineLength: Line is too long. [141/120]", 85298067],
+ [7286, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193418403],
+ [7292, 121, 3, "Layout/LineLength: Line is too long. [123/120]", 193418403],
+ [7315, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087432474],
+ [7327, 121, 14, "Layout/LineLength: Line is too long. [134/120]", 2361949763],
+ [7336, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 2102137893],
+ [7338, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 581045160],
+ [7342, 121, 10, "Layout/LineLength: Line is too long. [130/120]", 4235011647],
+ [7361, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1898147766],
+ [7367, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177560],
+ [7373, 121, 16, "Layout/LineLength: Line is too long. [136/120]", 1310140439],
+ [7382, 121, 8, "Layout/LineLength: Line is too long. [128/120]", 681770239],
+ [7384, 121, 27, "Layout/LineLength: Line is too long. [147/120]", 3821940657],
+ [7388, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5862609],
+ [7408, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861292],
+ [7420, 121, 12, "Layout/LineLength: Line is too long. [132/120]", 2354124424],
+ [7429, 121, 4, "Layout/LineLength: Line is too long. [124/120]", 2087922021],
+ [7431, 121, 23, "Layout/LineLength: Line is too long. [143/120]", 3921370162],
+ [8024, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 4083054536],
+ [8052, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 4083054536],
+ [8081, 121, 24, "Layout/LineLength: Line is too long. [144/120]", 4083054536],
+ [8139, 121, 42, "Layout/LineLength: Line is too long. [162/120]", 632953222],
+ [8168, 121, 34, "Layout/LineLength: Line is too long. [154/120]", 732995265],
+ [8218, 121, 30, "Layout/LineLength: Line is too long. [150/120]", 1886249927],
+ [8380, 121, 7, "Layout/LineLength: Line is too long. [127/120]", 578751979],
+ [8381, 121, 11, "Layout/LineLength: Line is too long. [131/120]", 3803540269],
+ [8390, 121, 17, "Layout/LineLength: Line is too long. [137/120]", 2238403955],
+ [8391, 121, 25, "Layout/LineLength: Line is too long. [145/120]", 1028441932],
+ [8392, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 1975950909],
+ [8447, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1244043798]
],
"spec/integration/freeze_node_edge_cases_spec.rb:3416491031": [
[6, 1, 28959, "Metrics/BlockLength: Block has too many lines. [663/25]", 3473768018],
diff --git a/gems/ast-merge/.simplecov b/gems/ast-merge/.simplecov
index 20dd86e49..0372395aa 100644
--- a/gems/ast-merge/.simplecov
+++ b/gems/ast-merge/.simplecov
@@ -4,15 +4,11 @@
# ast-merge will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/ast-merge/.structuredmerge/kettle-jem.yml b/gems/ast-merge/.structuredmerge/kettle-jem.yml
index dd1a4c369..9a1835b77 100644
--- a/gems/ast-merge/.structuredmerge/kettle-jem.yml
+++ b/gems/ast-merge/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/ast/merge/version.rb
- source: sig/gem.rbs
diff --git a/gems/ast-merge/Gemfile b/gems/ast-merge/Gemfile
index c4d51f141..92d1177b1 100644
--- a/gems/ast-merge/Gemfile
+++ b/gems/ast-merge/Gemfile
@@ -37,298 +37,6 @@ if direct_sibling_gems.any? &&
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
@@ -351,62 +59,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -414,7 +68,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/ast-merge/Gemfile.lock b/gems/ast-merge/Gemfile.lock
index ad09d9372..761bc7971 100644
--- a/gems/ast-merge/Gemfile.lock
+++ b/gems/ast-merge/Gemfile.lock
@@ -7,271 +7,6 @@ PATH
tree_haver (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,6 +17,10 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
backports (3.25.3)
benchmark (0.5.0)
@@ -289,15 +28,10 @@ GEM
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +39,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +69,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +88,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +112,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,7 +121,6 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
nokogiri (1.19.4-aarch64-linux-gnu)
racc (~> 1.4)
@@ -398,13 +128,11 @@ GEM
racc (~> 1.4)
nokogiri (1.19.4-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-musl)
racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +153,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +208,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +223,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +262,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +283,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +311,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +334,20 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-aarch64-linux)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-arm64-darwin)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +357,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -628,116 +388,76 @@ PLATFORMS
aarch64-linux-gnu
aarch64-linux-musl
arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
- benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.16) sha256=d6ca5dd440c24f9abce9844cf44cc8e18c6a553de65a47efb4544137af92c47d
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,61 +466,46 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +523,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +562,18 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4
+ tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,7 +581,6 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
diff --git a/gems/ast-merge/README.md b/gems/ast-merge/README.md
index bf0c8c062..eb322157f 100644
--- a/gems/ast-merge/README.md
+++ b/gems/ast-merge/README.md
@@ -307,7 +307,7 @@ The `Ast::Merge` module is organized into several namespaces, each with detailed
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
@@ -526,6 +526,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-merge
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Ast::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
diff --git a/gems/ast-merge/gemfiles/modular/benchmark/r4/v0.5.gemfile b/gems/ast-merge/gemfiles/modular/benchmark/r4/v0.5.gemfile
index b8392fab0..e69de29bb 100644
--- a/gems/ast-merge/gemfiles/modular/benchmark/r4/v0.5.gemfile
+++ b/gems/ast-merge/gemfiles/modular/benchmark/r4/v0.5.gemfile
@@ -1,2 +0,0 @@
-# Ruby >= 2.1
-gem 'benchmark', '~> 0.5', '>= 0.5.0' # Removed from Std Lib in Ruby 4.0
diff --git a/gems/ast-merge/gemfiles/modular/benchmark/vHEAD.gemfile b/gems/ast-merge/gemfiles/modular/benchmark/vHEAD.gemfile
index af214aafa..e69de29bb 100644
--- a/gems/ast-merge/gemfiles/modular/benchmark/vHEAD.gemfile
+++ b/gems/ast-merge/gemfiles/modular/benchmark/vHEAD.gemfile
@@ -1,2 +0,0 @@
-# Ruby >= 2.1
-gem 'benchmark', github: 'ruby/benchmark', branch: 'master'
diff --git a/gems/ast-merge/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/ast-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/ast-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/ast-merge/gemfiles/modular/cgi/vHEAD.gemfile b/gems/ast-merge/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/ast-merge/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/ast-merge/gemfiles/modular/coverage.gemfile b/gems/ast-merge/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/ast-merge/gemfiles/modular/coverage.gemfile
+++ b/gems/ast-merge/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/ast-merge/gemfiles/modular/coverage_local.gemfile b/gems/ast-merge/gemfiles/modular/coverage_local.gemfile
index 073a73f58..316d764dd 100644
--- a/gems/ast-merge/gemfiles/modular/coverage_local.gemfile
+++ b/gems/ast-merge/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require "nomono/bundler"
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[ast-merge] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-merge/gemfiles/modular/documentation.gemfile b/gems/ast-merge/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/ast-merge/gemfiles/modular/documentation.gemfile
+++ b/gems/ast-merge/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/ast-merge/gemfiles/modular/documentation_local.gemfile b/gems/ast-merge/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..18e1ba3b3 100644
--- a/gems/ast-merge/gemfiles/modular/documentation_local.gemfile
+++ b/gems/ast-merge/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require "nomono/bundler"
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-merge] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/ast-merge/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/ast-merge/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-merge/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/ast-merge/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-merge/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/ast-merge/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-merge/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/ast-merge/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-merge/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/ast-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/ast-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/ast-merge/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/ast-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/ast-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/ast-merge/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/ast-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/ast-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/ast-merge/gemfiles/modular/optional.gemfile b/gems/ast-merge/gemfiles/modular/optional.gemfile
index 74f15a196..9ea429538 100644
--- a/gems/ast-merge/gemfiles/modular/optional.gemfile
+++ b/gems/ast-merge/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/ast-merge/gemfiles/modular/runtime_heads.gemfile b/gems/ast-merge/gemfiles/modular/runtime_heads.gemfile
index 78bdc2227..ebf17c529 100644
--- a/gems/ast-merge/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/ast-merge/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/ast-merge/gemfiles/modular/style.gemfile b/gems/ast-merge/gemfiles/modular/style.gemfile
index 002341f21..4dbcc02c0 100644
--- a/gems/ast-merge/gemfiles/modular/style.gemfile
+++ b/gems/ast-merge/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during ast-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/ast-merge/gemfiles/modular/style_local.gemfile b/gems/ast-merge/gemfiles/modular/style_local.gemfile
index ce75bbe21..73e4e724b 100644
--- a/gems/ast-merge/gemfiles/modular/style_local.gemfile
+++ b/gems/ast-merge/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require "nomono/bundler"
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-merge] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/ast-merge/gemfiles/modular/templating.gemfile b/gems/ast-merge/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/ast-merge/gemfiles/modular/templating.gemfile
+++ b/gems/ast-merge/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/ast-merge/gemfiles/modular/templating_local.gemfile b/gems/ast-merge/gemfiles/modular/templating_local.gemfile
index bf5147854..b0c887fb3 100644
--- a/gems/ast-merge/gemfiles/modular/templating_local.gemfile
+++ b/gems/ast-merge/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require "nomono/bundler"
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[ast-merge] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[ast-merge] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[ast-merge] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-merge/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/ast-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/ast-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/ast-merge/gemfiles/modular/webrick/vHEAD.gemfile b/gems/ast-merge/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/ast-merge/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/ast-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/ast-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/ast-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/ast-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/ast-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/ast-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/ast-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/ast-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/ast-merge/lib/ast/merge.rb b/gems/ast-merge/lib/ast/merge.rb
index c901dd747..3f9d5625f 100644
--- a/gems/ast-merge/lib/ast/merge.rb
+++ b/gems/ast-merge/lib/ast/merge.rb
@@ -70,9 +70,11 @@ def initialize(placeholder)
autoload :FileAnalyzable, 'ast/merge/file_analyzable'
autoload :Freezable, 'ast/merge/freezable'
autoload :FreezeNodeBase, 'ast/merge/freeze_node_base'
+ autoload :CommentLayoutEmissionSupport, 'ast/merge/comment_layout_emission_support'
autoload :Healer, 'ast/merge/healer'
autoload :JaccardSimilarity, 'ast/merge/jaccard_similarity'
autoload :Layout, 'ast/merge/layout'
+ autoload :LineRangeSupport, 'ast/merge/line_range_support'
autoload :MatchRefinerBase, 'ast/merge/match_refiner_base'
autoload :MatchScoreBase, 'ast/merge/match_score_base'
autoload :MergeResultBase, 'ast/merge/merge_result_base'
@@ -85,6 +87,7 @@ def initialize(placeholder)
autoload :PartialTemplateMergerBase, 'ast/merge/partial_template_merger_base'
autoload :SectionTyping, 'ast/merge/section_typing'
autoload :SmartMergerBase, 'ast/merge/smart_merger_base'
+ autoload :SourceRegionReportSupport, 'ast/merge/source_region_report_support'
autoload :StructuralEdit, 'ast/merge/structural_edit'
autoload :StructuredEmitterProvenanceSupport, 'ast/merge/structured_emitter_provenance_support'
autoload :StructuredReviewApplySupport, 'ast/merge/structured_review_apply_support'
@@ -847,7 +850,7 @@ def to_h
:path_placeholder, :expected_exit_code, :expected_current_file_updated, keyword_init: true)
GitDriverSmokeSuite = Struct.new(:suite_id, :version, :driver_name, :cases, :diagnostics, keyword_init: true)
DiffDriverSmokeCase = Struct.new(:case_id, :argument_count, :argument_roles, :expected_exit_code,
- :expected_output_kind, keyword_init: true)
+ :expected_output_kind, :expected_output_fragments, keyword_init: true)
DiffDriverSmokeSuite = Struct.new(:suite_id, :version, :driver_name, :cases, :diagnostics, keyword_init: true)
PerformanceTimeoutDiagnostic = Struct.new(:severity, :category, :code, :fallback, keyword_init: true)
PerformanceGuardrails = Struct.new(:guardrail_id, :version, :max_bytes, :max_nodes, :max_match_candidates,
diff --git a/gems/ast-merge/lib/ast/merge/comment_layout_emission_support.rb b/gems/ast-merge/lib/ast/merge/comment_layout_emission_support.rb
new file mode 100644
index 000000000..679fc54e1
--- /dev/null
+++ b/gems/ast-merge/lib/ast/merge/comment_layout_emission_support.rb
@@ -0,0 +1,376 @@
+# frozen_string_literal: true
+
+module Ast
+ module Merge
+ # Shared helpers for merge emitters that reconstruct source regions around
+ # structural owners while preserving comment and blank-line ownership.
+ #
+ # Format-specific gems still decide which comments are syntax comments and
+ # which owners participate in a merge. This module centralizes the
+ # language-neutral mechanics for querying attachments and calculating the
+ # source span that should be emitted for an owner.
+ module CommentLayoutEmissionSupport
+ include LineRangeSupport
+
+ private
+
+ def leading_region_for(owner, analysis, owners: nil)
+ return unless owner && analysis&.respond_to?(:comment_attachment_for)
+
+ attachment = if owners.nil?
+ analysis.comment_attachment_for(owner)
+ else
+ analysis.comment_attachment_for(owner, owners: owners)
+ end
+ attachment.leading_region if attachment.respond_to?(:leading_region)
+ end
+
+ def trailing_region_for(owner, analysis, owners: nil)
+ return unless owner && analysis&.respond_to?(:comment_attachment_for)
+
+ attachment = if owners.nil?
+ analysis.comment_attachment_for(owner)
+ else
+ analysis.comment_attachment_for(owner, owners: owners)
+ end
+ attachment.trailing_region if attachment.respond_to?(:trailing_region)
+ end
+
+ def region_present?(region)
+ return false unless region
+ return !region.empty? if region.respond_to?(:empty?)
+ return region.nodes.any? if region.respond_to?(:nodes)
+
+ true
+ end
+
+ def region_start_line(region)
+ return region.start_line if region.respond_to?(:start_line) && region.start_line
+ return unless region.respond_to?(:nodes)
+
+ region.nodes.filter_map { |node| node.respond_to?(:line_number) ? node.line_number : nil }.min
+ end
+
+ def region_end_line(region)
+ return region.end_line if region.respond_to?(:end_line) && region.end_line
+ return unless region.respond_to?(:nodes)
+
+ region.nodes.filter_map { |node| node.respond_to?(:line_number) ? node.line_number : nil }.max
+ end
+
+ def preceding_blank_line_start(region_start, analysis)
+ line_num = region_start
+ while line_num && line_num > 1
+ previous_line = source_line_at(analysis, line_num - 1)
+ break unless previous_line && previous_line.strip.empty?
+
+ line_num -= 1
+ end
+
+ line_num
+ end
+
+ def blank_line_count_before(line_num, analysis)
+ count = 0
+ current = line_num.to_i - 1
+
+ while current >= 1
+ previous_line = source_line_at(analysis, current)
+ break unless previous_line && previous_line.strip.empty?
+
+ count += 1
+ current -= 1
+ end
+
+ count
+ end
+
+ def leading_segment_start_for_output(output_owner:, output_analysis:, source_region_start:, source_analysis:,
+ source_region: nil, owners: nil)
+ source_region_start - desired_blank_line_count_before_leading_region(
+ output_owner: output_owner,
+ output_analysis: output_analysis,
+ source_region_start: source_region_start,
+ source_region: source_region,
+ source_analysis: source_analysis,
+ owners: owners
+ )
+ end
+
+ def desired_blank_line_count_before_leading_region(output_owner:, output_analysis:, source_region_start:,
+ source_analysis:, source_region: nil, owners: nil)
+ target_region = leading_region_for(output_owner, output_analysis, owners: owners)
+ target_region_start = region_start_line(target_region)
+ output_start_line = owner_start_line(output_owner)
+
+ if target_region_start && output_start_line && target_region_start < output_start_line
+ blank_line_count_before(target_region_start, output_analysis)
+ elsif source_region && previous_owner_trailing_region_matches?(output_owner, output_analysis, source_region,
+ owners: owners)
+ 0
+ else
+ blank_line_count_before(source_region_start, source_analysis)
+ end
+ end
+
+ def leading_segment_lines_for(owner, analysis, owners: nil)
+ leading_segment_line_numbers_for(owner, analysis, owners: owners).filter_map do |line_number|
+ source_line_at(analysis, line_number)
+ end
+ end
+
+ def leading_segment_line_numbers_for(owner, analysis, owners: nil)
+ leading_region = leading_region_for(owner, analysis, owners: owners)
+ region_start = leading_segment_anchor_line_for(owner, analysis, owners: owners, leading_region: leading_region)
+ owner_start = owner_start_line(owner)
+ return [] unless region_start && owner_start && region_start < owner_start
+
+ leading_start = leading_segment_start_for_output(
+ output_owner: owner,
+ output_analysis: analysis,
+ source_region_start: region_start,
+ source_region: leading_region,
+ source_analysis: analysis,
+ owners: owners
+ )
+ (leading_start...owner_start).to_a
+ end
+
+ def leading_segment_anchor_line_for(_owner, _analysis, owners: nil, leading_region: nil)
+ return unless region_present?(leading_region)
+
+ region_start_line(leading_region)
+ end
+
+ def trailing_region_lines_for(owner, analysis, owners: nil)
+ region_lines_for(trailing_region_for(owner, analysis, owners: owners))
+ end
+
+ def trailing_region_line_numbers_for(owner, analysis, owners: nil)
+ region_line_numbers_for(trailing_region_for(owner, analysis, owners: owners))
+ end
+
+ def removed_owner_preserved_lines_for(owner, analysis, owners: nil, inline_lines: [])
+ attachment = analysis.comment_attachment_for(owner, owners: owners)
+ lines = leading_segment_lines_for(owner, analysis, owners: owners)
+ lines.concat(Array(inline_lines).compact)
+ lines.concat(region_lines_for(attachment&.trailing_region))
+
+ trailing_gap = attachment&.trailing_gap
+ lines.concat(trailing_gap.lines) if trailing_gap&.effective_controller_side(removed_owners: [owner]) == :after
+
+ lines
+ end
+
+ def removed_owner_preserved_line_numbers_for(owner, analysis, owners: nil, inline_line_numbers: [])
+ attachment = analysis.comment_attachment_for(owner, owners: owners)
+ line_numbers = leading_segment_line_numbers_for(owner, analysis, owners: owners)
+ line_numbers.concat(Array(inline_line_numbers).compact)
+ line_numbers.concat(region_line_numbers_for(attachment&.trailing_region))
+
+ trailing_gap = attachment&.trailing_gap
+ if trailing_gap&.effective_controller_side(removed_owners: [owner]) == :after
+ line_numbers.concat((trailing_gap.start_line..trailing_gap.end_line).to_a)
+ end
+
+ line_numbers
+ end
+
+ def interstitial_trailing_region_lines_for(owner, analysis, owners: nil)
+ return [] unless next_owner_for(owner, analysis, owners: owners)
+
+ trailing_region_lines_for(owner, analysis, owners: owners)
+ end
+
+ def retained_owner_leading_gap_lines_for(owner, analysis, owners: nil)
+ gap = retained_owner_leading_gap_for(owner, analysis, owners: owners)
+ return [] unless gap
+ return [] if region_present?(leading_region_for(owner, analysis, owners: owners))
+
+ gap.lines
+ end
+
+ def retained_owner_leading_gap_for(owner, analysis, owners: nil)
+ return unless owner && analysis&.respond_to?(:layout_attachment_for)
+
+ attachment = if owners.nil?
+ analysis.layout_attachment_for(owner)
+ else
+ analysis.layout_attachment_for(owner, owners: owners)
+ end
+ gap = attachment&.leading_gap
+ return unless gap&.kind == :interstitial
+
+ gap
+ end
+
+ def previous_owner_trailing_region_matches?(owner, analysis, source_region, owners: nil)
+ previous_owner = previous_owner_for(owner, analysis, owners: owners)
+ return false unless previous_owner
+
+ previous_trailing_region = trailing_region_for(previous_owner, analysis, owners: owners)
+ regions_equivalent?(previous_trailing_region, source_region)
+ end
+
+ def previous_owner_for(owner, analysis, owners: nil)
+ owner_list = Array(owners || analysis&.statements).select do |entry|
+ owner_start_line(entry)
+ end
+ index = owner_list.index(owner)
+ return unless index && index.positive?
+
+ owner_list[index - 1]
+ end
+
+ def next_owner_for(owner, analysis, owners: nil)
+ owner_list = Array(owners || analysis&.statements).select do |entry|
+ owner_start_line(entry)
+ end
+ index = owner_list.index(owner)
+ return unless index
+
+ owner_list[index + 1]
+ end
+
+ def regions_equivalent?(left, right)
+ return false unless left && right
+
+ left.respond_to?(:normalized_content) &&
+ right.respond_to?(:normalized_content) &&
+ left.normalized_content == right.normalized_content
+ end
+
+ def root_boundary_lines_for(kind, analysis, owners: nil, augmenter_cache: nil, fallback_to_owner_bounds: false)
+ boundary_owners = owners || analysis.statements
+ comment_only_lines = comment_only_root_boundary_lines_for(kind, analysis, owners: boundary_owners)
+ return comment_only_lines if comment_only_lines.any?
+ return [] unless analysis&.respond_to?(:comment_augmenter)
+
+ region = root_boundary_region(kind, analysis, owners: boundary_owners, augmenter_cache: augmenter_cache)
+ unless region_present?(region)
+ return [] unless fallback_to_owner_bounds
+
+ return owner_bound_root_boundary_lines_for(kind, analysis, owners: boundary_owners)
+ end
+
+ start_line, end_line = root_boundary_range(kind, analysis, region, owners: boundary_owners)
+ return [] unless start_line && end_line
+ return [] if start_line > end_line
+
+ (start_line..end_line).filter_map { |line_number| source_line_at(analysis, line_number) }
+ end
+
+ def comment_only_root_boundary_lines_for(kind, analysis, owners: nil)
+ return [] unless kind == :preamble
+ return [] unless Array(owners || analysis.statements).empty?
+ return [] unless analysis.respond_to?(:lines) && analysis.lines.any?
+
+ (1..analysis.lines.length).filter_map { |line_number| source_line_at(analysis, line_number) }
+ end
+
+ def owner_bound_root_boundary_lines_for(kind, analysis, owners: nil)
+ owner_list = Array(owners || analysis.statements).select do |owner|
+ owner_start_line(owner) && owner_end_line(owner)
+ end
+ return [] if owner_list.empty?
+
+ case kind
+ when :preamble
+ first_line = owner_list.filter_map { |owner| root_boundary_owner_start_line_for(owner, analysis) }.min
+ return [] unless first_line && first_line > 1
+
+ (1...first_line).filter_map { |line_number| source_line_at(analysis, line_number) }
+ when :postlude
+ last_line = owner_list.filter_map { |owner| owner_end_line(owner) }.max
+ return [] unless last_line && analysis.respond_to?(:lines)
+ return [] if last_line >= analysis.lines.length
+
+ ((last_line + 1)..analysis.lines.length).filter_map { |line_number| source_line_at(analysis, line_number) }
+ else
+ []
+ end
+ end
+
+ def root_boundary_region(kind, analysis, owners: nil, augmenter_cache: nil)
+ augmenter = root_comment_augmenter_for(analysis, owners: owners, augmenter_cache: augmenter_cache)
+ return unless augmenter
+
+ kind == :preamble ? augmenter.preamble_region : augmenter.postlude_region
+ end
+
+ def root_comment_augmenter_for(analysis, owners: nil, augmenter_cache: nil)
+ cache = augmenter_cache || (@root_comment_augmenters ||= {})
+ key = [analysis.object_id, Array(owners || analysis.statements).map(&:object_id)]
+ cache[key] ||= analysis.comment_augmenter(owners: owners || analysis.statements)
+ end
+
+ def root_boundary_range(kind, analysis, region, owners: nil)
+ owner_list = Array(owners || analysis.statements).select do |owner|
+ owner_start_line(owner) && owner_end_line(owner)
+ end
+
+ case kind
+ when :preamble
+ end_line = if owner_list.any?
+ owner_list.filter_map do |owner|
+ root_boundary_owner_start_line_for(owner, analysis)
+ end.min.to_i - 1
+ else
+ analysis.lines.length
+ end
+ [1, end_line]
+ when :postlude
+ start_line = if owner_list.any?
+ owner_list.filter_map { |owner| owner_end_line(owner) }.max.to_i + 1
+ else
+ region.start_line || 1
+ end
+ [start_line, analysis.lines.length]
+ end
+ end
+
+ def first_owner_for(analysis, owners: nil)
+ Array(owners || analysis&.statements)
+ .select { |owner| owner_start_line(owner) }
+ .min_by { |owner| owner_start_line(owner) }
+ end
+
+ def owner_start_line(owner)
+ object_start_line(owner)
+ end
+
+ def owner_end_line(owner)
+ object_end_line(owner)
+ end
+
+ def root_boundary_owner_start_line_for(owner, _analysis)
+ owner_start_line(owner)
+ end
+
+ def region_lines_for(region)
+ return [] unless region_present?(region)
+ return region.text.split("\n") if region.respond_to?(:text)
+
+ Array(region.nodes).filter_map do |node|
+ if node.respond_to?(:slice)
+ node.slice.to_s
+ elsif node.respond_to?(:text)
+ node.text.to_s
+ else
+ node.to_s
+ end
+ end
+ end
+
+ def region_line_numbers_for(region)
+ return [] unless region_present?(region)
+
+ start_line = region_start_line(region)
+ end_line = region_end_line(region)
+ return [] unless start_line && end_line
+
+ (start_line..end_line).to_a
+ end
+ end
+ end
+end
diff --git a/gems/ast-merge/lib/ast/merge/emitter_base.rb b/gems/ast-merge/lib/ast/merge/emitter_base.rb
index 4f182725c..eae629d5c 100644
--- a/gems/ast-merge/lib/ast/merge/emitter_base.rb
+++ b/gems/ast-merge/lib/ast/merge/emitter_base.rb
@@ -234,6 +234,21 @@ def to_s
content
end
+ # Check whether every provided line is blank.
+ #
+ # @param candidate_lines [Array] Lines to classify
+ # @return [Boolean]
+ def blank_lines?(candidate_lines)
+ Array(candidate_lines).all? { |line| line.to_s.strip.empty? }
+ end
+
+ # Check whether the current emitter output ends with a blank line.
+ #
+ # @return [Boolean]
+ def ends_with_blank_line?
+ @lines.any? && blank_lines?([@lines.last])
+ end
+
# Clear the emitter state
def clear
@lines = []
diff --git a/gems/ast-merge/lib/ast/merge/layout/augmenter.rb b/gems/ast-merge/lib/ast/merge/layout/augmenter.rb
index 4edad69fb..6ef0e7049 100644
--- a/gems/ast-merge/lib/ast/merge/layout/augmenter.rb
+++ b/gems/ast-merge/lib/ast/merge/layout/augmenter.rb
@@ -6,6 +6,8 @@ module Layout
# Builds shared blank-line gap objects and per-owner attachments from source
# lines plus structural owner ranges.
class Augmenter
+ include LineRangeSupport
+
attr_reader :lines, :owners, :attachments_by_owner, :preamble_gap, :postlude_gap, :interstitial_gaps, :metadata
class << self
@@ -151,16 +153,14 @@ def validate_owner!(owner)
def owner_start_line(owner)
return @start_line_for.call(owner) if @start_line_for
- return owner.start_line if owner.respond_to?(:start_line)
- nil
+ object_start_line(owner)
end
def owner_end_line(owner)
return @end_line_for.call(owner) if @end_line_for
- return owner.end_line if owner.respond_to?(:end_line)
- nil
+ object_end_line(owner)
end
def owner_line_reader_available?(owner, method_name, extractor)
diff --git a/gems/ast-merge/lib/ast/merge/line_range_support.rb b/gems/ast-merge/lib/ast/merge/line_range_support.rb
new file mode 100644
index 000000000..79dab25c9
--- /dev/null
+++ b/gems/ast-merge/lib/ast/merge/line_range_support.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+module Ast
+ module Merge
+ # Shared line-range helpers for parser-neutral merge code.
+ #
+ # This module intentionally stays small: it normalizes common owner location
+ # shapes and source line access so higher-level comment, layout, and
+ # structural-edit helpers do not each grow their own variant.
+ module LineRangeSupport
+ private
+
+ def object_start_line(object)
+ if object.respond_to?(:start_line)
+ object.start_line
+ elsif object.respond_to?(:location) && object.location
+ object.location.start_line
+ elsif object.respond_to?(:source_position)
+ object.source_position&.dig(:start_line)
+ elsif object.respond_to?(:start_point) && object.start_point
+ object.start_point.row + 1
+ end
+ end
+
+ def object_end_line(object)
+ if object.respond_to?(:end_line)
+ object.end_line
+ elsif object.respond_to?(:location) && object.location
+ object.location.end_line
+ elsif object.respond_to?(:source_position)
+ object.source_position&.dig(:end_line)
+ elsif object.respond_to?(:end_point) && object.end_point
+ object.end_point.row + 1
+ end
+ end
+
+ def source_line_at(analysis, line_number)
+ line = analysis.line_at(line_number)
+ line.respond_to?(:raw) ? line.raw : line
+ end
+ end
+ end
+end
diff --git a/gems/ast-merge/lib/ast/merge/merge_result_base.rb b/gems/ast-merge/lib/ast/merge/merge_result_base.rb
index 7f20eaca0..282568d74 100644
--- a/gems/ast-merge/lib/ast/merge/merge_result_base.rb
+++ b/gems/ast-merge/lib/ast/merge/merge_result_base.rb
@@ -147,6 +147,21 @@ def empty?
@lines.empty?
end
+ # Check whether every provided line is blank.
+ #
+ # @param candidate_lines [Array] Lines to classify
+ # @return [Boolean]
+ def blank_lines?(candidate_lines)
+ Array(candidate_lines).all? { |line| line.to_s.strip.empty? }
+ end
+
+ # Check whether the current result ends with a blank line.
+ #
+ # @return [Boolean]
+ def ends_with_blank_line?
+ @lines.any? && blank_lines?([@lines.last])
+ end
+
# Get the number of lines
# @return [Integer]
def line_count
diff --git a/gems/ast-merge/lib/ast/merge/rspec/shared_examples.rb b/gems/ast-merge/lib/ast/merge/rspec/shared_examples.rb
index e1b4d0aa2..80da58ed0 100644
--- a/gems/ast-merge/lib/ast/merge/rspec/shared_examples.rb
+++ b/gems/ast-merge/lib/ast/merge/rspec/shared_examples.rb
@@ -24,6 +24,8 @@
# - "Ast::Merge::MergerConfig" - validates merger configuration
# - "Ast::Merge::Recipe::PresetContract" - validates preset loading and companion-script resolution
# - "Ast::Merge::RemovalModeCompliance" - validates generic remove_template_missing_nodes behavior
+# - "Ast::Merge::RecursiveRetainedBlankGapCompliance" - validates retained blank-gap preservation in recursive owner scopes
+# - "Ast::Merge::RetainedBlankGapCompliance" - validates retained matched owner blank-gap preservation
# - "Ast::Merge::RuntimeDebugContract" - validates runtime-aware merge_with_debug payloads
# - "Ast::Merge::UnresolvedHelperContract" - validates shared unresolved helper support
# - "Ast::Merge::UnresolvedReviewStateTransportContract" - validates persisted unresolved review replay and JSON-safe transport
@@ -48,7 +50,9 @@
require_relative 'shared_examples/merge_result_base'
require_relative 'shared_examples/merger_config'
require_relative 'shared_examples/recipe_preset_contract'
+require_relative 'shared_examples/recursive_retained_blank_gap_compliance'
require_relative 'shared_examples/removal_mode_compliance'
+require_relative 'shared_examples/retained_blank_gap_compliance'
require_relative 'shared_examples/reproducible_merge'
require_relative 'shared_examples/reproducible_partial_merge'
require_relative 'shared_examples/runtime_debug_contract'
diff --git a/gems/ast-merge/lib/ast/merge/rspec/shared_examples/recursive_retained_blank_gap_compliance.rb b/gems/ast-merge/lib/ast/merge/rspec/shared_examples/recursive_retained_blank_gap_compliance.rb
new file mode 100644
index 000000000..6565b2eab
--- /dev/null
+++ b/gems/ast-merge/lib/ast/merge/rspec/shared_examples/recursive_retained_blank_gap_compliance.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+# Shared example for validating retained blank-line preservation in recursive
+# merge scopes.
+#
+# Required let blocks:
+# - merger_class: The SmartMerger class to use
+# - recursive_retained_blank_gap_case: Hash with :template, :destination,
+# :expected, and optional :options.
+#
+# Optional let blocks:
+# - unsupported_recursive_retained_blank_gap_reason: Reason string for formats
+# that expose the shared contract but do not support recursive owner scopes.
+RSpec.shared_examples('Ast::Merge::RecursiveRetainedBlankGapCompliance') do
+ def merge_recursive_retained_blank_gap_case(example_case, destination_override: nil)
+ merger_class.new(
+ example_case.fetch(:template),
+ destination_override || example_case.fetch(:destination),
+ **example_case.fetch(:options, {})
+ ).merge.to_s
+ end
+
+ it 'preserves retained blank gaps inside recursive owner scopes' do
+ if respond_to?(:unsupported_recursive_retained_blank_gap_reason)
+ skip unsupported_recursive_retained_blank_gap_reason
+ end
+
+ example_case = recursive_retained_blank_gap_case
+
+ expect(merge_recursive_retained_blank_gap_case(example_case)).to(eq(example_case.fetch(:expected)))
+ end
+
+ it 'preserves retained blank gaps inside recursive owner scopes idempotently' do
+ if respond_to?(:unsupported_recursive_retained_blank_gap_reason)
+ skip unsupported_recursive_retained_blank_gap_reason
+ end
+
+ example_case = recursive_retained_blank_gap_case
+ first_result = merge_recursive_retained_blank_gap_case(example_case)
+
+ expect(merge_recursive_retained_blank_gap_case(example_case,
+ destination_override: first_result)).to(eq(first_result))
+ end
+end
diff --git a/gems/ast-merge/lib/ast/merge/rspec/shared_examples/retained_blank_gap_compliance.rb b/gems/ast-merge/lib/ast/merge/rspec/shared_examples/retained_blank_gap_compliance.rb
new file mode 100644
index 000000000..27704e28f
--- /dev/null
+++ b/gems/ast-merge/lib/ast/merge/rspec/shared_examples/retained_blank_gap_compliance.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples('Ast::Merge::RetainedBlankGapCompliance') do
+ def retained_blank_gap_source(*lines)
+ comment_matrix_source_builder.call(*lines)
+ end
+
+ it 'preserves destination blank gaps between retained matched owners' do
+ template = retained_blank_gap_source(
+ comment_matrix_line_builder.call('alpha', '1'),
+ comment_matrix_line_builder.call('beta', '2')
+ )
+ destination = retained_blank_gap_source(
+ comment_matrix_line_builder.call('alpha', '9'),
+ '',
+ comment_matrix_line_builder.call('beta', '8')
+ )
+
+ result = comment_matrix_merger_class.new(template, destination).merge
+
+ expect(result).to(eq(destination))
+ end
+
+ it 'preserves destination blank gaps between retained matched owners under template preference' do
+ template = retained_blank_gap_source(
+ comment_matrix_line_builder.call('alpha', '1'),
+ comment_matrix_line_builder.call('beta', '2')
+ )
+ destination = retained_blank_gap_source(
+ comment_matrix_line_builder.call('alpha', '9'),
+ '',
+ comment_matrix_line_builder.call('beta', '8')
+ )
+ expected = retained_blank_gap_source(
+ comment_matrix_line_builder.call('alpha', '1'),
+ '',
+ comment_matrix_line_builder.call('beta', '2')
+ )
+
+ result = comment_matrix_merger_class.new(template, destination, preference: :template).merge
+
+ expect(result).to(eq(expected))
+ end
+end
diff --git a/gems/ast-merge/lib/ast/merge/smart_merger_base.rb b/gems/ast-merge/lib/ast/merge/smart_merger_base.rb
index 26e5bc3df..1507efb55 100644
--- a/gems/ast-merge/lib/ast/merge/smart_merger_base.rb
+++ b/gems/ast-merge/lib/ast/merge/smart_merger_base.rb
@@ -68,7 +68,7 @@ module Merge
#
# @example FileAnalysis error handling
# def parse_content
- # parser = TreeHaver.parser_for(:myformat, library_path: @parser_path)
+ # parser = TreeHaver.parser_for(:myformat, backend_type: :tree_sitter)
# @ast = parser.parse(@source)
#
# if @ast&.root_node&.has_error?
diff --git a/gems/ast-merge/lib/ast/merge/source_region_report_support.rb b/gems/ast-merge/lib/ast/merge/source_region_report_support.rb
new file mode 100644
index 000000000..7e47d795f
--- /dev/null
+++ b/gems/ast-merge/lib/ast/merge/source_region_report_support.rb
@@ -0,0 +1,243 @@
+# frozen_string_literal: true
+
+module Ast
+ module Merge
+ # Parser-neutral helpers for report-style source-region ownership views.
+ #
+ # Format gems still provide owner discovery and comment syntax. These helpers
+ # turn those inputs into stable fixture/report data without each substrate
+ # reimplementing attachment and blank-region ownership rules.
+ module SourceRegionReportSupport
+ private
+
+ def source_comment_block_attachment_report(lines:, owners:, comment_line:, owner_address: nil,
+ owner_start_index: nil, owner_end_index: nil,
+ owner_declaration_start_index: nil)
+ owner_address ||= ->(owner) { owner_address_for_report(owner) }
+ owner_start_index ||= ->(owner) { owner_index_for_report(owner, :start_index) }
+ owner_end_index ||= ->(owner) { owner_index_for_report(owner, :end_index) }
+ owner_declaration_start_index ||= lambda do |owner|
+ owner_index_for_report(owner, :declaration_start_index) || owner_start_index.call(owner)
+ end
+
+ comment_blocks = source_comment_blocks_for_report(lines, comment_line)
+ {
+ comments: comment_blocks.map do |block|
+ source_comment_block_attachment(
+ lines: lines,
+ owners: owners,
+ block: block,
+ owner_address: owner_address,
+ owner_end_index: owner_end_index,
+ owner_declaration_start_index: owner_declaration_start_index
+ )
+ end
+ }
+ end
+
+ def source_blank_line_ownership_regions(regions:, blank_content: nil, compact: nil)
+ blank_content ||= ->(content) { content.to_s.lines.all? { |line| line.strip.empty? } }
+ compact ||= ->(region) { region.reject { |_key, value| value.nil? } }
+
+ regions.flat_map do |region|
+ child_regions = if region[:child_regions]
+ source_blank_line_ownership_regions(regions: region[:child_regions],
+ blank_content: blank_content,
+ compact: compact)
+ else
+ []
+ end
+ current = if region[:region_kind] == 'interstitial' && blank_content.call(region[:content])
+ [
+ compact.call(
+ region_id: region[:region_id],
+ position: region[:position],
+ previous_owner: region[:previous_owner],
+ next_owner: region[:next_owner],
+ span: region[:span],
+ ownership: 'declared_interstitial_region'
+ )
+ ]
+ else
+ []
+ end
+
+ current + child_regions
+ end
+ end
+
+ def source_interleaved_regions_for_report(lines:, owners:, container_name: nil, container_start_index: 0,
+ container_end_index: nil)
+ container_end_index ||= lines.length - 1
+ regions = []
+ cursor = container_start_index
+ previous_owner = nil
+
+ owners.each do |owner|
+ owner_start = owner_index_for_report(owner, :start_index)
+ owner_end = owner_index_for_report(owner, :end_index)
+ if cursor < owner_start
+ regions << source_interstitial_region_for_report(
+ lines: lines,
+ start_index: cursor,
+ end_index: owner_start - 1,
+ previous_owner: previous_owner,
+ next_owner: owner,
+ container_name: container_name
+ )
+ end
+
+ regions << source_public_region_for_report(owner)
+ previous_owner = owner
+ cursor = owner_end + 1
+ end
+
+ if cursor <= container_end_index
+ regions << source_interstitial_region_for_report(
+ lines: lines,
+ start_index: cursor,
+ end_index: container_end_index,
+ previous_owner: previous_owner,
+ next_owner: nil,
+ container_name: container_name
+ )
+ end
+
+ regions
+ end
+
+ def source_interstitial_region_for_report(lines:, start_index:, end_index:, previous_owner:, next_owner:,
+ container_name: nil)
+ position = if previous_owner.nil? && next_owner
+ container_name ? 'container_header' : 'file_header'
+ elsif previous_owner && next_owner
+ 'between'
+ elsif container_name
+ 'container_footer'
+ else
+ 'file_footer'
+ end
+
+ region_id = case position
+ when 'container_header'
+ "class_header:#{container_name}"
+ when 'container_footer'
+ "class_footer:#{container_name}"
+ when 'file_header'
+ 'file_header'
+ when 'file_footer'
+ 'file_footer'
+ else
+ previous_id = owner_index_for_report(previous_owner, :region_id)
+ next_id = owner_index_for_report(next_owner, :region_id)
+ "between:#{previous_id}:#{next_id}"
+ end
+
+ source_report_compact_region(
+ region_id: region_id,
+ region_kind: 'interstitial',
+ position: position,
+ previous_owner: owner_address_for_report(previous_owner),
+ next_owner: owner_address_for_report(next_owner),
+ span: source_report_line_span(start_index, end_index),
+ content: source_report_region_content(lines, start_index, end_index)
+ )
+ end
+
+ def source_public_region_for_report(region)
+ if region.respond_to?(:reject)
+ region.reject { |key, _value| %i[start_index declaration_start_index end_index].include?(key) }
+ else
+ region
+ end
+ end
+
+ def source_attached_comment_regions_for_report(lines:, start_index:, declaration_index:)
+ return [] unless start_index < declaration_index
+
+ [
+ {
+ attachment: 'leading',
+ start_line: start_index + 1,
+ end_line: declaration_index,
+ content: source_report_region_content(lines, start_index, declaration_index - 1)
+ }
+ ]
+ end
+
+ def source_comment_blocks_for_report(lines, comment_line)
+ blocks = []
+ index = 0
+ while index < lines.length
+ unless comment_line.call(lines[index])
+ index += 1
+ next
+ end
+
+ start_index = index
+ index += 1 while index < lines.length && comment_line.call(lines[index])
+ blocks << { start_index: start_index, end_index: index - 1 }
+ end
+ blocks
+ end
+
+ def source_comment_block_attachment(lines:, owners:, block:, owner_address:, owner_end_index:,
+ owner_declaration_start_index:)
+ previous_owner = owners.reverse.find { |owner| owner_end_index.call(owner) < block[:start_index] }
+ next_owner = owners.find { |owner| owner_declaration_start_index.call(owner) > block[:end_index] }
+ next_owner_index = next_owner && owner_declaration_start_index.call(next_owner)
+
+ attachment = if next_owner_index && block[:end_index] + 1 == next_owner_index
+ 'following_owner'
+ elsif previous_owner && next_owner_index && (block[:end_index] + 1...next_owner_index).any? do |idx|
+ lines[idx].to_s.strip.empty?
+ end
+ 'preceding_owner'
+ elsif previous_owner && next_owner.nil?
+ 'preceding_owner'
+ else
+ 'standalone'
+ end
+
+ source_report_compact_region(
+ attachment: attachment,
+ previous_owner: previous_owner && owner_address.call(previous_owner),
+ next_owner: next_owner && owner_address.call(next_owner),
+ span: source_report_line_span(block[:start_index], block[:end_index]),
+ content: source_report_region_content(lines, block[:start_index], block[:end_index])
+ )
+ end
+
+ def source_report_line_span(start_index, end_index)
+ {
+ start_line: start_index + 1,
+ end_line: end_index + 1
+ }
+ end
+
+ def source_report_region_content(lines, start_index, end_index)
+ "#{lines[start_index..end_index].join("\n")}\n"
+ end
+
+ def source_report_compact_region(region)
+ region.reject { |_key, value| value.nil? }
+ end
+
+ def owner_index_for_report(owner, key)
+ if owner.respond_to?(:[])
+ owner[key]
+ elsif owner.respond_to?(key)
+ owner.public_send(key)
+ end
+ end
+
+ def owner_address_for_report(owner)
+ if owner.respond_to?(:[])
+ owner[:address]
+ elsif owner.respond_to?(:address)
+ owner.address
+ end
+ end
+ end
+ end
+end
diff --git a/gems/ast-merge/lib/ast/merge/structural_edit/boundary_support.rb b/gems/ast-merge/lib/ast/merge/structural_edit/boundary_support.rb
index 10e1b0a31..d898b06b8 100644
--- a/gems/ast-merge/lib/ast/merge/structural_edit/boundary_support.rb
+++ b/gems/ast-merge/lib/ast/merge/structural_edit/boundary_support.rb
@@ -12,6 +12,7 @@ module StructuralEdit
# (`start_line` / `end_line` or `source_position`).
module BoundarySupport
extend self
+ include LineRangeSupport
# Build a boundary descriptor for a surviving statement adjacent to a splice.
#
@@ -67,11 +68,7 @@ def attachment_preserves_fragments?(attachment)
# @param statement [Object]
# @return [Integer, nil]
def statement_start_line(statement)
- if statement.respond_to?(:start_line)
- statement.start_line
- elsif statement.respond_to?(:source_position)
- statement.source_position&.dig(:start_line)
- end
+ object_start_line(statement)
end
# Return the ending line for a statement-like object.
@@ -79,11 +76,7 @@ def statement_start_line(statement)
# @param statement [Object]
# @return [Integer, nil]
def statement_end_line(statement)
- if statement.respond_to?(:end_line)
- statement.end_line
- elsif statement.respond_to?(:source_position)
- statement.source_position&.dig(:end_line)
- end
+ object_end_line(statement)
end
private
diff --git a/gems/ast-merge/spec/ast/merge/comment_layout_emission_support_spec.rb b/gems/ast-merge/spec/ast/merge/comment_layout_emission_support_spec.rb
new file mode 100644
index 000000000..aebbca1ed
--- /dev/null
+++ b/gems/ast-merge/spec/ast/merge/comment_layout_emission_support_spec.rb
@@ -0,0 +1,224 @@
+# frozen_string_literal: true
+
+RSpec.describe Ast::Merge::CommentLayoutEmissionSupport do
+ Statement = Struct.new(:name, :start_line, :end_line, keyword_init: true)
+
+ Region = Struct.new(:start_line, :end_line, :normalized_content, keyword_init: true) do
+ def empty?
+ false
+ end
+
+ def text
+ normalized_content
+ end
+ end
+
+ Attachment = Struct.new(:leading_region, :trailing_region, :trailing_gap, keyword_init: true)
+
+ class Analysis
+ attr_reader :lines, :statements, :comment_nodes
+
+ def initialize(lines:, statements:, attachments: {}, preamble_region: nil, postlude_region: nil,
+ comment_nodes: [])
+ @lines = lines
+ @statements = statements
+ @attachments = attachments
+ @preamble_region = preamble_region
+ @postlude_region = postlude_region
+ @comment_nodes = comment_nodes
+ end
+
+ def line_at(line_number)
+ lines[line_number - 1]
+ end
+
+ def comment_attachment_for(owner, **)
+ @attachments.fetch(owner) { Attachment.new }
+ end
+
+ def comment_augmenter(owners: nil)
+ Struct.new(:preamble_region, :postlude_region).new(@preamble_region, @postlude_region)
+ end
+ end
+
+ class Harness
+ include Ast::Merge::CommentLayoutEmissionSupport
+
+ public :blank_line_count_before,
+ :leading_region_for,
+ :leading_segment_line_numbers_for,
+ :leading_segment_lines_for,
+ :leading_segment_start_for_output,
+ :previous_owner_for,
+ :previous_owner_trailing_region_matches?,
+ :removed_owner_preserved_line_numbers_for,
+ :removed_owner_preserved_lines_for,
+ :retained_owner_leading_gap_lines_for,
+ :region_present?,
+ :root_boundary_lines_for
+ end
+
+ class EmittedSegmentHarness < Harness
+ private
+
+ def root_boundary_owner_start_line_for(owner, _analysis)
+ owner.start_line - 1
+ end
+ end
+
+ subject(:harness) { Harness.new }
+
+ it 'counts blank lines immediately before an attached region' do
+ analysis = Analysis.new(lines: ['alpha', '', '', '# comment', 'beta'], statements: [])
+
+ expect(harness.blank_line_count_before(4, analysis)).to eq(2)
+ end
+
+ it 'keeps a source leading segment from duplicating the previous owner trailing region' do
+ first = Statement.new(name: 'first', start_line: 1, end_line: 1)
+ second = Statement.new(name: 'second', start_line: 4, end_line: 4)
+ shared_region = Region.new(start_line: 3, end_line: 3, normalized_content: 'shared')
+ analysis = Analysis.new(
+ lines: ['first', '', '# shared', 'second'],
+ statements: [first, second],
+ attachments: {
+ first => Attachment.new(trailing_region: shared_region),
+ second => Attachment.new
+ }
+ )
+
+ expect(
+ harness.leading_segment_start_for_output(
+ output_owner: second,
+ output_analysis: analysis,
+ source_region_start: 3,
+ source_region: shared_region,
+ source_analysis: analysis
+ )
+ ).to eq(3)
+ end
+
+ it 'collects preserved removed-owner leading, inline, trailing, and fallback gap lines' do
+ owner = Statement.new(name: 'removed', start_line: 3, end_line: 3)
+ later_owner = Statement.new(name: 'later', start_line: 6, end_line: 6)
+ gap = Ast::Merge::Layout::Gap.new(
+ kind: :interstitial,
+ start_line: 5,
+ end_line: 5,
+ lines: [''],
+ before_owner: owner,
+ after_owner: later_owner
+ )
+ analysis = Analysis.new(
+ lines: ['# docs', '', 'removed', '# trailing', '', 'later'],
+ statements: [owner, later_owner],
+ attachments: {
+ owner => Attachment.new(
+ leading_region: Region.new(start_line: 1, end_line: 1, normalized_content: '# docs'),
+ trailing_region: Region.new(start_line: 4, end_line: 4, normalized_content: '# trailing'),
+ trailing_gap: gap
+ )
+ }
+ )
+
+ expect(
+ harness.removed_owner_preserved_lines_for(owner, analysis, inline_lines: ['# inline'])
+ ).to eq(['# docs', '', '# inline', '# trailing', ''])
+ expect(
+ harness.removed_owner_preserved_line_numbers_for(owner, analysis, inline_line_numbers: [3])
+ ).to eq([1, 2, 3, 4, 5])
+ end
+
+ it 'returns retained owner leading layout gaps only when no leading comment region owns the prefix' do
+ first = Statement.new(name: 'first', start_line: 1, end_line: 1)
+ second = Statement.new(name: 'second', start_line: 3, end_line: 3)
+ gap = Ast::Merge::Layout::Gap.new(
+ kind: :interstitial,
+ start_line: 2,
+ end_line: 2,
+ lines: [''],
+ before_owner: first,
+ after_owner: second
+ )
+ analysis = Analysis.new(
+ lines: ['first', '', 'second'],
+ statements: [first, second],
+ attachments: {
+ second => Attachment.new
+ }
+ )
+
+ def analysis.layout_attachment_for(owner)
+ return Ast::Merge::Layout::Attachment.new(owner: owner, leading_gap: @gap) if owner.name == 'second'
+
+ Ast::Merge::Layout::Attachment.new(owner: owner)
+ end
+ analysis.instance_variable_set(:@gap, gap)
+
+ expect(harness.retained_owner_leading_gap_lines_for(second, analysis)).to eq([''])
+
+ analysis_with_comment = Analysis.new(
+ lines: ['first', '', '# docs', 'second'],
+ statements: [first, second],
+ attachments: {
+ second => Attachment.new(leading_region: Region.new(start_line: 3, end_line: 3, normalized_content: '# docs'))
+ }
+ )
+ def analysis_with_comment.layout_attachment_for(owner)
+ return Ast::Merge::Layout::Attachment.new(owner: owner, leading_gap: @gap) if owner.name == 'second'
+
+ Ast::Merge::Layout::Attachment.new(owner: owner)
+ end
+ analysis_with_comment.instance_variable_set(:@gap, gap)
+
+ expect(harness.retained_owner_leading_gap_lines_for(second, analysis_with_comment)).to eq([])
+ end
+
+ it 'returns root preamble lines using root comment attachment regions' do
+ statement = Statement.new(name: 'body', start_line: 4, end_line: 4)
+ analysis = Analysis.new(
+ lines: ['# header', '', '# docs', 'body'],
+ statements: [statement],
+ preamble_region: Region.new(start_line: 1, end_line: 3, normalized_content: 'header docs')
+ )
+
+ expect(harness.root_boundary_lines_for(:preamble, analysis)).to eq(['# header', '', '# docs'])
+ end
+
+ it 'treats comment-only files as root preamble lines' do
+ analysis = Analysis.new(
+ lines: ['# only', '', '# comments'],
+ statements: [],
+ comment_nodes: []
+ )
+
+ expect(harness.root_boundary_lines_for(:preamble, analysis)).to eq(['# only', '', '# comments'])
+ end
+
+ it 'can fall back to owner bounds for non-comment root boundary text' do
+ statement = Statement.new(name: 'body', start_line: 3, end_line: 3)
+ analysis = Analysis.new(
+ lines: ['#!/usr/bin/env bash', '# header', 'body', '# footer'],
+ statements: [statement]
+ )
+
+ expect(
+ harness.root_boundary_lines_for(:preamble, analysis, fallback_to_owner_bounds: true)
+ ).to eq(['#!/usr/bin/env bash', '# header'])
+ expect(
+ harness.root_boundary_lines_for(:postlude, analysis, fallback_to_owner_bounds: true)
+ ).to eq(['# footer'])
+ end
+
+ it 'lets substrates bound root preamble by the emitted owner segment' do
+ statement = Statement.new(name: 'body', start_line: 3, end_line: 3)
+ analysis = Analysis.new(
+ lines: ['#!/usr/bin/env bash', '# header', 'body'],
+ statements: [statement]
+ )
+
+ expect(
+ EmittedSegmentHarness.new.root_boundary_lines_for(:preamble, analysis, fallback_to_owner_bounds: true)
+ ).to eq(['#!/usr/bin/env bash'])
+ end
+end
diff --git a/gems/ast-merge/spec/ast/merge/emitter_base_spec.rb b/gems/ast-merge/spec/ast/merge/emitter_base_spec.rb
index 53ebcfe37..d2277a1cf 100644
--- a/gems/ast-merge/spec/ast/merge/emitter_base_spec.rb
+++ b/gems/ast-merge/spec/ast/merge/emitter_base_spec.rb
@@ -27,6 +27,32 @@ def emit_comment(text, inline: false)
let(:owner) { LayoutOwner.new(start_line: 3, end_line: 3, label: :owner) }
let(:after_owner) { LayoutOwner.new(start_line: 4, end_line: 4, label: :after) }
+ describe '#blank_lines?' do
+ it 'returns true when every provided line is blank' do
+ expect(emitter.blank_lines?(['', ' '])).to be(true)
+ end
+
+ it 'returns false when any provided line has content' do
+ expect(emitter.blank_lines?(['', 'value'])).to be(false)
+ end
+ end
+
+ describe '#ends_with_blank_line?' do
+ it 'returns true when the output ends with a blank line' do
+ emitter.emit_raw_lines(['value', ''])
+
+ expect(emitter.ends_with_blank_line?).to be(true)
+ end
+
+ it 'returns false when the output is empty or ends with content' do
+ expect(emitter.ends_with_blank_line?).to be(false)
+
+ emitter.emit_raw_lines(['value'])
+
+ expect(emitter.ends_with_blank_line?).to be(false)
+ end
+ end
+
describe '#emit_comment_region' do
it 'emits full-line regions and preserves blank gaps from source lines' do
region = Ast::Merge::Comment::TrackedHashAdapter.region(
diff --git a/gems/ast-merge/spec/ast/merge/line_range_support_spec.rb b/gems/ast-merge/spec/ast/merge/line_range_support_spec.rb
new file mode 100644
index 000000000..52c55cb54
--- /dev/null
+++ b/gems/ast-merge/spec/ast/merge/line_range_support_spec.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+RSpec.describe Ast::Merge::LineRangeSupport do
+ Location = Struct.new(:start_line, :end_line, keyword_init: true)
+ Point = Struct.new(:row, keyword_init: true)
+
+ class LineRangeHarness
+ include Ast::Merge::LineRangeSupport
+
+ public :object_start_line, :object_end_line, :source_line_at
+ end
+
+ subject(:harness) { LineRangeHarness.new }
+
+ it 'reads explicit line ranges' do
+ object = Struct.new(:start_line, :end_line).new(3, 5)
+
+ expect(harness.object_start_line(object)).to eq(3)
+ expect(harness.object_end_line(object)).to eq(5)
+ end
+
+ it 'reads location line ranges' do
+ object = Struct.new(:location).new(Location.new(start_line: 7, end_line: 9))
+
+ expect(harness.object_start_line(object)).to eq(7)
+ expect(harness.object_end_line(object)).to eq(9)
+ end
+
+ it 'reads source_position line ranges' do
+ object = Struct.new(:source_position).new({ start_line: 11, end_line: 13 })
+
+ expect(harness.object_start_line(object)).to eq(11)
+ expect(harness.object_end_line(object)).to eq(13)
+ end
+
+ it 'reads tree-sitter point line ranges' do
+ object = Struct.new(:start_point, :end_point).new(Point.new(row: 16), Point.new(row: 18))
+
+ expect(harness.object_start_line(object)).to eq(17)
+ expect(harness.object_end_line(object)).to eq(19)
+ end
+
+ it 'normalizes raw line objects' do
+ analysis = Struct.new(:lines) do
+ def line_at(line_number)
+ lines[line_number - 1]
+ end
+ end.new([Struct.new(:raw).new('raw line')])
+
+ expect(harness.source_line_at(analysis, 1)).to eq('raw line')
+ end
+end
diff --git a/gems/ast-merge/spec/ast/merge/merge_result_base_spec.rb b/gems/ast-merge/spec/ast/merge/merge_result_base_spec.rb
index ea30705e7..eca3f4fb3 100644
--- a/gems/ast-merge/spec/ast/merge/merge_result_base_spec.rb
+++ b/gems/ast-merge/spec/ast/merge/merge_result_base_spec.rb
@@ -238,6 +238,39 @@
end
end
+ describe '#blank_lines?' do
+ it 'returns true when every provided line is blank' do
+ result = described_class.new
+
+ expect(result.blank_lines?(['', " \t"])).to be(true)
+ end
+
+ it 'returns false when any provided line has content' do
+ result = described_class.new
+
+ expect(result.blank_lines?(['', 'content'])).to be(false)
+ end
+ end
+
+ describe '#ends_with_blank_line?' do
+ it 'returns true when the current result ends with a blank line' do
+ result = described_class.new
+ result.lines.concat(['content', ''])
+
+ expect(result.ends_with_blank_line?).to be(true)
+ end
+
+ it 'returns false when the current result is empty or ends with content' do
+ result = described_class.new
+
+ expect(result.ends_with_blank_line?).to be(false)
+
+ result.lines << 'content'
+
+ expect(result.ends_with_blank_line?).to be(false)
+ end
+ end
+
describe '#line_count' do
it 'returns 0 for empty result' do
result = described_class.new
diff --git a/gems/ast-merge/spec/ast/merge/source_region_report_support_spec.rb b/gems/ast-merge/spec/ast/merge/source_region_report_support_spec.rb
new file mode 100644
index 000000000..8d4946d3d
--- /dev/null
+++ b/gems/ast-merge/spec/ast/merge/source_region_report_support_spec.rb
@@ -0,0 +1,200 @@
+# frozen_string_literal: true
+
+RSpec.describe Ast::Merge::SourceRegionReportSupport do
+ Owner = Struct.new(:region_id, :address, :start_index, :declaration_start_index, :end_index, keyword_init: true)
+
+ class SourceRegionReportHarness
+ include Ast::Merge::SourceRegionReportSupport
+
+ public :source_blank_line_ownership_regions,
+ :source_comment_block_attachment_report,
+ :source_interleaved_regions_for_report,
+ :source_attached_comment_regions_for_report
+ end
+
+ subject(:harness) { SourceRegionReportHarness.new }
+
+ it 'reports comment block attachment against already-discovered owners' do
+ lines = [
+ '# file note',
+ '',
+ 'def alpha',
+ 'end',
+ '',
+ '# beta docs',
+ 'def beta',
+ 'end',
+ '# beta tail',
+ '',
+ 'def gamma',
+ 'end'
+ ]
+ owners = [
+ Owner.new(address: '/methods/alpha', start_index: 2, declaration_start_index: 2, end_index: 3),
+ Owner.new(address: '/methods/beta', start_index: 5, declaration_start_index: 6, end_index: 7),
+ Owner.new(address: '/methods/gamma', start_index: 10, declaration_start_index: 10, end_index: 11)
+ ]
+
+ expect(
+ harness.source_comment_block_attachment_report(
+ lines: lines,
+ owners: owners,
+ comment_line: ->(line) { line.start_with?('#') }
+ )
+ ).to eq(
+ comments: [
+ {
+ attachment: 'standalone',
+ next_owner: '/methods/alpha',
+ span: { start_line: 1, end_line: 1 },
+ content: "# file note\n"
+ },
+ {
+ attachment: 'following_owner',
+ previous_owner: '/methods/alpha',
+ next_owner: '/methods/beta',
+ span: { start_line: 6, end_line: 6 },
+ content: "# beta docs\n"
+ },
+ {
+ attachment: 'preceding_owner',
+ previous_owner: '/methods/beta',
+ next_owner: '/methods/gamma',
+ span: { start_line: 9, end_line: 9 },
+ content: "# beta tail\n"
+ }
+ ]
+ )
+ end
+
+ it 'interleaves public owner regions with shared interstitial report regions' do
+ lines = [
+ '# file note',
+ '',
+ 'def alpha',
+ 'end',
+ '',
+ 'def beta',
+ 'end'
+ ]
+ owners = [
+ {
+ region_id: 'method:alpha',
+ region_kind: 'owner',
+ address: '/methods/alpha',
+ start_index: 2,
+ declaration_start_index: 2,
+ end_index: 3,
+ span: { start_line: 3, end_line: 4 },
+ content: "def alpha\nend\n"
+ },
+ {
+ region_id: 'method:beta',
+ region_kind: 'owner',
+ address: '/methods/beta',
+ start_index: 5,
+ declaration_start_index: 5,
+ end_index: 6,
+ span: { start_line: 6, end_line: 7 },
+ content: "def beta\nend\n"
+ }
+ ]
+
+ expect(harness.source_interleaved_regions_for_report(lines: lines, owners: owners)).to eq(
+ [
+ {
+ region_id: 'file_header',
+ region_kind: 'interstitial',
+ position: 'file_header',
+ next_owner: '/methods/alpha',
+ span: { start_line: 1, end_line: 2 },
+ content: "# file note\n\n"
+ },
+ {
+ region_id: 'method:alpha',
+ region_kind: 'owner',
+ address: '/methods/alpha',
+ span: { start_line: 3, end_line: 4 },
+ content: "def alpha\nend\n"
+ },
+ {
+ region_id: 'between:method:alpha:method:beta',
+ region_kind: 'interstitial',
+ position: 'between',
+ previous_owner: '/methods/alpha',
+ next_owner: '/methods/beta',
+ span: { start_line: 5, end_line: 5 },
+ content: "\n"
+ },
+ {
+ region_id: 'method:beta',
+ region_kind: 'owner',
+ address: '/methods/beta',
+ span: { start_line: 6, end_line: 7 },
+ content: "def beta\nend\n"
+ }
+ ]
+ )
+ end
+
+ it 'reports attached leading comment regions using the Ruby source-region contract shape' do
+ expect(
+ harness.source_attached_comment_regions_for_report(
+ lines: ['# docs', 'def alpha'],
+ start_index: 0,
+ declaration_index: 1
+ )
+ ).to eq(
+ [
+ {
+ attachment: 'leading',
+ start_line: 1,
+ end_line: 1,
+ content: "# docs\n"
+ }
+ ]
+ )
+ end
+
+ it 'extracts blank interstitial ownership recursively' do
+ regions = [
+ {
+ region_id: 'outer',
+ region_kind: 'owner',
+ child_regions: [
+ {
+ region_id: 'between:a:b',
+ region_kind: 'interstitial',
+ position: 'between',
+ previous_owner: '/a',
+ next_owner: '/b',
+ span: { start_line: 3, end_line: 4 },
+ content: "\n\n"
+ },
+ {
+ region_id: 'comment-gap',
+ region_kind: 'interstitial',
+ position: 'between',
+ previous_owner: '/b',
+ next_owner: '/c',
+ span: { start_line: 8, end_line: 8 },
+ content: "# comment\n"
+ }
+ ]
+ }
+ ]
+
+ expect(harness.source_blank_line_ownership_regions(regions: regions)).to eq(
+ [
+ {
+ region_id: 'between:a:b',
+ position: 'between',
+ previous_owner: '/a',
+ next_owner: '/b',
+ span: { start_line: 3, end_line: 4 },
+ ownership: 'declared_interstitial_region'
+ }
+ ]
+ )
+ end
+end
diff --git a/gems/ast-merge/spec/fixtures_integration_spec.rb b/gems/ast-merge/spec/fixtures_integration_spec.rb
index b7da63ae6..c20fe43cb 100644
--- a/gems/ast-merge/spec/fixtures_integration_spec.rb
+++ b/gems/ast-merge/spec/fixtures_integration_spec.rb
@@ -1750,11 +1750,15 @@ def add_fixture_line(content, decision:, source:, line:)
)
argument_counts = suite.cases.map(&:argument_count)
structured_diff_count = suite.cases.count { |smoke_case| smoke_case.expected_output_kind == 'structured_diff' }
+ reviewable_output_case_count = suite.cases.count { |smoke_case| smoke_case.expected_output_fragments.any? }
+ real_source_pair_count = raw.fetch(:real_source_pairs).length
expect(suite.driver_name).to eq(fixture.dig(:expected, :driver_name))
expect(suite.cases.length).to eq(fixture.dig(:expected, :case_count))
expect(argument_counts).to eq(fixture.dig(:expected, :argument_counts))
expect(structured_diff_count).to eq(fixture.dig(:expected, :structured_diff_count))
+ expect(reviewable_output_case_count).to eq(fixture.dig(:expected, :reviewable_output_case_count))
+ expect(real_source_pair_count).to eq(fixture.dig(:expected, :real_source_pair_count))
end
it 'conforms to the slice-904 performance guardrails fixture' do
diff --git a/gems/ast-merge/spec/spec_helper.rb b/gems/ast-merge/spec/spec_helper.rb
index f8c5b2f52..eb1762057 100644
--- a/gems/ast-merge/spec/spec_helper.rb
+++ b/gems/ast-merge/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/ast-template/.kettle-drift.lock b/gems/ast-template/.kettle-drift.lock
deleted file mode 100644
index aa01ca527..000000000
--- a/gems/ast-template/.kettle-drift.lock
+++ /dev/null
@@ -1,317 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 90,
- 130,
- 170,
- 210,
- 250,
- 290,
- 330,
- 370
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 95,
- 135,
- 175,
- 215,
- 255,
- 295,
- 335,
- 375
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 59,
- 99,
- 139,
- 179,
- 219,
- 259,
- 299,
- 339,
- 379
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 42,
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 34,
- 78,
- 118,
- 158,
- 198,
- 238,
- 278,
- 318,
- 358
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 68,
- 108,
- 148,
- 188,
- 228,
- 268,
- 308,
- 348,
- 388
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 84,
- 124,
- 164,
- 204,
- 244,
- 284,
- 324,
- 364
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 47,
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 105,
- 145,
- 185,
- 225,
- 265,
- 305,
- 345,
- 385
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/ast-template/.rubocop_gradual.lock b/gems/ast-template/.rubocop_gradual.lock
index 032ac1f2a..ffe8d234a 100644
--- a/gems/ast-template/.rubocop_gradual.lock
+++ b/gems/ast-template/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:3875640430": [
+ ".simplecov:167186165": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:2781279821": [
@@ -21,13 +21,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -63,6 +70,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -72,10 +86,10 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
diff --git a/gems/ast-template/.simplecov b/gems/ast-template/.simplecov
index 0c8c08ba7..7ca2ffaf8 100644
--- a/gems/ast-template/.simplecov
+++ b/gems/ast-template/.simplecov
@@ -4,15 +4,11 @@
# ast-template will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/ast-template/.structuredmerge/kettle-jem.yml b/gems/ast-template/.structuredmerge/kettle-jem.yml
index 31c999402..c5dc1f1dc 100644
--- a/gems/ast-template/.structuredmerge/kettle-jem.yml
+++ b/gems/ast-template/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/ast/template/version.rb
- source: sig/gem.rbs
diff --git a/gems/ast-template/Gemfile b/gems/ast-template/Gemfile
index 3c92e5d7c..69a634498 100644
--- a/gems/ast-template/Gemfile
+++ b/gems/ast-template/Gemfile
@@ -36,300 +36,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -338,8 +46,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -351,62 +57,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -414,7 +66,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/ast-template/Gemfile.lock b/gems/ast-template/Gemfile.lock
index b17738f92..7f7f51bfd 100644
--- a/gems/ast-template/Gemfile.lock
+++ b/gems/ast-template/Gemfile.lock
@@ -5,273 +5,6 @@ PATH
ast-merge (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +15,26 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +42,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +72,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +91,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +115,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,21 +124,10 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
- nokogiri (1.19.4-aarch64-linux-gnu)
- racc (~> 1.4)
- nokogiri (1.19.4-aarch64-linux-musl)
- racc (~> 1.4)
- nokogiri (1.19.4-arm64-darwin)
- racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-linux-musl)
- racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +148,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +203,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +218,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +257,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +278,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +306,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +329,16 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +348,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -624,120 +375,77 @@ GEM
zlib (3.2.3)
PLATFORMS
- aarch64-linux
- aarch64-linux-gnu
- aarch64-linux-musl
- arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
- x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
ast-template!
- bash-merge!
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,61 +454,42 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
- nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
- nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
- nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
- nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +507,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +546,16 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,8 +563,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/ast-template/LICENSE.md b/gems/ast-template/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/ast-template/LICENSE.md
+++ b/gems/ast-template/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/ast-template/README.md b/gems/ast-template/README.md
index 5d1bbc9a4..28dec4203 100644
--- a/gems/ast-template/README.md
+++ b/gems/ast-template/README.md
@@ -36,8 +36,8 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -149,7 +149,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -175,6 +175,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-template
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Ast::Template-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -219,7 +221,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/ast-template
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/ast-template
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/ast-template
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/ast-template/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/ast-template/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/ast-template/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/ast-template/gemfiles/modular/cgi/vHEAD.gemfile b/gems/ast-template/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/ast-template/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/ast-template/gemfiles/modular/coverage.gemfile b/gems/ast-template/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/ast-template/gemfiles/modular/coverage.gemfile
+++ b/gems/ast-template/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/ast-template/gemfiles/modular/coverage_local.gemfile b/gems/ast-template/gemfiles/modular/coverage_local.gemfile
index 03f58a984..0fc7ac539 100644
--- a/gems/ast-template/gemfiles/modular/coverage_local.gemfile
+++ b/gems/ast-template/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[ast-template] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-template/gemfiles/modular/documentation.gemfile b/gems/ast-template/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/ast-template/gemfiles/modular/documentation.gemfile
+++ b/gems/ast-template/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/ast-template/gemfiles/modular/documentation_local.gemfile b/gems/ast-template/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..54d1b71a8 100644
--- a/gems/ast-template/gemfiles/modular/documentation_local.gemfile
+++ b/gems/ast-template/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-template] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/ast-template/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/ast-template/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-template/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/ast-template/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-template/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/ast-template/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/ast-template/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/ast-template/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/ast-template/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/ast-template/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/ast-template/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/ast-template/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/ast-template/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/ast-template/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/ast-template/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/ast-template/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/ast-template/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/ast-template/gemfiles/modular/optional.gemfile b/gems/ast-template/gemfiles/modular/optional.gemfile
index a6e3ebc87..9ea429538 100644
--- a/gems/ast-template/gemfiles/modular/optional.gemfile
+++ b/gems/ast-template/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-template templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/ast-template/gemfiles/modular/runtime_heads.gemfile b/gems/ast-template/gemfiles/modular/runtime_heads.gemfile
index ee76c0095..ebf17c529 100644
--- a/gems/ast-template/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/ast-template/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during ast-template templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/ast-template/gemfiles/modular/style.gemfile b/gems/ast-template/gemfiles/modular/style.gemfile
index 38dda7711..4dbcc02c0 100644
--- a/gems/ast-template/gemfiles/modular/style.gemfile
+++ b/gems/ast-template/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during ast-template templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/ast-template/gemfiles/modular/style_local.gemfile b/gems/ast-template/gemfiles/modular/style_local.gemfile
index ce75bbe21..07ab6fd23 100644
--- a/gems/ast-template/gemfiles/modular/style_local.gemfile
+++ b/gems/ast-template/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[ast-template] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/ast-template/gemfiles/modular/templating.gemfile b/gems/ast-template/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/ast-template/gemfiles/modular/templating.gemfile
+++ b/gems/ast-template/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/ast-template/gemfiles/modular/templating_local.gemfile b/gems/ast-template/gemfiles/modular/templating_local.gemfile
index 6eb9ac7ae..7ae3fae30 100644
--- a/gems/ast-template/gemfiles/modular/templating_local.gemfile
+++ b/gems/ast-template/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[ast-template] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[ast-template] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[ast-template] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/ast-template/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/ast-template/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/ast-template/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/ast-template/gemfiles/modular/webrick/vHEAD.gemfile b/gems/ast-template/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/ast-template/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/ast-template/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/ast-template/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/ast-template/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/ast-template/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/ast-template/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/ast-template/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/ast-template/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/ast-template/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/ast-template/spec/spec_helper.rb b/gems/ast-template/spec/spec_helper.rb
index e230006dc..f4d1208d9 100644
--- a/gems/ast-template/spec/spec_helper.rb
+++ b/gems/ast-template/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/bash-merge/.kettle-drift.lock b/gems/bash-merge/.kettle-drift.lock
deleted file mode 100644
index 09df60df7..000000000
--- a/gems/bash-merge/.kettle-drift.lock
+++ /dev/null
@@ -1,317 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 93,
- 133,
- 173,
- 213,
- 253,
- 293,
- 333,
- 373
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 82,
- 122,
- 162,
- 202,
- 242,
- 282,
- 322,
- 362
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 60,
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 110,
- 150,
- 190,
- 230,
- 270,
- 310,
- 350,
- 390
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 35,
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 69,
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 48,
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 44,
- 88,
- 128,
- 168,
- 208,
- 248,
- 288,
- 328,
- 368
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 103,
- 143,
- 183,
- 223,
- 263,
- 303,
- 343,
- 383
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 97,
- 137,
- 177,
- 217,
- 257,
- 297,
- 337,
- 377
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 106,
- 146,
- 186,
- 226,
- 266,
- 306,
- 346,
- 386
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/bash-merge/.rubocop_gradual.lock b/gems/bash-merge/.rubocop_gradual.lock
index 69ee17f8e..2c032ec6e 100644
--- a/gems/bash-merge/.rubocop_gradual.lock
+++ b/gems/bash-merge/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:3524239918": [
+ ".simplecov:1611471541": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:521981965": [
@@ -8,9 +8,10 @@
[163, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 1367093088],
[166, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3881946477]
],
- "bash-merge.gemspec:4057981445": [
+ "bash-merge.gemspec:1539117488": [
[118, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2821357214],
- [126, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949]
+ [129, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 3888612416],
+ [130, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949]
],
"gemfiles/modular/benchmark/r4/v0.5.gemfile:3644720371": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
@@ -19,13 +20,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -61,6 +69,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -70,35 +85,36 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
"lib/bash-merge.rb:2115710001": [
[1, 1, 0, "Naming/FileName: The name of this source file (`bash-merge.rb`) should use snake_case.", 5381]
],
- "lib/bash/merge.rb:4206734161": [
- [160, 7, 615, "Metrics/MethodLength: Method has too many lines. [13/10]", 1174626529]
+ "lib/bash/merge.rb:4271795441": [
+ [167, 7, 913, "Metrics/MethodLength: Method has too many lines. [19/10]", 3225777100]
],
"lib/bash/merge/comment_tracker.rb:2891158123": [
[54, 7, 773, "Metrics/MethodLength: Method has too many lines. [25/10]", 729186432]
],
- "lib/bash/merge/file_analysis.rb:2458110112": [
- [13, 5, 10970, "Metrics/ClassLength: Class has too many lines. [185/100]", 582917352],
- [45, 7, 1156, "Metrics/MethodLength: Method has too many lines. [16/10]", 260197263],
+ "lib/bash/merge/file_analysis.rb:224137169": [
+ [13, 5, 11336, "Metrics/ClassLength: Class has too many lines. [194/100]", 582917352],
+ [45, 7, 1125, "Metrics/MethodLength: Method has too many lines. [16/10]", 3123023090],
[169, 9, 6, "Naming/MemoizedInstanceVariableName: Memoized variable `@nodes` does not match method name `statements`. Use `@statements` instead.", 2756313398],
[208, 7, 478, "Metrics/MethodLength: Method has too many lines. [14/10]", 3606020460],
- [262, 7, 1331, "Metrics/AbcSize: Assignment Branch Condition size for `extract_freeze_blocks` is too high. [<12, 19, 11> 25.02/17]", 2209896179],
- [262, 7, 1331, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `extract_freeze_blocks` is too high. [9/7]", 2209896179],
- [262, 7, 1331, "Metrics/MethodLength: Method has too many lines. [27/10]", 2209896179],
- [262, 7, 1331, "Metrics/PerceivedComplexity: Perceived complexity for `extract_freeze_blocks` is too high. [10/8]", 2209896179],
- [303, 7, 835, "Metrics/AbcSize: Assignment Branch Condition size for `integrate_nodes_and_freeze_blocks` is too high. [<8, 21, 10> 24.6/17]", 1332923118],
- [303, 7, 835, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `integrate_nodes_and_freeze_blocks` is too high. [11/7]", 1332923118],
- [303, 7, 835, "Metrics/MethodLength: Method has too many lines. [14/10]", 1332923118],
- [303, 7, 835, "Metrics/PerceivedComplexity: Perceived complexity for `integrate_nodes_and_freeze_blocks` is too high. [11/8]", 1332923118]
+ [229, 7, 1173, "Metrics/MethodLength: Method has too many lines. [18/10]", 3957755541],
+ [271, 7, 1331, "Metrics/AbcSize: Assignment Branch Condition size for `extract_freeze_blocks` is too high. [<12, 19, 11> 25.02/17]", 2209896179],
+ [271, 7, 1331, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `extract_freeze_blocks` is too high. [9/7]", 2209896179],
+ [271, 7, 1331, "Metrics/MethodLength: Method has too many lines. [27/10]", 2209896179],
+ [271, 7, 1331, "Metrics/PerceivedComplexity: Perceived complexity for `extract_freeze_blocks` is too high. [10/8]", 2209896179],
+ [312, 7, 835, "Metrics/AbcSize: Assignment Branch Condition size for `integrate_nodes_and_freeze_blocks` is too high. [<8, 21, 10> 24.6/17]", 1332923118],
+ [312, 7, 835, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `integrate_nodes_and_freeze_blocks` is too high. [11/7]", 1332923118],
+ [312, 7, 835, "Metrics/MethodLength: Method has too many lines. [14/10]", 1332923118],
+ [312, 7, 835, "Metrics/PerceivedComplexity: Perceived complexity for `integrate_nodes_and_freeze_blocks` is too high. [11/8]", 1332923118]
],
"lib/bash/merge/freeze_node.rb:3178614316": [
[32, 21, 127, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 1948779238]
@@ -113,44 +129,36 @@
[138, 7, 2413, "Metrics/MethodLength: Method has too many lines. [37/10]", 152834448],
[210, 7, 661, "Metrics/MethodLength: Method has too many lines. [12/10]", 3160634112]
],
- "lib/bash/merge/smart_merger.rb:855700947": [
- [37, 5, 30057, "Metrics/ClassLength: Class has too many lines. [557/100]", 4256794719],
- [61, 7, 1020, "Metrics/MethodLength: Method has too many lines. [15/10]", 746325062],
- [61, 21, 401, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [13/5]", 1661881927],
- [121, 7, 1365, "Metrics/AbcSize: Assignment Branch Condition size for `merge_with_debug` is too high. [<3, 24, 7> 25.18/17]", 1535809936],
- [121, 7, 1365, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `merge_with_debug` is too high. [8/7]", 1535809936],
- [121, 7, 1365, "Metrics/MethodLength: Method has too many lines. [31/10]", 1535809936],
- [222, 7, 3895, "Metrics/AbcSize: Assignment Branch Condition size for `perform_merge` is too high. [<26, 49, 15> 57.46/17]", 2422658143],
- [222, 7, 3895, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `perform_merge` is too high. [13/7]", 2422658143],
- [222, 7, 3895, "Metrics/MethodLength: Method has too many lines. [65/10]", 2422658143],
- [222, 7, 3895, "Metrics/PerceivedComplexity: Perceived complexity for `perform_merge` is too high. [15/8]", 2422658143],
- [259, 9, 1909, "Metrics/BlockLength: Block has too many lines. [33/25]", 2329089464],
- [330, 7, 1051, "Metrics/MethodLength: Method has too many lines. [24/10]", 84730335],
- [412, 7, 2033, "Metrics/AbcSize: Assignment Branch Condition size for `collapse_cross_source_preamble_prefixes!` is too high. [<16, 37, 12> 42.06/17]", 2353798937],
- [412, 7, 2033, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `collapse_cross_source_preamble_prefixes!` is too high. [13/7]", 2353798937],
- [412, 7, 2033, "Metrics/MethodLength: Method has too many lines. [30/10]", 2353798937],
- [412, 7, 2033, "Metrics/PerceivedComplexity: Perceived complexity for `collapse_cross_source_preamble_prefixes!` is too high. [13/8]", 2353798937],
- [450, 7, 534, "Metrics/MethodLength: Method has too many lines. [15/10]", 4188914818],
- [472, 7, 683, "Metrics/AbcSize: Assignment Branch Condition size for `leading_standalone_comment_entries` is too high. [<8, 19, 6> 21.47/17]", 496096949],
- [472, 7, 683, "Metrics/MethodLength: Method has too many lines. [17/10]", 496096949],
- [520, 7, 1210, "Metrics/AbcSize: Assignment Branch Condition size for `root_boundary_lines_for` is too high. [<7, 32, 25> 41.21/17]", 2597480626],
- [520, 7, 1210, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `root_boundary_lines_for` is too high. [23/7]", 2597480626],
- [520, 7, 1210, "Metrics/MethodLength: Method has too many lines. [22/10]", 2597480626],
- [520, 7, 1210, "Metrics/PerceivedComplexity: Perceived complexity for `root_boundary_lines_for` is too high. [22/8]", 2597480626],
- [521, 34, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [527, 121, 6, "Layout/LineLength: Line is too long. [126/120]", 1182436848],
- [549, 7, 737, "Metrics/AbcSize: Assignment Branch Condition size for `emission_start_line_for` is too high. [<5, 16, 14> 21.84/17]", 2185143026],
- [549, 7, 737, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emission_start_line_for` is too high. [12/7]", 2185143026],
- [549, 7, 737, "Metrics/MethodLength: Method has too many lines. [11/10]", 2185143026],
- [549, 7, 737, "Metrics/PerceivedComplexity: Perceived complexity for `emission_start_line_for` is too high. [13/8]", 2185143026],
- [554, 39, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [567, 7, 820, "Metrics/MethodLength: Method has too many lines. [16/10]", 326278669],
- [603, 43, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [697, 7, 911, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `preference_for_pair` is too high. [10/7]", 2626776987],
- [697, 7, 911, "Metrics/MethodLength: Method has too many lines. [12/10]", 2626776987],
- [697, 7, 911, "Metrics/PerceivedComplexity: Perceived complexity for `preference_for_pair` is too high. [10/8]", 2626776987],
- [716, 7, 1370, "Metrics/MethodLength: Method has too many lines. [33/10]", 4039645241],
- [770, 23, 131, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 113192658]
+ "lib/bash/merge/smart_merger.rb:3661050993": [
+ [37, 5, 29940, "Metrics/ClassLength: Class has too many lines. [557/100]", 599912827],
+ [62, 7, 1020, "Metrics/MethodLength: Method has too many lines. [15/10]", 746325062],
+ [62, 21, 401, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [13/5]", 1661881927],
+ [122, 7, 1365, "Metrics/AbcSize: Assignment Branch Condition size for `merge_with_debug` is too high. [<3, 24, 7> 25.18/17]", 1535809936],
+ [122, 7, 1365, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `merge_with_debug` is too high. [8/7]", 1535809936],
+ [122, 7, 1365, "Metrics/MethodLength: Method has too many lines. [31/10]", 1535809936],
+ [223, 7, 3977, "Metrics/AbcSize: Assignment Branch Condition size for `perform_merge` is too high. [<30, 51, 15> 61.04/17]", 1524282235],
+ [223, 7, 3977, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `perform_merge` is too high. [13/7]", 1524282235],
+ [223, 7, 3977, "Metrics/MethodLength: Method has too many lines. [66/10]", 1524282235],
+ [223, 7, 3977, "Metrics/PerceivedComplexity: Perceived complexity for `perform_merge` is too high. [15/8]", 1524282235],
+ [261, 9, 1909, "Metrics/BlockLength: Block has too many lines. [33/25]", 2329089464],
+ [332, 7, 1051, "Metrics/MethodLength: Method has too many lines. [24/10]", 84730335],
+ [414, 7, 2033, "Metrics/AbcSize: Assignment Branch Condition size for `collapse_cross_source_preamble_prefixes!` is too high. [<16, 37, 12> 42.06/17]", 2353798937],
+ [414, 7, 2033, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `collapse_cross_source_preamble_prefixes!` is too high. [13/7]", 2353798937],
+ [414, 7, 2033, "Metrics/MethodLength: Method has too many lines. [30/10]", 2353798937],
+ [414, 7, 2033, "Metrics/PerceivedComplexity: Perceived complexity for `collapse_cross_source_preamble_prefixes!` is too high. [13/8]", 2353798937],
+ [452, 7, 534, "Metrics/MethodLength: Method has too many lines. [15/10]", 4188914818],
+ [474, 7, 683, "Metrics/AbcSize: Assignment Branch Condition size for `leading_standalone_comment_entries` is too high. [<8, 19, 6> 21.47/17]", 496096949],
+ [474, 7, 683, "Metrics/MethodLength: Method has too many lines. [17/10]", 496096949],
+ [542, 7, 970, "Metrics/MethodLength: Method has too many lines. [18/10]", 3638795219],
+ [580, 43, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [672, 9, 51, "Lint/HashCompareByIdentity: Use `Hash#compare_by_identity` instead of using `object_id` for keys.", 127173805],
+ [678, 7, 911, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `preference_for_pair` is too high. [10/7]", 2626776987],
+ [678, 7, 911, "Metrics/MethodLength: Method has too many lines. [12/10]", 2626776987],
+ [678, 7, 911, "Metrics/PerceivedComplexity: Perceived complexity for `preference_for_pair` is too high. [10/8]", 2626776987],
+ [697, 7, 1370, "Metrics/MethodLength: Method has too many lines. [33/10]", 4039645241],
+ [751, 23, 131, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 113192658],
+ [774, 32, 51, "Lint/HashCompareByIdentity: Use `Hash#compare_by_identity` instead of using `object_id` for keys.", 127173805],
+ [787, 32, 51, "Lint/HashCompareByIdentity: Use `Hash#compare_by_identity` instead of using `object_id` for keys.", 127173805]
],
"spec/bash/merge/comment_tracker_spec.rb:2839895745": [
[5, 1, 5867, "Metrics/BlockLength: Block has too many lines. [179/25]", 853150752],
@@ -204,9 +212,9 @@
[266, 3, 1249, "Metrics/BlockLength: Block has too many lines. [37/25]", 546398620],
[316, 3, 1101, "Metrics/BlockLength: Block has too many lines. [26/25]", 3599684932]
],
- "spec/bash/merge_spec.rb:4280322597": [
- [5, 1, 4187, "Metrics/BlockLength: Block has too many lines. [108/25]", 2384192474],
- [85, 3, 1146, "Metrics/BlockLength: Block has too many lines. [26/25]", 3618532423]
+ "spec/bash/merge_spec.rb:2513735456": [
+ [5, 1, 4411, "Metrics/BlockLength: Block has too many lines. [113/25]", 2384192474],
+ [91, 3, 1146, "Metrics/BlockLength: Block has too many lines. [26/25]", 3618532423]
],
"spec/support/shared_examples/file_analysis_examples.rb:3893834393": [
[8, 1, 1573, "Metrics/BlockLength: Block has too many lines. [36/25]", 1729754427],
diff --git a/gems/bash-merge/.simplecov b/gems/bash-merge/.simplecov
index c15dc3323..a1fbcf6e3 100644
--- a/gems/bash-merge/.simplecov
+++ b/gems/bash-merge/.simplecov
@@ -4,15 +4,11 @@
# bash-merge will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/bash-merge/.structuredmerge/kettle-jem.yml b/gems/bash-merge/.structuredmerge/kettle-jem.yml
index 11d9d916a..b7d640fd2 100644
--- a/gems/bash-merge/.structuredmerge/kettle-jem.yml
+++ b/gems/bash-merge/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/bash/merge/version.rb
- source: sig/gem.rbs
diff --git a/gems/bash-merge/Gemfile b/gems/bash-merge/Gemfile
index 7e465932f..d63bad96f 100644
--- a/gems/bash-merge/Gemfile
+++ b/gems/bash-merge/Gemfile
@@ -37,300 +37,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -339,8 +47,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -352,62 +58,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -415,7 +67,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/bash-merge/Gemfile.lock b/gems/bash-merge/Gemfile.lock
index c7941d078..c08db9d56 100644
--- a/gems/bash-merge/Gemfile.lock
+++ b/gems/bash-merge/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
tree_haver (= 7.1.0)
version_gem (~> 1.1, >= 1.1.14)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +16,26 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +43,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +73,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +92,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +116,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,7 +125,6 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
nokogiri (1.19.4-aarch64-linux-gnu)
racc (~> 1.4)
@@ -398,13 +132,11 @@ GEM
racc (~> 1.4)
nokogiri (1.19.4-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-musl)
racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +157,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +212,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +227,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +266,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +287,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +315,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +338,20 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-aarch64-linux)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-arm64-darwin)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +361,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -628,117 +392,79 @@ PLATFORMS
aarch64-linux-gnu
aarch64-linux-musl
arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.2, >= 3.2.0)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
bash-merge!
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.4)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.3, >= 2.3.7)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
- kettle-test (~> 2.0, >= 2.0.11)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
+ kettle-test (~> 2.0, >= 2.0.12)
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
- stone_checksums (~> 1.0, >= 1.0.6, >= 1.0.3)
+ standard (~> 1.56, >= 1.56.0)
+ stone_checksums (~> 1.0, >= 1.0.6)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
turbo_tests2 (~> 3.2, >= 3.2.0)
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -747,61 +473,46 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -819,35 +530,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -856,20 +569,18 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4
+ tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -877,8 +588,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/bash-merge/LICENSE.md b/gems/bash-merge/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/bash-merge/LICENSE.md
+++ b/gems/bash-merge/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/bash-merge/README.md b/gems/bash-merge/README.md
index 2e1055710..84b82b723 100644
--- a/gems/bash-merge/README.md
+++ b/gems/bash-merge/README.md
@@ -75,8 +75,8 @@ File.write("merged.sh", result.to_bash)
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -293,7 +293,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -319,6 +319,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/bash-merge
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Bash::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -363,7 +365,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/bash-merge
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/bash-merge
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/bash-merge
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/bash-merge/bash-merge.gemspec b/gems/bash-merge/bash-merge.gemspec
index 2e634fb4e..86240b5af 100644
--- a/gems/bash-merge/bash-merge.gemspec
+++ b/gems/bash-merge/bash-merge.gemspec
@@ -116,13 +116,17 @@ Gem::Specification.new do |spec|
# Testing
spec.add_development_dependency('appraisal2', '~> 3.2', '>= 3.2.0') # ruby >= 1.8.7, for testing against multiple versions of dependencies
- spec.add_development_dependency('kettle-test', '~> 2.0', '>= 2.0.11') # ruby >= 4.0.0
+ spec.add_development_dependency('kettle-test', '~> 2.0', '>= 2.0.12') # ruby >= 4.0.0
spec.add_development_dependency('turbo_tests2', '~> 3.2', '>= 3.2.0') # ruby >= 2.4.0, default kettle-test runner
# Releasing
spec.add_development_dependency('ruby-progressbar', '~> 1.13') # ruby >= 0
spec.add_development_dependency('stone_checksums', '~> 1.0', '>= 1.0.6') # ruby >= 2.2.0
+ # Development tasks
+ # The cake is a lie. erb v2.2, the oldest release, was never compatible with Ruby 2.3.
+ # This means we have no choice but to use the erb that shipped with Ruby 2.3
+ # /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError)
# spec.add_development_dependency("erb", ">= 2.2") # ruby >= 2.3.0, not SemVer, old rubies get dropped in a patch.
spec.add_development_dependency('gitmoji-regex', '~> 2.0', '>= 2.0.4') # ruby >= 2.4
end
diff --git a/gems/bash-merge/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/bash-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/bash-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/bash-merge/gemfiles/modular/cgi/vHEAD.gemfile b/gems/bash-merge/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/bash-merge/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/bash-merge/gemfiles/modular/coverage.gemfile b/gems/bash-merge/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/bash-merge/gemfiles/modular/coverage.gemfile
+++ b/gems/bash-merge/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/bash-merge/gemfiles/modular/coverage_local.gemfile b/gems/bash-merge/gemfiles/modular/coverage_local.gemfile
index a1b6ce3d2..e0339ae34 100644
--- a/gems/bash-merge/gemfiles/modular/coverage_local.gemfile
+++ b/gems/bash-merge/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[bash-merge] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/bash-merge/gemfiles/modular/documentation.gemfile b/gems/bash-merge/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/bash-merge/gemfiles/modular/documentation.gemfile
+++ b/gems/bash-merge/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/bash-merge/gemfiles/modular/documentation_local.gemfile b/gems/bash-merge/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..cd075e67e 100644
--- a/gems/bash-merge/gemfiles/modular/documentation_local.gemfile
+++ b/gems/bash-merge/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[bash-merge] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/bash-merge/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/bash-merge/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/bash-merge/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/bash-merge/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/bash-merge/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/bash-merge/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/bash-merge/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/bash-merge/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/bash-merge/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/bash-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/bash-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/bash-merge/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/bash-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/bash-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/bash-merge/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/bash-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/bash-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/bash-merge/gemfiles/modular/optional.gemfile b/gems/bash-merge/gemfiles/modular/optional.gemfile
index 831371a19..9ea429538 100644
--- a/gems/bash-merge/gemfiles/modular/optional.gemfile
+++ b/gems/bash-merge/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during bash-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/bash-merge/gemfiles/modular/runtime_heads.gemfile b/gems/bash-merge/gemfiles/modular/runtime_heads.gemfile
index 282073e0d..ebf17c529 100644
--- a/gems/bash-merge/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/bash-merge/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during bash-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/bash-merge/gemfiles/modular/style.gemfile b/gems/bash-merge/gemfiles/modular/style.gemfile
index 515974f89..4dbcc02c0 100644
--- a/gems/bash-merge/gemfiles/modular/style.gemfile
+++ b/gems/bash-merge/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during bash-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/bash-merge/gemfiles/modular/style_local.gemfile b/gems/bash-merge/gemfiles/modular/style_local.gemfile
index ce75bbe21..92e1027e1 100644
--- a/gems/bash-merge/gemfiles/modular/style_local.gemfile
+++ b/gems/bash-merge/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[bash-merge] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/bash-merge/gemfiles/modular/templating.gemfile b/gems/bash-merge/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/bash-merge/gemfiles/modular/templating.gemfile
+++ b/gems/bash-merge/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/bash-merge/gemfiles/modular/templating_local.gemfile b/gems/bash-merge/gemfiles/modular/templating_local.gemfile
index b0ef57bb2..f8ee64dc9 100644
--- a/gems/bash-merge/gemfiles/modular/templating_local.gemfile
+++ b/gems/bash-merge/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[bash-merge] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[bash-merge] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[bash-merge] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/bash-merge/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/bash-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/bash-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/bash-merge/gemfiles/modular/webrick/vHEAD.gemfile b/gems/bash-merge/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/bash-merge/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/bash-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/bash-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/bash-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/bash-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/bash-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/bash-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/bash-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/bash-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/bash-merge/lib/bash/merge.rb b/gems/bash-merge/lib/bash/merge.rb
index 5589ffdf2..898b2fa3a 100644
--- a/gems/bash-merge/lib/bash/merge.rb
+++ b/gems/bash-merge/lib/bash/merge.rb
@@ -165,10 +165,16 @@ def bash_grammar_path(diagnostics)
end
def node_parser_available_for?(source, grammar_path, diagnostics)
+ register_backend!
parser = if grammar_path
- TreeHaver.parser_for(:bash, library_path: grammar_path)
+ TreeHaver.with_language_registration(
+ :bash,
+ :tree_sitter,
+ path: grammar_path,
+ symbol: TreeHaver::GrammarFinder.new(:bash).symbol_name
+ ) { TreeHaver.parser_for(:bash, backend_type: :tree_sitter) }
else
- TreeHaver.parser_for(:bash)
+ TreeHaver.parser_for(:bash, backend_type: :tree_sitter)
end
tree = parser.parse(source)
!tree.nil? && !tree.root_node.nil?
@@ -182,10 +188,15 @@ def node_parser_available_for?(source, grammar_path, diagnostics)
def bash_backend_available_for_analysis?(backend_id)
register_backend!
- return false unless backend_id.to_s == TREE_SITTER_BACKEND.id
- registrations = TreeHaver.registered_languages(:bash)
- registrations.key?(:tree_sitter) || registrations.key?(:tslp)
+ if backend_id.to_s.empty?
+ TreeHaver.parser_for(:bash, backend_type: :tree_sitter)
+ else
+ TreeHaver.with_backend(backend_id) { TreeHaver.parser_for(:bash, backend_type: :tree_sitter) }
+ end
+ true
+ rescue TreeHaver::Error, ArgumentError
+ false
end
end
end
diff --git a/gems/bash-merge/lib/bash/merge/file_analysis.rb b/gems/bash-merge/lib/bash/merge/file_analysis.rb
index cebfe49c8..425fd3d3d 100644
--- a/gems/bash-merge/lib/bash/merge/file_analysis.rb
+++ b/gems/bash-merge/lib/bash/merge/file_analysis.rb
@@ -47,7 +47,7 @@ def initialize(source, freeze_token: DEFAULT_FREEZE_TOKEN, signature_generator:
@lines = source.lines.map(&:chomp)
@freeze_token = freeze_token
@signature_generator = signature_generator
- @parser_path = parser_path || self.class.find_parser_path
+ @parser_path = parser_path
@errors = []
# **options captures any additional parameters (e.g., node_typing) for forward compatibility
@@ -230,7 +230,16 @@ def parse_bash
# TreeHaver handles backend selection against the grammars Bash::Merge
# has already registered during bootstrap.
# Set TREE_HAVER_BACKEND=ffi for bash (MRI/Rust have compatibility issues)
- parser = TreeHaver.parser_for(:bash, library_path: @parser_path)
+ parser = if @parser_path
+ TreeHaver.with_language_registration(
+ :bash,
+ :tree_sitter,
+ path: @parser_path,
+ symbol: TreeHaver::GrammarFinder.new(:bash).symbol_name
+ ) { TreeHaver.parser_for(:bash, backend_type: :tree_sitter) }
+ else
+ TreeHaver.parser_for(:bash, backend_type: :tree_sitter)
+ end
@ast = parser.parse(@source)
# Check for parse errors in the tree
diff --git a/gems/bash-merge/lib/bash/merge/smart_merger.rb b/gems/bash-merge/lib/bash/merge/smart_merger.rb
index ca27dc1d8..79a35d15e 100644
--- a/gems/bash-merge/lib/bash/merge/smart_merger.rb
+++ b/gems/bash-merge/lib/bash/merge/smart_merger.rb
@@ -38,6 +38,7 @@ class SmartMerger < ::Ast::Merge::SmartMergerBase
include ::Ast::Merge::TrailingGroups::DestIterate
include ::Ast::Merge::Runtime::RootSessionSupport
include ::Ast::Merge::StructuredEmitterProvenanceSupport
+ include ::Ast::Merge::CommentLayoutEmissionSupport
# Creates a new SmartMerger for intelligent Bash script merging.
#
@@ -224,6 +225,7 @@ def perform_merge
dest_nodes = @dest_analysis.nodes
emitter = Emitter.new
+ @emitted_preserved_line_numbers = Hash.new { |hash, key| hash[key] = [] }
emit_root_boundary_to(emitter, :preamble)
@@ -495,9 +497,12 @@ def leading_standalone_comment_entries(emitter)
def handle_destination_only_node(emitter, dest_node)
if remove_template_missing_nodes
- emit_leading_segment_to(emitter, dest_node, @dest_analysis)
- emit_preserved_floating_gap_to(emitter, dest_node, @dest_analysis)
- emit_promoted_inline_comment_to(emitter, dest_node, @dest_analysis)
+ lines = removed_destination_node_lines_for(dest_node, @dest_analysis)
+ if lines.any?
+ start_line = emission_start_line_for(dest_node, @dest_analysis)
+ emitter.emit_raw_lines(lines, metadata: emitter_block_metadata(@dest_analysis, start_line))
+ mark_removed_destination_preserved_lines(dest_node, @dest_analysis)
+ end
else
emit_node_to(emitter, dest_node, @dest_analysis)
end
@@ -518,49 +523,19 @@ def root_boundary_analysis_candidates
end
def root_boundary_lines_for(kind, analysis)
- return [] unless analysis&.respond_to?(:statements)
- if kind == :preamble && Array(analysis.statements).empty? && analysis.respond_to?(:lines) && analysis.lines.any?
- return analysis.lines.dup
- end
-
- statements = Array(analysis.statements).select do |statement|
- statement.respond_to?(:start_line) && statement.respond_to?(:end_line) && statement.start_line && statement.end_line
- end
- return [] if statements.empty?
-
- case kind
- when :preamble
- first_statement = statements.min_by(&:start_line)
- start_line = emission_start_line_for(first_statement, analysis)
- return [] unless start_line && start_line > 1
-
- (1...start_line).filter_map { |line_number| analysis.line_at(line_number) }
- when :postlude
- last_line = statements.map(&:end_line).compact.max
- return [] unless last_line && analysis.respond_to?(:lines)
- return [] if last_line >= analysis.lines.length
-
- ((last_line + 1)..analysis.lines.length).filter_map { |line_number| analysis.line_at(line_number) }
- else
- []
- end
+ super(kind, analysis, owners: analysis.nodes, fallback_to_owner_bounds: true)
end
def emission_start_line_for(node, analysis)
- return unless node.respond_to?(:start_line) && node.start_line
-
- attachment = analysis.comment_attachment_for(node)
- leading_region = attachment&.leading_region
- start_line = if leading_region&.respond_to?(:start_line) && leading_region.start_line
- leading_region.start_line
- else
- leading_comments = analysis.comment_tracker.leading_comments_before(node.start_line)
- leading_comments.first&.fetch(:line, nil) || node.start_line
- end
+ region_start = region_start_line(leading_region_for(node, analysis))
+ comment_start = analysis.comment_tracker.leading_comments_before(node.start_line).first&.fetch(:line, nil)
+ preceding_blank_line_start(region_start || comment_start || node.start_line, analysis)
+ end
- start_line -= 1 while start_line > 1 && analysis.line_at(start_line - 1)&.strip == ''
+ def root_boundary_owner_start_line_for(node, analysis)
+ return node.start_line unless region_present?(leading_region_for(node, analysis))
- start_line
+ emission_start_line_for(node, analysis)
end
# Emit the preferred version of a matched node pair.
@@ -568,10 +543,12 @@ def emit_preferred(emitter, template_node, dest_node)
pref = preference_for_pair(template_node, dest_node)
record_unresolved_choice(template_node: template_node, dest_node: dest_node, provisional_winner: pref)
if pref == :destination
+ emit_retained_leading_gap_to(emitter, dest_node, @dest_analysis)
emit_node_to(emitter, dest_node, @dest_analysis)
else
comment_source_node, comment_source_analysis = preferred_comment_source_for(template_node, dest_node)
inline_comment = preferred_inline_comment_for(template_node, dest_node)
+ emit_retained_leading_gap_to(emitter, dest_node, @dest_analysis)
emit_node_to(
emitter,
template_node,
@@ -667,23 +644,12 @@ def safe_inline_comment_node?(node)
(node.respond_to?(:variable_assignment?) && node.variable_assignment?)
end
- def emit_promoted_inline_comment_to(emitter, node, analysis)
+ def promoted_inline_comment_lines_for(node, analysis)
inline_comment = inline_comment_for(node, analysis)
- return unless inline_comment && single_line_node?(node) && safe_inline_comment_node?(node)
+ return [] unless inline_comment && single_line_node?(node) && safe_inline_comment_node?(node)
line = promoted_inline_comment_line_for(node, analysis, inline_comment)
- emitter.emit_raw_lines([line], metadata: emitter_line_metadata(analysis, line_number: node.start_line)) if line
- end
-
- def emit_preserved_floating_gap_to(emitter, node, analysis)
- attachment = analysis.comment_attachment_for(node)
- return unless attachment&.leading_region
-
- trailing_gap = attachment.trailing_gap
- return unless trailing_gap
- return unless trailing_gap.effective_controller_side(removed_owners: [node]) == :after
-
- emitter.emit_raw_lines(trailing_gap.lines, metadata: emitter_block_metadata(analysis, trailing_gap.start_line))
+ line ? [line] : []
end
def promoted_inline_comment_line_for(node, analysis, inline_comment)
@@ -693,6 +659,21 @@ def promoted_inline_comment_line_for(node, analysis, inline_comment)
"#{raw_line[/\A\s*/]}#{inline_comment[:raw].sub(/\A\s+/, '')}"
end
+ def removed_destination_node_lines_for(node, analysis)
+ removed_owner_preserved_lines_for(
+ node,
+ analysis,
+ owners: analysis.nodes,
+ inline_lines: promoted_inline_comment_lines_for(node, analysis)
+ )
+ end
+
+ def mark_removed_destination_preserved_lines(node, analysis)
+ @emitted_preserved_line_numbers[analysis.object_id].concat(
+ removed_owner_preserved_line_numbers_for(node, analysis, owners: analysis.nodes)
+ )
+ end
+
# Determine preference for a matched pair, respecting per-type overrides.
def preference_for_pair(template_node, dest_node)
return @preference unless @preference.is_a?(Hash)
@@ -789,14 +770,29 @@ def apply_inline_comment(lines, inline_comment)
end
def emit_leading_segment_to(emitter, node, analysis)
- return unless node.respond_to?(:start_line) && node.start_line
+ line_numbers = leading_segment_line_numbers_for(node, analysis, owners: analysis.nodes)
+ emitted_line_numbers = @emitted_preserved_line_numbers[analysis.object_id]
+ line_numbers = line_numbers.reject { |line_number| emitted_line_numbers.include?(line_number) }
+ return if line_numbers.empty?
- start_line = emission_start_line_for(node, analysis)
- return unless start_line && start_line < node.start_line
-
- lines = (start_line...node.start_line).filter_map { |line_number| analysis.line_at(line_number) }
+ lines = line_numbers.filter_map { |line_number| analysis.line_at(line_number) }
+ start_line = line_numbers.first
emitter.emit_raw_lines(lines, metadata: emitter_block_metadata(analysis, start_line))
end
+
+ def emit_retained_leading_gap_to(emitter, node, analysis)
+ gap = retained_owner_leading_gap_for(node, analysis)
+ return unless gap
+
+ emitted_line_numbers = @emitted_preserved_line_numbers[analysis.object_id]
+ line_numbers = (gap.start_line..gap.end_line).reject do |line_number|
+ emitted_line_numbers.include?(line_number)
+ end
+ return if line_numbers.empty?
+
+ lines = line_numbers.filter_map { |line_number| analysis.line_at(line_number) }
+ emitter.emit_raw_lines(lines, metadata: emitter_block_metadata(analysis, line_numbers.first))
+ end
end
end
end
diff --git a/gems/bash-merge/spec/bash/merge/comment_behavior_matrix_spec.rb b/gems/bash-merge/spec/bash/merge/comment_behavior_matrix_spec.rb
index 35fc8578c..d740a5843 100644
--- a/gems/bash-merge/spec/bash/merge/comment_behavior_matrix_spec.rb
+++ b/gems/bash-merge/spec/bash/merge/comment_behavior_matrix_spec.rb
@@ -18,5 +18,7 @@
inline ? "#{line} # #{inline}" : line
end
)
+
+ it_behaves_like 'Ast::Merge::RetainedBlankGapCompliance'
end
end
diff --git a/gems/bash-merge/spec/spec_helper.rb b/gems/bash-merge/spec/spec_helper.rb
index 58ea9f84e..c12e2bf49 100644
--- a/gems/bash-merge/spec/spec_helper.rb
+++ b/gems/bash-merge/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/binary-merge/.kettle-drift.lock b/gems/binary-merge/.kettle-drift.lock
deleted file mode 100644
index f1287e677..000000000
--- a/gems/binary-merge/.kettle-drift.lock
+++ /dev/null
@@ -1,337 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359,
- 399
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 90,
- 130,
- 170,
- 210,
- 250,
- 290,
- 330,
- 370,
- 410
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360,
- 400
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372,
- 412
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 95,
- 135,
- 175,
- 215,
- 255,
- 295,
- 335,
- 375,
- 415
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361,
- 401
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 59,
- 99,
- 139,
- 179,
- 219,
- 259,
- 299,
- 339,
- 379,
- 419
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380,
- 420
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 42,
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366,
- 406
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389,
- 429
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 34,
- 78,
- 118,
- 158,
- 198,
- 238,
- 278,
- 318,
- 358,
- 398
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 68,
- 108,
- 148,
- 188,
- 228,
- 268,
- 308,
- 348,
- 388,
- 428
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 84,
- 124,
- 164,
- 204,
- 244,
- 284,
- 324,
- 364,
- 404
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 47,
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371,
- 411
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367,
- 407
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365,
- 405
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382,
- 422
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381,
- 421
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376,
- 416
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 105,
- 145,
- 185,
- 225,
- 265,
- 305,
- 345,
- 385,
- 425
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/binary-merge/.rubocop_gradual.lock b/gems/binary-merge/.rubocop_gradual.lock
index 409104dc1..970768c26 100644
--- a/gems/binary-merge/.rubocop_gradual.lock
+++ b/gems/binary-merge/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:2434553742": [
+ ".simplecov:3809455317": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:273093165": [
@@ -21,13 +21,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -63,6 +70,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -72,10 +86,10 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
diff --git a/gems/binary-merge/.simplecov b/gems/binary-merge/.simplecov
index 74cd7d254..b52146834 100644
--- a/gems/binary-merge/.simplecov
+++ b/gems/binary-merge/.simplecov
@@ -4,15 +4,11 @@
# binary-merge will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/binary-merge/.structuredmerge/kettle-jem.yml b/gems/binary-merge/.structuredmerge/kettle-jem.yml
index a5ddade46..12b0dcc81 100644
--- a/gems/binary-merge/.structuredmerge/kettle-jem.yml
+++ b/gems/binary-merge/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/binary/merge/version.rb
- source: sig/gem.rbs
diff --git a/gems/binary-merge/Gemfile b/gems/binary-merge/Gemfile
index 0a94ca078..2b5f7f621 100644
--- a/gems/binary-merge/Gemfile
+++ b/gems/binary-merge/Gemfile
@@ -36,260 +36,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -298,8 +46,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -311,142 +57,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -454,7 +66,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/binary-merge/Gemfile.lock b/gems/binary-merge/Gemfile.lock
index 41b29f356..fbcb3ea41 100644
--- a/gems/binary-merge/Gemfile.lock
+++ b/gems/binary-merge/Gemfile.lock
@@ -5,273 +5,6 @@ PATH
tree_haver (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,6 +15,10 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
backports (3.25.3)
benchmark (0.5.0)
@@ -289,15 +26,10 @@ GEM
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +37,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +67,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +86,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +110,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,7 +119,6 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
nokogiri (1.19.4-aarch64-linux-gnu)
racc (~> 1.4)
@@ -398,13 +126,11 @@ GEM
racc (~> 1.4)
nokogiri (1.19.4-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-musl)
racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +151,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +206,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +221,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +260,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +281,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +309,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +332,17 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-aarch64-linux)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-arm64-darwin)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +352,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -628,116 +383,77 @@ PLATFORMS
aarch64-linux-gnu
aarch64-linux-musl
arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
benchmark (~> 0.5, >= 0.5.0)
binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
- ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,61 +462,46 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +519,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +558,17 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4
+ tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,8 +576,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/binary-merge/LICENSE.md b/gems/binary-merge/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/binary-merge/LICENSE.md
+++ b/gems/binary-merge/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/binary-merge/README.md b/gems/binary-merge/README.md
index 40951dee9..d4847be52 100644
--- a/gems/binary-merge/README.md
+++ b/gems/binary-merge/README.md
@@ -35,8 +35,8 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -148,7 +148,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -174,6 +174,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/binary-merge
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Binary::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -218,7 +220,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/binary-merge
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/binary-merge
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/binary-merge
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/binary-merge/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/binary-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/binary-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/binary-merge/gemfiles/modular/cgi/vHEAD.gemfile b/gems/binary-merge/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/binary-merge/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/binary-merge/gemfiles/modular/coverage.gemfile b/gems/binary-merge/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/binary-merge/gemfiles/modular/coverage.gemfile
+++ b/gems/binary-merge/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/binary-merge/gemfiles/modular/coverage_local.gemfile b/gems/binary-merge/gemfiles/modular/coverage_local.gemfile
index ecf9ff9cd..ab58964d2 100644
--- a/gems/binary-merge/gemfiles/modular/coverage_local.gemfile
+++ b/gems/binary-merge/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[binary-merge] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/binary-merge/gemfiles/modular/documentation.gemfile b/gems/binary-merge/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/binary-merge/gemfiles/modular/documentation.gemfile
+++ b/gems/binary-merge/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/binary-merge/gemfiles/modular/documentation_local.gemfile b/gems/binary-merge/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..0c55469d1 100644
--- a/gems/binary-merge/gemfiles/modular/documentation_local.gemfile
+++ b/gems/binary-merge/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[binary-merge] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/binary-merge/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/binary-merge/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/binary-merge/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/binary-merge/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/binary-merge/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/binary-merge/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/binary-merge/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/binary-merge/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/binary-merge/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/binary-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/binary-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/binary-merge/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/binary-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/binary-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/binary-merge/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/binary-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/binary-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/binary-merge/gemfiles/modular/optional.gemfile b/gems/binary-merge/gemfiles/modular/optional.gemfile
index 0508edd79..9ea429538 100644
--- a/gems/binary-merge/gemfiles/modular/optional.gemfile
+++ b/gems/binary-merge/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during binary-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/binary-merge/gemfiles/modular/runtime_heads.gemfile b/gems/binary-merge/gemfiles/modular/runtime_heads.gemfile
index ee93b2904..ebf17c529 100644
--- a/gems/binary-merge/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/binary-merge/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during binary-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/binary-merge/gemfiles/modular/style.gemfile b/gems/binary-merge/gemfiles/modular/style.gemfile
index e70f4178f..4dbcc02c0 100644
--- a/gems/binary-merge/gemfiles/modular/style.gemfile
+++ b/gems/binary-merge/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during binary-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/binary-merge/gemfiles/modular/style_local.gemfile b/gems/binary-merge/gemfiles/modular/style_local.gemfile
index ce75bbe21..b72f13b98 100644
--- a/gems/binary-merge/gemfiles/modular/style_local.gemfile
+++ b/gems/binary-merge/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[binary-merge] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/binary-merge/gemfiles/modular/templating.gemfile b/gems/binary-merge/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/binary-merge/gemfiles/modular/templating.gemfile
+++ b/gems/binary-merge/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/binary-merge/gemfiles/modular/templating_local.gemfile b/gems/binary-merge/gemfiles/modular/templating_local.gemfile
index 41201dc8a..eb853982c 100644
--- a/gems/binary-merge/gemfiles/modular/templating_local.gemfile
+++ b/gems/binary-merge/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[binary-merge] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[binary-merge] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[binary-merge] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/binary-merge/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/binary-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/binary-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/binary-merge/gemfiles/modular/webrick/vHEAD.gemfile b/gems/binary-merge/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/binary-merge/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/binary-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/binary-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/binary-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/binary-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/binary-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/binary-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/binary-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/binary-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/binary-merge/spec/spec_helper.rb b/gems/binary-merge/spec/spec_helper.rb
index 0b1239196..1fa393208 100644
--- a/gems/binary-merge/spec/spec_helper.rb
+++ b/gems/binary-merge/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/citrus-toml-merge/.kettle-drift.lock b/gems/citrus-toml-merge/.kettle-drift.lock
deleted file mode 100644
index aa01ca527..000000000
--- a/gems/citrus-toml-merge/.kettle-drift.lock
+++ /dev/null
@@ -1,317 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 90,
- 130,
- 170,
- 210,
- 250,
- 290,
- 330,
- 370
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 95,
- 135,
- 175,
- 215,
- 255,
- 295,
- 335,
- 375
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 59,
- 99,
- 139,
- 179,
- 219,
- 259,
- 299,
- 339,
- 379
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 42,
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 34,
- 78,
- 118,
- 158,
- 198,
- 238,
- 278,
- 318,
- 358
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 68,
- 108,
- 148,
- 188,
- 228,
- 268,
- 308,
- 348,
- 388
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 84,
- 124,
- 164,
- 204,
- 244,
- 284,
- 324,
- 364
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 47,
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 105,
- 145,
- 185,
- 225,
- 265,
- 305,
- 345,
- 385
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/citrus-toml-merge/.rubocop_gradual.lock b/gems/citrus-toml-merge/.rubocop_gradual.lock
index 6289f37c0..e33f5ebd3 100644
--- a/gems/citrus-toml-merge/.rubocop_gradual.lock
+++ b/gems/citrus-toml-merge/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:362090062": [
+ ".simplecov:1357546901": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:1269082253": [
@@ -21,13 +21,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -63,6 +70,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -72,10 +86,10 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
@@ -90,11 +104,11 @@
[76, 7, 1663, "Metrics/MethodLength: Method has too many lines. [27/10]", 3550313116],
[139, 7, 17, "Style/Documentation: Missing top-level documentation comment for `class Citrus::Toml::Merge::SmartMerger`.", 497427992]
],
- "spec/fixtures_integration_spec.rb:239117620": [
- [3, 1, 7226, "Metrics/BlockLength: Block has too many lines. [159/25]", 3966119837],
- [26, 3, 1318, "Metrics/BlockLength: Block has too many lines. [34/25]", 4255752267],
- [64, 3, 2344, "Metrics/BlockLength: Block has too many lines. [36/25]", 228336363],
- [114, 3, 1129, "Metrics/BlockLength: Block has too many lines. [27/25]", 2358141919],
- [152, 3, 1419, "Metrics/BlockLength: Block has too many lines. [29/25]", 944475815]
+ "spec/fixtures_integration_spec.rb:288074396": [
+ [3, 1, 7435, "Metrics/BlockLength: Block has too many lines. [163/25]", 3966119837],
+ [26, 3, 1531, "Metrics/BlockLength: Block has too many lines. [38/25]", 106015755],
+ [68, 3, 2344, "Metrics/BlockLength: Block has too many lines. [36/25]", 228336363],
+ [118, 3, 1125, "Metrics/BlockLength: Block has too many lines. [27/25]", 2358141919],
+ [156, 3, 1419, "Metrics/BlockLength: Block has too many lines. [29/25]", 944475815]
]
}
diff --git a/gems/citrus-toml-merge/.simplecov b/gems/citrus-toml-merge/.simplecov
index 1de125497..b7eba922f 100644
--- a/gems/citrus-toml-merge/.simplecov
+++ b/gems/citrus-toml-merge/.simplecov
@@ -4,15 +4,11 @@
# citrus-toml-merge will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/citrus-toml-merge/.structuredmerge/kettle-jem.yml b/gems/citrus-toml-merge/.structuredmerge/kettle-jem.yml
index 3db063133..fe3da1912 100644
--- a/gems/citrus-toml-merge/.structuredmerge/kettle-jem.yml
+++ b/gems/citrus-toml-merge/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/citrus/toml/merge/version.rb
- source: sig/gem.rbs
diff --git a/gems/citrus-toml-merge/Gemfile b/gems/citrus-toml-merge/Gemfile
index aae6101f4..44413c221 100644
--- a/gems/citrus-toml-merge/Gemfile
+++ b/gems/citrus-toml-merge/Gemfile
@@ -36,300 +36,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -338,8 +46,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -351,62 +57,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -414,7 +66,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/citrus-toml-merge/Gemfile.lock b/gems/citrus-toml-merge/Gemfile.lock
index 417371cb2..b0fad6c67 100644
--- a/gems/citrus-toml-merge/Gemfile.lock
+++ b/gems/citrus-toml-merge/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
toml-rb (~> 4.1)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +16,26 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +43,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +73,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +92,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +116,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,21 +125,10 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
- nokogiri (1.19.4-aarch64-linux-gnu)
- racc (~> 1.4)
- nokogiri (1.19.4-aarch64-linux-musl)
- racc (~> 1.4)
- nokogiri (1.19.4-arm64-darwin)
- racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-linux-musl)
- racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +149,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +204,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +219,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +258,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +279,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +307,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +330,23 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
+ version_gem (~> 1.1, >= 1.1.14)
+ toml-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
toml-rb (4.2.0)
citrus (~> 3.0, > 3.0)
racc (~> 1.7)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +356,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -624,120 +383,77 @@ GEM
zlib (3.2.3)
PLATFORMS
- aarch64-linux
- aarch64-linux-gnu
- aarch64-linux-musl
- arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
- x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
+ cgi (~> 0.5)
citrus-toml-merge!
- commonmarker-merge!
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,61 +462,42 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
- nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
- nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
- nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
- nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +515,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +554,18 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
toml-merge (7.1.0)
toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,8 +573,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/citrus-toml-merge/LICENSE.md b/gems/citrus-toml-merge/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/citrus-toml-merge/LICENSE.md
+++ b/gems/citrus-toml-merge/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/citrus-toml-merge/README.md b/gems/citrus-toml-merge/README.md
index 588d76f25..ff5c73ad1 100644
--- a/gems/citrus-toml-merge/README.md
+++ b/gems/citrus-toml-merge/README.md
@@ -36,8 +36,8 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -155,7 +155,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -181,6 +181,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/citrus-toml-merge
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Citrus::Toml::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -225,7 +227,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/citrus-toml-merge
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/citrus-toml-merge
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/citrus-toml-merge
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/citrus-toml-merge/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/citrus-toml-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/citrus-toml-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/citrus-toml-merge/gemfiles/modular/cgi/vHEAD.gemfile b/gems/citrus-toml-merge/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/citrus-toml-merge/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/citrus-toml-merge/gemfiles/modular/coverage.gemfile b/gems/citrus-toml-merge/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/coverage.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/citrus-toml-merge/gemfiles/modular/coverage_local.gemfile b/gems/citrus-toml-merge/gemfiles/modular/coverage_local.gemfile
index 98bc58e61..c1c13016f 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/coverage_local.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[citrus-toml-merge] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/citrus-toml-merge/gemfiles/modular/documentation.gemfile b/gems/citrus-toml-merge/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/documentation.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/citrus-toml-merge/gemfiles/modular/documentation_local.gemfile b/gems/citrus-toml-merge/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..6178e151b 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/documentation_local.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[citrus-toml-merge] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/citrus-toml-merge/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/citrus-toml-merge/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/citrus-toml-merge/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/citrus-toml-merge/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/citrus-toml-merge/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/citrus-toml-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/citrus-toml-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/citrus-toml-merge/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/citrus-toml-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/citrus-toml-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/citrus-toml-merge/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/citrus-toml-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/citrus-toml-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/citrus-toml-merge/gemfiles/modular/optional.gemfile b/gems/citrus-toml-merge/gemfiles/modular/optional.gemfile
index a882197e1..9ea429538 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/optional.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during citrus-toml-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/citrus-toml-merge/gemfiles/modular/runtime_heads.gemfile b/gems/citrus-toml-merge/gemfiles/modular/runtime_heads.gemfile
index 889fad33e..ebf17c529 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during citrus-toml-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/citrus-toml-merge/gemfiles/modular/style.gemfile b/gems/citrus-toml-merge/gemfiles/modular/style.gemfile
index 73b898465..4dbcc02c0 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/style.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during citrus-toml-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/citrus-toml-merge/gemfiles/modular/style_local.gemfile b/gems/citrus-toml-merge/gemfiles/modular/style_local.gemfile
index ce75bbe21..7300ff6dd 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/style_local.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[citrus-toml-merge] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/citrus-toml-merge/gemfiles/modular/templating.gemfile b/gems/citrus-toml-merge/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/templating.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/citrus-toml-merge/gemfiles/modular/templating_local.gemfile b/gems/citrus-toml-merge/gemfiles/modular/templating_local.gemfile
index 261a205a9..097c8e84b 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/templating_local.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[citrus-toml-merge] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[citrus-toml-merge] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[citrus-toml-merge] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/citrus-toml-merge/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/citrus-toml-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/citrus-toml-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/citrus-toml-merge/gemfiles/modular/webrick/vHEAD.gemfile b/gems/citrus-toml-merge/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/citrus-toml-merge/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/citrus-toml-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/citrus-toml-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/citrus-toml-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/citrus-toml-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/citrus-toml-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/citrus-toml-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/citrus-toml-merge/spec/fixtures_integration_spec.rb b/gems/citrus-toml-merge/spec/fixtures_integration_spec.rb
index 845508dae..5871a51a9 100644
--- a/gems/citrus-toml-merge/spec/fixtures_integration_spec.rb
+++ b/gems/citrus-toml-merge/spec/fixtures_integration_spec.rb
@@ -124,7 +124,7 @@ def json_ready(value)
[[profiles.semantic-diff.attributes]]
pattern = "*.rb"
- diff = "smorg-ruby"
+ diff = "smorg-rb"
[profiles.textconv-normalized]
description = "Template-only profile"
@@ -150,7 +150,7 @@ def json_ready(value)
expect(result.fetch(:output)).to include('diff = "smorg-rb"')
expect(result.fetch(:output)).to include('description = "Destination driver"')
expect(result.fetch(:output)).to include('[[profiles.textconv-normalized.attributes]]')
- expect(result.fetch(:output)).not_to include('smorg-ruby')
+ expect(result.fetch(:output)).not_to include('smorg-rb')
end
it 'conforms to the provider named-suite plan and manifest-report fixtures' do
diff --git a/gems/citrus-toml-merge/spec/spec_helper.rb b/gems/citrus-toml-merge/spec/spec_helper.rb
index 5799adcf5..e65766c08 100644
--- a/gems/citrus-toml-merge/spec/spec_helper.rb
+++ b/gems/citrus-toml-merge/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/commonmarker-merge/.kettle-drift.lock b/gems/commonmarker-merge/.kettle-drift.lock
deleted file mode 100644
index aa01ca527..000000000
--- a/gems/commonmarker-merge/.kettle-drift.lock
+++ /dev/null
@@ -1,317 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 90,
- 130,
- 170,
- 210,
- 250,
- 290,
- 330,
- 370
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 95,
- 135,
- 175,
- 215,
- 255,
- 295,
- 335,
- 375
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 59,
- 99,
- 139,
- 179,
- 219,
- 259,
- 299,
- 339,
- 379
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 42,
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 34,
- 78,
- 118,
- 158,
- 198,
- 238,
- 278,
- 318,
- 358
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 68,
- 108,
- 148,
- 188,
- 228,
- 268,
- 308,
- 348,
- 388
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 84,
- 124,
- 164,
- 204,
- 244,
- 284,
- 324,
- 364
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 47,
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 105,
- 145,
- 185,
- 225,
- 265,
- 305,
- 345,
- 385
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/commonmarker-merge/.rubocop_gradual.lock b/gems/commonmarker-merge/.rubocop_gradual.lock
index 4c6b37486..5fd34e943 100644
--- a/gems/commonmarker-merge/.rubocop_gradual.lock
+++ b/gems/commonmarker-merge/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:4284607950": [
+ ".simplecov:1669031189": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:3938625005": [
@@ -21,13 +21,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -63,6 +70,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -72,10 +86,10 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
@@ -108,11 +122,11 @@
[84, 3, 1236, "Metrics/BlockLength: Block has too many lines. [30/25]", 503179966],
[84, 121, 32, "Layout/LineLength: Line is too long. [152/120]", 567791365]
],
- "spec/fixtures_integration_spec.rb:1689727681": [
- [3, 1, 11865, "Metrics/BlockLength: Block has too many lines. [255/25]", 1947740819],
+ "spec/fixtures_integration_spec.rb:1779667956": [
+ [3, 1, 13039, "Metrics/BlockLength: Block has too many lines. [276/25]", 2065862761],
[16, 3, 1373, "Metrics/BlockLength: Block has too many lines. [30/25]", 489033777],
- [128, 3, 1353, "Metrics/BlockLength: Block has too many lines. [26/25]", 2630958569],
- [211, 3, 1352, "Metrics/BlockLength: Block has too many lines. [30/25]", 2376182886],
- [246, 3, 1402, "Metrics/BlockLength: Block has too many lines. [29/25]", 3678391303]
+ [152, 3, 1353, "Metrics/BlockLength: Block has too many lines. [26/25]", 2630958569],
+ [235, 3, 1352, "Metrics/BlockLength: Block has too many lines. [30/25]", 2376182886],
+ [270, 3, 1402, "Metrics/BlockLength: Block has too many lines. [29/25]", 3678391303]
]
}
diff --git a/gems/commonmarker-merge/.simplecov b/gems/commonmarker-merge/.simplecov
index dfe720b1e..b67501a5b 100644
--- a/gems/commonmarker-merge/.simplecov
+++ b/gems/commonmarker-merge/.simplecov
@@ -4,15 +4,11 @@
# commonmarker-merge will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/commonmarker-merge/.structuredmerge/kettle-jem.yml b/gems/commonmarker-merge/.structuredmerge/kettle-jem.yml
index bbb2c1cd6..ee8cba9af 100644
--- a/gems/commonmarker-merge/.structuredmerge/kettle-jem.yml
+++ b/gems/commonmarker-merge/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/commonmarker/merge/version.rb
- source: sig/gem.rbs
diff --git a/gems/commonmarker-merge/Gemfile b/gems/commonmarker-merge/Gemfile
index f297363e2..49d52ab36 100644
--- a/gems/commonmarker-merge/Gemfile
+++ b/gems/commonmarker-merge/Gemfile
@@ -36,300 +36,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -338,8 +46,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -351,62 +57,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -414,7 +66,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/commonmarker-merge/Gemfile.lock b/gems/commonmarker-merge/Gemfile.lock
index 55e28bf0c..6c797759b 100644
--- a/gems/commonmarker-merge/Gemfile.lock
+++ b/gems/commonmarker-merge/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
markdown-merge (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +16,27 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +44,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +74,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +93,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +117,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,21 +126,14 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
+ markdown-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
mutex_m (0.3.0)
- nokogiri (1.19.4-aarch64-linux-gnu)
- racc (~> 1.4)
- nokogiri (1.19.4-aarch64-linux-musl)
- racc (~> 1.4)
- nokogiri (1.19.4-arm64-darwin)
- racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-linux-musl)
- racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +154,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +209,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +224,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +263,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +284,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +312,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +335,16 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +354,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -624,120 +381,78 @@ GEM
zlib (3.2.3)
PLATFORMS
- aarch64-linux
- aarch64-linux-gnu
- aarch64-linux-musl
- arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
- x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
+ cgi (~> 0.5)
commonmarker-merge!
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,61 +461,43 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
- nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
- nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
- nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
- nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +515,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +554,16 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,8 +571,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/commonmarker-merge/LICENSE.md b/gems/commonmarker-merge/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/commonmarker-merge/LICENSE.md
+++ b/gems/commonmarker-merge/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/commonmarker-merge/README.md b/gems/commonmarker-merge/README.md
index e97e1bf91..38ba266f6 100644
--- a/gems/commonmarker-merge/README.md
+++ b/gems/commonmarker-merge/README.md
@@ -59,8 +59,8 @@ Section-local `replace_mode` / partial-template behavior still follows its own c
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -391,7 +391,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -417,6 +417,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/commonmarker-merge
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Commonmarker::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -461,7 +463,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/commonmarker-merge
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/commonmarker-merge
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/commonmarker-merge
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/commonmarker-merge/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/commonmarker-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/commonmarker-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/commonmarker-merge/gemfiles/modular/cgi/vHEAD.gemfile b/gems/commonmarker-merge/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/commonmarker-merge/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/commonmarker-merge/gemfiles/modular/coverage.gemfile b/gems/commonmarker-merge/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/commonmarker-merge/gemfiles/modular/coverage.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/commonmarker-merge/gemfiles/modular/coverage_local.gemfile b/gems/commonmarker-merge/gemfiles/modular/coverage_local.gemfile
index fcf991a8f..af5446b28 100644
--- a/gems/commonmarker-merge/gemfiles/modular/coverage_local.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[commonmarker-merge] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/commonmarker-merge/gemfiles/modular/documentation.gemfile b/gems/commonmarker-merge/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/commonmarker-merge/gemfiles/modular/documentation.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/commonmarker-merge/gemfiles/modular/documentation_local.gemfile b/gems/commonmarker-merge/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..4eb435c3c 100644
--- a/gems/commonmarker-merge/gemfiles/modular/documentation_local.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[commonmarker-merge] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/commonmarker-merge/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/commonmarker-merge/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/commonmarker-merge/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/commonmarker-merge/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/commonmarker-merge/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/commonmarker-merge/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/commonmarker-merge/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/commonmarker-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/commonmarker-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/commonmarker-merge/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/commonmarker-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/commonmarker-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/commonmarker-merge/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/commonmarker-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/commonmarker-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/commonmarker-merge/gemfiles/modular/optional.gemfile b/gems/commonmarker-merge/gemfiles/modular/optional.gemfile
index 99a0a238e..9ea429538 100644
--- a/gems/commonmarker-merge/gemfiles/modular/optional.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during commonmarker-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/commonmarker-merge/gemfiles/modular/runtime_heads.gemfile b/gems/commonmarker-merge/gemfiles/modular/runtime_heads.gemfile
index 10d179e46..ebf17c529 100644
--- a/gems/commonmarker-merge/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during commonmarker-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/commonmarker-merge/gemfiles/modular/style.gemfile b/gems/commonmarker-merge/gemfiles/modular/style.gemfile
index 88acc000d..4dbcc02c0 100644
--- a/gems/commonmarker-merge/gemfiles/modular/style.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during commonmarker-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/commonmarker-merge/gemfiles/modular/style_local.gemfile b/gems/commonmarker-merge/gemfiles/modular/style_local.gemfile
index ce75bbe21..8e86b91bd 100644
--- a/gems/commonmarker-merge/gemfiles/modular/style_local.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[commonmarker-merge] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/commonmarker-merge/gemfiles/modular/templating.gemfile b/gems/commonmarker-merge/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/commonmarker-merge/gemfiles/modular/templating.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/commonmarker-merge/gemfiles/modular/templating_local.gemfile b/gems/commonmarker-merge/gemfiles/modular/templating_local.gemfile
index 6a0007463..83a9258e2 100644
--- a/gems/commonmarker-merge/gemfiles/modular/templating_local.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[commonmarker-merge] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[commonmarker-merge] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[commonmarker-merge] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/commonmarker-merge/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/commonmarker-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/commonmarker-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/commonmarker-merge/gemfiles/modular/webrick/vHEAD.gemfile b/gems/commonmarker-merge/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/commonmarker-merge/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/commonmarker-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/commonmarker-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/commonmarker-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/commonmarker-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/commonmarker-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/commonmarker-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/commonmarker-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/commonmarker-merge/spec/spec_helper.rb b/gems/commonmarker-merge/spec/spec_helper.rb
index b9fa0a9f3..7e8958c35 100644
--- a/gems/commonmarker-merge/spec/spec_helper.rb
+++ b/gems/commonmarker-merge/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/dotenv-merge/.kettle-drift.lock b/gems/dotenv-merge/.kettle-drift.lock
deleted file mode 100644
index 09df60df7..000000000
--- a/gems/dotenv-merge/.kettle-drift.lock
+++ /dev/null
@@ -1,317 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 93,
- 133,
- 173,
- 213,
- 253,
- 293,
- 333,
- 373
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 82,
- 122,
- 162,
- 202,
- 242,
- 282,
- 322,
- 362
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 60,
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 110,
- 150,
- 190,
- 230,
- 270,
- 310,
- 350,
- 390
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 35,
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 69,
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 48,
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 44,
- 88,
- 128,
- 168,
- 208,
- 248,
- 288,
- 328,
- 368
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 103,
- 143,
- 183,
- 223,
- 263,
- 303,
- 343,
- 383
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 97,
- 137,
- 177,
- 217,
- 257,
- 297,
- 337,
- 377
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 106,
- 146,
- 186,
- 226,
- 266,
- 306,
- 346,
- 386
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/dotenv-merge/.rubocop_gradual.lock b/gems/dotenv-merge/.rubocop_gradual.lock
index 238683cd4..3228da656 100644
--- a/gems/dotenv-merge/.rubocop_gradual.lock
+++ b/gems/dotenv-merge/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:811436142": [
+ ".simplecov:1840448245": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:3735002317": [
@@ -8,9 +8,10 @@
[163, 121, 22, "Layout/LineLength: Line is too long. [142/120]", 1367093088],
[166, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 3881946477]
],
- "dotenv-merge.gemspec:3219964147": [
+ "dotenv-merge.gemspec:588032134": [
[125, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 2821357214],
- [133, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949]
+ [136, 121, 50, "Layout/LineLength: Line is too long. [170/120]", 3888612416],
+ [137, 121, 29, "Layout/LineLength: Line is too long. [149/120]", 981994949]
],
"gemfiles/modular/benchmark/r4/v0.5.gemfile:3644720371": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
@@ -19,13 +20,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -61,6 +69,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -70,10 +85,10 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
@@ -103,34 +118,26 @@
[315, 7, 908, "Metrics/MethodLength: Method has too many lines. [18/10]", 3290540918],
[315, 7, 908, "Metrics/PerceivedComplexity: Perceived complexity for `integrate_freeze_blocks` is too high. [11/8]", 3290540918]
],
- "lib/dotenv/merge/smart_merger.rb:4110302585": [
- [27, 5, 20190, "Metrics/ClassLength: Class has too many lines. [398/100]", 2164846336],
- [52, 7, 1092, "Metrics/MethodLength: Method has too many lines. [16/10]", 2908064588],
- [52, 21, 401, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [13/5]", 1661881927],
- [126, 7, 2338, "Metrics/AbcSize: Assignment Branch Condition size for `perform_merge` is too high. [<17, 42, 7> 45.85/17]", 2431495447],
- [126, 7, 2338, "Metrics/MethodLength: Method has too many lines. [49/10]", 2431495447],
- [235, 7, 733, "Metrics/MethodLength: Method has too many lines. [11/10]", 3293257138],
- [260, 7, 331, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `apply_node_typing` is too high. [8/7]", 1465922549],
- [272, 7, 680, "Metrics/MethodLength: Method has too many lines. [11/10]", 4253249620],
- [300, 7, 602, "Metrics/MethodLength: Method has too many lines. [12/10]", 1142282607],
- [364, 7, 1110, "Metrics/AbcSize: Assignment Branch Condition size for `root_boundary_lines_for` is too high. [<7, 29, 24> 38.29/17]", 3853137527],
- [364, 7, 1110, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `root_boundary_lines_for` is too high. [22/7]", 3853137527],
- [364, 7, 1110, "Metrics/MethodLength: Method has too many lines. [21/10]", 3853137527],
- [364, 7, 1110, "Metrics/PerceivedComplexity: Perceived complexity for `root_boundary_lines_for` is too high. [21/8]", 3853137527],
- [392, 7, 732, "Metrics/AbcSize: Assignment Branch Condition size for `emission_start_line_for` is too high. [<4, 17, 10> 20.12/17]", 2147944725],
- [392, 7, 732, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emission_start_line_for` is too high. [9/7]", 2147944725],
- [392, 7, 732, "Metrics/MethodLength: Method has too many lines. [12/10]", 2147944725],
- [392, 7, 732, "Metrics/PerceivedComplexity: Perceived complexity for `emission_start_line_for` is too high. [10/8]", 2147944725],
- [413, 7, 1134, "Metrics/MethodLength: Method has too many lines. [15/10]", 3700686114],
- [413, 25, 239, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 406985461],
- [440, 7, 712, "Metrics/MethodLength: Method has too many lines. [13/10]", 3393691510],
- [506, 7, 1797, "Metrics/AbcSize: Assignment Branch Condition size for `collapse_cross_source_preamble_prefixes` is too high. [<14, 21, 9> 26.8/17]", 3130187278],
- [506, 7, 1797, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `collapse_cross_source_preamble_prefixes` is too high. [9/7]", 3130187278],
- [506, 7, 1797, "Metrics/MethodLength: Method has too many lines. [31/10]", 3130187278],
- [506, 7, 1797, "Metrics/PerceivedComplexity: Perceived complexity for `collapse_cross_source_preamble_prefixes` is too high. [9/8]", 3130187278],
- [546, 7, 536, "Metrics/MethodLength: Method has too many lines. [15/10]", 4188914818]
- ],
- "spec/dotenv/merge/comment_behavior_matrix_spec.rb:4260851990": [
+ "lib/dotenv/merge/smart_merger.rb:1416653553": [
+ [27, 5, 19504, "Metrics/ClassLength: Class has too many lines. [379/100]", 1271421201],
+ [53, 7, 1092, "Metrics/MethodLength: Method has too many lines. [16/10]", 2908064588],
+ [53, 21, 401, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [13/5]", 1661881927],
+ [127, 7, 2338, "Metrics/AbcSize: Assignment Branch Condition size for `perform_merge` is too high. [<17, 42, 7> 45.85/17]", 2431495447],
+ [127, 7, 2338, "Metrics/MethodLength: Method has too many lines. [49/10]", 2431495447],
+ [237, 7, 733, "Metrics/MethodLength: Method has too many lines. [11/10]", 3293257138],
+ [262, 7, 331, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `apply_node_typing` is too high. [8/7]", 1465922549],
+ [274, 7, 680, "Metrics/MethodLength: Method has too many lines. [11/10]", 4253249620],
+ [302, 7, 707, "Metrics/MethodLength: Method has too many lines. [13/10]", 657590111],
+ [386, 7, 1134, "Metrics/MethodLength: Method has too many lines. [15/10]", 3700686114],
+ [386, 25, 239, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [7/5]", 406985461],
+ [469, 7, 1797, "Metrics/AbcSize: Assignment Branch Condition size for `collapse_cross_source_preamble_prefixes` is too high. [<14, 21, 9> 26.8/17]", 3130187278],
+ [469, 7, 1797, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `collapse_cross_source_preamble_prefixes` is too high. [9/7]", 3130187278],
+ [469, 7, 1797, "Metrics/MethodLength: Method has too many lines. [31/10]", 3130187278],
+ [469, 7, 1797, "Metrics/PerceivedComplexity: Perceived complexity for `collapse_cross_source_preamble_prefixes` is too high. [9/8]", 3130187278],
+ [509, 7, 536, "Metrics/MethodLength: Method has too many lines. [15/10]", 4188914818],
+ [537, 121, 2, "Layout/LineLength: Line is too long. [122/120]", 5861122]
+ ],
+ "spec/dotenv/merge/comment_behavior_matrix_spec.rb:3919059317": [
[13, 37, 15, "Style/SymbolProc: Pass `&:value` as an argument to `lambda` instead of a block.", 1808354951],
[19, 121, 72, "Layout/LineLength: Line is too long. [192/120]", 727266440],
[20, 121, 81, "Layout/LineLength: Line is too long. [201/120]", 2338882412],
diff --git a/gems/dotenv-merge/.simplecov b/gems/dotenv-merge/.simplecov
index d19d8f8ae..c52abed5a 100644
--- a/gems/dotenv-merge/.simplecov
+++ b/gems/dotenv-merge/.simplecov
@@ -4,15 +4,11 @@
# dotenv-merge will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/dotenv-merge/.structuredmerge/kettle-jem.yml b/gems/dotenv-merge/.structuredmerge/kettle-jem.yml
index 2fdedc239..6950419f1 100644
--- a/gems/dotenv-merge/.structuredmerge/kettle-jem.yml
+++ b/gems/dotenv-merge/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/dotenv/merge/version.rb
- source: sig/gem.rbs
diff --git a/gems/dotenv-merge/Gemfile b/gems/dotenv-merge/Gemfile
index 65f59a20f..896f87567 100644
--- a/gems/dotenv-merge/Gemfile
+++ b/gems/dotenv-merge/Gemfile
@@ -37,300 +37,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -339,8 +47,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -352,62 +58,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -415,7 +67,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/dotenv-merge/Gemfile.lock b/gems/dotenv-merge/Gemfile.lock
index cd091eb7c..e69528854 100644
--- a/gems/dotenv-merge/Gemfile.lock
+++ b/gems/dotenv-merge/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
tree_haver (= 7.1.0)
version_gem (~> 1.1, >= 1.1.14)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +16,26 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +43,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +73,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +92,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +116,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,7 +125,6 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
nokogiri (1.19.4-aarch64-linux-gnu)
racc (~> 1.4)
@@ -398,13 +132,11 @@ GEM
racc (~> 1.4)
nokogiri (1.19.4-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-musl)
racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +157,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +212,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +227,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +266,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +287,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +315,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +338,20 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-aarch64-linux)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-arm64-darwin)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +361,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -628,116 +392,78 @@ PLATFORMS
aarch64-linux-gnu
aarch64-linux-musl
arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.2, >= 3.2.0)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.4)
- go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.3, >= 2.3.7)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
- kettle-test (~> 2.0, >= 2.0.11)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
+ kettle-test (~> 2.0, >= 2.0.12)
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
- stone_checksums (~> 1.0, >= 1.0.6, >= 1.0.3)
+ standard (~> 1.56, >= 1.56.0)
+ stone_checksums (~> 1.0, >= 1.0.6)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
turbo_tests2 (~> 3.2, >= 3.2.0)
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
@@ -747,61 +473,46 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -819,35 +530,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -856,20 +569,18 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4
+ tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -877,8 +588,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/dotenv-merge/LICENSE.md b/gems/dotenv-merge/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/dotenv-merge/LICENSE.md
+++ b/gems/dotenv-merge/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/dotenv-merge/README.md b/gems/dotenv-merge/README.md
index 8c8d767f7..8946d5ee5 100644
--- a/gems/dotenv-merge/README.md
+++ b/gems/dotenv-merge/README.md
@@ -72,8 +72,8 @@ File.write("merged.env", result.to_s)
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -255,7 +255,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -281,6 +281,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/dotenv-merge
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Dotenv::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -325,7 +327,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/dotenv-merge
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/dotenv-merge
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/dotenv-merge
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/dotenv-merge/dotenv-merge.gemspec b/gems/dotenv-merge/dotenv-merge.gemspec
index c57163a6e..0a1c8406a 100644
--- a/gems/dotenv-merge/dotenv-merge.gemspec
+++ b/gems/dotenv-merge/dotenv-merge.gemspec
@@ -123,13 +123,17 @@ Gem::Specification.new do |spec|
# Testing
spec.add_development_dependency('appraisal2', '~> 3.2', '>= 3.2.0') # ruby >= 1.8.7, for testing against multiple versions of dependencies
- spec.add_development_dependency('kettle-test', '~> 2.0', '>= 2.0.11') # ruby >= 4.0.0
+ spec.add_development_dependency('kettle-test', '~> 2.0', '>= 2.0.12') # ruby >= 4.0.0
spec.add_development_dependency('turbo_tests2', '~> 3.2', '>= 3.2.0') # ruby >= 2.4.0, default kettle-test runner
# Releasing
spec.add_development_dependency('ruby-progressbar', '~> 1.13') # ruby >= 0
spec.add_development_dependency('stone_checksums', '~> 1.0', '>= 1.0.6') # ruby >= 2.2.0
+ # Development tasks
+ # The cake is a lie. erb v2.2, the oldest release, was never compatible with Ruby 2.3.
+ # This means we have no choice but to use the erb that shipped with Ruby 2.3
+ # /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError)
# spec.add_development_dependency("erb", ">= 2.2") # ruby >= 2.3.0, not SemVer, old rubies get dropped in a patch.
spec.add_development_dependency('gitmoji-regex', '~> 2.0', '>= 2.0.4') # ruby >= 2.4
end
diff --git a/gems/dotenv-merge/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/dotenv-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/dotenv-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/dotenv-merge/gemfiles/modular/cgi/vHEAD.gemfile b/gems/dotenv-merge/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/dotenv-merge/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/dotenv-merge/gemfiles/modular/coverage.gemfile b/gems/dotenv-merge/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/dotenv-merge/gemfiles/modular/coverage.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/dotenv-merge/gemfiles/modular/coverage_local.gemfile b/gems/dotenv-merge/gemfiles/modular/coverage_local.gemfile
index 42978107b..b2acaef20 100644
--- a/gems/dotenv-merge/gemfiles/modular/coverage_local.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[dotenv-merge] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/dotenv-merge/gemfiles/modular/documentation.gemfile b/gems/dotenv-merge/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/dotenv-merge/gemfiles/modular/documentation.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/dotenv-merge/gemfiles/modular/documentation_local.gemfile b/gems/dotenv-merge/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..c02fbb6fe 100644
--- a/gems/dotenv-merge/gemfiles/modular/documentation_local.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[dotenv-merge] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/dotenv-merge/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/dotenv-merge/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/dotenv-merge/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/dotenv-merge/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/dotenv-merge/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/dotenv-merge/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/dotenv-merge/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/dotenv-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/dotenv-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/dotenv-merge/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/dotenv-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/dotenv-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/dotenv-merge/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/dotenv-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/dotenv-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/dotenv-merge/gemfiles/modular/optional.gemfile b/gems/dotenv-merge/gemfiles/modular/optional.gemfile
index 7893db4ec..9ea429538 100644
--- a/gems/dotenv-merge/gemfiles/modular/optional.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during dotenv-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/dotenv-merge/gemfiles/modular/runtime_heads.gemfile b/gems/dotenv-merge/gemfiles/modular/runtime_heads.gemfile
index 3b75162dc..ebf17c529 100644
--- a/gems/dotenv-merge/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during dotenv-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/dotenv-merge/gemfiles/modular/style.gemfile b/gems/dotenv-merge/gemfiles/modular/style.gemfile
index 325fe5d0f..4dbcc02c0 100644
--- a/gems/dotenv-merge/gemfiles/modular/style.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during dotenv-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/dotenv-merge/gemfiles/modular/style_local.gemfile b/gems/dotenv-merge/gemfiles/modular/style_local.gemfile
index ce75bbe21..e5dd1c6d0 100644
--- a/gems/dotenv-merge/gemfiles/modular/style_local.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[dotenv-merge] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/dotenv-merge/gemfiles/modular/templating.gemfile b/gems/dotenv-merge/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/dotenv-merge/gemfiles/modular/templating.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/dotenv-merge/gemfiles/modular/templating_local.gemfile b/gems/dotenv-merge/gemfiles/modular/templating_local.gemfile
index 926fc36d5..82acb636f 100644
--- a/gems/dotenv-merge/gemfiles/modular/templating_local.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[dotenv-merge] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[dotenv-merge] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[dotenv-merge] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/dotenv-merge/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/dotenv-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/dotenv-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/dotenv-merge/gemfiles/modular/webrick/vHEAD.gemfile b/gems/dotenv-merge/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/dotenv-merge/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/dotenv-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/dotenv-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/dotenv-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/dotenv-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/dotenv-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/dotenv-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/dotenv-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/dotenv-merge/lib/dotenv/merge/smart_merger.rb b/gems/dotenv-merge/lib/dotenv/merge/smart_merger.rb
index 6480674e7..e89e4d959 100644
--- a/gems/dotenv-merge/lib/dotenv/merge/smart_merger.rb
+++ b/gems/dotenv-merge/lib/dotenv/merge/smart_merger.rb
@@ -26,6 +26,7 @@ module Merge
# preference: { default: :destination, secret: :template })
class SmartMerger < ::Ast::Merge::SmartMergerBase
include Ast::Merge::TrailingGroups::DestIterate
+ include Ast::Merge::CommentLayoutEmissionSupport
attr_reader :corruption_handling
@@ -224,6 +225,7 @@ def process_match(template_stmt, dest_stmt)
when :template
emit_template_preferred_match(template_stmt, dest_stmt)
else
+ add_retained_leading_gap(dest_stmt, @dest_analysis, decision: MergeResult::DECISION_DESTINATION)
@result.add_raw(node_lines_for(dest_stmt, @dest_analysis), decision: MergeResult::DECISION_DESTINATION)
end
end
@@ -300,6 +302,7 @@ def process_dest_only(dest_stmt, _dest_index)
def emit_template_preferred_match(template_stmt, dest_stmt)
comment_source_node, comment_source_analysis = preferred_comment_source_for(template_stmt, dest_stmt)
inline_comment = preferred_inline_comment_for(template_stmt, dest_stmt)
+ add_retained_leading_gap(dest_stmt, @dest_analysis, decision: MergeResult::DECISION_DESTINATION)
@result.add_raw(
node_lines_for(
template_stmt,
@@ -362,48 +365,18 @@ def emit_root_boundary(kind)
end
def root_boundary_lines_for(kind, analysis)
- owners = Array(analysis.structural_owners).select do |owner|
- owner.respond_to?(:start_line) && owner.respond_to?(:end_line) && owner.start_line && owner.end_line
- end
-
- if kind == :preamble && owners.empty? && analysis.respond_to?(:lines) && analysis.lines.any?
- return analysis.lines.map(&:raw)
- end
- return [] if owners.empty?
-
- case kind
- when :preamble
- first_owner = owners.min_by(&:start_line)
- start_line = emission_start_line_for(first_owner, analysis)
- return [] unless start_line && start_line > 1
-
- (1...start_line).filter_map { |line_number| raw_line_at(analysis, line_number) }
- when :postlude
- last_line = owners.map(&:end_line).compact.max
- return [] unless last_line && analysis.respond_to?(:lines)
- return [] if last_line >= analysis.lines.length
-
- ((last_line + 1)..analysis.lines.length).filter_map { |line_number| raw_line_at(analysis, line_number) }
- else
- []
- end
+ super(kind, analysis, owners: analysis.structural_owners, fallback_to_owner_bounds: true)
end
def emission_start_line_for(node, analysis)
- attachment = analysis.comment_attachment_for(node)
- leading_region = attachment&.leading_region
- start_line = if leading_region&.start_line
- leading_region.start_line
- elsif first_structural_owner?(node,
- analysis) && analysis.comment_augmenter.preamble_region&.start_line
- analysis.comment_augmenter.preamble_region.start_line
- else
- node.start_line
- end
-
- start_line -= 1 while start_line > 1 && raw_line_at(analysis, start_line - 1).to_s.strip.empty?
+ region_start = region_start_line(leading_region_for(node, analysis))
+ preamble_start = analysis.comment_augmenter.preamble_region&.start_line if first_structural_owner?(node,
+ analysis)
+ preceding_blank_line_start(region_start || preamble_start || node.start_line, analysis)
+ end
- start_line
+ def root_boundary_owner_start_line_for(node, analysis)
+ emission_start_line_for(node, analysis)
end
def first_structural_owner?(node, analysis)
@@ -437,40 +410,30 @@ def node_lines_for(
leading_lines + apply_inline_comment(node_lines, inline_comment) + trailing_lines
end
- def removed_destination_comment_lines_for(node)
- lines = leading_segment_lines_for(node, @dest_analysis)
- attachment = @dest_analysis.comment_attachment_for(node)
+ def add_retained_leading_gap(node, analysis, decision:)
+ lines = retained_owner_leading_gap_lines_for(node, analysis, owners: analysis.structural_owners)
+ return if lines.empty?
- if (inline_comment = destination_inline_comment_for(node))
- lines << promoted_inline_comment_line_for(node, @dest_analysis, inline_comment)
- end
+ @result.add_raw(lines, decision: decision)
+ end
- if (trailing_region = attachment&.trailing_region)
- lines.concat(trailing_region.text.split("\n"))
- end
+ def removed_destination_comment_lines_for(node)
+ inline_lines = []
- trailing_gap = attachment&.trailing_gap
- if trailing_gap && trailing_gap.effective_controller_side(removed_owners: [node]) == :after
- lines.concat(trailing_gap.lines)
+ if (inline_comment = destination_inline_comment_for(node))
+ inline_lines << promoted_inline_comment_line_for(node, @dest_analysis, inline_comment)
end
- lines.compact
- end
-
- def leading_segment_lines_for(node, analysis)
- start_line = emission_start_line_for(node, analysis)
- return [] unless start_line && start_line < node.start_line
-
- (start_line...node.start_line).filter_map { |line_number| raw_line_at(analysis, line_number) }
+ removed_owner_preserved_lines_for(
+ node,
+ @dest_analysis,
+ owners: @dest_analysis.structural_owners,
+ inline_lines: inline_lines
+ )
end
def interstitial_trailing_segment_lines_for(node, analysis)
- return [] unless next_structural_owner_for(node, analysis)
-
- trailing_region = analysis.comment_attachment_for(node)&.trailing_region
- return [] unless trailing_region
-
- trailing_region.text.split("\n")
+ interstitial_trailing_region_lines_for(node, analysis, owners: analysis.structural_owners)
end
def next_structural_owner_for(node, analysis)
@@ -569,6 +532,17 @@ def raw_line_at(analysis, line_number)
line = analysis.line_at(line_number)
line.respond_to?(:raw) ? line.raw : line
end
+
+ def leading_segment_anchor_line_for(node, analysis, owners: nil, leading_region: nil)
+ region_start = super(node, analysis, owners: owners || analysis.structural_owners, leading_region: leading_region)
+ preamble_start = analysis.comment_augmenter.preamble_region&.start_line if first_structural_owner?(node,
+ analysis)
+ region_start || preamble_start
+ end
+
+ def source_line_at(analysis, line_number)
+ raw_line_at(analysis, line_number)
+ end
end
end
end
diff --git a/gems/dotenv-merge/spec/dotenv/merge/comment_behavior_matrix_spec.rb b/gems/dotenv-merge/spec/dotenv/merge/comment_behavior_matrix_spec.rb
index 6b4a56ec9..0ece3d726 100644
--- a/gems/dotenv-merge/spec/dotenv/merge/comment_behavior_matrix_spec.rb
+++ b/gems/dotenv-merge/spec/dotenv/merge/comment_behavior_matrix_spec.rb
@@ -24,5 +24,7 @@
},
expected_literal_hash_value: 'literal # hash'
)
+
+ it_behaves_like 'Ast::Merge::RetainedBlankGapCompliance'
end
end
diff --git a/gems/dotenv-merge/spec/spec_helper.rb b/gems/dotenv-merge/spec/spec_helper.rb
index 7fc927ff7..8380347f3 100644
--- a/gems/dotenv-merge/spec/spec_helper.rb
+++ b/gems/dotenv-merge/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/go-merge/.kettle-drift.lock b/gems/go-merge/.kettle-drift.lock
deleted file mode 100644
index 09df60df7..000000000
--- a/gems/go-merge/.kettle-drift.lock
+++ /dev/null
@@ -1,317 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 93,
- 133,
- 173,
- 213,
- 253,
- 293,
- 333,
- 373
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 82,
- 122,
- 162,
- 202,
- 242,
- 282,
- 322,
- 362
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 60,
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 110,
- 150,
- 190,
- 230,
- 270,
- 310,
- 350,
- 390
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 35,
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 69,
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 48,
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 44,
- 88,
- 128,
- 168,
- 208,
- 248,
- 288,
- 328,
- 368
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 103,
- 143,
- 183,
- 223,
- 263,
- 303,
- 343,
- 383
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 97,
- 137,
- 177,
- 217,
- 257,
- 297,
- 337,
- 377
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 106,
- 146,
- 186,
- 226,
- 266,
- 306,
- 346,
- 386
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/go-merge/.rubocop_gradual.lock b/gems/go-merge/.rubocop_gradual.lock
index bb6039651..821942cf3 100644
--- a/gems/go-merge/.rubocop_gradual.lock
+++ b/gems/go-merge/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:203349166": [
+ ".simplecov:495473973": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:522749197": [
@@ -15,13 +15,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -57,6 +64,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -66,10 +80,10 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
@@ -82,21 +96,21 @@
"lib/go-merge.rb:1938991181": [
[1, 1, 0, "Naming/FileName: The name of this source file (`go-merge.rb`) should use snake_case.", 5381]
],
- "lib/go/merge.rb:547557749": [
+ "lib/go/merge.rb:1429248778": [
[10, 3, 12, "Style/Documentation: Missing top-level documentation comment for `module Go::Merge`.", 2866359175],
- [10, 3, 7242, "Metrics/ModuleLength: Module has too many lines. [173/100]", 2713105462],
+ [10, 3, 8162, "Metrics/ModuleLength: Module has too many lines. [191/100]", 1602270489],
[11, 5, 11, "Style/ModuleFunction: Use `module_function` instead of `extend self`.", 1210897631],
- [72, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1491828652],
- [79, 5, 1399, "Metrics/AbcSize: Assignment Branch Condition size for `merge_go` is too high. [<13, 32, 11> 36.25/17]", 3471957286],
- [79, 5, 1399, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `merge_go` is too high. [11/7]", 3471957286],
- [79, 5, 1399, "Metrics/MethodLength: Method has too many lines. [22/10]", 3471957286],
- [79, 5, 1399, "Metrics/PerceivedComplexity: Perceived complexity for `merge_go` is too high. [11/8]", 3471957286],
- [98, 34, 7, "Style/MultilineBlockChain: Avoid multi-line chains of blocks.", 4045560504],
- [106, 5, 1419, "Metrics/AbcSize: Assignment Branch Condition size for `analyze_go_module` is too high. [<8, 19, 5> 21.21/17]", 525883462],
- [106, 5, 1419, "Metrics/MethodLength: Method has too many lines. [40/10]", 525883462]
- ],
- "spec/fixtures_integration_spec.rb:2854818786": [
- [3, 1, 4677, "Metrics/BlockLength: Block has too many lines. [66/25]", 420437002],
+ [74, 121, 20, "Layout/LineLength: Line is too long. [140/120]", 1491828652],
+ [102, 5, 1399, "Metrics/AbcSize: Assignment Branch Condition size for `merge_go` is too high. [<13, 32, 11> 36.25/17]", 3471957286],
+ [102, 5, 1399, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `merge_go` is too high. [11/7]", 3471957286],
+ [102, 5, 1399, "Metrics/MethodLength: Method has too many lines. [22/10]", 3471957286],
+ [102, 5, 1399, "Metrics/PerceivedComplexity: Perceived complexity for `merge_go` is too high. [11/8]", 3471957286],
+ [121, 34, 7, "Style/MultilineBlockChain: Avoid multi-line chains of blocks.", 4045560504],
+ [129, 5, 1447, "Metrics/AbcSize: Assignment Branch Condition size for `analyze_go_module` is too high. [<8, 19, 5> 21.21/17]", 1720548769],
+ [129, 5, 1447, "Metrics/MethodLength: Method has too many lines. [40/10]", 1720548769]
+ ],
+ "spec/fixtures_integration_spec.rb:341155994": [
+ [3, 1, 5172, "Metrics/BlockLength: Block has too many lines. [76/25]", 420437002],
[8, 3, 4420, "Metrics/BlockLength: Block has too many lines. [61/25]", 566085077]
]
}
diff --git a/gems/go-merge/.simplecov b/gems/go-merge/.simplecov
index 5cedb0d75..72d10562d 100644
--- a/gems/go-merge/.simplecov
+++ b/gems/go-merge/.simplecov
@@ -4,15 +4,11 @@
# go-merge will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/go-merge/.structuredmerge/kettle-jem.yml b/gems/go-merge/.structuredmerge/kettle-jem.yml
index 30b2f752d..8b545db6c 100644
--- a/gems/go-merge/.structuredmerge/kettle-jem.yml
+++ b/gems/go-merge/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/go/merge/version.rb
- source: sig/gem.rbs
diff --git a/gems/go-merge/Gemfile b/gems/go-merge/Gemfile
index 46680094a..19ef45e61 100644
--- a/gems/go-merge/Gemfile
+++ b/gems/go-merge/Gemfile
@@ -37,300 +37,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -339,8 +47,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -352,62 +58,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -415,7 +67,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/go-merge/Gemfile.lock b/gems/go-merge/Gemfile.lock
index 83023846e..64cafdafc 100644
--- a/gems/go-merge/Gemfile.lock
+++ b/gems/go-merge/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
tree_haver (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +16,26 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +43,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +73,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +92,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +116,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,7 +125,6 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
nokogiri (1.19.4-aarch64-linux-gnu)
racc (~> 1.4)
@@ -398,13 +132,11 @@ GEM
racc (~> 1.4)
nokogiri (1.19.4-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-musl)
racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +157,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +212,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +227,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +266,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +287,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +315,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +338,20 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-aarch64-linux)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-arm64-darwin)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +361,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -628,116 +392,77 @@ PLATFORMS
aarch64-linux-gnu
aarch64-linux-musl
arm64-darwin
- x86_64-darwin
+ x86_64-linux
x86_64-linux-gnu
x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
go-merge!
irb (~> 1.17)
- json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,7 +471,7 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
@@ -755,52 +480,38 @@ CHECKSUMS
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
- json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +529,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +568,18 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4
+ tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,8 +587,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/go-merge/LICENSE.md b/gems/go-merge/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/go-merge/LICENSE.md
+++ b/gems/go-merge/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/go-merge/README.md b/gems/go-merge/README.md
index 46fa466cc..ec0a11e8f 100644
--- a/gems/go-merge/README.md
+++ b/gems/go-merge/README.md
@@ -36,8 +36,8 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -155,7 +155,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -181,6 +181,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/go-merge
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Go::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -225,7 +227,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/go-merge
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/go-merge
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/go-merge
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/go-merge/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/go-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/go-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/go-merge/gemfiles/modular/cgi/vHEAD.gemfile b/gems/go-merge/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/go-merge/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/go-merge/gemfiles/modular/coverage.gemfile b/gems/go-merge/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/go-merge/gemfiles/modular/coverage.gemfile
+++ b/gems/go-merge/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/go-merge/gemfiles/modular/coverage_local.gemfile b/gems/go-merge/gemfiles/modular/coverage_local.gemfile
index 4f8dd92a4..d25a83ee8 100644
--- a/gems/go-merge/gemfiles/modular/coverage_local.gemfile
+++ b/gems/go-merge/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[go-merge] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/go-merge/gemfiles/modular/documentation.gemfile b/gems/go-merge/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/go-merge/gemfiles/modular/documentation.gemfile
+++ b/gems/go-merge/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/go-merge/gemfiles/modular/documentation_local.gemfile b/gems/go-merge/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..6397c466b 100644
--- a/gems/go-merge/gemfiles/modular/documentation_local.gemfile
+++ b/gems/go-merge/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[go-merge] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/go-merge/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/go-merge/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/go-merge/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/go-merge/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/go-merge/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/go-merge/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/go-merge/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/go-merge/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/go-merge/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/go-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/go-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/go-merge/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/go-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/go-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/go-merge/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/go-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/go-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/go-merge/gemfiles/modular/optional.gemfile b/gems/go-merge/gemfiles/modular/optional.gemfile
index ca08b46e1..9ea429538 100644
--- a/gems/go-merge/gemfiles/modular/optional.gemfile
+++ b/gems/go-merge/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during go-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/go-merge/gemfiles/modular/runtime_heads.gemfile b/gems/go-merge/gemfiles/modular/runtime_heads.gemfile
index 353bc7997..ebf17c529 100644
--- a/gems/go-merge/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/go-merge/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during go-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/go-merge/gemfiles/modular/style.gemfile b/gems/go-merge/gemfiles/modular/style.gemfile
index 6fbe829c7..4dbcc02c0 100644
--- a/gems/go-merge/gemfiles/modular/style.gemfile
+++ b/gems/go-merge/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during go-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/go-merge/gemfiles/modular/style_local.gemfile b/gems/go-merge/gemfiles/modular/style_local.gemfile
index ce75bbe21..dc482c6b6 100644
--- a/gems/go-merge/gemfiles/modular/style_local.gemfile
+++ b/gems/go-merge/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[go-merge] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/go-merge/gemfiles/modular/templating.gemfile b/gems/go-merge/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/go-merge/gemfiles/modular/templating.gemfile
+++ b/gems/go-merge/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/go-merge/gemfiles/modular/templating_local.gemfile b/gems/go-merge/gemfiles/modular/templating_local.gemfile
index 847d5acc2..c4029e234 100644
--- a/gems/go-merge/gemfiles/modular/templating_local.gemfile
+++ b/gems/go-merge/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[go-merge] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[go-merge] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[go-merge] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/go-merge/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/go-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/go-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/go-merge/gemfiles/modular/webrick/vHEAD.gemfile b/gems/go-merge/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/go-merge/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/go-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/go-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/go-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/go-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/go-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/go-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/go-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/go-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/go-merge/lib/go/merge.rb b/gems/go-merge/lib/go/merge.rb
index 0d7bb1be6..74eef0065 100644
--- a/gems/go-merge/lib/go/merge.rb
+++ b/gems/go-merge/lib/go/merge.rb
@@ -37,8 +37,8 @@ def available_go_backends
end
def go_backend_feature_profile(backend: nil)
- requested = backend.to_s.empty? ? TREE_SITTER_BACKEND.id : backend.to_s
- unless requested == TREE_SITTER_BACKEND.id && go_backend_available_for_analysis?(requested)
+ requested = requested_tree_sitter_backend_id(backend)
+ unless go_backend_available_for_analysis?(requested)
return unsupported_feature_result("Unsupported Go backend #{requested}.")
end
@@ -64,9 +64,9 @@ def go_plan_context(backend: nil)
end
def parse_go(source, dialect)
- requested = TREE_SITTER_BACKEND.id
- unless requested == TREE_SITTER_BACKEND.id && go_backend_available_for_analysis?(requested)
- return unsupported_feature_result("Unsupported Go backend #{requested}.")
+ unless go_backend_available_for_analysis?(nil)
+ diagnostic_backend = TreeHaver.current_backend_id || 'tree-sitter'
+ return unsupported_feature_result("Unsupported Go backend #{diagnostic_backend}.")
end
return analyze_go_module(source) if dialect == 'go'
@@ -76,11 +76,24 @@ def parse_go(source, dialect)
def go_backend_available_for_analysis?(backend_id)
register_backend!
- return false unless backend_id.to_s == TREE_SITTER_BACKEND.id
- registrations = TreeHaver.registered_languages(:go)
- registrations.key?(:tree_sitter) || registrations.key?(:tslp)
+ if backend_id.to_s.empty?
+ TreeHaver.parser_for(:go, backend_type: :tree_sitter)
+ else
+ TreeHaver.with_backend(backend_id) { TreeHaver.parser_for(:go, backend_type: :tree_sitter) }
+ end
+ true
+ rescue TreeHaver::Error, ArgumentError
+ false
+ end
+
+ def requested_tree_sitter_backend_id(backend)
+ return backend.to_s unless backend.to_s.empty?
+
+ contextual = TreeHaver.current_backend_id || ENV['TREE_HAVER_BACKEND']
+ contextual.to_s.empty? || contextual.to_s == 'auto' ? TREE_SITTER_BACKEND.id : contextual.to_s
end
+ private_class_method :requested_tree_sitter_backend_id
def match_go_owners(template, destination)
Ast::Merge::OwnerSelection.match_by_path(template, destination)
@@ -114,7 +127,7 @@ def merge_go(template_source, destination_source, dialect)
end
def analyze_go_module(source)
- parser = TreeHaver.parser_for(:go)
+ parser = TreeHaver.parser_for(:go, backend_type: :tree_sitter)
tree = parser.parse(source)
collect_parse_errors(tree.root_node)
diff --git a/gems/go-merge/spec/fixtures_integration_spec.rb b/gems/go-merge/spec/fixtures_integration_spec.rb
index de2520faa..730d19a57 100644
--- a/gems/go-merge/spec/fixtures_integration_spec.rb
+++ b/gems/go-merge/spec/fixtures_integration_spec.rb
@@ -86,7 +86,7 @@ def json_ready(value) = Ast::Merge.json_ready(value)
expect(result[:ok]).to be(false)
expect(result[:diagnostics]).to eq(
[{ severity: 'error', category: 'unsupported_feature',
- message: 'Unsupported Go backend kreuzberg-language-pack.' }]
+ message: 'Unsupported Go backend tree-sitter.' }]
)
end
end
diff --git a/gems/go-merge/spec/spec_helper.rb b/gems/go-merge/spec/spec_helper.rb
index 84a49676f..519a48b5d 100644
--- a/gems/go-merge/spec/spec_helper.rb
+++ b/gems/go-merge/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/html-merge/.gitattributes b/gems/html-merge/.gitattributes
new file mode 100644
index 000000000..35a3c7359
--- /dev/null
+++ b/gems/html-merge/.gitattributes
@@ -0,0 +1,5 @@
+# <> do not edit below this line
+*.rb diff=smorg-rb
+*.go diff=smorg-go
+*.rs diff=smorg-rs
+# <>
diff --git a/gems/html-merge/.github/workflows/main.yml b/gems/html-merge/.github/workflows/main.yml
new file mode 100644
index 000000000..34fcca6f0
--- /dev/null
+++ b/gems/html-merge/.github/workflows/main.yml
@@ -0,0 +1,32 @@
+name: Ruby
+
+on:
+ push:
+ branches:
+ - main
+
+ pull_request:
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ name: Ruby ${{ matrix.ruby }}
+ strategy:
+ matrix:
+ ruby:
+ - '4.0.6'
+
+ steps:
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+ with:
+ persist-credentials: false
+ - name: Set up Ruby
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
+ with:
+ ruby-version: ${{ matrix.ruby }}
+ bundler-cache: true
+ - name: Run the default task
+ run: bundle exec rake
diff --git a/gems/html-merge/.gitignore b/gems/html-merge/.gitignore
new file mode 100644
index 000000000..b04a8c840
--- /dev/null
+++ b/gems/html-merge/.gitignore
@@ -0,0 +1,11 @@
+/.bundle/
+/.yardoc
+/_yardoc/
+/coverage/
+/doc/
+/pkg/
+/spec/reports/
+/tmp/
+
+# rspec failure tracking
+.rspec_status
diff --git a/gems/html-merge/.rspec b/gems/html-merge/.rspec
new file mode 100644
index 000000000..34c5164d9
--- /dev/null
+++ b/gems/html-merge/.rspec
@@ -0,0 +1,3 @@
+--format documentation
+--color
+--require spec_helper
diff --git a/gems/html-merge/.rubocop.yml b/gems/html-merge/.rubocop.yml
new file mode 100644
index 000000000..ae378d09c
--- /dev/null
+++ b/gems/html-merge/.rubocop.yml
@@ -0,0 +1,8 @@
+AllCops:
+ TargetRubyVersion: 3.2
+
+Style/StringLiterals:
+ EnforcedStyle: double_quotes
+
+Style/StringLiteralsInInterpolation:
+ EnforcedStyle: double_quotes
diff --git a/gems/html-merge/.structuredmerge/kettle-jem.yml b/gems/html-merge/.structuredmerge/kettle-jem.yml
new file mode 100644
index 000000000..f1cbd8854
--- /dev/null
+++ b/gems/html-merge/.structuredmerge/kettle-jem.yml
@@ -0,0 +1,521 @@
+# kettle-jem configuration file
+#
+# This file is both configuration and field guide for templated gems.
+# In most projects this comment block is the first place to look when you
+# want to understand what kettle-jem will merge, what it will copy as-is,
+# and which values you may want to customize.
+#
+# High-level structure:
+# defaults - default merge behavior for files that use strategy: merge
+# tokens - values for {KJ|...} placeholders used across template files
+# patterns - glob-based overrides for files/directories
+# files - exact per-file overrides using a nested directory tree
+#
+# Default behavior:
+# If a file is NOT mentioned under files: and does NOT match a patterns:
+# entry, kettle-jem will merge it using the format-aware merge gem for that
+# file type.
+#
+# Strategies:
+# merge:
+# Resolve tokens, then merge template + destination using the appropriate
+# AST-aware/text-aware merger for the file type.
+# accept_template:
+# Resolve tokens, then write the template result without merging.
+# If the file is missing in the destination, it will be created from the template.
+# keep_destination:
+# Ignore this file during templating.
+# No merge. No replacement. No creation when the destination file is missing.
+# Use this when you want to permanently exclude a file from the template.
+# raw_copy:
+# Copy bytes exactly as they appear in the template.
+# No token resolution. No merge. Use for immutable/binary assets such as certs.
+#
+# Merge options (used only with strategy: merge):
+# preference:
+# template - template wins when both sides define the same node/value
+# destination - destination wins when both sides define the same node/value
+# add_template_only_nodes:
+# true - add nodes/entries that exist only in the template
+# false - do not add template-only nodes
+# freeze_token:
+# Marker name used for frozen sections (default: kettle-jem)
+# file_type:
+# Optional explicit merge-engine hint for extensionless or ambiguous files.
+# Supported values: ruby, gemfile, appraisals, gemspec, rakefile,
+# yaml, markdown, text, json, jsonc, toml, dotenv, rbs
+# Runtime-gated values requiring provider availability: bash
+# max_recursion_depth:
+# Limit for recursive merging when a merger supports it
+#
+# Other per-file options (apply to any strategy):
+# skip_unresolved_scan:
+# true - do not scan this file for unresolved {KJ|...} tokens after writing.
+# Use when a file legitimately contains {KJ|...} text as documentation
+# or example content rather than as a template placeholder.
+#
+# Token values:
+# Precedence is:
+# 1) ENV variables. During templating, known ENV-backed values are also
+# written back into this file so config and runtime agree.
+# 2) tokens: values in this file
+# 3) safe automatic derivation (author fields only, where possible)
+#
+# Safe automatic derivations currently implemented:
+# AUTHOR:NAME <- first author from the gemspec
+# AUTHOR:NAMES <- all authors from the gemspec, or copyright holders if no gemspec authors exist
+# AUTHOR:EMAIL <- first email from the gemspec
+# AUTHOR:DOMAIN <- domain part of AUTHOR:EMAIL
+# AUTHOR:GIVEN_NAMES <- AUTHOR:NAME minus the last word
+# AUTHOR:FAMILY_NAMES <- last word of AUTHOR:NAME
+#
+# Everything else should be set explicitly here or via ENV.
+
+# This project's identifying emoji.
+# Used as the leading emoji in the README H1 heading and in the gemspec
+# summary and description. Every gem should have its own unique emoji.
+#
+# Set this to a single emoji that represents your gem. Examples: 🪙 🔑 🛠️ 🔮
+# This key is REQUIRED. kettle-jem will abort if it is absent.
+# ENV override: KJ_PROJECT_EMOJI
+project_emoji: 💎
+
+# Engines this project supports.
+# List the Ruby engines that your gem targets. kettle-jem uses this to decide
+# which CI workflows, README compatibility rows, and badge references to
+# include. Engines not listed here are pruned from generated files.
+#
+# Supported values: ruby, jruby, truffleruby
+# Default (when key is absent): all three engines.
+engines:
+ - ruby
+ - jruby
+ - truffleruby
+
+# Ruby version policy.
+ruby:
+ # Lowest MRI Ruby version for generated CI workflows, Appraisals, and
+ # test/development dependency assumptions. This is intentionally separate
+ # from the gemspec required_ruby_version, which describes the published
+ # runtime contract. Effective CI minimum is max(gemspec minimum, this value).
+ test_minimum: "3.2.0"
+
+# RubyGems packaging/runtime shape.
+rubygems:
+ # Published runtime Ruby floor used for generated gemspec metadata and README
+ # compatibility text. Omit this to derive the value from the gemspec.
+ min_ruby: "3.2.0"
+
+# RubyGems package manifest additions.
+# The generated gemspec owns the default package manifest. Add entries here only
+# for package/runtime files that are not covered by the template default.
+#
+# Example:
+# gemspec:
+# package_files:
+# include:
+# - data/**/*.json
+
+# Repository URL topology.
+# This is independent from templates.profile. A gem may use the full template
+# while still living as a sub-project inside a monorepo.
+#
+# Supported values:
+# standalone - project URLs point at this gem's own repository
+# monorepo-subproject - project URLs point at a subdirectory in the repository root
+#
+# ENV override: KJ_REPOSITORY_TOPOLOGY
+repository:
+ topology: "monorepo-subproject"
+
+# Framework matrix workflows.
+# When your gem tests against multiple versions of a framework (Rails,
+# ActiveRecord, ActiveSupport, etc.), this section configures how
+# kettle-jem generates the CI matrix strategy and gemfile references.
+#
+# preset: controls overall workflow strategy
+# modern — Ruby-only matrix (default when absent)
+# framework — Ruby × framework-version matrix
+# legacy-compat — supported / unsupported / ancient workflow split
+#
+# framework_matrix (only used when preset: framework):
+# dimension — framework name used in the matrix key and display
+# (e.g. activerecord, rails, actionmailer)
+# gem — gem name to write into generated framework gemfiles.
+# Defaults to dimension when absent.
+# versions — ordered list of versions to test against. Entries may be
+# strings, or mappings with:
+# label - display value used in CI
+# slug - path-safe value used in gemfile_pattern
+# requirement - Bundler requirement written to the gemfile
+# gemfile_pattern — pattern for gemfile paths; {version} is replaced
+# with each version slug (dots replaced by underscores
+# when the pattern contains an underscore placeholder).
+# Resolved relative to gemfiles/ unless it already contains
+# a directory.
+# Examples:
+# "ar-{version}.x" → gemfiles/ar-7.0.x
+# "rails_{version}" → gemfiles/rails_7_0.gemfile
+# Use this when you need a simple 2D matrix: Ruby × one framework gem/version axis.
+# For deeper or more complex matrices that are better modeled as Appraisals entries,
+# prefer kettle-jem-appraisals instead.
+#
+workflows:
+ # Default command used by generated test workflows.
+ # ENV override: KJ_EXEC_CMD
+ exec_cmd: kettle-test
+ # Include VCR/WebMock recording modular gemfiles in generated Appraisals.
+ # Enable only for projects that actually require recording support.
+ recording: false
+ # preset: framework
+ # framework_matrix:
+ # dimension: activerecord
+ # gem: activerecord
+ # versions:
+ # - "7.0"
+ # - "7.1"
+ # - "7.2"
+ # - label: "8.0+"
+ # slug: "8_0_plus"
+ # requirement: ">= 8.0"
+ # gemfile_pattern: "ar-{version}.x"
+
+# Project-level third-party integrations.
+# Disabling an integration removes its upload/check action, suppresses its
+# README badges, skips templating its packaged config/workflow, and cleans up
+# matching config files or workflows if they already exist.
+#
+# Supported coverage integrations: codecov, coveralls, qlty
+# Supported license-check integration: skywalking-eyes
+# skywalking-eyes defaults to disabled unless the configured licenses include
+# MIT. Set `skywalking-eyes: true` to opt in for other license sets.
+#
+# Examples:
+# integrations:
+# qlty: false
+# skywalking-eyes: false
+# disabled:
+# - codecov
+# - coveralls
+
+# README top logos.
+# Comma-separated list of optional logo entries for the generated README header.
+# top_logos render above the title; h2_synopsis_logos render inline with the Synopsis H2.
+# Supported values: related-org, ruby, org, project, optionally followed by |width.
+# Examples: org|12%, ruby|96px
+# Default widths: top 1 logo => 14%, top 2 logos => 12%, Synopsis 1 logo => 10%, Synopsis 2 logos => 8%.
+# Default (when keys are absent): top_logos: org,project; h2_synopsis_logos: related-org,ruby
+# Legacy top_logo_mode values map as:
+# org => related-org,ruby,org
+# project => related-org,ruby,project
+# org_and_project => related-org,ruby,org,project
+readme:
+ top_logos: org
+ h2_synopsis_logos: related-org,ruby
+ # Optional package-family README block.
+ # Supported values: structuredmerge
+ # Leave unset for standalone kettle-rb gems and most projects.
+ # package_family: structuredmerge
+ # Sections to preserve from the destination README during template merging.
+ # These section headings (case-insensitive) will keep the destination body
+ # instead of being overwritten by the template. Default when absent:
+ # - synopsis
+ # - configuration
+ # - basic usage
+ #
+ # Built-in aliases (destination → template):
+ # summary → synopsis, usage → basic usage,
+ # configuration options → configuration, setup → basic usage
+ #
+ # preserve_sections:
+ # - synopsis
+ # - configuration
+ # - basic usage
+ # - usage
+ # - summary
+ #
+ # Glob patterns for additional sections to preserve (e.g. Note:* headings).
+ # Default when absent: ["note:*"]
+ #
+ # preserve_patterns:
+ # - "note:*"
+ # - "setup*"
+ #
+ # Custom section aliases (destination heading → canonical template heading).
+ # Merged with built-in aliases above.
+ #
+ # section_aliases:
+ # howto: basic usage
+ # options: configuration
+ # README badges managed by the template.
+ badges:
+ # FOSSA license/security status badge.
+ # false - omit the badge (default)
+ # true - derive project id from the GitHub repository slug
+ # string or mapping project/project_id/slug - explicit FOSSA project id
+ #
+ # Example:
+ # fossa: git+github.com/pboling/example
+ fossa: false
+
+# SPDX license identifiers for this project.
+# List one or more licenses that apply to the gem. Users may use the software
+# under the terms of any one license listed here (OR semantics, not AND).
+#
+# Accepted values (initial supported set):
+# MIT - MIT License (open source, permissive)
+# AGPL-3.0-only - GNU Affero General Public License v3
+# PolyForm-Noncommercial-1.0.0 - PolyForm Noncommercial License 1.0.0
+# PolyForm-Small-Business-1.0.0 - PolyForm Small Business License 1.0.0
+# LicenseRef-Big-Time-Public-License - Big Time Public License 2.0.2
+#
+# Defaults to spec.licenses from the gemspec when this key is absent.
+#
+# Template behaviour:
+# - Each listed license is copied as .md into the project.
+# - A LICENSE.md index file is generated referencing all chosen licenses.
+# - Any non-MIT license adds a "contact for commercial license" prompt.
+# - When MIT (or AGPL), a PolyForm variant, AND LicenseRef-Big-Time-Public-License
+# are all present, a use-case guide table is added to README and LICENSE.md.
+licenses:
+ - MIT
+license_eye:
+ dependency_licenses:
+ - name: simplecov-rcov
+ version: 0.3.7
+ license: MIT
+
+# Machine / automation accounts to exclude from generated copyright output.
+#
+# When kettle-jem collects copyright information via `git blame`, it filters
+# out known GitHub/GitLab bot accounts automatically. Use this list to also
+# exclude internal automation accounts that are not bots in the git sense
+# (i.e. they do not follow the "[bot]" naming convention).
+#
+# Each entry is matched case-insensitively against the commit author name AND
+# the commit author email, so you can list either form.
+#
+# Default (when key is absent or empty): ["autobolt"]
+machine_users:
+ - autobolt
+
+# Self-test / templating CI threshold.
+# Set to a number from 0 to 100 to fail `rake kettle:jem:selftest` once
+# divergence exceeds that percent. Leave blank to report only.
+# Divergence is currently measured as the percent of produced files that would
+# change or be added during templating (100 - unchanged-file score).
+# ENV override: KJ_MIN_DIVERGENCE_THRESHOLD
+min_divergence_threshold:
+
+# Hostname used for generated YARD documentation links.
+# Defaults to ..
+# ENV override: KJ_YARD_HOST
+yard_host: "html-merge.galtzo.com"
+
+# Full URL used for gemspec metadata["homepage_uri"].
+# Defaults to https://html-merge.galtzo.com.
+# ENV override: KJ_HOMEPAGE_URI
+homepage_uri: "https://structuredmerge.org"
+
+# Template source inventory.
+# The packaged inventory is the canonical kettle-jem project template. It
+# includes the detailed GitHub Actions workflow set, modular gemfiles,
+# README badges, license files, config files, and support scripts.
+templates:
+ root: packaged
+ apply: true
+ entries:
+ - README.md
+ - source: gem.gemspec
+ target: html-merge.gemspec
+ - LICENSE.md
+ - MIT.md
+ - AGPL-3.0-only.md
+ - PolyForm-Noncommercial-1.0.0.md
+ - PolyForm-Small-Business-1.0.0.md
+ - Big-Time-Public-License.md
+ - Gemfile
+ - certs/pboling.pem
+ - tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
+ - source: lib/gem/version.rb
+ target: lib/html/merge/version.rb
+ - source: sig/gem.rbs
+ target: sig/html/merge.rbs
+ # Template recipe profile.
+ # Supported values:
+ # full - full gem template
+ # monorepo-subgem - smaller sub-project template
+ # monorepo-root - repository-root support template
+ #
+ # ENV override: KETTLE_JEM_TEMPLATE_PROFILE
+ profile: monorepo-subgem-package
+
+# StructuredMerge Git diff driver setup.
+# Default: semantic-diff installs local .gitattributes entries for semantic
+# structured diffs. Use builtin-diff to retain Git's built-in language drivers,
+# global to register driver commands in user config, include-file to write
+# .git/smorg/config, check to verify setup, undo to remove managed entries, or
+# none to opt out.
+# ENV override: KETTLE_JEM_GIT_DRIVERS
+git_drivers: semantic-diff
+
+# Optional kettle-jem plugins.
+# Each entry is a gem name. During bootstrap, kettle-jem ensures each plugin is
+# added as a development dependency so it is available after bin/setup.
+# During bundled templating, kettle-jem requires the plugin and calls
+# `register_kettle_jem_plugin(registrar)` on its top-level handle.
+#
+# Phase callback names currently available:
+# - config_sync
+# - dev_container
+# - github_workflows
+# - quality_config
+# - modular_gemfiles
+# - spec_helper
+# - environment_templates
+# - remaining_files
+# - git_hooks
+# - license_files
+# - duplicate_check
+#
+# Phase guarantees:
+# - All plugin callbacks run during the bundled templating phase, after
+# bin/setup and bundle install have completed.
+# - kettle-jem, kettle-dev, and any plugin gems listed here are loadable.
+# - kettle-jem's parser / merger runtime is available to callbacks.
+# - `remaining_files` runs after the destination Rakefile, gemspec, README,
+# and most template-managed files already exist on disk.
+# - `duplicate_check` runs last, after all template writes are complete.
+plugins:
+ - kettle-drift
+
+# Default merge options
+defaults:
+ preference: "template"
+ add_template_only_nodes: true
+ freeze_token: "kettle-jem"
+
+# Token replacement values.
+#
+# General rules:
+# - Empty strings are treated as unset.
+# - Use the bare identifier/slug/handle expected by the inline comment.
+# - Do NOT paste full URLs unless the comment explicitly says to.
+#
+# Tip:
+# The author fields in a newly created destination config are normally seeded
+# from the gemspec via safe derivation. After that, destination values win.
+tokens:
+ forge:
+ gh_user: "pboling" # GitHub username only, no @, no URL. Used for GitHub Sponsors and profile links. ENV: KJ_GH_USER
+ gl_user: "pboling" # GitLab username only, no @, no URL. Used for profile links. ENV: KJ_GL_USER
+ cb_user: "pboling" # Codeberg username only, no @, no URL. Used for profile links. ENV: KJ_CB_USER
+ sh_user: "galtzo" # SourceHut username only, no leading ~, no URL. Used as https://sr.ht/~/. ENV: KJ_SH_USER
+
+ author:
+ name: "Peter H. Boling" # Full display name. Example: Ada Lovelace. ENV: KJ_AUTHOR_NAME. Auto-seeded from gemspec authors.first; generated gemspec authors preserve the full existing authors array via AUTHOR:NAMES.
+ given_names: "Peter H." # Given/personal names only. Example: Ada. ENV: KJ_AUTHOR_GIVEN_NAMES. Auto-seeded when AUTHOR:NAME can be split
+ family_names: "Boling" # Family/surname only. Example: Lovelace. ENV: KJ_AUTHOR_FAMILY_NAMES. Auto-seeded when AUTHOR:NAME can be split
+ email: "floss@galtzo.com" # Primary public email address. Example: floss@galtzo.com. ENV: KJ_AUTHOR_EMAIL. Auto-seeded from gemspec email.first
+ domain: "galtzo.com" # Bare domain only, no scheme, no email. Example: galtzo.com. ENV: KJ_AUTHOR_DOMAIN. Auto-seeded from AUTHOR:EMAIL
+ orcid: "0009-0008-8519-441X" # ORCID identifier only, not the full URL. Example: 0000-0001-2345-6789. ENV: KJ_AUTHOR_ORCID
+
+ funding:
+ open_collective: "galtzo-floss" # Open Collective slug, true to enable with ENV/.opencollective.yml, false to disable. ENV: OPENCOLLECTIVE_HANDLE or FUNDING_ORG
+ kofi: "pboling" # Ko-fi handle/slug only. Used as https://ko-fi.com/. ENV: KJ_FUNDING_KOFI
+ paypal: "peterboling" # PayPal.Me slug only. Used as https://www.paypal.com/paypalme/. ENV: KJ_FUNDING_PAYPAL
+ buymeacoffee: "pboling" # Buy Me a Coffee slug only. Used as https://www.buymeacoffee.com/. ENV: KJ_FUNDING_BUYMEACOFFEE
+ liberapay: "pboling" # Liberapay account slug only. Used as https://liberapay.com//donate. ENV: KJ_FUNDING_LIBERAPAY
+
+ social:
+ mastodon: "galtzo" # Local handle only for the instance assumed by the template link. Current template uses https://ruby.social/@. ENV: KJ_SOCIAL_MASTODON
+ bluesky: "galtzo.com" # Full Bluesky handle. Example: peterboling.dev or alice.bsky.social. Used as https://bsky.app/profile/. ENV: KJ_SOCIAL_BLUESKY
+ linktree: "galtzo" # Linktree username only. Used as https://linktr.ee/. ENV: KJ_SOCIAL_LINKTREE
+ devto: "galtzo" # DEV Community username only. Used as https://dev.to/. ENV: KJ_SOCIAL_DEVTO
+
+# Glob patterns evaluated in order (first match wins)
+patterns:
+ - path: "certs/**"
+ strategy: raw_copy
+ - path: ".github/workflows/**"
+ strategy: accept_template
+
+# Per-file configuration (nested directory structure)
+# Only files that need overrides belong here. Everything else defaults to merge.
+files:
+ README.md:
+ strategy: merge
+ html-merge.gemspec:
+ strategy: keep_destination
+ AGENTS.md:
+ strategy: accept_template
+ Appraisal.root.gemfile:
+ strategy: accept_template
+ Gemfile:
+ strategy: accept_template
+ Rakefile:
+ strategy: merge
+ preference: destination
+ add_template_only_nodes: true
+ .github:
+ copilot_instructions.md:
+ strategy: accept_template
+ gemfiles:
+ modular:
+ templating.gemfile:
+ strategy: accept_template
+ templating_local.gemfile:
+ strategy: accept_template
diff --git a/gems/html-merge/CHANGELOG.md b/gems/html-merge/CHANGELOG.md
new file mode 100644
index 000000000..19b941db5
--- /dev/null
+++ b/gems/html-merge/CHANGELOG.md
@@ -0,0 +1,5 @@
+## [Unreleased]
+
+## [0.1.0] - 2026-07-19
+
+- Initial release
diff --git a/gems/html-merge/CODE_OF_CONDUCT.md b/gems/html-merge/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..9258d8d56
--- /dev/null
+++ b/gems/html-merge/CODE_OF_CONDUCT.md
@@ -0,0 +1,10 @@
+# Code of Conduct
+
+"html-merge" follows [The Ruby Community Conduct Guideline](https://www.ruby-lang.org/en/conduct) in all "collaborative space", which is defined as community communications channels (such as mailing lists, submitted patches, commit comments, etc.):
+
+* Participants will be tolerant of opposing views.
+* Participants must ensure that their language and actions are free of personal attacks and disparaging personal remarks.
+* When interpreting the words and actions of others, participants should always assume good intentions.
+* Behaviour which can be reasonably considered harassment will not be tolerated.
+
+If you have any concerns about behaviour within this project, please contact us at ["peter.boling@gmail.com"](mailto:"peter.boling@gmail.com").
diff --git a/gems/html-merge/Gemfile b/gems/html-merge/Gemfile
new file mode 100644
index 000000000..ab14b3aaa
--- /dev/null
+++ b/gems/html-merge/Gemfile
@@ -0,0 +1,84 @@
+# frozen_string_literal: true
+
+# kettle-jem:freeze
+# To retain chunks of comments & code during kettle-jem templating:
+# Wrap custom sections with freeze markers (e.g., as above and below this comment chunk).
+# kettle-jem will then preserve content between those markers across template runs.
+# kettle-jem:unfreeze
+
+source "https://gem.coop"
+
+git_source(:codeberg) { |repo_name| "https://codeberg.org/#{repo_name}" }
+git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" }
+
+#### IMPORTANT #######################################################
+# Gemfile is for local development ONLY; Gemfile is NOT loaded in CI #
+####################################################### IMPORTANT ####
+
+# Include dependencies from html-merge.gemspec
+gemspec
+
+# Local workspace dependency wiring for *_local.gemfile overrides
+nomono_requirements = ["~> 1.0", ">= 1.0.8"]
+gem "nomono", *nomono_requirements, require: false # ruby >= 2.2
+
+# Direct sibling dependencies (env-switched via STRUCTUREDMERGE_DEV)
+direct_sibling_gems = %w[
+ ast-merge
+ ast-crispr
+ tree_haver
+]
+direct_sibling_dev = ENV.fetch("STRUCTUREDMERGE_DEV", "")
+direct_sibling_local =
+ !direct_sibling_dev.empty? && !%w[false 0 no off].include?(direct_sibling_dev.downcase)
+direct_sibling_templating = ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero?
+
+if direct_sibling_gems.any? &&
+ (direct_sibling_local ||
+ ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero?)
+ direct_sibling_dev_was_set = ENV.key?("STRUCTUREDMERGE_DEV")
+ direct_sibling_dev_original = ENV.fetch("STRUCTUREDMERGE_DEV", nil)
+ require "nomono/bundler"
+ begin
+ ENV["STRUCTUREDMERGE_DEV"] = File.expand_path("..", __dir__) if direct_sibling_templating && !direct_sibling_local
+
+ eval_nomono_gems(
+ gems: direct_sibling_gems,
+ prefix: "STRUCTUREDMERGE",
+ path_env: "STRUCTUREDMERGE_DEV",
+ root: ["src", "my", "structuredmerge"]
+ )
+ ensure
+ if direct_sibling_templating && !direct_sibling_local
+ if direct_sibling_dev_was_set
+ ENV["STRUCTUREDMERGE_DEV"] = direct_sibling_dev_original
+ else
+ ENV.delete("STRUCTUREDMERGE_DEV")
+ end
+ end
+ end
+end
+
+# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
+eval_gemfile "gemfiles/modular/templating.gemfile" if ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero?
+
+# Debugging
+eval_gemfile "gemfiles/modular/debug.gemfile"
+
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
+eval_gemfile "gemfiles/modular/coverage.gemfile"
+
+# Linting
+eval_gemfile "gemfiles/modular/style.gemfile"
+
+# Documentation
+eval_gemfile "gemfiles/modular/documentation.gemfile"
+
+# Optional
+eval_gemfile "gemfiles/modular/optional.gemfile"
+
+### Std Lib Extracted Gems
+eval_gemfile "gemfiles/modular/x_std_libs.gemfile"
+
+# See unlocked_deps appraisal for more details on irb inclusion
+gem "irb", "~> 1.17" # ruby >= 2.7
diff --git a/gems/html-merge/Gemfile.lock b/gems/html-merge/Gemfile.lock
new file mode 100644
index 000000000..85a63258c
--- /dev/null
+++ b/gems/html-merge/Gemfile.lock
@@ -0,0 +1,476 @@
+PATH
+ remote: .
+ specs:
+ html-merge (7.1.0)
+ ast-crispr (= 7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
+
+GEM
+ remote: https://gem.coop/
+ specs:
+ addressable (2.9.0)
+ public_suffix (>= 2.0.2, < 8.0)
+ ansi (1.6.0)
+ appraisal2 (3.2.0)
+ bundler (>= 1.17.3)
+ rake (>= 10)
+ thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
+ ast (2.4.3)
+ ast-crispr (7.1.0)
+ ast-merge (= 7.1.0)
+ service_actor (~> 3.9)
+ version_gem (~> 1.1, >= 1.1.9)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ benchmark (0.5.0)
+ bigdecimal (4.1.2)
+ cgi (0.5.2)
+ citrus (3.0.2)
+ cmdparse (3.0.7)
+ concurrent-ruby (1.3.8)
+ date (3.5.1)
+ debug (1.11.1)
+ irb (~> 1.10)
+ reline (>= 0.3.8)
+ diff-lcs (1.6.2)
+ diffy (3.4.4)
+ dry-configurable (1.4.0)
+ dry-core (~> 1.0)
+ zeitwerk (~> 2.6)
+ dry-core (1.2.0)
+ concurrent-ruby (~> 1.0)
+ logger
+ zeitwerk (~> 2.6)
+ dry-inflector (1.3.1)
+ dry-initializer (3.2.0)
+ dry-logic (1.6.0)
+ bigdecimal
+ concurrent-ruby (~> 1.0)
+ dry-core (~> 1.1)
+ zeitwerk (~> 2.6)
+ dry-schema (1.16.0)
+ concurrent-ruby (~> 1.0)
+ dry-configurable (~> 1.0, >= 1.0.1)
+ dry-core (~> 1.1)
+ dry-initializer (~> 3.2)
+ dry-logic (~> 1.6)
+ dry-types (~> 1.9, >= 1.9.1)
+ zeitwerk (~> 2.6)
+ dry-types (1.9.1)
+ bigdecimal (>= 3.0)
+ concurrent-ruby (~> 1.0)
+ dry-core (~> 1.0)
+ dry-inflector (~> 1.0)
+ dry-logic (~> 1.4)
+ zeitwerk (~> 2.6)
+ erb (6.0.6)
+ gem_bench (2.0.5)
+ bundler (>= 1.14)
+ version_gem (~> 1.1, >= 1.1.4)
+ geom2d (0.4.1)
+ hexapdf (1.9.1)
+ cmdparse (~> 3.0, >= 3.0.3)
+ geom2d (~> 0.4, >= 0.4.1)
+ openssl (>= 2.2.1)
+ strscan (>= 3.1.2)
+ io-console (0.8.2)
+ irb (1.18.0)
+ pp (>= 0.6.0)
+ prism (>= 1.3.0)
+ rdoc (>= 4.0.0)
+ reline (>= 0.4.2)
+ json (2.21.1)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
+ simplecov-rcov (~> 0.3, >= 0.3.7)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
+ kramdown (2.5.2)
+ rexml (>= 3.4.4)
+ kramdown-parser-gfm (1.1.0)
+ kramdown (~> 2.0)
+ language_server-protocol (3.17.0.6)
+ lint_roller (1.1.0)
+ logger (1.7.0)
+ mutex_m (0.3.0)
+ nokogiri (1.19.4-x86_64-linux-gnu)
+ racc (~> 1.4)
+ nomono (1.1.0)
+ openssl (4.0.2)
+ ostruct (0.6.3)
+ parallel (1.28.0)
+ parser (3.3.12.0)
+ ast (~> 2.4.1)
+ racc
+ parslet (2.0.0)
+ pp (0.6.4)
+ prettyprint
+ prettyprint (0.2.0)
+ prism (1.9.0)
+ psych (5.4.0)
+ date
+ stringio
+ public_suffix (7.0.5)
+ racc (1.8.1)
+ rainbow (3.1.1)
+ rake (13.4.2)
+ rbs (4.0.3)
+ logger
+ prism (>= 1.6.0)
+ tsort
+ rdoc (6.17.0)
+ erb
+ psych (>= 4.0.0)
+ tsort
+ reek (6.5.0)
+ dry-schema (~> 1.13)
+ logger (~> 1.6)
+ parser (~> 3.3.0)
+ rainbow (>= 2.0, < 4.0)
+ rexml (~> 3.1)
+ regexp_parser (2.12.0)
+ reline (0.6.3)
+ io-console (~> 0.5)
+ rexml (3.4.4)
+ rubocop (1.88.2)
+ json (~> 2.3)
+ language_server-protocol (~> 3.17.0.2)
+ lint_roller (~> 1.1.0)
+ parallel (>= 1.10)
+ parser (>= 3.3.0.2)
+ rainbow (>= 2.2.2, < 4.0)
+ regexp_parser (>= 2.9.3, < 3.0)
+ rubocop-ast (>= 1.49.0, < 2.0)
+ ruby-progressbar (~> 1.7)
+ unicode-display_width (>= 2.4.0, < 4.0)
+ rubocop-ast (1.50.0)
+ parser (>= 3.3.7.2)
+ prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-gradual (0.4.0)
+ benchmark
+ diff-lcs (>= 1.2.0, < 2.0)
+ diffy (~> 3.0)
+ parallel (~> 1.10)
+ rainbow (>= 2.2.2, < 4.0)
+ rubocop (~> 1.0)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-md (2.0.4)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
+ rubocop-on-rbs (2.0.0)
+ lint_roller (~> 1.1)
+ rbs (~> 4.0)
+ rubocop (>= 1.72.1, < 2.0)
+ zlib
+ rubocop-packaging (0.6.0)
+ lint_roller (~> 1.1.0)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-performance (1.26.1)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.47.1, < 2.0)
+ rubocop-rake (0.7.1)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1)
+ rubocop-rspec (3.10.2)
+ lint_roller (~> 1.1)
+ regexp_parser (>= 2.0)
+ rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
+ rubocop-ruby3_2 (3.0.7)
+ rubocop-gradual (~> 0.3, >= 0.3.6)
+ rubocop-md (~> 2.0, >= 2.0.4)
+ rubocop-rake (~> 0.7, >= 0.7.1)
+ rubocop-thread_safety (~> 0.7, >= 0.7.3)
+ standard-rubocop-lts (~> 2.0, >= 2.0.9)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-thread_safety (0.7.3)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-ast (>= 1.44.0, < 2.0)
+ ruby-progressbar (1.13.0)
+ service_actor (3.9.4)
+ zeitwerk (>= 1.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
+ rexml
+ simplecov (~> 1.0)
+ simplecov-console (0.9.5)
+ ansi
+ simplecov
+ terminal-table
+ simplecov-rcov (0.3.7)
+ simplecov (>= 0.4.1)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
+ standard (1.56.0)
+ language_server-protocol (~> 3.17.0.2)
+ lint_roller (~> 1.0)
+ rubocop (~> 1.88.0)
+ standard-custom (~> 1.0.0)
+ standard-performance (~> 1.8)
+ standard-custom (1.0.2)
+ lint_roller (~> 1.0)
+ rubocop (~> 1.50)
+ standard-performance (1.9.0)
+ lint_roller (~> 1.1)
+ rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
+ standard-rubocop-lts (2.0.10)
+ standard (~> 1.54, >= 1.54.0)
+ standard-custom (~> 1.0, >= 1.0.2)
+ standard-performance (~> 1.9, >= 1.9.0)
+ version_gem (~> 1.1, >= 1.1.13)
+ stringio (3.2.0)
+ strscan (3.1.8)
+ terminal-table (4.0.0)
+ unicode-display_width (>= 1.1.1, < 4)
+ thor (1.5.0)
+ token-resolver (2.0.5)
+ parslet (~> 2.0)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
+ tsort (0.2.0)
+ unicode-display_width (3.2.0)
+ unicode-emoji (~> 4.1)
+ unicode-emoji (4.2.0)
+ version_gem (1.1.14)
+ webrick (1.9.2)
+ yaml-converter (0.2.3)
+ hexapdf (>= 1.8, < 2)
+ kramdown (>= 2.4, < 3)
+ kramdown-parser-gfm (~> 1.1)
+ version_gem (~> 1.1, >= 1.1.13)
+ yard (0.9.45)
+ yard-fence (0.9.6)
+ rdoc (>= 6.11, < 8)
+ version_gem (~> 1.1, >= 1.1.13)
+ yard (~> 0.9, >= 0.9.37)
+ yard-junk (0.1.0)
+ benchmark
+ ostruct
+ rainbow
+ yard
+ yard-relative_markdown_links (0.6.0)
+ nokogiri (>= 1.14.3, < 2)
+ yard-timekeeper (0.2.4)
+ version_gem (~> 1.1, >= 1.1.13)
+ yard-yaml (0.2.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ yaml-converter (~> 0.2)
+ zeitwerk (2.8.2)
+ zlib (3.2.3)
+
+PLATFORMS
+ x86_64-linux
+
+DEPENDENCIES
+ addressable (>= 2.8, < 3)
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
+ benchmark (~> 0.5, >= 0.5.0)
+ cgi (~> 0.5)
+ debug (>= 1.1)
+ erb (~> 6.0, >= 6.0.6)
+ gem_bench (~> 2.0, >= 2.0.5)
+ html-merge!
+ irb (~> 1.17)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
+ kramdown (~> 2.5, >= 2.5.2)
+ kramdown-parser-gfm (~> 1.1)
+ mutex_m (~> 0.2)
+ nomono (~> 1.0, >= 1.0.8)
+ rbs (>= 3.0)
+ rdoc (~> 6.11)
+ reek (~> 6.5, >= 6.5.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
+ rubocop-packaging (~> 0.6, >= 0.6.0)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
+ standard (~> 1.56, >= 1.56.0)
+ stringio (>= 3.0)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
+ yard-junk (~> 0.1, >= 0.1.0)
+ yard-relative_markdown_links (~> 0.6)
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
+
+CHECKSUMS
+ addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
+ ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
+ appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
+ ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
+ ast-crispr (7.1.0)
+ ast-merge (7.1.0)
+ benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
+ bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
+ citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
+ cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
+ date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
+ debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
+ diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
+ diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
+ dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
+ dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
+ dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
+ dry-initializer (3.2.0) sha256=37d59798f912dc0a1efe14a4db4a9306989007b302dcd5f25d0a2a20c166c4e3
+ dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2
+ dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
+ dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
+ gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
+ geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
+ hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
+ html-merge (7.1.0)
+ io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
+ irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
+ json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
+ kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
+ kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
+ language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
+ lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
+ logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
+ mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
+ nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
+ openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
+ ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
+ parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
+ parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
+ parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
+ pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
+ prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
+ prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
+ psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
+ public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
+ racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
+ rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
+ rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
+ rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
+ rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
+ reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
+ regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
+ reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
+ rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142
+ rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
+ rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
+ rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
+ rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
+ rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
+ rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
+ rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
+ rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
+ rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
+ rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
+ rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
+ ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
+ service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
+ simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
+ simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
+ standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
+ standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
+ standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
+ standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
+ stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
+ strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e
+ terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2
+ thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
+ tree_haver (7.1.0)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
+ tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
+ unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
+ unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
+ version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
+ yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
+ yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
+ yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
+ yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
+ yard-relative_markdown_links (0.6.0) sha256=3e5ffa85cbad9bac70bee5421774b190fb25d3bdf489323a5b3534f647d1a70e
+ yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
+ yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
+ zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
+ zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
+
+BUNDLED WITH
+ 4.0.17
diff --git a/gems/html-merge/LICENSE.md b/gems/html-merge/LICENSE.md
new file mode 100644
index 000000000..57fe70a58
--- /dev/null
+++ b/gems/html-merge/LICENSE.md
@@ -0,0 +1,10 @@
+# License
+
+This project is made available under the following license.
+Choose the option that best fits your use case:
+
+- [MIT](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/MIT.md)
+
+## Copyright Notice
+
+- Copyright (c) 2026 Peter H. Boling
diff --git a/gems/html-merge/LICENSE.txt b/gems/html-merge/LICENSE.txt
new file mode 100644
index 000000000..f9027eaec
--- /dev/null
+++ b/gems/html-merge/LICENSE.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2026 Peter H. Boling
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/gems/html-merge/MIT.md b/gems/html-merge/MIT.md
new file mode 100644
index 000000000..6d5d66d26
--- /dev/null
+++ b/gems/html-merge/MIT.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+See [LICENSE.md](LICENSE.md) for the copyright notice.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/gems/html-merge/README.md b/gems/html-merge/README.md
new file mode 100644
index 000000000..7c48e00d9
--- /dev/null
+++ b/gems/html-merge/README.md
@@ -0,0 +1,255 @@
+
+
+# 💎 Html::Merge
+
+[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CI Current][🚎11-c-wfi]][🚎11-c-wf]
+
+`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
+
+---
+
+`if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
+
+[![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
+
+
+ 👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️
+
+I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
+
+
+
+## 🌻 Synopsis
+
+## 💡 Info you can shake a stick at
+
+| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
+|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
+| Compliance | [![License: MIT][📄license-img]][📄license] [![Apache license compatibility: Category A][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
+| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
+| Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼♂️devto-img]][💖💁🏼♂️devto] |
+| `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼♂️aboutme-img]][💖💁🏼♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
+
+### Compatibility
+
+Compatible with MRI Ruby 3.2.0+, and concordant releases of JRuby, and TruffleRuby.
+CI workflows and Appraisals are generated for MRI Ruby 3.2.0+.
+This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
+may be higher than the gem's runtime compatibility floor when legacy Rubies are
+not practical for the current toolchain.
+
+
+
+The _amazing_ test matrix is powered by the kettle-dev stack.
+
+
+How kettle-dev manages complexity in tests
+
+| Gem | Source | Role | Daily download rank |
+|-----|--------|------|---------------------|
+| [appraisal2](https://bestgems.org/gems/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [](https://bestgems.org/gems/appraisal2) |
+| [appraisal2-rubocop](https://bestgems.org/gems/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [](https://bestgems.org/gems/appraisal2-rubocop) |
+| [kettle-dev](https://bestgems.org/gems/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [](https://bestgems.org/gems/kettle-dev) |
+| [kettle-jem](https://bestgems.org/gems/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [](https://bestgems.org/gems/kettle-jem) |
+| [kettle-soup-cover](https://bestgems.org/gems/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [](https://bestgems.org/gems/kettle-soup-cover) |
+| [kettle-test](https://bestgems.org/gems/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [](https://bestgems.org/gems/kettle-test) |
+| [rubocop-lts](https://bestgems.org/gems/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [](https://bestgems.org/gems/rubocop-lts) |
+| [turbo_tests2](https://bestgems.org/gems/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [](https://bestgems.org/gems/turbo_tests2) |
+
+
+
+## ✨ Installation
+
+Install the gem and add to the application's Gemfile by executing:
+
+```console
+bundle add html-merge
+```
+
+If bundler is not being used to manage dependencies, install the gem by executing:
+
+```console
+gem install html-merge
+```
+
+## ⚙️ Configuration
+
+## 🔧 Basic Usage
+
+TODO: Write usage instructions here
+
+## 🔐 Security
+
+See [SECURITY.md][🔐security].
+
+## 🤝 Contributing
+
+If you need some ideas of where to help, you could work on adding more code coverage,
+or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
+or use the gem and think about how it could be better.
+
+We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
+
+See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
+
+## 📌 Versioning
+
+This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
+For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
+
+For example:
+
+```ruby
+spec.add_dependency("html-merge", "~> 7.0")
+```
+
+
+📌 Is "Platform Support" part of the public API? More details inside.
+
+Dropping support for a platform can be a breaking change for affected users.
+If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
+
+To get a better understanding of how SemVer is intended to work over a project's lifetime,
+read this article from the creator of SemVer:
+
+- ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
+
+
+
+See [CHANGELOG.md][📌changelog] for a list of releases.
+
+## 📄 License
+
+The gem is available as open source under the terms of
+the [MIT](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
+
+[gh-discussions]: https://github.com/structuredmerge/structuredmerge-ruby/discussions
+[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
+[⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
+[⛳liberapay]: https://liberapay.com/pboling/donate
+[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
+[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
+[🖇sponsor]: https://github.com/sponsors/pboling
+[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
+[🖇kofi]: https://ko-fi.com/pboling
+[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
+[🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
+[🖇buyme]: https://www.buymeacoffee.com/pboling
+[🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
+[🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
+[🖇paypal]: https://www.paypal.com/paypalme/peterboling
+[🖇floss-funding.dev]: https://floss-funding.dev
+[🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
+[✉️discord-invite]: https://discord.gg/3qme4XHNKN
+[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
+[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
+[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
+[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
+[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/html-merge
+[⛳️namespace-img]: https://img.shields.io/badge/namespace-Html::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
+[⛳️gem-name]: https://bestgems.org/gems/html-merge
+[⛳️name-img]: https://img.shields.io/badge/name-html--merge-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
+[⛳️tag-img]: https://img.shields.io/github/tag/structuredmerge/structuredmerge-ruby.svg
+[⛳️tag]: https://github.com/structuredmerge/structuredmerge-ruby/releases
+[🚂maint-blog]: http://www.railsbling.com/tags/html-merge
+[🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
+[🚂maint-contact]: http://www.railsbling.com/contact
+[🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
+[💖🖇linkedin]: http://www.linkedin.com/in/peterboling
+[💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
+[💖✌️wellfound]: https://wellfound.com/u/peter-boling
+[💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
+[💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
+[💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
+[💖🐘ruby-mast]: https://ruby.social/@galtzo
+[💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
+[💖🦋bluesky]: https://bsky.app/profile/galtzo.com
+[💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
+[💖🌳linktree]: https://linktr.ee/galtzo
+[💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
+[💖💁🏼♂️devto]: https://dev.to/galtzo
+[💖💁🏼♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
+[💖💁🏼♂️aboutme]: https://about.me/peter.boling
+[💖💁🏼♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
+[💖🧊berg]: https://codeberg.org/pboling
+[💖🐙hub]: https://github.org/pboling
+[💖🛖hut]: https://sr.ht/~galtzo/
+[💖🧪lab]: https://gitlab.com/pboling
+[👨🏼🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
+[👨🏼🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
+[👨🏼🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
+[👨🏼🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
+[🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-html-merge?utm_source=rubygems-html-merge&utm_medium=referral&utm_campaign=readme
+[🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
+[🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
+[💁🏼♂️peterboling]: http://www.peterboling.com
+[🚂railsbling]: http://www.railsbling.com
+[📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
+[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/html-merge
+[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
+[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/html-merge
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
+[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/html-merge
+[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
+[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
+[📜gl-wiki]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/wikis/home
+[📜gh-wiki]: https://github.com/structuredmerge/structuredmerge-ruby/wiki
+[📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
+[📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
+[👽dl-rank]: https://bestgems.org/gems/html-merge
+[👽dl-ranki]: https://img.shields.io/gem/rd/html-merge.svg
+[👽version]: https://bestgems.org/gems/html-merge
+[👽versioni]: https://img.shields.io/gem/v/html-merge.svg
+[🚎11-c-wf]: https://github.com/structuredmerge/structuredmerge-ruby/actions/workflows/current.yml
+[🚎11-c-wfi]: https://github.com/structuredmerge/structuredmerge-ruby/actions/workflows/current.yml/badge.svg
+[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
+[🤝gh-issues]: https://github.com/structuredmerge/structuredmerge-ruby/issues
+[🤝gh-pulls]: https://github.com/structuredmerge/structuredmerge-ruby/pulls
+[🤝gl-issues]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/issues
+[🤝gl-pulls]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/merge_requests
+[🤝cb-issues]: https://codeberg.org/structuredmerge/structuredmerge-ruby/issues
+[🤝cb-pulls]: https://codeberg.org/structuredmerge/structuredmerge-ruby/pulls
+[🤝cb-donate]: https://donate.codeberg.org/
+[🤝contributing]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/CONTRIBUTING.md
+[🖐contrib-rocks]: https://contrib.rocks
+[🖐contributors]: https://github.com/structuredmerge/structuredmerge-ruby/graphs/contributors
+[🖐contributors-img]: https://contrib.rocks/image?repo=structuredmerge/structuredmerge-ruby
+[🪇conduct]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/CODE_OF_CONDUCT.md
+[🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
+[📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
+[📌semver]: https://semver.org/spec/v2.0.0.html
+[📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
+[📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
+[📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
+[📌changelog]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/CHANGELOG.md
+[📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
+[📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
+[📌gitmoji]: https://gitmoji.dev
+[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
+[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
+[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.053-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
+[🔐security]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/SECURITY.md
+[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
+[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
+[📄license]: LICENSE.md
+[📄license-ref]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/MIT.md
+[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
+[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
+[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
+[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
+[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
+[🚎yard-current]: http://rubydoc.info/gems/html-merge
+[🚎yard-head]: https://html-merge.galtzo.com
+[💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
+[💎SHA_checksums]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/checksums
+[💎rlts]: https://github.com/rubocop-lts/rubocop-lts
+[💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
+[💎appraisal2]: https://github.com/appraisal-rb/appraisal2
+[💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
+[💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
diff --git a/gems/html-merge/Rakefile b/gems/html-merge/Rakefile
new file mode 100644
index 000000000..6bbda0fa6
--- /dev/null
+++ b/gems/html-merge/Rakefile
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+### DUPLICATE DRIFT TASKS
+begin
+ require "kettle/drift"
+ Kettle::Drift.install_tasks
+rescue LoadError
+ desc("(stub) kettle:drift:check is unavailable")
+ task("kettle:drift:check") do
+ warn("NOTE: kettle-drift isn't installed, or is disabled for #{RUBY_VERSION} in the current environment")
+ end
+ desc("(stub) kettle:drift:update is unavailable")
+ task("kettle:drift:update") do
+ warn("NOTE: kettle-drift isn't installed, or is disabled for #{RUBY_VERSION} in the current environment")
+ end
+ desc("(stub) kettle:drift:force_update is unavailable")
+ task("kettle:drift:force_update") do
+ warn("NOTE: kettle-drift isn't installed, or is disabled for #{RUBY_VERSION} in the current environment")
+ end
+ desc("(stub) kettle:drift is unavailable")
+ task("kettle:drift" => "kettle:drift:update")
+end
diff --git a/gems/html-merge/bin/appraisal b/gems/html-merge/bin/appraisal
new file mode 100755
index 000000000..bc7d25bd3
--- /dev/null
+++ b/gems/html-merge/bin/appraisal
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'appraisal' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("appraisal2", "appraisal")
diff --git a/gems/html-merge/bin/console b/gems/html-merge/bin/console
new file mode 100755
index 000000000..87c370954
--- /dev/null
+++ b/gems/html-merge/bin/console
@@ -0,0 +1,11 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+require "bundler/setup"
+require "html/merge"
+
+# You can add fixtures and/or initialization code here to make experimenting
+# with your gem easier. You can also use a different console, if you like.
+
+require "irb"
+IRB.start(__FILE__)
diff --git a/gems/html-merge/bin/kettle-bump b/gems/html-merge/bin/kettle-bump
new file mode 100755
index 000000000..708c1f9ec
--- /dev/null
+++ b/gems/html-merge/bin/kettle-bump
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-bump' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-bump")
diff --git a/gems/html-merge/bin/kettle-changelog b/gems/html-merge/bin/kettle-changelog
new file mode 100755
index 000000000..0e7fcc4d1
--- /dev/null
+++ b/gems/html-merge/bin/kettle-changelog
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-changelog' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-changelog")
diff --git a/gems/html-merge/bin/kettle-check-eof b/gems/html-merge/bin/kettle-check-eof
new file mode 100755
index 000000000..13469d3ba
--- /dev/null
+++ b/gems/html-merge/bin/kettle-check-eof
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-check-eof' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-check-eof")
diff --git a/gems/html-merge/bin/kettle-commit-msg b/gems/html-merge/bin/kettle-commit-msg
new file mode 100755
index 000000000..b228ad670
--- /dev/null
+++ b/gems/html-merge/bin/kettle-commit-msg
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-commit-msg' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-commit-msg")
diff --git a/gems/html-merge/bin/kettle-dev-setup b/gems/html-merge/bin/kettle-dev-setup
new file mode 100755
index 000000000..276319a7c
--- /dev/null
+++ b/gems/html-merge/bin/kettle-dev-setup
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-dev-setup' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-dev-setup")
diff --git a/gems/html-merge/bin/kettle-dvcs b/gems/html-merge/bin/kettle-dvcs
new file mode 100755
index 000000000..b572d48c5
--- /dev/null
+++ b/gems/html-merge/bin/kettle-dvcs
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-dvcs' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-dvcs")
diff --git a/gems/html-merge/bin/kettle-gh-release b/gems/html-merge/bin/kettle-gh-release
new file mode 100755
index 000000000..93265cbd7
--- /dev/null
+++ b/gems/html-merge/bin/kettle-gh-release
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-gh-release' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-gh-release")
diff --git a/gems/html-merge/bin/kettle-gha-sha-pins b/gems/html-merge/bin/kettle-gha-sha-pins
new file mode 100755
index 000000000..13b554c94
--- /dev/null
+++ b/gems/html-merge/bin/kettle-gha-sha-pins
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-gha-sha-pins' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-gha-sha-pins")
diff --git a/gems/html-merge/bin/kettle-pre-release b/gems/html-merge/bin/kettle-pre-release
new file mode 100755
index 000000000..1b98ad614
--- /dev/null
+++ b/gems/html-merge/bin/kettle-pre-release
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-pre-release' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-pre-release")
diff --git a/gems/html-merge/bin/kettle-readme-backers b/gems/html-merge/bin/kettle-readme-backers
new file mode 100755
index 000000000..fec80bd5f
--- /dev/null
+++ b/gems/html-merge/bin/kettle-readme-backers
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-readme-backers' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-readme-backers")
diff --git a/gems/html-merge/bin/kettle-release b/gems/html-merge/bin/kettle-release
new file mode 100755
index 000000000..1f5758a88
--- /dev/null
+++ b/gems/html-merge/bin/kettle-release
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-release' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-dev", "kettle-release")
diff --git a/gems/html-merge/bin/kettle-soup-cover b/gems/html-merge/bin/kettle-soup-cover
new file mode 100755
index 000000000..32ddaca98
--- /dev/null
+++ b/gems/html-merge/bin/kettle-soup-cover
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-soup-cover' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-soup-cover", "kettle-soup-cover")
diff --git a/gems/html-merge/bin/kettle-test b/gems/html-merge/bin/kettle-test
new file mode 100755
index 000000000..7a0c8a215
--- /dev/null
+++ b/gems/html-merge/bin/kettle-test
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'kettle-test' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("kettle-test", "kettle-test")
diff --git a/gems/html-merge/bin/rake b/gems/html-merge/bin/rake
new file mode 100755
index 000000000..9efbee999
--- /dev/null
+++ b/gems/html-merge/bin/rake
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'rake' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("rake", "rake")
diff --git a/gems/html-merge/bin/rbs b/gems/html-merge/bin/rbs
new file mode 100755
index 000000000..ffc95a0dc
--- /dev/null
+++ b/gems/html-merge/bin/rbs
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'rbs' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("rbs", "rbs")
diff --git a/gems/html-merge/bin/rspec b/gems/html-merge/bin/rspec
new file mode 100755
index 000000000..93e191c2f
--- /dev/null
+++ b/gems/html-merge/bin/rspec
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'rspec' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("rspec-core", "rspec")
diff --git a/gems/html-merge/bin/setup b/gems/html-merge/bin/setup
new file mode 100755
index 000000000..dce67d860
--- /dev/null
+++ b/gems/html-merge/bin/setup
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+set -euo pipefail
+IFS=$'\n\t'
+set -vx
+
+bundle install
+
+# Do any other automated setup that you need to do here
diff --git a/gems/html-merge/bin/yard b/gems/html-merge/bin/yard
new file mode 100755
index 000000000..a7e8b6eed
--- /dev/null
+++ b/gems/html-merge/bin/yard
@@ -0,0 +1,15 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+# Generated by kettle-jem after curated `bundle binstubs`.
+#
+# Bundler's normal yard binstub executes the raw YARD CLI. That skips
+# Rake task enhancements installed by documentation plugins such as
+# yard-timekeeper. Those plugins run after YARD finishes and may restore
+# checked-in docs files whose only diff is generated timestamp churn.
+#
+# The canonical docs entrypoint is therefore the Rake task, not raw
+# `yard` / `bin/yard`. Keep this binstub as a handoff to the task so
+# humans and tools that reach for `bin/yard` still run the full docs
+# workflow with post-processing hooks.
+exec("bundle", "exec", "rake", "yard")
diff --git a/gems/html-merge/bin/yardoc b/gems/html-merge/bin/yardoc
new file mode 100755
index 000000000..5ed01e71a
--- /dev/null
+++ b/gems/html-merge/bin/yardoc
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'yardoc' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("yard", "yardoc")
diff --git a/gems/html-merge/bin/yri b/gems/html-merge/bin/yri
new file mode 100755
index 000000000..80fa3d7ae
--- /dev/null
+++ b/gems/html-merge/bin/yri
@@ -0,0 +1,16 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+#
+# This file was generated by Bundler.
+#
+# The application 'yri' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
+
+require "rubygems"
+require "bundler/setup"
+
+load Gem.bin_path("yard", "yri")
diff --git a/gems/html-merge/certs/pboling.pem b/gems/html-merge/certs/pboling.pem
new file mode 100644
index 000000000..d5c7e8bbb
--- /dev/null
+++ b/gems/html-merge/certs/pboling.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl
+ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
+A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM
+DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
+LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAruUoo0WA
+uoNuq6puKWYeRYiZekz/nsDeK5x/0IEirzcCEvaHr3Bmz7rjo1I6On3gGKmiZs61
+LRmQ3oxy77ydmkGTXBjruJB+pQEn7UfLSgQ0xa1/X3kdBZt6RmabFlBxnHkoaGY5
+mZuZ5+Z7walmv6sFD9ajhzj+oIgwWfnEHkXYTR8I6VLN7MRRKGMPoZ/yvOmxb2DN
+coEEHWKO9CvgYpW7asIihl/9GMpKiRkcYPm9dGQzZc6uTwom1COfW0+ZOFrDVBuV
+FMQRPswZcY4Wlq0uEBLPU7hxnCL9nKK6Y9IhdDcz1mY6HZ91WImNslOSI0S8hRpj
+yGOWxQIhBT3fqCBlRIqFQBudrnD9jSNpSGsFvbEijd5ns7Z9ZMehXkXDycpGAUj1
+to/5cuTWWw1JqUWrKJYoifnVhtE1o1DZ+LkPtWxHtz5kjDG/zR3MG0Ula0UOavlD
+qbnbcXPBnwXtTFeZ3C+yrWpE4pGnl3yGkZj9SMTlo9qnTMiPmuWKQDatAgMBAAGj
+fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQE8uWvNbPVNRXZ
+HlgPbc2PCzC4bjAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
+A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
+ggGBAJbnUwfJQFPkBgH9cL7hoBfRtmWiCvdqdjeTmi04u8zVNCUox0A4gT982DE9
+wmuN12LpdajxZONqbXuzZvc+nb0StFwmFYZG6iDwaf4BPywm2e/Vmq0YG45vZXGR
+L8yMDSK1cQXjmA+ZBKOHKWavxP6Vp7lWvjAhz8RFwqF9GuNIdhv9NpnCAWcMZtpm
+GUPyIWw/Cw/2wZp74QzZj6Npx+LdXoLTF1HMSJXZ7/pkxLCsB8m4EFVdb/IrW/0k
+kNSfjtAfBHO8nLGuqQZVH9IBD1i9K6aSs7pT6TW8itXUIlkIUI2tg5YzW6OFfPzq
+QekSkX3lZfY+HTSp/o+YvKkqWLUV7PQ7xh1ZYDtocpaHwgxe/j3bBqHE+CUPH2vA
+0V/FwdTRWcwsjVoOJTrYcff8pBZ8r2MvtAc54xfnnhGFzeRHfcltobgFxkAXdE6p
+DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
+L9nRqA==
+-----END CERTIFICATE-----
diff --git a/gems/html-merge/gemfiles/modular/benchmark/r4/v0.5.gemfile b/gems/html-merge/gemfiles/modular/benchmark/r4/v0.5.gemfile
new file mode 100644
index 000000000..dec650815
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/benchmark/r4/v0.5.gemfile
@@ -0,0 +1,2 @@
+# Ruby >= 2.1
+gem "benchmark", "~> 0.5", ">= 0.5.0" # Removed from Std Lib in Ruby 4.0
diff --git a/gems/html-merge/gemfiles/modular/benchmark/vHEAD.gemfile b/gems/html-merge/gemfiles/modular/benchmark/vHEAD.gemfile
new file mode 100644
index 000000000..e1eb20c5e
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/benchmark/vHEAD.gemfile
@@ -0,0 +1,2 @@
+# Ruby >= 2.1
+gem "benchmark", github: "ruby/benchmark", branch: "master"
diff --git a/gems/html-merge/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/html-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..19ed967c3
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem "cgi", "~> 0.5"
diff --git a/gems/html-merge/gemfiles/modular/cgi/vHEAD.gemfile b/gems/html-merge/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..ef8b816ce
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem "cgi", ">= 0.5"
diff --git a/gems/html-merge/gemfiles/modular/coverage.gemfile b/gems/html-merge/gemfiles/modular/coverage.gemfile
new file mode 100644
index 000000000..52d737872
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/coverage.gemfile
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+# We run code coverage on the latest version of Ruby only.
+
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
+# When false (default / CI), remote released gems are used.
+if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false").zero?
+ # Coverage (remote/released)
+ platform :mri do
+ gem "kettle-soup-cover", "~> 3.0", ">= 3.0.3", require: false
+ end
+else
+ eval_gemfile "coverage_local.gemfile"
+end
diff --git a/gems/html-merge/gemfiles/modular/coverage_local.gemfile b/gems/html-merge/gemfiles/modular/coverage_local.gemfile
new file mode 100644
index 000000000..60c4cf2bb
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/coverage_local.gemfile
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+# Local path overrides for development.
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
+
+require "nomono/bundler"
+
+local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[html-merge] - declared_gems
+
+# export KETTLE_DEV_DEV=/path/to/my
+platform :mri do
+ eval_nomono_gems(
+ gems: local_gems_to_eval,
+ prefix: "KETTLE_DEV",
+ path_env: "KETTLE_DEV_DEV",
+ vendored_gems_env: "VENDORED_GEMS",
+ vendor_gem_dir_env: "VENDOR_GEM_DIR",
+ debug_env: "KETTLE_DEV_DEBUG"
+ )
+
+ if ENV.fetch("GALTZO_FLOSS_DEV", "false").casecmp("false") != 0
+ eval_nomono_gems(
+ gems: %w[turbo_tests2],
+ prefix: "GALTZO_FLOSS",
+ path_env: "GALTZO_FLOSS_DEV",
+ vendored_gems_env: "GALTZO_FLOSS_VENDORED_GEMS",
+ vendor_gem_dir_env: "GALTZO_FLOSS_VENDOR_GEM_DIR",
+ debug_env: "GALTZO_FLOSS_DEBUG"
+ )
+ end
+end
diff --git a/gems/html-merge/gemfiles/modular/debug.gemfile b/gems/html-merge/gemfiles/modular/debug.gemfile
new file mode 100644
index 000000000..4e15b1a3a
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/debug.gemfile
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+# To retain during kettle-jem templating:
+# kettle-jem:freeze
+# # ... your code
+# kettle-jem:unfreeze
+#
+
+# Ex-Standard Library gems
+# irb is included in main Gemfile (and unlocked_deps Appraisal), so it can't be included here.
+# gem "irb", "~> 1.15", ">= 1.15.2" # removed from stdlib in 3.5
+
+platform :mri do
+ # Debugging - Ensure ENV["DEBUG"] == "true" to use debuggers within spec suite
+ # Use binding.break, binding.b, or debugger in code
+ gem "debug", ">= 1.1" # ruby >= 2.7
+
+ # Dev Console - Binding.pry - Irb replacement
+ # gem "pry", "~> 0.14" # ruby >= 2.0
+end
+
+gem "gem_bench", "~> 2.0", ">= 2.0.5"
diff --git a/gems/html-merge/gemfiles/modular/documentation.gemfile b/gems/html-merge/gemfiles/modular/documentation.gemfile
new file mode 100644
index 000000000..d8215416e
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/documentation.gemfile
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+# To retain during kettle-jem templating:
+# kettle-jem:freeze
+# # ... your code
+# kettle-jem:unfreeze
+#
+
+# Documentation
+gem "kramdown", "~> 2.5", ">= 2.5.2", require: false # Ruby >= 2.5
+gem "kramdown-parser-gfm", "~> 1.1", require: false # Ruby >= 2.3
+gem "yaml-converter", "~> 0.2", ">= 0.2.3", require: false # Ruby >= 3.2
+gem "yard", "~> 0.9", ">= 0.9.45", require: false
+gem "yard-junk", "~> 0.1", ">= 0.1.0", require: false # Ruby >= 3.1
+gem "yard-relative_markdown_links", "~> 0.6", require: false
+
+if ENV.fetch("GALTZO_FLOSS_DEV", "false").casecmp("false").zero?
+ gem "yard-fence", "~> 0.9", ">= 0.9.6", require: false # Ruby >= 3.2
+ gem "yard-timekeeper", "~> 0.2", ">= 0.2.4", require: false
+ gem "yard-yaml", "~> 0.2", ">= 0.2.3", require: false
+else
+ eval_gemfile "documentation_local.gemfile"
+end
+
+# Std Lib extractions
+gem "rdoc", "~> 6.11", require: false unless ENV.fetch("KJ_FRAMEWORK_MATRIX_GEM", "") == "rdoc"
diff --git a/gems/html-merge/gemfiles/modular/documentation_local.gemfile b/gems/html-merge/gemfiles/modular/documentation_local.gemfile
new file mode 100644
index 000000000..a4664a155
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/documentation_local.gemfile
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+# Local path overrides for development.
+# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
+
+require "nomono/bundler"
+
+local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[html-merge] - declared_gems
+
+# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
+eval_nomono_gems(
+ gems: local_gems_to_eval,
+ prefix: "GALTZO_FLOSS",
+ path_env: "GALTZO_FLOSS_DEV",
+ vendored_gems_env: "GALTZO_FLOSS_VENDORED_GEMS",
+ vendor_gem_dir_env: "GALTZO_FLOSS_VENDOR_GEM_DIR",
+ debug_env: "GALTZO_FLOSS_DEBUG"
+)
diff --git a/gems/html-merge/gemfiles/modular/erb/r2/v3.0.gemfile b/gems/html-merge/gemfiles/modular/erb/r2/v3.0.gemfile
new file mode 100644
index 000000000..c03bd8d85
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/erb/r2/v3.0.gemfile
@@ -0,0 +1 @@
+gem "erb", "~> 3.0" # ruby >= 2.7.0
diff --git a/gems/html-merge/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/html-merge/gemfiles/modular/erb/r3/v5.0.gemfile
new file mode 100644
index 000000000..1bd029cc1
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -0,0 +1 @@
+gem "erb", "~> 6.0", ">= 6.0.6" # ruby >= 3.2.0
diff --git a/gems/html-merge/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/html-merge/gemfiles/modular/erb/r4/v5.0.gemfile
new file mode 100644
index 000000000..1bd029cc1
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -0,0 +1 @@
+gem "erb", "~> 6.0", ">= 6.0.6" # ruby >= 3.2.0
diff --git a/gems/html-merge/gemfiles/modular/erb/vHEAD.gemfile b/gems/html-merge/gemfiles/modular/erb/vHEAD.gemfile
new file mode 100644
index 000000000..48fee4218
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/erb/vHEAD.gemfile
@@ -0,0 +1,2 @@
+# Ruby >= 3.2
+gem "erb", github: "ruby/erb", branch: "master"
diff --git a/gems/html-merge/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/html-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..b0e69ab11
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == "truffleruby" && RUBY_ENGINE_VERSION.start_with?("22.3")
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem "json", "= 2.5.1"
+end
diff --git a/gems/html-merge/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/html-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..7b2660a2b
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == "truffleruby" && RUBY_ENGINE_VERSION.start_with?("23.0")
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem "json", "= 2.6.1"
+end
diff --git a/gems/html-merge/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/html-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..dfa21f2e4
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == "truffleruby" && RUBY_ENGINE_VERSION.start_with?("23.1")
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem "json", "= 2.6.3"
+end
diff --git a/gems/html-merge/gemfiles/modular/mutex_m/r2/v0.3.gemfile b/gems/html-merge/gemfiles/modular/mutex_m/r2/v0.3.gemfile
new file mode 100644
index 000000000..42e9d9bd4
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/mutex_m/r2/v0.3.gemfile
@@ -0,0 +1,2 @@
+# Ruby >= 2.5
+gem "mutex_m", "~> 0.2"
diff --git a/gems/html-merge/gemfiles/modular/mutex_m/r3/v0.3.gemfile b/gems/html-merge/gemfiles/modular/mutex_m/r3/v0.3.gemfile
new file mode 100644
index 000000000..42e9d9bd4
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/mutex_m/r3/v0.3.gemfile
@@ -0,0 +1,2 @@
+# Ruby >= 2.5
+gem "mutex_m", "~> 0.2"
diff --git a/gems/html-merge/gemfiles/modular/mutex_m/r4/v0.3.gemfile b/gems/html-merge/gemfiles/modular/mutex_m/r4/v0.3.gemfile
new file mode 100644
index 000000000..42e9d9bd4
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/mutex_m/r4/v0.3.gemfile
@@ -0,0 +1,2 @@
+# Ruby >= 2.5
+gem "mutex_m", "~> 0.2"
diff --git a/gems/html-merge/gemfiles/modular/mutex_m/vHEAD.gemfile b/gems/html-merge/gemfiles/modular/mutex_m/vHEAD.gemfile
new file mode 100644
index 000000000..8af3b6fca
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/mutex_m/vHEAD.gemfile
@@ -0,0 +1,2 @@
+# Ruby >= 2.5 (dependency of omniauth)
+gem "mutex_m", github: "ruby/mutex_m", branch: "master"
diff --git a/gems/html-merge/gemfiles/modular/optional.gemfile b/gems/html-merge/gemfiles/modular/optional.gemfile
new file mode 100644
index 000000000..80bc45196
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/optional.gemfile
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+# To retain during kettle-jem templating:
+# kettle-jem:freeze
+# # ... your code
+# kettle-jem:unfreeze
+#
+
+# Optional dependencies are not depended on directly, but may be used if present.
+
+# Required for curated binstubs generated by kettle-jem install
+gem "rbs", ">= 3.0", require: false # ruby >= 3.1
+
+# Required for kettle-pre-release
+# URL parsing with Unicode support (falls back to URI if not available)
+gem "addressable", ">= 2.8", "< 3" # ruby >= 2.2
diff --git a/gems/html-merge/gemfiles/modular/rspec.gemfile b/gems/html-merge/gemfiles/modular/rspec.gemfile
new file mode 100644
index 000000000..72fdf8b7f
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/rspec.gemfile
@@ -0,0 +1,4 @@
+gem "rspec_junit_formatter",
+ github: "pboling/rspec_junit_formatter",
+ branch: "main",
+ ref: "9e6bcaaedd49477b62878ed568dc4ada5cc7cb5e"
diff --git a/gems/html-merge/gemfiles/modular/runtime_heads.gemfile b/gems/html-merge/gemfiles/modular/runtime_heads.gemfile
new file mode 100644
index 000000000..02f134c7f
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/runtime_heads.gemfile
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+# To retain during kettle-jem templating:
+# kettle-jem:freeze
+# # ... your code
+# kettle-jem:unfreeze
+#
+
+# Test against HEAD of runtime dependencies so we can proactively file bugs
+
+eval_gemfile("x_std_libs/vHEAD.gemfile")
diff --git a/gems/html-merge/gemfiles/modular/stringio/r2/v3.0.gemfile b/gems/html-merge/gemfiles/modular/stringio/r2/v3.0.gemfile
new file mode 100644
index 000000000..e85bb18ee
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/stringio/r2/v3.0.gemfile
@@ -0,0 +1,5 @@
+# !!WARNING!!
+# NOT SEMVER
+# Version 3.0.7 dropped support for Ruby <= 2.7
+# Version 3.0.0 dropped support for Ruby <= 2.4
+gem "stringio", ">= 3.0"
diff --git a/gems/html-merge/gemfiles/modular/stringio/r3/v3.0.gemfile b/gems/html-merge/gemfiles/modular/stringio/r3/v3.0.gemfile
new file mode 100644
index 000000000..e85bb18ee
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/stringio/r3/v3.0.gemfile
@@ -0,0 +1,5 @@
+# !!WARNING!!
+# NOT SEMVER
+# Version 3.0.7 dropped support for Ruby <= 2.7
+# Version 3.0.0 dropped support for Ruby <= 2.4
+gem "stringio", ">= 3.0"
diff --git a/gems/html-merge/gemfiles/modular/stringio/r4/v3.0.gemfile b/gems/html-merge/gemfiles/modular/stringio/r4/v3.0.gemfile
new file mode 100644
index 000000000..e85bb18ee
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/stringio/r4/v3.0.gemfile
@@ -0,0 +1,5 @@
+# !!WARNING!!
+# NOT SEMVER
+# Version 3.0.7 dropped support for Ruby <= 2.7
+# Version 3.0.0 dropped support for Ruby <= 2.4
+gem "stringio", ">= 3.0"
diff --git a/gems/html-merge/gemfiles/modular/stringio/vHEAD.gemfile b/gems/html-merge/gemfiles/modular/stringio/vHEAD.gemfile
new file mode 100644
index 000000000..5f2a74126
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/stringio/vHEAD.gemfile
@@ -0,0 +1,2 @@
+# Ruby >= 2.5 (dependency of omniauth)
+gem "stringio", github: "ruby/stringio", branch: "master"
diff --git a/gems/html-merge/gemfiles/modular/style.gemfile b/gems/html-merge/gemfiles/modular/style.gemfile
new file mode 100644
index 000000000..35de4dcd6
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/style.gemfile
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+# To retain during kettle-jem templating:
+# kettle-jem:freeze
+# # ... your code
+# kettle-jem:unfreeze
+#
+
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
+
+gem "reek", "~> 6.5", ">= 6.5.0"
+
+platform :mri do
+ gem "appraisal2-rubocop", "~> 1.0", ">= 1.0.0", require: false
+ gem "rubocop-gradual", "~> 0.4", ">= 0.4.0"
+ gem "rubocop-minitest", "~> 0.40", ">= 0.40.0"
+ gem "rubocop-on-rbs", "~> 2.0", ">= 2.0.0" # ruby >= 3.2.0
+ # gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
+ gem "rubocop-packaging", "~> 0.6", ">= 0.6.0"
+ gem "standard", "~> 1.56", ">= 1.56.0"
+
+ if ENV.fetch("RUBOCOP_LTS_LOCAL", "false").casecmp("false").zero?
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem "rubocop-lts", "~> 24.2", ">= 24.2.1" unless declared_gems.include?("rubocop-lts")
+ gem "rubocop-lts-rspec", "~> 1.0", ">= 1.0.5" unless declared_gems.include?("rubocop-lts-rspec")
+ gem "rubocop-ruby3_2", "~> 3.0", ">= 3.0.6" unless declared_gems.include?("rubocop-ruby3_2")
+ else
+ eval_gemfile("style_local.gemfile")
+ end
+end
diff --git a/gems/html-merge/gemfiles/modular/style_local.gemfile b/gems/html-merge/gemfiles/modular/style_local.gemfile
new file mode 100644
index 000000000..48a918f73
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/style_local.gemfile
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
+
+# Local path overrides for development.
+# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
+
+require "nomono/bundler"
+
+local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[html-merge] - declared_gems
+
+# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
+platform :mri do
+ eval_nomono_gems(
+ gems: local_gems_to_eval,
+ prefix: "RUBOCOP_LTS",
+ path_env: "RUBOCOP_LTS_LOCAL",
+ vendored_gems_env: "VENDORED_GEMS",
+ vendor_gem_dir_env: "VENDOR_GEM_DIR",
+ debug_env: "RUBOCOP_LTS_DEBUG",
+ root: ["src", "rubocop-lts"]
+ )
+end
diff --git a/gems/html-merge/gemfiles/modular/templating.gemfile b/gems/html-merge/gemfiles/modular/templating.gemfile
new file mode 100644
index 000000000..47138ffbb
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/templating.gemfile
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+structuredmerge_remote = ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false").zero?
+kettle_remote = ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false").zero?
+
+if structuredmerge_remote
+ # Parser dependencies for released installs.
+ gem "tree_sitter_language_pack", "~> 1.13", ">= 1.13.3"
+ # Merge recipes for released installs.
+ gem "kettle-jem", ">= 7.0"
+end
+
+if kettle_remote
+ # Template/plugin checks for released installs.
+ gem "kettle-drift", "~> 1.0", ">= 1.0.6", require: false
+end
+
+# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
+# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
+# Local path overrides bring the same dependencies from sibling gemspecs.
+#
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
+# When false (default / CI), released Kettle plugin gems are used.
+eval_gemfile "templating_local.gemfile" unless structuredmerge_remote && kettle_remote
diff --git a/gems/html-merge/gemfiles/modular/templating_local.gemfile b/gems/html-merge/gemfiles/modular/templating_local.gemfile
new file mode 100644
index 000000000..6cd0b6e3c
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/templating_local.gemfile
@@ -0,0 +1,71 @@
+# frozen_string_literal: true
+
+# Local path overrides for templating development.
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
+# is not "false".
+
+require "nomono/bundler"
+
+structuredmerge_local_gems = %w[
+ tree_haver
+ ast-merge
+ ast-merge-git
+ ast-template
+ bash-merge
+ binary-merge
+ commonmarker-merge
+ citrus-toml-merge
+ dotenv-merge
+ go-merge
+ json-merge
+ kettle-jem
+ kramdown-merge
+ markdown-merge
+ markly-merge
+ parslet-toml-merge
+ plain-merge
+ prism-merge
+ psych-merge
+ rbs-merge
+ ruby-merge
+ rust-merge
+ smorg-rb
+ typescript-merge
+ toml-merge
+ yaml-merge
+ zip-merge
+ ast-crispr
+ ast-crispr-markdown-markly
+ ast-crispr-ruby-prism
+]
+
+kettle_dev_local_gems = %w[
+ kettle-dev kettle-test kettle-soup-cover kettle-drift
+]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[html-merge] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[html-merge] - declared_gems
+
+platform :mri do
+ if ENV.fetch("STRUCTUREDMERGE_DEV", "false").casecmp("false") != 0
+ eval_nomono_gems(
+ gems: structuredmerge_local_gems_to_eval,
+ prefix: "STRUCTUREDMERGE",
+ path_env: "STRUCTUREDMERGE_DEV",
+ vendored_gems_env: "VENDORED_GEMS",
+ vendor_gem_dir_env: "VENDOR_GEM_DIR",
+ debug_env: "STRUCTUREDMERGE_DEBUG"
+ )
+ end
+
+ if ENV.fetch("KETTLE_DEV_DEV", "false").casecmp("false") != 0
+ eval_nomono_gems(
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: "KETTLE_DEV",
+ path_env: "KETTLE_DEV_DEV",
+ vendored_gems_env: "VENDORED_GEMS",
+ vendor_gem_dir_env: "VENDOR_GEM_DIR",
+ debug_env: "KETTLE_DEV_DEBUG"
+ )
+ end
+end
diff --git a/gems/html-merge/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/html-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..eaab4a473
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem "webrick", "~> 1.9"
diff --git a/gems/html-merge/gemfiles/modular/webrick/vHEAD.gemfile b/gems/html-merge/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..8a789b634
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem "webrick", ">= 1.9"
diff --git a/gems/html-merge/gemfiles/modular/x_std_libs.gemfile b/gems/html-merge/gemfiles/modular/x_std_libs.gemfile
new file mode 100644
index 000000000..77aad43f2
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/x_std_libs.gemfile
@@ -0,0 +1,12 @@
+### Std Lib Extracted Gems
+ruby_version = Gem::Version.new(RUBY_VERSION)
+
+if ruby_version >= Gem::Version.new("4.0")
+ eval_gemfile "x_std_libs/r4/libs.gemfile"
+elsif ruby_version >= Gem::Version.new("3.2")
+ eval_gemfile "x_std_libs/r3/libs.gemfile"
+elsif ruby_version >= Gem::Version.new("3.1")
+ eval_gemfile "x_std_libs/r3.1/libs.gemfile"
+else
+ eval_gemfile "x_std_libs/r2/libs.gemfile"
+end
diff --git a/gems/html-merge/gemfiles/modular/x_std_libs/r2/libs.gemfile b/gems/html-merge/gemfiles/modular/x_std_libs/r2/libs.gemfile
new file mode 100644
index 000000000..441c4f03a
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/x_std_libs/r2/libs.gemfile
@@ -0,0 +1,3 @@
+eval_gemfile "../../erb/r2/v3.0.gemfile"
+eval_gemfile "../../mutex_m/r2/v0.3.gemfile"
+eval_gemfile "../../stringio/r2/v3.0.gemfile"
diff --git a/gems/html-merge/gemfiles/modular/x_std_libs/r3/libs.gemfile b/gems/html-merge/gemfiles/modular/x_std_libs/r3/libs.gemfile
new file mode 100644
index 000000000..c293a3ddd
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/x_std_libs/r3/libs.gemfile
@@ -0,0 +1,3 @@
+eval_gemfile "../../erb/r3/v5.0.gemfile"
+eval_gemfile "../../mutex_m/r3/v0.3.gemfile"
+eval_gemfile "../../stringio/r3/v3.0.gemfile"
diff --git a/gems/html-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/html-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
new file mode 100644
index 000000000..eb5574247
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -0,0 +1,6 @@
+eval_gemfile "../../erb/r4/v5.0.gemfile"
+eval_gemfile "../../mutex_m/r4/v0.3.gemfile"
+eval_gemfile "../../stringio/r4/v3.0.gemfile"
+eval_gemfile "../../benchmark/r4/v0.5.gemfile"
+eval_gemfile "../../cgi/r4/v0.5.gemfile"
+eval_gemfile "../../webrick/r4/v1.9.gemfile"
diff --git a/gems/html-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/html-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
new file mode 100644
index 000000000..d4d5b16c9
--- /dev/null
+++ b/gems/html-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -0,0 +1,6 @@
+eval_gemfile "../erb/vHEAD.gemfile"
+eval_gemfile "../mutex_m/vHEAD.gemfile"
+eval_gemfile "../stringio/vHEAD.gemfile"
+eval_gemfile "../benchmark/vHEAD.gemfile"
+eval_gemfile "../cgi/vHEAD.gemfile"
+eval_gemfile "../webrick/vHEAD.gemfile"
diff --git a/gems/html-merge/html-merge.gemspec b/gems/html-merge/html-merge.gemspec
new file mode 100644
index 000000000..dc6135a65
--- /dev/null
+++ b/gems/html-merge/html-merge.gemspec
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+require_relative "lib/html/merge/version"
+
+Gem::Specification.new do |spec|
+ spec.name = "html-merge"
+ spec.version = Html::Merge::VERSION
+ spec.authors = ["Peter H. Boling"]
+ spec.email = ["peter.boling@gmail.com"]
+
+ spec.summary = "💎 Structured Merge HTML analysis for Ruby"
+ spec.description = "💎 Parser-backed HTML analysis and merge primitives for Structured Merge."
+ spec.homepage = "https://github.com/structuredmerge/structuredmerge-ruby"
+ spec.license = "MIT"
+ spec.required_ruby_version = ">= 3.2.0"
+ spec.metadata["homepage_uri"] = spec.homepage
+ spec.metadata["source_code_uri"] = "#{spec.homepage}/tree/v#{spec.version}/gems/html-merge"
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/v#{spec.version}/CHANGELOG.md"
+ spec.metadata["rubygems_mfa_required"] = "true"
+
+ # Uncomment the line below to require MFA for gem pushes.
+ # This helps protect your gem from supply chain attacks by ensuring
+ # no one can publish a new version without multi-factor authentication.
+ # See: https://guides.rubygems.org/mfa-requirement-opt-in/
+ # spec.metadata["rubygems_mfa_required"] = "true"
+
+ # Specify which files should be added to the gem when it is released.
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
+ gemspec = File.basename(__FILE__)
+ spec.files = IO.popen(%w[git ls-files -z], chdir: __dir__, err: IO::NULL) do |ls|
+ ls.readlines("\x0", chomp: true).reject do |f|
+ (f == gemspec) ||
+ f.start_with?(*%w[bin/ Gemfile .gitignore .rspec spec/ .github/ .rubocop.yml])
+ end
+ end
+ spec.bindir = "exe"
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
+ spec.require_paths = ["lib"]
+
+ # Uncomment to register a new dependency of your gem
+ spec.add_dependency "ast-merge", "= #{spec.version}"
+ spec.add_dependency "ast-crispr", "= #{spec.version}"
+ spec.add_dependency "tree_haver", "= #{spec.version}"
+ spec.add_dependency "version_gem", "~> 1.1", ">= 1.1.9"
+
+ # For more information and examples about making a new gem, check out our
+ # guide at: https://guides.rubygems.org/make-your-own-gem/
+end
diff --git a/gems/html-merge/lib/html/merge.rb b/gems/html-merge/lib/html/merge.rb
new file mode 100644
index 000000000..1c40dcc2b
--- /dev/null
+++ b/gems/html-merge/lib/html/merge.rb
@@ -0,0 +1,259 @@
+# frozen_string_literal: true
+
+require "version_gem"
+require_relative "merge/version"
+
+Html::Merge::Version.class_eval do
+ extend VersionGem::Basic
+end
+
+require "tree_haver"
+require "ast/merge"
+
+module Html
+ module Merge
+ PACKAGE_NAME = "html-merge"
+ BACKEND_REFERENCE = TreeHaver::KREUZBERG_LANGUAGE_PACK_BACKEND
+ BACKEND_REGISTRY = Struct.new(:registered, :mutex).new(false, Mutex.new)
+
+ class Error < Ast::Merge::Error; end
+ class ParseError < Ast::Merge::ParseError; end
+
+ autoload :CrisprAdapter, "html/merge/crispr_adapter"
+
+ module_function
+
+ def register_backend!
+ BACKEND_REGISTRY.mutex.synchronize do
+ return if BACKEND_REGISTRY.registered
+
+ TreeHaver::BackendRegistry.register(BACKEND_REFERENCE)
+
+ grammar_finder = TreeHaver::GrammarFinder.new(:html)
+ grammar_finder.register! if grammar_finder.available?
+
+ BACKEND_REGISTRY.registered = true
+ end
+ end
+
+ def html_feature_profile
+ {
+ family: "html",
+ supported_dialects: ["html"],
+ supported_policies: []
+ }
+ end
+
+ def available_html_backends
+ html_backend_available_for_analysis?(BACKEND_REFERENCE.id) ? [BACKEND_REFERENCE] : []
+ end
+
+ def html_backend_feature_profile(backend: nil)
+ requested = requested_html_backend_id(backend)
+ unless available_html_backends.any? { |backend_ref| backend_ref.id == requested }
+ return unsupported_feature_result("Unsupported HTML backend #{requested}.")
+ end
+
+ html_feature_profile.merge(
+ backend: requested,
+ backend_ref: BACKEND_REFERENCE.to_h
+ )
+ end
+
+ def html_plan_context(backend: nil)
+ profile = html_backend_feature_profile(backend: backend)
+ return profile if profile[:ok] == false
+
+ {
+ family_profile: html_feature_profile,
+ feature_profile: {
+ backend: profile[:backend],
+ supports_dialects: false,
+ supported_policies: profile[:supported_policies]
+ }
+ }
+ end
+
+ def parse_html(source, dialect = "html", backend: nil)
+ return unsupported_feature_result("Unsupported HTML dialect #{dialect}.") unless dialect.to_s == "html"
+
+ requested = requested_html_backend_id(backend)
+ unless available_html_backends.any? { |backend_ref| backend_ref.id == requested }
+ return unsupported_feature_result("Unsupported HTML backend #{requested}.")
+ end
+
+ register_backend!
+ tree = TreeHaver.with_backend(requested) { TreeHaver.parser_for(:html).parse(source.to_s) }
+ root = tree.root_node
+ diagnostics = html_parse_error_nodes(root).map do |node|
+ {
+ severity: "error",
+ category: "parse_error",
+ message: "HTML parse error in #{node.type}",
+ span: html_node_span(node)
+ }
+ end
+ return {ok: false, diagnostics: diagnostics, policies: []} unless diagnostics.empty?
+
+ {
+ ok: true,
+ diagnostics: [],
+ analysis: {
+ dialect: "html",
+ root_kind: root.type,
+ nodes: html_node_summaries(root)
+ },
+ policies: []
+ }
+ rescue TreeHaver::Error, StandardError => e
+ {
+ ok: false,
+ diagnostics: [{
+ severity: "error",
+ category: "parse_error",
+ message: e.message
+ }],
+ policies: []
+ }
+ end
+
+ def html_root_node(source, backend: nil)
+ requested = requested_html_backend_id(backend)
+ register_backend!
+ TreeHaver.with_backend(requested) { TreeHaver.parser_for(:html).parse(source.to_s).root_node }
+ end
+
+ def html_node_summaries(root)
+ nodes = []
+ visit_html_node(root) do |node|
+ next unless node.structural?
+
+ nodes << {
+ type: node.type,
+ span: html_node_span(node),
+ text: node.text.to_s.strip[0, 120]
+ }
+ end
+ nodes
+ end
+
+ def html_parse_error_nodes(root)
+ errors = []
+ visit_html_node(root) do |node|
+ errors << node if node.has_error? || node.type == "ERROR"
+ end
+ errors
+ end
+
+ def visit_html_node(node, &block)
+ yield node
+ node.child_count.times do |index|
+ child = node.child(index)
+ visit_html_node(child, &block) if child
+ end
+ end
+
+ def html_node_span(node)
+ start_point = html_point(html_raw_point(node, :start))
+ end_point = html_point(html_raw_point(node, :end))
+ {
+ start_byte: node.start_byte,
+ end_byte: node.end_byte,
+ start_line: start_point.fetch(:row) + 1,
+ end_line: end_point.fetch(:row) + 1,
+ start_column: start_point.fetch(:column),
+ end_column: end_point.fetch(:column)
+ }
+ end
+
+ def html_raw_point(node, boundary)
+ raw_node = node.respond_to?(:inner_node) ? node.inner_node : node
+ methods = boundary == :start ? %i[start_point start_position] : %i[end_point end_position]
+ methods.each do |method_name|
+ return raw_node.public_send(method_name) if raw_node.respond_to?(method_name)
+ end
+
+ node.public_send(methods.first)
+ end
+
+ def html_point(point)
+ if point.respond_to?(:row) && point.respond_to?(:column)
+ return {row: point.row, column: point.column}
+ end
+
+ return {row: point[:row], column: point[:column]} if point.respond_to?(:[])
+
+ raise Error, "Unsupported TreeHaver point #{point.inspect}"
+ end
+
+ def html_backend_available_for_analysis?(backend_id)
+ requested = requested_html_backend_id(backend_id)
+ register_backend!
+ TreeHaver.with_backend(requested) { TreeHaver.parser_for(:html).respond_to?(:parse) }
+ rescue TreeHaver::Error, StandardError
+ false
+ end
+
+ def requested_html_backend_id(backend)
+ backend.to_s.empty? ? BACKEND_REFERENCE.id : backend.to_s
+ end
+
+ def unsupported_feature_result(message)
+ {
+ ok: false,
+ diagnostics: [{
+ severity: "error",
+ category: "unsupported_feature",
+ message: message
+ }],
+ policies: []
+ }
+ end
+
+ def document_context(content:, source_label: "source")
+ require "ast/crispr"
+
+ Ast::Crispr::DocumentContext.new(
+ content: content,
+ source_label: source_label,
+ adapter: CrisprAdapter.new
+ )
+ end
+
+ def element_text_selector(text:, id: nil)
+ require "ast/crispr"
+
+ Ast::Crispr::Selectors.owner_filter(
+ id: id || "html_element_text:#{text}",
+ adapter: CrisprAdapter.new,
+ owner_scope: :html_element
+ ) do |_context, owner|
+ owner.type == "element" &&
+ owner.text.include?(text.to_s) &&
+ !html_descendant_element_text?(owner.node, text.to_s)
+ end
+ end
+
+ def html_descendant_element_text?(node, text)
+ node.child_count.times.any? do |index|
+ child = node.child(index)
+ next false unless child
+
+ (child.type == "element" && child.text.include?(text)) || html_descendant_element_text?(child, text)
+ end
+ end
+
+ def ensure_yard_content_wrapper(source)
+ require "ast/crispr"
+
+ replacement = %(Documentation by YARD
\n)
+ target = element_text_selector(text: "Documentation by YARD", id: "yard_title_element")
+ actor = Ast::Crispr::Replace.result(content: source.to_s, target: target, replacement: replacement)
+ if actor.failure?
+ raise Error, actor.respond_to?(:error) ? actor.error.to_s : "HTML CRISPR replacement failed"
+ end
+
+ actor.updated_content
+ end
+ end
+end
diff --git a/gems/html-merge/lib/html/merge/crispr_adapter.rb b/gems/html-merge/lib/html/merge/crispr_adapter.rb
new file mode 100644
index 000000000..81b580c25
--- /dev/null
+++ b/gems/html-merge/lib/html/merge/crispr_adapter.rb
@@ -0,0 +1,63 @@
+# frozen_string_literal: true
+
+require "ast/crispr"
+
+module Html
+ module Merge
+ class CrisprAdapter
+ Location = Struct.new(:start_line, :end_line, keyword_init: true)
+ Owner = Struct.new(:node, :type, :text, :location, keyword_init: true)
+
+ def read_ast(document)
+ result = Html::Merge.parse_html(document.content)
+ unless result.fetch(:ok)
+ raise Ast::Crispr::Error.new(
+ "Unable to parse HTML for CRISPR",
+ details: {source_label: document.source_label, diagnostics: result.fetch(:diagnostics)}
+ )
+ end
+
+ result
+ end
+
+ def structural_owners(document, owner_scope: :html_element)
+ raise Ast::Crispr::Error.new("Unsupported HTML CRISPR owner scope", details: {owner_scope: owner_scope}) unless owner_scope.to_sym == :html_element
+
+ root = Html::Merge.html_root_node(document.content)
+ owners = []
+ Html::Merge.visit_html_node(root) do |node|
+ next unless node.structural?
+ next unless node.type == "element"
+
+ span = Html::Merge.html_node_span(node)
+ owners << Owner.new(
+ node: node,
+ type: node.type,
+ text: node.text.to_s,
+ location: Location.new(start_line: span.fetch(:start_line), end_line: span.fetch(:end_line))
+ )
+ end
+ owners
+ end
+
+ def comment_regions_for(_document, _owner, region: :leading, owner_scope: :html_element)
+ raise Ast::Crispr::Error.new(
+ "HTML CRISPR comment regions are not implemented",
+ details: {region: region, owner_scope: owner_scope}
+ )
+ end
+
+ def comment_region_text(_document, _comment_region)
+ raise Ast::Crispr::Error.new("HTML CRISPR comment regions are not implemented")
+ end
+
+ def structure_profile(owner_scope: :html_element)
+ Ast::Crispr::StructureProfile.new(
+ owner_scope: owner_scope,
+ owner_selector: :html_element,
+ metadata: {source: :html_merge}
+ )
+ end
+ end
+ end
+end
diff --git a/gems/html-merge/lib/html/merge/version.rb b/gems/html-merge/lib/html/merge/version.rb
new file mode 100644
index 000000000..e9c908991
--- /dev/null
+++ b/gems/html-merge/lib/html/merge/version.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+module Html
+ module Merge
+ module Version
+ VERSION = "7.1.0"
+ end
+ VERSION = Version::VERSION # Traditional Constant Location
+ end
+end
diff --git a/gems/html-merge/sig/html/merge.rbs b/gems/html-merge/sig/html/merge.rbs
new file mode 100644
index 000000000..1d007d6d8
--- /dev/null
+++ b/gems/html-merge/sig/html/merge.rbs
@@ -0,0 +1,18 @@
+module Html
+ module Merge
+ VERSION: String
+ module Version
+ VERSION: String
+ end
+
+ def self.register_backend!: () -> nil
+ def self.html_feature_profile: () -> Hash[Symbol, untyped]
+ def self.available_html_backends: () -> Array[untyped]
+ def self.html_backend_feature_profile: (?backend: untyped) -> Hash[Symbol, untyped]
+ def self.html_plan_context: (?backend: untyped) -> Hash[Symbol, untyped]
+ def self.parse_html: (String source, ?String dialect, ?backend: untyped) -> Hash[Symbol, untyped]
+ def self.document_context: (content: String, ?source_label: String) -> untyped
+ def self.element_text_selector: (text: String, ?id: String?) -> untyped
+ def self.ensure_yard_content_wrapper: (String source) -> String
+ end
+end
diff --git a/gems/html-merge/spec/html/merge_spec.rb b/gems/html-merge/spec/html/merge_spec.rb
new file mode 100644
index 000000000..62d4ab36d
--- /dev/null
+++ b/gems/html-merge/spec/html/merge_spec.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+RSpec.describe Html::Merge do
+ it "has a version number" do
+ expect(Html::Merge::VERSION).not_to be nil
+ end
+
+ it "parses HTML through TreeHaver" do
+ result = described_class.parse_html(<<~HTML)
+
+
+ Documentation by YARD
+
+ HTML
+
+ expect(result).to include(ok: true)
+ expect(result.dig(:analysis, :root_kind)).to be_a(String)
+ expect(result.dig(:analysis, :nodes).map { |node| node.fetch(:type) }).to include("element")
+ end
+
+ it "reports the HTML feature profile" do
+ expect(described_class.html_plan_context).to include(
+ family_profile: include(family: "html"),
+ feature_profile: include(supports_dialects: false)
+ )
+ end
+
+ it "uses ast-crispr with HTML structural owners to repair a YARD content wrapper" do
+ source = <<~HTML
+
+
+ Documentation by YARD
+
+
+ HTML
+
+ updated = described_class.ensure_yard_content_wrapper(source)
+
+ expect(updated).to include('Documentation by YARD
')
+ expect(described_class.parse_html(updated)).to include(ok: true)
+ end
+end
diff --git a/gems/html-merge/spec/spec_helper.rb b/gems/html-merge/spec/spec_helper.rb
new file mode 100644
index 000000000..92447f09b
--- /dev/null
+++ b/gems/html-merge/spec/spec_helper.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+# Config for development dependencies of this library
+# i.e., not configured by this library
+#
+# SimpleCov & related config (must run BEFORE any other requires)
+# NOTE: Gemfiles for non-coverage appraisals may not have kettle-soup-cover.
+# The rescue LoadError handles that scenario.
+begin
+ require "kettle-soup-cover"
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require "simplecov"
+ require "kettle/soup/cover/config"
+ SimpleCov.start
+ end
+rescue LoadError => error
+ # check the error message and re-raise when unexpected
+ raise error unless error.message.include?("kettle")
+end
+
+# External RSpec & related config
+require "kettle/test/rspec"
+
+require "html/merge"
+
+RSpec.configure do |config|
+ # Enable flags like --only-failures and --next-failure
+ config.example_status_persistence_file_path = ".rspec_status"
+
+ # Disable RSpec exposing methods globally on `Module` and `main`
+ config.disable_monkey_patching!
+
+ config.expect_with :rspec do |c|
+ c.syntax = :expect
+ end
+end
diff --git a/gems/json-merge/.kettle-drift.lock b/gems/json-merge/.kettle-drift.lock
deleted file mode 100644
index e3a4ed60c..000000000
--- a/gems/json-merge/.kettle-drift.lock
+++ /dev/null
@@ -1,337 +0,0 @@
-{
- "(direct_sibling_local ||\nENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)": [
- {
- "file": "Gemfile",
- "lines": [
- 80,
- 120,
- 160,
- 200,
- 240,
- 280,
- 320,
- 360,
- 400
- ]
- }
- ],
- ".find { |spec| spec.name == 'nomono' }\nnomono_locked = nomono_locked_spec &&": [
- {
- "file": "Gemfile",
- "lines": [
- 91,
- 131,
- 171,
- 211,
- 251,
- 291,
- 331,
- 371,
- 411
- ]
- }
- ],
- "ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)\ndirect_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')": [
- {
- "file": "Gemfile",
- "lines": [
- 81,
- 121,
- 161,
- 201,
- 241,
- 281,
- 321,
- 361,
- 401
- ]
- }
- ],
- "Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)\nnomono_activation_requirements = [\"= #{nomono_locked_spec.version}\"] if nomono_locked": [
- {
- "file": "Gemfile",
- "lines": [
- 93,
- 133,
- 173,
- 213,
- 253,
- 293,
- 333,
- 373,
- 413
- ]
- }
- ],
- "Kernel.send(:gem, 'nomono', *nomono_activation_requirements)\nrequire 'nomono/bundler'": [
- {
- "file": "Gemfile",
- "lines": [
- 96,
- 136,
- 176,
- 216,
- 256,
- 296,
- 336,
- 376,
- 416
- ]
- }
- ],
- "direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')\ndirect_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)": [
- {
- "file": "Gemfile",
- "lines": [
- 82,
- 122,
- 162,
- 202,
- 242,
- 282,
- 322,
- 362,
- 402
- ]
- }
- ],
- "eval_nomono_gems(\ngems: direct_sibling_gems,": [
- {
- "file": "Gemfile",
- "lines": [
- 60,
- 100,
- 140,
- 180,
- 220,
- 260,
- 300,
- 340,
- 380,
- 420
- ]
- }
- ],
- "gems: direct_sibling_gems,\nprefix: 'STRUCTUREDMERGE',": [
- {
- "file": "Gemfile",
- "lines": [
- 101,
- 141,
- 181,
- 221,
- 261,
- 301,
- 341,
- 381,
- 421
- ]
- }
- ],
- "if File.file?(nomono_lockfile)\nnomono_locked_spec = Bundler::LockfileParser": [
- {
- "file": "Gemfile",
- "lines": [
- 43,
- 87,
- 127,
- 167,
- 207,
- 247,
- 287,
- 327,
- 367,
- 407
- ]
- }
- ],
- "if direct_sibling_dev_was_set\nENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original": [
- {
- "file": "Gemfile",
- "lines": [
- 110,
- 150,
- 190,
- 230,
- 270,
- 310,
- 350,
- 390,
- 430
- ]
- }
- ],
- "if direct_sibling_gems.any? &&\n(direct_sibling_local ||": [
- {
- "file": "Gemfile",
- "lines": [
- 35,
- 79,
- 119,
- 159,
- 199,
- 239,
- 279,
- 319,
- 359,
- 399
- ]
- }
- ],
- "if direct_sibling_templating && !direct_sibling_local\nif direct_sibling_dev_was_set": [
- {
- "file": "Gemfile",
- "lines": [
- 69,
- 109,
- 149,
- 189,
- 229,
- 269,
- 309,
- 349,
- 389,
- 429
- ]
- }
- ],
- "nomono_activation_requirements = nomono_requirements\nnomono_lockfile = File.expand_path('Gemfile.lock', __dir__)": [
- {
- "file": "Gemfile",
- "lines": [
- 85,
- 125,
- 165,
- 205,
- 245,
- 285,
- 325,
- 365,
- 405
- ]
- }
- ],
- "nomono_locked = nomono_locked_spec &&\nGem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)": [
- {
- "file": "Gemfile",
- "lines": [
- 48,
- 92,
- 132,
- 172,
- 212,
- 252,
- 292,
- 332,
- 372,
- 412
- ]
- }
- ],
- "nomono_locked_spec = Bundler::LockfileParser\n.new(Bundler.read_file(nomono_lockfile))": [
- {
- "file": "Gemfile",
- "lines": [
- 44,
- 88,
- 128,
- 168,
- 208,
- 248,
- 288,
- 328,
- 368,
- 408
- ]
- }
- ],
- "nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)\nif File.file?(nomono_lockfile)": [
- {
- "file": "Gemfile",
- "lines": [
- 86,
- 126,
- 166,
- 206,
- 246,
- 286,
- 326,
- 366,
- 406
- ]
- }
- ],
- "path_env: 'STRUCTUREDMERGE_DEV',\nroot: %w[src my structuredmerge]": [
- {
- "file": "Gemfile",
- "lines": [
- 103,
- 143,
- 183,
- 223,
- 263,
- 303,
- 343,
- 383,
- 423
- ]
- }
- ],
- "prefix: 'STRUCTUREDMERGE',\npath_env: 'STRUCTUREDMERGE_DEV',": [
- {
- "file": "Gemfile",
- "lines": [
- 102,
- 142,
- 182,
- 222,
- 262,
- 302,
- 342,
- 382,
- 422
- ]
- }
- ],
- "require 'nomono/bundler'\nENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local": [
- {
- "file": "Gemfile",
- "lines": [
- 97,
- 137,
- 177,
- 217,
- 257,
- 297,
- 337,
- 377,
- 417
- ]
- }
- ],
- "rescue LoadError\nwarn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'": [
- {
- "file": "Gemfile",
- "lines": [
- 106,
- 146,
- 186,
- 226,
- 266,
- 306,
- 346,
- 386,
- 426
- ]
- }
- ],
- "vendored_gems_env: 'VENDORED_GEMS',\nvendor_gem_dir_env: 'VENDOR_GEM_DIR',": [
- {
- "file": "gemfiles/modular/templating_local.gemfile",
- "lines": [
- 60,
- 71
- ]
- }
- ]
-}
diff --git a/gems/json-merge/.rubocop_gradual.lock b/gems/json-merge/.rubocop_gradual.lock
index 1f13b2bf6..f4a704b07 100644
--- a/gems/json-merge/.rubocop_gradual.lock
+++ b/gems/json-merge/.rubocop_gradual.lock
@@ -1,5 +1,5 @@
{
- ".simplecov:3644224046": [
+ ".simplecov:2561927861": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
"Rakefile:2931360525": [
@@ -15,13 +15,20 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/cgi/r4/v0.5.gemfile:367169322": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/cgi/vHEAD.gemfile:2729540777": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/erb/r2/v3.0.gemfile:1688285565": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r3/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r3/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
- "gemfiles/modular/erb/r4/v5.0.gemfile:2150258305": [
+ "gemfiles/modular/erb/r4/v5.0.gemfile:2394062339": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
],
"gemfiles/modular/erb/vHEAD.gemfile:981929959": [
@@ -57,6 +64,13 @@
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
+ "gemfiles/modular/webrick/r4/v1.9.gemfile:3092661193": [
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
+ "gemfiles/modular/webrick/vHEAD.gemfile:3867684682": [
+ [1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
+ [1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177602]
+ ],
"gemfiles/modular/x_std_libs.gemfile:2324400122": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177542]
],
@@ -66,10 +80,10 @@
"gemfiles/modular/x_std_libs/r3/libs.gemfile:4030570297": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/r4/libs.gemfile:909736663": [
+ "gemfiles/modular/x_std_libs/r4/libs.gemfile:732451732": [
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
- "gemfiles/modular/x_std_libs/vHEAD.gemfile:907917303": [
+ "gemfiles/modular/x_std_libs/vHEAD.gemfile:2390363993": [
[1, 1, 0, "Naming/FileName: The name of this source file (`vHEAD.gemfile`) should use snake_case.", 5381],
[1, 1, 1, "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", 177600]
],
@@ -83,153 +97,157 @@
"lib/json-merge.rb:4173905501": [
[1, 1, 0, "Naming/FileName: The name of this source file (`json-merge.rb`) should use snake_case.", 5381]
],
- "lib/json/merge.rb:2128431218": [
+ "lib/json/merge.rb:2151511858": [
[11, 3, 12, "Style/Documentation: Missing top-level documentation comment for `module Json::Merge`.", 2866359175],
- [11, 3, 9848, "Metrics/ModuleLength: Module has too many lines. [271/100]", 4082365503],
- [21, 5, 16, "Style/Documentation: Missing top-level documentation comment for `class Json::Merge::ParseError`.", 362242086],
- [65, 5, 941, "Metrics/AbcSize: Assignment Branch Condition size for `parse_json` is too high. [<3, 19, 9> 21.24/17]", 2519832432],
- [65, 5, 941, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `parse_json` is too high. [8/7]", 2519832432],
- [65, 5, 941, "Metrics/MethodLength: Method has too many lines. [24/10]", 2519832432],
- [98, 5, 780, "Metrics/MethodLength: Method has too many lines. [17/10]", 3747710599],
- [131, 5, 621, "Metrics/AbcSize: Assignment Branch Condition size for `json_value_for_source` is too high. [<3, 17, 7> 18.63/17]", 3652201615],
- [131, 5, 621, "Metrics/MethodLength: Method has too many lines. [11/10]", 3652201615],
- [147, 5, 759, "Metrics/AbcSize: Assignment Branch Condition size for `json_value_for_node` is too high. [<6, 21, 12> 24.92/17]", 2618715974],
- [147, 5, 759, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `json_value_for_node` is too high. [13/7]", 2618715974],
- [147, 5, 759, "Metrics/MethodLength: Method has too many lines. [23/10]", 2618715974],
- [174, 5, 555, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `decode_json_string_literal` is too high. [11/7]", 4144578840],
- [174, 5, 555, "Metrics/MethodLength: Method has too many lines. [16/10]", 4144578840],
- [238, 5, 691, "Metrics/MethodLength: Method has too many lines. [18/10]", 4010630320],
- [261, 5, 528, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `detect_trailing_comma` is too high. [8/7]", 4057979016],
- [261, 5, 528, "Metrics/MethodLength: Method has too many lines. [13/10]", 4057979016],
- [302, 5, 787, "Metrics/AbcSize: Assignment Branch Condition size for `advance_scanner_state` is too high. [<8, 12, 24> 28/17]", 2437181548],
- [302, 5, 787, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `advance_scanner_state` is too high. [15/7]", 2437181548],
- [302, 5, 787, "Metrics/MethodLength: Method has too many lines. [25/10]", 2437181548],
- [302, 5, 787, "Metrics/PerceivedComplexity: Perceived complexity for `advance_scanner_state` is too high. [17/8]", 2437181548]
+ [11, 3, 12802, "Metrics/ModuleLength: Module has too many lines. [334/100]", 566354264],
+ [22, 5, 16, "Style/Documentation: Missing top-level documentation comment for `class Json::Merge::ParseError`.", 362242086],
+ [98, 5, 1229, "Metrics/AbcSize: Assignment Branch Condition size for `parse_json` is too high. [<5, 25, 12> 28.18/17]", 394834376],
+ [98, 5, 1229, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `parse_json` is too high. [10/7]", 394834376],
+ [98, 5, 1229, "Metrics/MethodLength: Method has too many lines. [28/10]", 394834376],
+ [98, 5, 1229, "Metrics/PerceivedComplexity: Perceived complexity for `parse_json` is too high. [10/8]", 394834376],
+ [136, 5, 1108, "Metrics/AbcSize: Assignment Branch Condition size for `merge_json` is too high. [<5, 16, 8> 18.57/17]", 1498407077],
+ [136, 5, 1108, "Metrics/MethodLength: Method has too many lines. [21/10]", 1498407077],
+ [174, 5, 892, "Metrics/AbcSize: Assignment Branch Condition size for `json_value_for_source` is too high. [<5, 23, 10> 25.57/17]", 3396869483],
+ [174, 5, 892, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `json_value_for_source` is too high. [9/7]", 3396869483],
+ [174, 5, 892, "Metrics/MethodLength: Method has too many lines. [15/10]", 3396869483],
+ [174, 5, 892, "Metrics/PerceivedComplexity: Perceived complexity for `json_value_for_source` is too high. [9/8]", 3396869483],
+ [195, 5, 759, "Metrics/AbcSize: Assignment Branch Condition size for `json_value_for_node` is too high. [<6, 21, 12> 24.92/17]", 2618715974],
+ [195, 5, 759, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `json_value_for_node` is too high. [13/7]", 2618715974],
+ [195, 5, 759, "Metrics/MethodLength: Method has too many lines. [23/10]", 2618715974],
+ [222, 5, 555, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `decode_json_string_literal` is too high. [11/7]", 4144578840],
+ [222, 5, 555, "Metrics/MethodLength: Method has too many lines. [16/10]", 4144578840],
+ [315, 5, 691, "Metrics/MethodLength: Method has too many lines. [18/10]", 4010630320],
+ [338, 5, 528, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `detect_trailing_comma` is too high. [8/7]", 4057979016],
+ [338, 5, 528, "Metrics/MethodLength: Method has too many lines. [13/10]", 4057979016],
+ [379, 5, 787, "Metrics/AbcSize: Assignment Branch Condition size for `advance_scanner_state` is too high. [<8, 12, 24> 28/17]", 2437181548],
+ [379, 5, 787, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `advance_scanner_state` is too high. [15/7]", 2437181548],
+ [379, 5, 787, "Metrics/MethodLength: Method has too many lines. [25/10]", 2437181548],
+ [379, 5, 787, "Metrics/PerceivedComplexity: Perceived complexity for `advance_scanner_state` is too high. [17/8]", 2437181548]
],
"lib/json/merge/comment_tracker.rb:3472563198": [
[19, 48, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765]
],
- "lib/json/merge/conflict_resolver.rb:301712181": [
- [11, 5, 55081, "Metrics/ClassLength: Class has too many lines. [1053/100]", 4044265605],
- [33, 7, 998, "Metrics/MethodLength: Method has too many lines. [16/10]", 2622185411],
- [33, 21, 308, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [12/5]", 958959236],
- [34, 121, 95, "Layout/LineLength: Line is too long. [215/120]", 3448296820],
- [58, 7, 1143, "Metrics/MethodLength: Method has too many lines. [21/10]", 2302471255],
- [107, 7, 4969, "Metrics/AbcSize: Assignment Branch Condition size for `merge_node_lists_to_emitter` is too high. [<29, 62, 22> 71.9/17]", 3145241362],
- [107, 7, 4969, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `merge_node_lists_to_emitter` is too high. [20/7]", 3145241362],
- [107, 7, 4969, "Metrics/MethodLength: Method has too many lines. [82/10]", 3145241362],
- [107, 7, 4969, "Metrics/PerceivedComplexity: Perceived complexity for `merge_node_lists_to_emitter` is too high. [22/8]", 3145241362],
- [146, 9, 2759, "Metrics/BlockLength: Block has too many lines. [50/25]", 385678694],
- [239, 7, 5585, "Metrics/AbcSize: Assignment Branch Condition size for `merge_matched_nodes_to_emitter` is too high. [<15, 45, 20> 51.48/17]", 3947285535],
- [239, 7, 5585, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `merge_matched_nodes_to_emitter` is too high. [17/7]", 3947285535],
- [239, 7, 5585, "Metrics/MethodLength: Method has too many lines. [102/10]", 3947285535],
- [239, 7, 5585, "Metrics/PerceivedComplexity: Perceived complexity for `merge_matched_nodes_to_emitter` is too high. [21/8]", 3947285535],
- [277, 13, 1934, "Metrics/BlockLength: Block has too many lines. [31/25]", 884303795],
- [306, 17, 181, "Metrics/BlockNesting: Avoid more than 3 levels of block nesting.", 898629436],
- [363, 7, 895, "Metrics/MethodLength: Method has too many lines. [23/10]", 2982353847],
- [392, 7, 718, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `preference_for_pair` is too high. [8/7]", 3339910669],
- [392, 7, 718, "Metrics/MethodLength: Method has too many lines. [12/10]", 3339910669],
- [418, 7, 1636, "Metrics/MethodLength: Method has too many lines. [37/10]", 514235298],
- [473, 25, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [493, 7, 5501, "Metrics/AbcSize: Assignment Branch Condition size for `emit_node` is too high. [<18, 82, 31> 89.49/17]", 1826498333],
- [493, 7, 5501, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_node` is too high. [29/7]", 1826498333],
- [493, 7, 5501, "Metrics/MethodLength: Method has too many lines. [109/10]", 1826498333],
- [493, 7, 5501, "Metrics/PerceivedComplexity: Perceived complexity for `emit_node` is too high. [36/8]", 1826498333],
- [522, 15, 1572, "Metrics/BlockNesting: Avoid more than 3 levels of block nesting.", 3256756034],
- [554, 15, 654, "Metrics/BlockNesting: Avoid more than 3 levels of block nesting.", 3730688879],
- [569, 17, 287, "Metrics/BlockNesting: Avoid more than 3 levels of block nesting.", 3369588943],
- [618, 7, 1424, "Metrics/AbcSize: Assignment Branch Condition size for `emit_atomic_node` is too high. [<7, 14, 7> 17.15/17]", 776263089],
- [618, 7, 1424, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_atomic_node` is too high. [8/7]", 776263089],
- [618, 7, 1424, "Metrics/MethodLength: Method has too many lines. [22/10]", 776263089],
- [666, 7, 242, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `recursively_merge_pair_values?` is too high. [8/7]", 3319997574],
- [682, 7, 1642, "Metrics/AbcSize: Assignment Branch Condition size for `preferred_available_inline_attachment` is too high. [<14, 14, 14> 24.25/17]", 1854381957],
- [682, 7, 1642, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `preferred_available_inline_attachment` is too high. [13/7]", 1854381957],
- [682, 7, 1642, "Metrics/MethodLength: Method has too many lines. [27/10]", 1854381957],
- [682, 7, 1642, "Metrics/PerceivedComplexity: Perceived complexity for `preferred_available_inline_attachment` is too high. [14/8]", 1854381957],
- [682, 48, 154, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 358586640],
- [687, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 4196003793],
- [719, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
- [725, 33, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [730, 7, 1761, "Metrics/AbcSize: Assignment Branch Condition size for `emit_preferred_leading_comments_for` is too high. [<4, 39, 16> 42.34/17]", 1923098835],
- [730, 7, 1761, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_preferred_leading_comments_for` is too high. [16/7]", 1923098835],
- [730, 7, 1761, "Metrics/MethodLength: Method has too many lines. [26/10]", 1923098835],
- [730, 7, 1761, "Metrics/PerceivedComplexity: Perceived complexity for `emit_preferred_leading_comments_for` is too high. [17/8]", 1923098835],
- [764, 7, 1600, "Metrics/AbcSize: Assignment Branch Condition size for `emit_leading_comments_for` is too high. [<5, 37, 10> 38.65/17]", 2686936477],
- [764, 7, 1600, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_leading_comments_for` is too high. [11/7]", 2686936477],
- [764, 7, 1600, "Metrics/MethodLength: Method has too many lines. [26/10]", 2686936477],
- [764, 7, 1600, "Metrics/PerceivedComplexity: Perceived complexity for `emit_leading_comments_for` is too high. [11/8]", 2686936477],
- [765, 27, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [799, 7, 1573, "Metrics/AbcSize: Assignment Branch Condition size for `canonical_leading_comment_region` is too high. [<8, 28, 14> 32.31/17]", 151098026],
- [799, 7, 1573, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `canonical_leading_comment_region` is too high. [12/7]", 151098026],
- [799, 7, 1573, "Metrics/MethodLength: Method has too many lines. [29/10]", 151098026],
- [799, 7, 1573, "Metrics/PerceivedComplexity: Perceived complexity for `canonical_leading_comment_region` is too high. [12/8]", 151098026],
- [837, 7, 1315, "Metrics/AbcSize: Assignment Branch Condition size for `canonical_tracked_leading_comments` is too high. [<8, 21, 12> 25.48/17]", 3806475230],
- [837, 7, 1315, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `canonical_tracked_leading_comments` is too high. [11/7]", 3806475230],
- [837, 7, 1315, "Metrics/MethodLength: Method has too many lines. [21/10]", 3806475230],
- [837, 7, 1315, "Metrics/PerceivedComplexity: Perceived complexity for `canonical_tracked_leading_comments` is too high. [11/8]", 3806475230],
- [867, 27, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [872, 7, 574, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `dedup_warning_context` is too high. [9/7]", 840557709],
- [872, 7, 574, "Metrics/PerceivedComplexity: Perceived complexity for `dedup_warning_context` is too high. [9/8]", 840557709],
- [875, 27, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [876, 48, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [877, 48, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
- [917, 7, 687, "Metrics/AbcSize: Assignment Branch Condition size for `equivalent_owner?` is too high. [<0, 17, 19> 25.5/17]", 1122406222],
- [917, 7, 687, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `equivalent_owner?` is too high. [15/7]", 1122406222],
- [917, 7, 687, "Metrics/MethodLength: Method has too many lines. [14/10]", 1122406222],
- [917, 7, 687, "Metrics/PerceivedComplexity: Perceived complexity for `equivalent_owner?` is too high. [16/8]", 1122406222],
- [957, 7, 762, "Metrics/MethodLength: Method has too many lines. [13/10]", 341822255],
- [976, 7, 701, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `shared_line_comment_attachment_for` is too high. [9/7]", 2431043907],
- [976, 7, 701, "Metrics/MethodLength: Method has too many lines. [13/10]", 2431043907],
- [976, 7, 701, "Metrics/PerceivedComplexity: Perceived complexity for `shared_line_comment_attachment_for` is too high. [9/8]", 2431043907],
- [1018, 7, 617, "Metrics/AbcSize: Assignment Branch Condition size for `emit_container_trailing_lines` is too high. [<2, 17, 3> 17.38/17]", 2119480325],
- [1043, 7, 723, "Metrics/AbcSize: Assignment Branch Condition size for `trailing_container_line_range` is too high. [<4, 15, 11> 19.03/17]", 3162486186],
- [1043, 7, 723, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `trailing_container_line_range` is too high. [10/7]", 3162486186],
- [1043, 7, 723, "Metrics/MethodLength: Method has too many lines. [13/10]", 3162486186],
- [1043, 7, 723, "Metrics/PerceivedComplexity: Perceived complexity for `trailing_container_line_range` is too high. [11/8]", 3162486186],
- [1061, 7, 503, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_comment_and_blank_lines_in_range` is too high. [9/7]", 2774366077],
- [1061, 7, 503, "Metrics/MethodLength: Method has too many lines. [11/10]", 2774366077],
- [1061, 7, 503, "Metrics/PerceivedComplexity: Perceived complexity for `emit_comment_and_blank_lines_in_range` is too high. [9/8]", 2774366077],
- [1108, 7, 945, "Metrics/MethodLength: Method has too many lines. [14/10]", 1167897124],
- [1155, 7, 832, "Metrics/AbcSize: Assignment Branch Condition size for `removed_inline_block_comment_at` is too high. [<6, 26, 7> 27.59/17]", 890096863],
- [1155, 7, 832, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `removed_inline_block_comment_at` is too high. [8/7]", 890096863],
- [1155, 7, 832, "Metrics/MethodLength: Method has too many lines. [19/10]", 890096863],
- [1212, 7, 1587, "Metrics/AbcSize: Assignment Branch Condition size for `emit_document_prelude` is too high. [<12, 40, 22> 47.2/17]", 1354199117],
- [1212, 7, 1587, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_document_prelude` is too high. [21/7]", 1354199117],
- [1212, 7, 1587, "Metrics/MethodLength: Method has too many lines. [35/10]", 1354199117],
- [1212, 7, 1587, "Metrics/PerceivedComplexity: Perceived complexity for `emit_document_prelude` is too high. [22/8]", 1354199117],
- [1256, 7, 1281, "Metrics/AbcSize: Assignment Branch Condition size for `emit_document_postlude` is too high. [<9, 31, 21> 38.51/17]", 1869501446],
- [1256, 7, 1281, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_document_postlude` is too high. [20/7]", 1869501446],
- [1256, 7, 1281, "Metrics/MethodLength: Method has too many lines. [23/10]", 1869501446],
- [1256, 7, 1281, "Metrics/PerceivedComplexity: Perceived complexity for `emit_document_postlude` is too high. [20/8]", 1869501446],
- [1276, 121, 104, "Layout/LineLength: Line is too long. [224/120]", 1511565389],
- [1288, 9, 48, "Lint/HashCompareByIdentity: Use `Hash#compare_by_identity` instead of using `object_id` for keys.", 2339197345],
- [1334, 7, 1002, "Metrics/AbcSize: Assignment Branch Condition size for `build_refined_matches` is too high. [<11, 16, 8> 21/17]", 2274245926],
- [1334, 7, 1002, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `build_refined_matches` is too high. [9/7]", 2274245926],
- [1334, 7, 1002, "Metrics/MethodLength: Method has too many lines. [18/10]", 2274245926],
- [1334, 7, 1002, "Metrics/PerceivedComplexity: Perceived complexity for `build_refined_matches` is too high. [9/8]", 2274245926]
+ "lib/json/merge/conflict_resolver.rb:2212606577": [
+ [11, 5, 56081, "Metrics/ClassLength: Class has too many lines. [1067/100]", 2246754139],
+ [34, 7, 998, "Metrics/MethodLength: Method has too many lines. [16/10]", 2622185411],
+ [34, 21, 308, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [12/5]", 958959236],
+ [35, 121, 95, "Layout/LineLength: Line is too long. [215/120]", 3448296820],
+ [59, 7, 1143, "Metrics/MethodLength: Method has too many lines. [21/10]", 2302471255],
+ [108, 7, 5125, "Metrics/AbcSize: Assignment Branch Condition size for `merge_node_lists_to_emitter` is too high. [<29, 62, 22> 71.9/17]", 2413236296],
+ [108, 7, 5125, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `merge_node_lists_to_emitter` is too high. [20/7]", 2413236296],
+ [108, 7, 5125, "Metrics/MethodLength: Method has too many lines. [84/10]", 2413236296],
+ [108, 7, 5125, "Metrics/PerceivedComplexity: Perceived complexity for `merge_node_lists_to_emitter` is too high. [22/8]", 2413236296],
+ [108, 101, 11, "Lint/UnusedMethodArgument: Unused method argument - `dest_owners`.", 3374450542],
+ [147, 9, 2897, "Metrics/BlockLength: Block has too many lines. [52/25]", 385678694],
+ [242, 7, 5852, "Metrics/AbcSize: Assignment Branch Condition size for `merge_matched_nodes_to_emitter` is too high. [<15, 48, 22> 54.89/17]", 1313596093],
+ [242, 7, 5852, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `merge_matched_nodes_to_emitter` is too high. [18/7]", 1313596093],
+ [242, 7, 5852, "Metrics/MethodLength: Method has too many lines. [106/10]", 1313596093],
+ [242, 7, 5852, "Metrics/PerceivedComplexity: Perceived complexity for `merge_matched_nodes_to_emitter` is too high. [22/8]", 1313596093],
+ [284, 13, 1996, "Metrics/BlockLength: Block has too many lines. [32/25]", 884303795],
+ [314, 17, 181, "Metrics/BlockNesting: Avoid more than 3 levels of block nesting.", 898629436],
+ [380, 7, 895, "Metrics/MethodLength: Method has too many lines. [23/10]", 2982353847],
+ [409, 7, 718, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `preference_for_pair` is too high. [8/7]", 3339910669],
+ [409, 7, 718, "Metrics/MethodLength: Method has too many lines. [12/10]", 3339910669],
+ [435, 7, 1636, "Metrics/MethodLength: Method has too many lines. [37/10]", 514235298],
+ [490, 25, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [510, 7, 5501, "Metrics/AbcSize: Assignment Branch Condition size for `emit_node` is too high. [<18, 82, 31> 89.49/17]", 1826498333],
+ [510, 7, 5501, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_node` is too high. [29/7]", 1826498333],
+ [510, 7, 5501, "Metrics/MethodLength: Method has too many lines. [109/10]", 1826498333],
+ [510, 7, 5501, "Metrics/PerceivedComplexity: Perceived complexity for `emit_node` is too high. [36/8]", 1826498333],
+ [539, 15, 1572, "Metrics/BlockNesting: Avoid more than 3 levels of block nesting.", 3256756034],
+ [571, 15, 654, "Metrics/BlockNesting: Avoid more than 3 levels of block nesting.", 3730688879],
+ [586, 17, 287, "Metrics/BlockNesting: Avoid more than 3 levels of block nesting.", 3369588943],
+ [635, 7, 1424, "Metrics/AbcSize: Assignment Branch Condition size for `emit_atomic_node` is too high. [<7, 14, 7> 17.15/17]", 776263089],
+ [635, 7, 1424, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_atomic_node` is too high. [8/7]", 776263089],
+ [635, 7, 1424, "Metrics/MethodLength: Method has too many lines. [22/10]", 776263089],
+ [683, 7, 242, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `recursively_merge_pair_values?` is too high. [8/7]", 3319997574],
+ [699, 7, 1642, "Metrics/AbcSize: Assignment Branch Condition size for `preferred_available_inline_attachment` is too high. [<14, 14, 14> 24.25/17]", 1854381957],
+ [699, 7, 1642, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `preferred_available_inline_attachment` is too high. [13/7]", 1854381957],
+ [699, 7, 1642, "Metrics/MethodLength: Method has too many lines. [27/10]", 1854381957],
+ [699, 7, 1642, "Metrics/PerceivedComplexity: Perceived complexity for `preferred_available_inline_attachment` is too high. [14/8]", 1854381957],
+ [699, 48, 154, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 358586640],
+ [704, 121, 18, "Layout/LineLength: Line is too long. [138/120]", 4196003793],
+ [736, 121, 1, "Layout/LineLength: Line is too long. [121/120]", 177548],
+ [742, 33, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [747, 7, 1761, "Metrics/AbcSize: Assignment Branch Condition size for `emit_preferred_leading_comments_for` is too high. [<4, 39, 16> 42.34/17]", 1923098835],
+ [747, 7, 1761, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_preferred_leading_comments_for` is too high. [16/7]", 1923098835],
+ [747, 7, 1761, "Metrics/MethodLength: Method has too many lines. [26/10]", 1923098835],
+ [747, 7, 1761, "Metrics/PerceivedComplexity: Perceived complexity for `emit_preferred_leading_comments_for` is too high. [17/8]", 1923098835],
+ [781, 7, 1600, "Metrics/AbcSize: Assignment Branch Condition size for `emit_leading_comments_for` is too high. [<5, 37, 10> 38.65/17]", 2686936477],
+ [781, 7, 1600, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_leading_comments_for` is too high. [11/7]", 2686936477],
+ [781, 7, 1600, "Metrics/MethodLength: Method has too many lines. [26/10]", 2686936477],
+ [781, 7, 1600, "Metrics/PerceivedComplexity: Perceived complexity for `emit_leading_comments_for` is too high. [11/8]", 2686936477],
+ [782, 27, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [816, 7, 1573, "Metrics/AbcSize: Assignment Branch Condition size for `canonical_leading_comment_region` is too high. [<8, 28, 14> 32.31/17]", 151098026],
+ [816, 7, 1573, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `canonical_leading_comment_region` is too high. [12/7]", 151098026],
+ [816, 7, 1573, "Metrics/MethodLength: Method has too many lines. [29/10]", 151098026],
+ [816, 7, 1573, "Metrics/PerceivedComplexity: Perceived complexity for `canonical_leading_comment_region` is too high. [12/8]", 151098026],
+ [854, 7, 1315, "Metrics/AbcSize: Assignment Branch Condition size for `canonical_tracked_leading_comments` is too high. [<8, 21, 12> 25.48/17]", 3806475230],
+ [854, 7, 1315, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `canonical_tracked_leading_comments` is too high. [11/7]", 3806475230],
+ [854, 7, 1315, "Metrics/MethodLength: Method has too many lines. [21/10]", 3806475230],
+ [854, 7, 1315, "Metrics/PerceivedComplexity: Perceived complexity for `canonical_tracked_leading_comments` is too high. [11/8]", 3806475230],
+ [884, 27, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [889, 7, 574, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `dedup_warning_context` is too high. [9/7]", 840557709],
+ [889, 7, 574, "Metrics/PerceivedComplexity: Perceived complexity for `dedup_warning_context` is too high. [9/8]", 840557709],
+ [892, 27, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [893, 48, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [894, 48, 2, "Lint/RedundantSafeNavigation: Redundant safe navigation detected, use `.` instead.", 5858765],
+ [934, 7, 687, "Metrics/AbcSize: Assignment Branch Condition size for `equivalent_owner?` is too high. [<0, 17, 19> 25.5/17]", 1122406222],
+ [934, 7, 687, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `equivalent_owner?` is too high. [15/7]", 1122406222],
+ [934, 7, 687, "Metrics/MethodLength: Method has too many lines. [14/10]", 1122406222],
+ [934, 7, 687, "Metrics/PerceivedComplexity: Perceived complexity for `equivalent_owner?` is too high. [16/8]", 1122406222],
+ [974, 7, 762, "Metrics/MethodLength: Method has too many lines. [13/10]", 341822255],
+ [993, 7, 701, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `shared_line_comment_attachment_for` is too high. [9/7]", 2431043907],
+ [993, 7, 701, "Metrics/MethodLength: Method has too many lines. [13/10]", 2431043907],
+ [993, 7, 701, "Metrics/PerceivedComplexity: Perceived complexity for `shared_line_comment_attachment_for` is too high. [9/8]", 2431043907],
+ [1035, 7, 617, "Metrics/AbcSize: Assignment Branch Condition size for `emit_container_trailing_lines` is too high. [<2, 17, 3> 17.38/17]", 2119480325],
+ [1060, 7, 723, "Metrics/AbcSize: Assignment Branch Condition size for `trailing_container_line_range` is too high. [<4, 15, 11> 19.03/17]", 3162486186],
+ [1060, 7, 723, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `trailing_container_line_range` is too high. [10/7]", 3162486186],
+ [1060, 7, 723, "Metrics/MethodLength: Method has too many lines. [13/10]", 3162486186],
+ [1060, 7, 723, "Metrics/PerceivedComplexity: Perceived complexity for `trailing_container_line_range` is too high. [11/8]", 3162486186],
+ [1078, 7, 503, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_comment_and_blank_lines_in_range` is too high. [9/7]", 2774366077],
+ [1078, 7, 503, "Metrics/MethodLength: Method has too many lines. [11/10]", 2774366077],
+ [1078, 7, 503, "Metrics/PerceivedComplexity: Perceived complexity for `emit_comment_and_blank_lines_in_range` is too high. [9/8]", 2774366077],
+ [1125, 7, 945, "Metrics/MethodLength: Method has too many lines. [14/10]", 1167897124],
+ [1172, 7, 832, "Metrics/AbcSize: Assignment Branch Condition size for `removed_inline_block_comment_at` is too high. [<6, 26, 7> 27.59/17]", 890096863],
+ [1172, 7, 832, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `removed_inline_block_comment_at` is too high. [8/7]", 890096863],
+ [1172, 7, 832, "Metrics/MethodLength: Method has too many lines. [19/10]", 890096863],
+ [1229, 7, 1587, "Metrics/AbcSize: Assignment Branch Condition size for `emit_document_prelude` is too high. [<12, 40, 22> 47.2/17]", 1354199117],
+ [1229, 7, 1587, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_document_prelude` is too high. [21/7]", 1354199117],
+ [1229, 7, 1587, "Metrics/MethodLength: Method has too many lines. [35/10]", 1354199117],
+ [1229, 7, 1587, "Metrics/PerceivedComplexity: Perceived complexity for `emit_document_prelude` is too high. [22/8]", 1354199117],
+ [1273, 7, 1281, "Metrics/AbcSize: Assignment Branch Condition size for `emit_document_postlude` is too high. [<9, 31, 21> 38.51/17]", 1869501446],
+ [1273, 7, 1281, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `emit_document_postlude` is too high. [20/7]", 1869501446],
+ [1273, 7, 1281, "Metrics/MethodLength: Method has too many lines. [23/10]", 1869501446],
+ [1273, 7, 1281, "Metrics/PerceivedComplexity: Perceived complexity for `emit_document_postlude` is too high. [20/8]", 1869501446],
+ [1293, 121, 104, "Layout/LineLength: Line is too long. [224/120]", 1511565389],
+ [1305, 9, 48, "Lint/HashCompareByIdentity: Use `Hash#compare_by_identity` instead of using `object_id` for keys.", 2339197345],
+ [1351, 7, 1002, "Metrics/AbcSize: Assignment Branch Condition size for `build_refined_matches` is too high. [<11, 16, 8> 21/17]", 2274245926],
+ [1351, 7, 1002, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `build_refined_matches` is too high. [9/7]", 2274245926],
+ [1351, 7, 1002, "Metrics/MethodLength: Method has too many lines. [18/10]", 2274245926],
+ [1351, 7, 1002, "Metrics/PerceivedComplexity: Perceived complexity for `build_refined_matches` is too high. [9/8]", 2274245926]
],
"lib/json/merge/emitter.rb:3208422098": [
[16, 5, 6329, "Metrics/ClassLength: Class has too many lines. [140/100]", 1868859478],
[183, 7, 586, "Metrics/MethodLength: Method has too many lines. [14/10]", 4015595961]
],
- "lib/json/merge/file_analysis.rb:1768951794": [
- [7, 5, 8750, "Metrics/ClassLength: Class has too many lines. [234/100]", 3986988439],
+ "lib/json/merge/file_analysis.rb:2615144059": [
+ [7, 5, 8534, "Metrics/ClassLength: Class has too many lines. [231/100]", 1552473597],
[20, 7, 897, "Metrics/MethodLength: Method has too many lines. [16/10]", 2945813957],
[83, 9, 6, "Naming/MemoizedInstanceVariableName: Memoized variable `@nodes` does not match method name `statements`. Use `@statements` instead.", 2756313398],
[182, 7, 530, "Metrics/MethodLength: Method has too many lines. [12/10]", 2217856870],
- [202, 7, 601, "Metrics/MethodLength: Method has too many lines. [13/10]", 1694972597],
- [222, 7, 679, "Metrics/AbcSize: Assignment Branch Condition size for `collect_parse_errors` is too high. [<1, 19, 11> 21.98/17]", 1780421309],
- [222, 7, 679, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `collect_parse_errors` is too high. [11/7]", 1780421309],
- [222, 7, 679, "Metrics/MethodLength: Method has too many lines. [13/10]", 1780421309],
- [222, 7, 679, "Metrics/PerceivedComplexity: Perceived complexity for `collect_parse_errors` is too high. [11/8]", 1780421309],
- [239, 7, 1373, "Metrics/AbcSize: Assignment Branch Condition size for `extract_freeze_blocks` is too high. [<16, 23, 14> 31.32/17]", 2629976180],
- [239, 7, 1373, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `extract_freeze_blocks` is too high. [12/7]", 2629976180],
- [239, 7, 1373, "Metrics/MethodLength: Method has too many lines. [33/10]", 2629976180],
- [239, 7, 1373, "Metrics/PerceivedComplexity: Perceived complexity for `extract_freeze_blocks` is too high. [14/8]", 2629976180],
- [283, 7, 575, "Metrics/AbcSize: Assignment Branch Condition size for `integrate_nodes_and_freeze_blocks` is too high. [<8, 19, 10> 22.91/17]", 1313409663],
- [283, 7, 575, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `integrate_nodes_and_freeze_blocks` is too high. [11/7]", 1313409663],
- [283, 7, 575, "Metrics/MethodLength: Method has too many lines. [13/10]", 1313409663],
- [283, 7, 575, "Metrics/PerceivedComplexity: Perceived complexity for `integrate_nodes_and_freeze_blocks` is too high. [11/8]", 1313409663]
+ [217, 7, 679, "Metrics/AbcSize: Assignment Branch Condition size for `collect_parse_errors` is too high. [<1, 19, 11> 21.98/17]", 1780421309],
+ [217, 7, 679, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `collect_parse_errors` is too high. [11/7]", 1780421309],
+ [217, 7, 679, "Metrics/MethodLength: Method has too many lines. [13/10]", 1780421309],
+ [217, 7, 679, "Metrics/PerceivedComplexity: Perceived complexity for `collect_parse_errors` is too high. [11/8]", 1780421309],
+ [234, 7, 1373, "Metrics/AbcSize: Assignment Branch Condition size for `extract_freeze_blocks` is too high. [<16, 23, 14> 31.32/17]", 2629976180],
+ [234, 7, 1373, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `extract_freeze_blocks` is too high. [12/7]", 2629976180],
+ [234, 7, 1373, "Metrics/MethodLength: Method has too many lines. [33/10]", 2629976180],
+ [234, 7, 1373, "Metrics/PerceivedComplexity: Perceived complexity for `extract_freeze_blocks` is too high. [14/8]", 2629976180],
+ [278, 7, 575, "Metrics/AbcSize: Assignment Branch Condition size for `integrate_nodes_and_freeze_blocks` is too high. [<8, 19, 10> 22.91/17]", 1313409663],
+ [278, 7, 575, "Metrics/CyclomaticComplexity: Cyclomatic complexity for `integrate_nodes_and_freeze_blocks` is too high. [11/7]", 1313409663],
+ [278, 7, 575, "Metrics/MethodLength: Method has too many lines. [13/10]", 1313409663],
+ [278, 7, 575, "Metrics/PerceivedComplexity: Perceived complexity for `integrate_nodes_and_freeze_blocks` is too high. [11/8]", 1313409663]
],
"lib/json/merge/freeze_node.rb:340454761": [
[11, 21, 97, "Metrics/ParameterLists: Avoid parameter lists longer than 5 parameters. [6/5]", 4181995290]
@@ -271,13 +289,17 @@
[188, 7, 574, "Metrics/MethodLength: Method has too many lines. [13/10]", 1857730257],
[221, 7, 1053, "Metrics/MethodLength: Method has too many lines. [24/10]", 3329630813]
],
- "spec/fixtures_integration_spec.rb:2941021946": [
- [3, 1, 7914, "Metrics/BlockLength: Block has too many lines. [163/25]", 4258553307],
- [85, 60, 25, "Style/SymbolProc: Pass `&:compact` as an argument to `map` instead of a block.", 2107480170],
- [93, 59, 25, "Style/SymbolProc: Pass `&:compact` as an argument to `map` instead of a block.", 2107480170],
- [157, 3, 801, "Metrics/BlockLength: Block has too many lines. [27/25]", 716259872]
+ "spec/fixtures_integration_spec.rb:4153476545": [
+ [3, 1, 9054, "Metrics/BlockLength: Block has too many lines. [188/25]", 3333617620],
+ [61, 23, 55, "Style/SingleArgumentDig: Use `described_class.json_plan_context[:feature_profile]` instead of `described_class.json_plan_context.dig(:feature_profile)`.", 2689605560],
+ [115, 60, 25, "Style/SymbolProc: Pass `&:compact` as an argument to `map` instead of a block.", 2107480170],
+ [123, 59, 25, "Style/SymbolProc: Pass `&:compact` as an argument to `map` instead of a block.", 2107480170],
+ [187, 3, 801, "Metrics/BlockLength: Block has too many lines. [27/25]", 716259872]
],
"spec/reproducible_merge_spec.rb:133932627": [
[5, 1, 1854, "Metrics/BlockLength: Block has too many lines. [40/25]", 671932104]
+ ],
+ "spec/retained_blank_gap_spec.rb:488689672": [
+ [6, 1, 1126, "Metrics/BlockLength: Block has too many lines. [48/25]", 1659685169]
]
}
diff --git a/gems/json-merge/.simplecov b/gems/json-merge/.simplecov
index 7a28b141e..65351a88c 100644
--- a/gems/json-merge/.simplecov
+++ b/gems/json-merge/.simplecov
@@ -4,15 +4,11 @@
# json-merge will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-require 'kettle/soup/cover/config'
-
# Minimum coverage thresholds are set by kettle-soup-cover.
# They are controlled by ENV variables loaded by `mise` from `mise.toml`
# (with optional machine-local overrides in `.env.local`).
# If the values for minimum coverage need to change, they should be changed both there,
# and in 2 places in .github/workflows/coverage.yml.
-SimpleCov.start do
- track_files 'lib/**/*.rb'
- track_files 'lib/**/*.rake'
- track_files 'exe/*.rb'
+SimpleCov.configure do
+ cover 'lib/**/*.rb', 'lib/**/*.rake', 'exe/*.rb'
end
diff --git a/gems/json-merge/.structuredmerge/kettle-jem.yml b/gems/json-merge/.structuredmerge/kettle-jem.yml
index cf9684e3b..adc4b3666 100644
--- a/gems/json-merge/.structuredmerge/kettle-jem.yml
+++ b/gems/json-merge/.structuredmerge/kettle-jem.yml
@@ -246,6 +246,59 @@ templates:
- Gemfile
- certs/pboling.pem
- tmp/.gitignore
+ - gemfiles/modular/benchmark/r4/v0.5.gemfile
+ - gemfiles/modular/benchmark/vHEAD.gemfile
+ - gemfiles/modular/cgi/r4/v0.5.gemfile
+ - gemfiles/modular/cgi/vHEAD.gemfile
+ - gemfiles/modular/coverage.gemfile
+ - gemfiles/modular/coverage_local.gemfile
+ - gemfiles/modular/debug.gemfile
+ - gemfiles/modular/documentation.gemfile
+ - gemfiles/modular/documentation_local.gemfile
+ - gemfiles/modular/erb/r2.3/default.gemfile
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
+ - gemfiles/modular/erb/r2/v3.0.gemfile
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
+ - gemfiles/modular/erb/r3/v5.0.gemfile
+ - gemfiles/modular/erb/r4/v5.0.gemfile
+ - gemfiles/modular/erb/vHEAD.gemfile
+ - gemfiles/modular/json/truffleruby_22_3.gemfile
+ - gemfiles/modular/json/truffleruby_23_0.gemfile
+ - gemfiles/modular/json/truffleruby_23_1.gemfile
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
+ - gemfiles/modular/mutex_m/r4/v0.3.gemfile
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
+ - gemfiles/modular/optional.gemfile
+ - gemfiles/modular/recording/r2.3/recording.gemfile
+ - gemfiles/modular/recording/r2.4/recording.gemfile
+ - gemfiles/modular/recording/r2.5/recording.gemfile
+ - gemfiles/modular/recording/r3/recording.gemfile
+ - gemfiles/modular/recording/r4/recording.gemfile
+ - gemfiles/modular/recording/vHEAD.gemfile
+ - gemfiles/modular/rspec.gemfile
+ - gemfiles/modular/runtime_heads.gemfile
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
+ - gemfiles/modular/stringio/r4/v3.0.gemfile
+ - gemfiles/modular/stringio/vHEAD.gemfile
+ - gemfiles/modular/style.gemfile
+ - gemfiles/modular/style_local.gemfile
+ - gemfiles/modular/templating.gemfile
+ - gemfiles/modular/templating_local.gemfile
+ - gemfiles/modular/webrick/r4/v1.9.gemfile
+ - gemfiles/modular/webrick/vHEAD.gemfile
+ - gemfiles/modular/x_std_libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
+ - gemfiles/modular/x_std_libs/r4/libs.gemfile
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
- source: lib/gem/version.rb
target: lib/json/merge/version.rb
- source: sig/gem.rbs
diff --git a/gems/json-merge/Gemfile b/gems/json-merge/Gemfile
index 1b8188be8..4bfe324c3 100644
--- a/gems/json-merge/Gemfile
+++ b/gems/json-merge/Gemfile
@@ -37,260 +37,8 @@ if direct_sibling_gems.any? &&
ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
+ require 'nomono/bundler'
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
@@ -299,8 +47,6 @@ if direct_sibling_gems.any? &&
path_env: 'STRUCTUREDMERGE_DEV',
root: %w[src my structuredmerge]
)
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -312,142 +58,8 @@ if direct_sibling_gems.any? &&
end
end
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-if direct_sibling_gems.any? &&
- (direct_sibling_local ||
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?)
- direct_sibling_dev_was_set = ENV.key?('STRUCTUREDMERGE_DEV')
- direct_sibling_dev_original = ENV.fetch('STRUCTUREDMERGE_DEV', nil)
- begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path('Gemfile.lock', __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == 'nomono' }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"] if nomono_locked
- end
- Kernel.send(:gem, 'nomono', *nomono_activation_requirements)
- require 'nomono/bundler'
- ENV['STRUCTUREDMERGE_DEV'] = File.expand_path('..', __dir__) if direct_sibling_templating && !direct_sibling_local
-
- eval_nomono_gems(
- gems: direct_sibling_gems,
- prefix: 'STRUCTUREDMERGE',
- path_env: 'STRUCTUREDMERGE_DEV',
- root: %w[src my structuredmerge]
- )
- rescue LoadError
- warn 'Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies.'
- ensure
- if direct_sibling_templating && !direct_sibling_local
- if direct_sibling_dev_was_set
- ENV['STRUCTUREDMERGE_DEV'] = direct_sibling_dev_original
- else
- ENV.delete('STRUCTUREDMERGE_DEV')
- end
- end
- end
-end
-
-# Use the StructuredMerge TSLP branch until upstream ships Ruby 4-compatible gem metadata.
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-tslp_declared_by_templating =
- ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero? && !tslp_dev.to_s.empty?
-unless tslp_declared_by_templating
- if tslp_dev.to_s.empty?
- gem(
- 'tree_sitter_language_pack',
- git: 'https://github.com/structuredmerge/tree-sitter-language-pack.git',
- branch: 'fix/ruby-parser-api-methods',
- glob: 'packages/ruby/*.gemspec'
- )
- else
- gem 'tree_sitter_language_pack', path: tslp_dev
- end
-end
+# Use released TSLP with the Ruby ABI platform-gem fix.
+gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
# Templating (env-switched: STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local paths)
eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATING', 'false').casecmp('true').zero?
@@ -455,7 +67,7 @@ eval_gemfile 'gemfiles/modular/templating.gemfile' if ENV.fetch('K_JEM_TEMPLATIN
# Debugging
eval_gemfile 'gemfiles/modular/debug.gemfile'
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile 'gemfiles/modular/coverage.gemfile'
# Linting
diff --git a/gems/json-merge/Gemfile.lock b/gems/json-merge/Gemfile.lock
index 9a62cb25c..588b3d1a6 100644
--- a/gems/json-merge/Gemfile.lock
+++ b/gems/json-merge/Gemfile.lock
@@ -6,272 +6,6 @@ PATH
tree_haver (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
- specs:
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr (= 7.1.0)
- markly-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
- ast-crispr-ruby-prism (7.1.0)
- ast-crispr (= 7.1.0)
- prism-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
- ast-merge (7.1.0)
- benchmark
- token-resolver (~> 2.0, >= 2.0.4)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
- bash-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
- specs:
- kettle-jem (7.1.0)
- addressable (>= 2.8, < 3)
- ast-crispr-markdown-markly (= 7.1.0)
- ast-crispr-ruby-prism (= 7.1.0)
- ast-merge (= 7.1.0)
- bash-merge (= 7.1.0)
- citrus-toml-merge (= 7.1.0)
- commonmarker-merge (= 7.1.0)
- dotenv-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-dev (~> 2.3, >= 2.3.5)
- kettle-rb (~> 0.1, >= 0.1.4)
- kramdown-merge (= 7.1.0)
- markdown-merge (= 7.1.0)
- markly-merge (= 7.1.0)
- prism-merge (= 7.1.0)
- psych-merge (= 7.1.0)
- rbs (>= 3.10)
- rbs-merge (= 7.1.0)
- ruby-merge (= 7.1.0)
- token-resolver (~> 2.0, >= 2.0.4)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.2)
- tree_haver (= 7.1.0)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
GEM
remote: https://gem.coop/
specs:
@@ -282,22 +16,26 @@ GEM
bundler (>= 1.17.3)
rake (>= 10)
thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
+ ast-merge (7.1.0)
+ benchmark
+ token-resolver (~> 2.0, >= 2.0.4)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
+ cgi (0.5.2)
citrus (3.0.2)
cmdparse (3.0.7)
- commonmarker (2.9.0-aarch64-linux)
- commonmarker (2.9.0-aarch64-linux-musl)
- commonmarker (2.9.0-arm64-darwin)
- commonmarker (2.9.0-x86_64-darwin)
- commonmarker (2.9.0-x86_64-linux)
- commonmarker (2.9.0-x86_64-linux-musl)
- concurrent-ruby (1.3.7)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,7 +43,6 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
- docile (1.4.1)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -336,7 +73,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -355,24 +92,20 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (1.1.3)
- simplecov (~> 0.22)
- simplecov-cobertura (~> 3.0)
- simplecov-console (~> 0.9, >= 0.9.3)
- simplecov-html (~> 0.13, >= 0.13.1)
- simplecov-lcov (~> 0.8)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
+ simplecov (>= 1.0)
+ simplecov-cobertura (>= 4.0)
+ simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
- simplecov_json_formatter (~> 0.1, >= 0.1.4)
- version_gem (~> 1.1, >= 1.1.9)
- kettle-test (2.0.11)
+ simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -383,6 +116,8 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
@@ -390,7 +125,6 @@ GEM
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
- markly (0.16.0)
mutex_m (0.3.0)
nokogiri (1.19.4-aarch64-linux-gnu)
racc (~> 1.4)
@@ -398,13 +132,11 @@ GEM
racc (~> 1.4)
nokogiri (1.19.4-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.19.4-x86_64-darwin)
- racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-musl)
racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -425,9 +157,6 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
@@ -483,6 +212,14 @@ GEM
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
+ rubocop-capybara (2.23.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.81)
+ rubocop-env (0.1.0)
+ rubocop
+ rubocop-factory_bot (2.28.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
rubocop-gradual (0.4.0)
benchmark
diff-lcs (>= 1.2.0, < 2.0)
@@ -490,13 +227,26 @@ GEM
parallel (~> 1.10)
rainbow (>= 2.2.2, < 4.0)
rubocop (~> 1.0)
- rubocop-lts (24.1.0)
- rubocop-ruby3_2 (>= 3.0.0, < 4)
- standard-rubocop-lts (>= 2.0.2, < 3)
- version_gem (>= 1.1.2, < 3)
+ rubocop-lts (24.2.2)
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.1)
+ standard-rubocop-lts (~> 2.0, >= 2.0.3)
+ version_gem (~> 1.1, >= 1.1.13)
+ rubocop-lts-rspec (1.0.5)
+ rubocop (~> 1.84, >= 1.84.2)
+ rubocop-env (~> 0.1, >= 0.1.0)
+ rubocop-factory_bot (~> 2.28, >= 2.28.0)
+ rubocop-rspec (~> 3.9, >= 3.9.0)
+ rubocop-rspec-extra (~> 0.3, >= 0.3.0)
+ standard (~> 1.54, >= 1.54.0)
+ standard-rspec (~> 0.5, >= 0.5.0)
+ version_gem (~> 1.1, >= 1.1.13)
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
+ rubocop-minitest (0.40.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.38.0, < 2.0)
rubocop-on-rbs (2.0.0)
lint_roller (~> 1.1)
rbs (~> 4.0)
@@ -516,6 +266,13 @@ GEM
lint_roller (~> 1.1)
regexp_parser (>= 2.0)
rubocop (~> 1.86, >= 1.86.2)
+ rubocop-rspec-extra (0.3.0)
+ lint_roller (~> 1.1)
+ rubocop (>= 1.72.1, < 2.0)
+ rubocop-rspec_rails (2.32.0)
+ lint_roller (~> 1.1)
+ rubocop (~> 1.72, >= 1.72.1)
+ rubocop-rspec (~> 3.5)
rubocop-ruby3_2 (3.0.7)
rubocop-gradual (~> 0.3, >= 0.3.6)
rubocop-md (~> 2.0, >= 2.0.4)
@@ -530,28 +287,22 @@ GEM
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
- service_actor (3.9.4)
- zeitwerk (>= 1.0)
silent_stream (1.0.12)
logger (~> 1.2)
version_gem (>= 1.1.8, < 3)
- simplecov (0.22.0)
- docile (~> 1.1)
- simplecov-html (~> 0.11)
- simplecov_json_formatter (~> 0.1)
- simplecov-cobertura (3.2.0)
+ simplecov (1.0.2)
+ simplecov-cobertura (4.0.0)
rexml
- simplecov (~> 0.19)
+ simplecov (~> 1.0)
simplecov-console (0.9.5)
ansi
simplecov
terminal-table
- simplecov-html (0.13.2)
- simplecov-lcov (0.9.0)
simplecov-rcov (0.3.7)
simplecov (>= 0.4.1)
- simplecov_json_formatter (0.1.4)
- sorbet-runtime (0.6.13342)
+ simplecov_lcov_formatter (0.9.0)
+ simplecov (>= 0.18)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -564,6 +315,12 @@ GEM
standard-performance (1.9.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.26.0)
+ standard-rspec (0.5.0)
+ lint_roller (>= 1.0)
+ rubocop-capybara (~> 2.23)
+ rubocop-factory_bot (~> 2.27)
+ rubocop-rspec (~> 3.9)
+ rubocop-rspec_rails (~> 2.31)
standard-rubocop-lts (2.0.10)
standard (~> 1.54, >= 1.54.0)
standard-custom (~> 1.0, >= 1.0.2)
@@ -581,14 +338,20 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
- toml-rb (4.2.0)
- citrus (~> 3.0, > 3.0)
- racc (~> 1.7)
+ version_gem (~> 1.1, >= 1.1.14)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-aarch64-linux)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-arm64-darwin)
+ sorbet-runtime (~> 0.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -598,6 +361,7 @@ GEM
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
version_gem (1.1.14)
+ webrick (1.9.2)
yaml-converter (0.2.3)
hexapdf (>= 1.8, < 2)
kramdown (>= 2.4, < 3)
@@ -624,120 +388,85 @@ GEM
zlib (3.2.3)
PLATFORMS
+ aarch64-linux
aarch64-linux
aarch64-linux-gnu
+ aarch64-linux-gnu
+ aarch64-linux-musl
aarch64-linux-musl
arm64-darwin
- x86_64-darwin
+ arm64-darwin
+ x86_64-linux
x86_64-linux-gnu
x86_64-linux-musl
DEPENDENCIES
addressable (>= 2.8, < 3)
appraisal2 (~> 3.0, >= 3.0.6)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
+ appraisal2-rubocop (~> 1.0, >= 1.0.0)
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
- citrus-toml-merge!
- commonmarker-merge!
+ cgi (~> 0.5)
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.4)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.0)
- go-merge!
irb (~> 1.17)
json-merge!
kettle-dev (~> 2.0, >= 2.2.25)
- kettle-drift (~> 1.0, >= 1.0.5)
- kettle-jem!
- kettle-soup-cover (~> 1.0, >= 1.1.3)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
kettle-test (~> 2.0, >= 2.0.9)
- kramdown (~> 2.5, >= 2.5.1)
- kramdown-merge!
+ kramdown (~> 2.5, >= 2.5.2)
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
rbs (>= 3.0)
- rbs-merge!
rdoc (~> 6.11)
- reek (~> 6.5)
+ reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
- rubocop-lts (~> 24.1.0)
- rubocop-on-rbs (~> 2.0)
+ rubocop-gradual (~> 0.4, >= 0.4.0)
+ rubocop-lts (~> 24.2, >= 24.2.1)
+ rubocop-lts-rspec (~> 1.0, >= 1.0.5)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
+ rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
- rubocop-rspec (~> 3.6)
- rubocop-ruby3_2 (~> 3.0.0)
- ruby-merge!
+ rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
- standard (>= 1.50)
+ standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.3)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
- typescript-merge!
- yaml-converter (~> 0.1)
- yaml-merge!
- yard (~> 0.9, >= 0.9.44)
- yard-fence (~> 0.9, >= 0.9.1)
+ tree_sitter_language_pack (~> 1.13, >= 1.13.3)
+ webrick (~> 1.9)
+ yaml-converter (~> 0.2, >= 0.2.3)
+ yard (~> 0.9, >= 0.9.45)
+ yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
- yard-timekeeper (~> 0.1)
- yard-yaml (~> 0.1, >= 0.1.2)
- zip-merge!
+ yard-timekeeper (~> 0.2, >= 0.2.4)
+ yard-yaml (~> 0.2, >= 0.2.3)
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
appraisal2 (3.2.0) sha256=ccd0b767ac4060cd7af6d16747459b6990f49c39c7b4fb1f7d1146b1e97c492f
+ appraisal2-rubocop (1.0.0) sha256=b71410fbb014befda5340605a605b7f6f3f012739baf0acc5b4351b592c3258d
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
- ast-crispr (7.1.0)
- ast-crispr-markdown-markly (7.1.0)
- ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
- bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
+ cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
- citrus-toml-merge (7.1.0)
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
- commonmarker (2.9.0-aarch64-linux) sha256=e2b4aadb9a2cfa4e206582641ce3a49465549ac1ed4c289fdd63b78d8f24579c
- commonmarker (2.9.0-aarch64-linux-musl) sha256=1cf4d2821f2a7e64945f1ed7c4eeced586fdb27ea7fe7337788802cf8f57cfca
- commonmarker (2.9.0-arm64-darwin) sha256=1748dbfa4f5813b0d2a14bb4bbfa65a4ec293aa1c825016d60029ee0e132b046
- commonmarker (2.9.0-x86_64-darwin) sha256=0a9914ccfd2f5d2a59c7bd0dda4fe90eb084cf513b477e499008e09ec9d6edd6
- commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
- commonmarker (2.9.0-x86_64-linux-musl) sha256=293921398b839f79ceaf55010e061357e34f053822c3b003cd0be6686176335e
- commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
diffy (3.4.4) sha256=79384ab5ca82d0e115b2771f0961e27c164c456074bd2ec46b637ebf7b6e47e3
- docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
- dotenv-merge (7.1.0)
dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
@@ -746,61 +475,47 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5) sha256=07094e80140a049164142820bdd327c30fcd855bb00697a0a430600a2b5144a2
- kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (1.1.3) sha256=a373827da22a7131d093afd32945e5b7d7a10a01ebfdded8fd2cb8230d69c8ad
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
- kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
- markdown-merge (7.1.0)
- markly (0.16.0) sha256=6f70d79e385b1efc9e171f74c81628826259039fe6c778e03c3924c71dac5511
- markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527
- nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
- prism-merge (7.1.0)
psych (5.4.0) sha256=14f72d69a611af663d7d70e4a7b67d9eb1f3ae9f8d916b478961d5a0075ba5b7
- psych-merge (7.1.0)
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0) sha256=f13205c2738f3d2053afcd03491a9e4541b22a59a0bfc53fc8bc883bd8188023
- rb_sys (0.9.127) sha256=e9f90df3bb0577472d26d96127d5b5774b98f44de881e7d36aeefd28d6337847
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
- rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
@@ -818,35 +533,37 @@ CHECKSUMS
rspec_junit_formatter (0.6.0) sha256=40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15
rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf
rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
+ rubocop-capybara (2.23.0) sha256=f9ea1ba3a7561ee8e88cf76fc378ce517ce5327155f305ee7b5c2500e5aee357
+ rubocop-env (0.1.0) sha256=5ab9a259e71822bf514c8e900a9b68cc2f74ccc87d5493efcd03213f3068e718
+ rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-gradual (0.4.0) sha256=9c7e584e6fef6c2539266a193a4572c970c22f99046fd6b0305bdde6228f96ad
- rubocop-lts (24.1.0) sha256=9dcad4db2da2fe2f1f77f98c917d70e7c43eded703da14cd201d4be52a9272aa
+ rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
+ rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d
rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2
+ rubocop-rspec-extra (0.3.0) sha256=ee4b6484d0332a0d23c4a465eeb607e41888eb3d4ed479f850b9f5212514f787
+ rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
rubocop-ruby3_2 (3.0.7) sha256=f53dd6d286fb05186214fc6ec116783e7f837030918e8931c05de773e98f8466
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
- ruby-merge (7.1.0)
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
- service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
- simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
- simplecov-cobertura (3.2.0) sha256=70d702658677fcb20e5aceb6915ccf8bc62ff2ccd38b62b3ad5c9db5c0888740
+ simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
+ simplecov-cobertura (4.0.0) sha256=e4fb3159b1ecea545b44f5452a8611305323e78ad23eae8aed35924d072e01ea
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
- simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
- simplecov-lcov (0.9.0) sha256=7a77a31e200a595ed4b0249493056efd0c920601f53d2ef135ca34ee796346cd
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
- simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
+ standard-rspec (0.5.0) sha256=64d396524a65af47f5331b423d8cdd313e0267401647bb7892489ca89dad2973
standard-rubocop-lts (2.0.10) sha256=89708a505b7d8b24d2ac399a7520fcb9e764abc2ecb4289b631b5fe0e3b76617
stone_checksums (1.0.6) sha256=c775f830513d6c6ab26e31d1a5fbecd4c4e39002663d4d9f8fa96e97990b5298
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -855,20 +572,18 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0) sha256=0a91d0f76a9036e84e44f95693b12f58d358c1df3ac8e3b5271f2056ecc6e4b9
- toml-merge (7.1.0)
- toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-aarch64-linux) sha256=55ffc7c87868cb45658338363d9eba51b4a8b0259aa88e4de368d2bd1d52fea4
+ tree_sitter_language_pack (1.13.3-arm64-darwin) sha256=bc2498db605f212a1dbd2465ed3f65190d7da786f6ed5d30fcf958121aeb4a5c
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
+ webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131
yaml-converter (0.2.3) sha256=d35e69e547610d9e347672cc277fcb7d71dff3c53a942e66f82b1c64022ada72
- yaml-merge (7.1.0)
yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
yard-fence (0.9.6) sha256=3d1dbf4e3df462ac78b8bd2e01cf740a2de20168387c929aca31a0bcee490659
yard-junk (0.1.0) sha256=e85fe2ec1afa47313decd333447b53458cb1ed49b510b70015fdc3041a94bcdd
@@ -876,8 +591,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/json-merge/LICENSE.md b/gems/json-merge/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/json-merge/LICENSE.md
+++ b/gems/json-merge/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/json-merge/README.md b/gems/json-merge/README.md
index b2f5382b8..a4febf8ef 100644
--- a/gems/json-merge/README.md
+++ b/gems/json-merge/README.md
@@ -85,8 +85,8 @@ File.write("merged.json", result.to_json)
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -438,7 +438,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -464,6 +464,8 @@ If none of the available licenses suit your use case, please [contact us](mailto
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/json-merge
[⛳️namespace-img]: https://img.shields.io/badge/namespace-Json::Merge-3C2D2D.svg?style=square&logo=ruby&logoColor=white
@@ -508,7 +510,7 @@ If none of the available licenses suit your use case, please [contact us](mailto
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/json-merge
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/json-merge
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/json-merge
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/json-merge/gemfiles/modular/cgi/r4/v0.5.gemfile b/gems/json-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
new file mode 100644
index 000000000..17ad97260
--- /dev/null
+++ b/gems/json-merge/gemfiles/modular/cgi/r4/v0.5.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '~> 0.5'
diff --git a/gems/json-merge/gemfiles/modular/cgi/vHEAD.gemfile b/gems/json-merge/gemfiles/modular/cgi/vHEAD.gemfile
new file mode 100644
index 000000000..650fbf033
--- /dev/null
+++ b/gems/json-merge/gemfiles/modular/cgi/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'cgi', '>= 0.5'
diff --git a/gems/json-merge/gemfiles/modular/coverage.gemfile b/gems/json-merge/gemfiles/modular/coverage.gemfile
index c0ab9c066..b93014b6b 100644
--- a/gems/json-merge/gemfiles/modular/coverage.gemfile
+++ b/gems/json-merge/gemfiles/modular/coverage.gemfile
@@ -2,12 +2,12 @@
# We run code coverage on the latest version of Ruby only.
-# Set KETTLE_RB_DEV=true for local development with path-based dependencies.
+# Set KETTLE_DEV_DEV=true for local development with path-based dependencies.
# When false (default / CI), remote released gems are used.
-if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
# Coverage (remote/released)
platform :mri do
- gem 'kettle-soup-cover', '~> 1.0', '>= 1.1.3', require: false
+ gem 'kettle-soup-cover', '~> 3.0', '>= 3.0.3', require: false
end
else
eval_gemfile 'coverage_local.gemfile'
diff --git a/gems/json-merge/gemfiles/modular/coverage_local.gemfile b/gems/json-merge/gemfiles/modular/coverage_local.gemfile
index 0c0150f21..c851f5445 100644
--- a/gems/json-merge/gemfiles/modular/coverage_local.gemfile
+++ b/gems/json-merge/gemfiles/modular/coverage_local.gemfile
@@ -1,20 +1,20 @@
# frozen_string_literal: true
# Local path overrides for development.
-# Loaded by the associated non-local gemfile when KETTLE_RB_DEV != "false".
+# Loaded by the associated non-local gemfile when KETTLE_DEV_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[kettle-dev kettle-test kettle-soup-cover kettle-drift]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
local_gems_to_eval = local_gems - %w[json-merge] - declared_gems
-# export KETTLE_RB_DEV=/path/to/kettle-rb
+# export KETTLE_DEV_DEV=/path/to/my
platform :mri do
eval_nomono_gems(
gems: local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/json-merge/gemfiles/modular/documentation.gemfile b/gems/json-merge/gemfiles/modular/documentation.gemfile
index dff5cc108..9d4535f12 100644
--- a/gems/json-merge/gemfiles/modular/documentation.gemfile
+++ b/gems/json-merge/gemfiles/modular/documentation.gemfile
@@ -7,17 +7,17 @@
#
# Documentation
-gem 'kramdown', '~> 2.5', '>= 2.5.1', require: false # Ruby >= 2.5
+gem 'kramdown', '~> 2.5', '>= 2.5.2', require: false # Ruby >= 2.5
gem 'kramdown-parser-gfm', '~> 1.1', require: false # Ruby >= 2.3
-gem 'yaml-converter', '~> 0.1', require: false # Ruby >= 3.2
-gem 'yard', '~> 0.9', '>= 0.9.44', require: false
+gem 'yaml-converter', '~> 0.2', '>= 0.2.3', require: false # Ruby >= 3.2
+gem 'yard', '~> 0.9', '>= 0.9.45', require: false
gem 'yard-junk', '~> 0.1', '>= 0.1.0', require: false # Ruby >= 3.1
gem 'yard-relative_markdown_links', '~> 0.6', require: false
if ENV.fetch('GALTZO_FLOSS_DEV', 'false').casecmp('false').zero?
- gem 'yard-fence', '~> 0.9', '>= 0.9.1', require: false # Ruby >= 3.2
- gem 'yard-timekeeper', '~> 0.1', require: false
- gem 'yard-yaml', '~> 0.1', '>= 0.1.2', require: false
+ gem 'yard-fence', '~> 0.9', '>= 0.9.6', require: false # Ruby >= 3.2
+ gem 'yard-timekeeper', '~> 0.2', '>= 0.2.4', require: false
+ gem 'yard-yaml', '~> 0.2', '>= 0.2.3', require: false
else
eval_gemfile 'documentation_local.gemfile'
end
diff --git a/gems/json-merge/gemfiles/modular/documentation_local.gemfile b/gems/json-merge/gemfiles/modular/documentation_local.gemfile
index 4d4c2bd95..688c7e199 100644
--- a/gems/json-merge/gemfiles/modular/documentation_local.gemfile
+++ b/gems/json-merge/gemfiles/modular/documentation_local.gemfile
@@ -3,13 +3,15 @@
# Local path overrides for development.
# Loaded by the associated non-local gemfile when GALTZO_FLOSS_DEV != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[yard-fence yard-timekeeper yard-yaml]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[json-merge] - declared_gems
# export GALTZO_FLOSS_DEV=/path/to/galtzo-floss
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'GALTZO_FLOSS',
path_env: 'GALTZO_FLOSS_DEV',
vendored_gems_env: 'GALTZO_FLOSS_VENDORED_GEMS',
diff --git a/gems/json-merge/gemfiles/modular/erb/r3/v5.0.gemfile b/gems/json-merge/gemfiles/modular/erb/r3/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/json-merge/gemfiles/modular/erb/r3/v5.0.gemfile
+++ b/gems/json-merge/gemfiles/modular/erb/r3/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/json-merge/gemfiles/modular/erb/r4/v5.0.gemfile b/gems/json-merge/gemfiles/modular/erb/r4/v5.0.gemfile
index 0e3bf1b97..ec7ff451f 100644
--- a/gems/json-merge/gemfiles/modular/erb/r4/v5.0.gemfile
+++ b/gems/json-merge/gemfiles/modular/erb/r4/v5.0.gemfile
@@ -1 +1 @@
-gem 'erb', '~> 6.0', '>= 6.0.4' # ruby >= 3.2.0
+gem 'erb', '~> 6.0', '>= 6.0.6' # ruby >= 3.2.0
diff --git a/gems/json-merge/gemfiles/modular/json/truffleruby_22_3.gemfile b/gems/json-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
new file mode 100644
index 000000000..9b2f8d96a
--- /dev/null
+++ b/gems/json-merge/gemfiles/modular/json/truffleruby_22_3.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('22.3')
+ # TruffleRuby 22.3 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.5.1'
+end
diff --git a/gems/json-merge/gemfiles/modular/json/truffleruby_23_0.gemfile b/gems/json-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
new file mode 100644
index 000000000..d787a5ef4
--- /dev/null
+++ b/gems/json-merge/gemfiles/modular/json/truffleruby_23_0.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.0')
+ # TruffleRuby 23.0 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.1'
+end
diff --git a/gems/json-merge/gemfiles/modular/json/truffleruby_23_1.gemfile b/gems/json-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
new file mode 100644
index 000000000..d78486b0e
--- /dev/null
+++ b/gems/json-merge/gemfiles/modular/json/truffleruby_23_1.gemfile
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+if RUBY_ENGINE == 'truffleruby' && RUBY_ENGINE_VERSION.start_with?('23.1')
+ # TruffleRuby 23.1 ships the json default gem from its emulated MRI Ruby.
+ gem 'json', '= 2.6.3'
+end
diff --git a/gems/json-merge/gemfiles/modular/optional.gemfile b/gems/json-merge/gemfiles/modular/optional.gemfile
index 5ed8dfe9a..9ea429538 100644
--- a/gems/json-merge/gemfiles/modular/optional.gemfile
+++ b/gems/json-merge/gemfiles/modular/optional.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during json-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -10,7 +10,6 @@
# Required for curated binstubs generated by kettle-jem install
gem 'rbs', '>= 3.0', require: false # ruby >= 3.1
-gem 'stone_checksums', '~> 1.0', '>= 1.0.3', require: false # ruby >= 2.2
# Required for kettle-pre-release
# URL parsing with Unicode support (falls back to URI if not available)
diff --git a/gems/json-merge/gemfiles/modular/runtime_heads.gemfile b/gems/json-merge/gemfiles/modular/runtime_heads.gemfile
index a6e1ccb82..ebf17c529 100644
--- a/gems/json-merge/gemfiles/modular/runtime_heads.gemfile
+++ b/gems/json-merge/gemfiles/modular/runtime_heads.gemfile
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-# To retain during json-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
@@ -8,7 +8,4 @@
# Test against HEAD of runtime dependencies so we can proactively file bugs
-# Ruby >= 2.2
-gem 'version_gem', github: 'ruby-oauth/version_gem', branch: 'main'
-
eval_gemfile('x_std_libs/vHEAD.gemfile')
diff --git a/gems/json-merge/gemfiles/modular/style.gemfile b/gems/json-merge/gemfiles/modular/style.gemfile
index 8e3fdd739..4dbcc02c0 100644
--- a/gems/json-merge/gemfiles/modular/style.gemfile
+++ b/gems/json-merge/gemfiles/modular/style.gemfile
@@ -1,27 +1,30 @@
# frozen_string_literal: true
-# To retain during json-merge templating:
+# To retain during kettle-jem templating:
# kettle-jem:freeze
# # ... your code
# kettle-jem:unfreeze
#
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
-gem 'reek', '~> 6.5'
+gem 'reek', '~> 6.5', '>= 6.5.0'
platform :mri do
- gem 'rubocop-on-rbs', '~> 2.0' # ruby >= 3.2.0
+ gem 'appraisal2-rubocop', '~> 1.0', '>= 1.0.0', require: false
+ gem 'rubocop-gradual', '~> 0.4', '>= 0.4.0'
+ gem 'rubocop-minitest', '~> 0.40', '>= 0.40.0'
+ gem 'rubocop-on-rbs', '~> 2.0', '>= 2.0.0' # ruby >= 3.2.0
# gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
gem 'rubocop-packaging', '~> 0.6', '>= 0.6.0'
- gem 'standard', '>= 1.50'
+ gem 'standard', '~> 1.56', '>= 1.56.0'
if ENV.fetch('RUBOCOP_LTS_LOCAL', 'false').casecmp('false').zero?
- gem 'rubocop-lts', '~> 24.1.0'
- # "rubocop-lts-rspec" can't add here until other gems are updated.
- gem 'rubocop-rspec', '~> 3.6'
- gem 'rubocop-ruby3_2', '~> 3.0.0'
+ declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+ gem 'rubocop-lts', '~> 24.2', '>= 24.2.1' unless declared_gems.include?('rubocop-lts')
+ gem 'rubocop-lts-rspec', '~> 1.0', '>= 1.0.5' unless declared_gems.include?('rubocop-lts-rspec')
+ gem 'rubocop-ruby3_2', '~> 3.0', '>= 3.0.6' unless declared_gems.include?('rubocop-ruby3_2')
else
eval_gemfile('style_local.gemfile')
end
diff --git a/gems/json-merge/gemfiles/modular/style_local.gemfile b/gems/json-merge/gemfiles/modular/style_local.gemfile
index ce75bbe21..043eca0d7 100644
--- a/gems/json-merge/gemfiles/modular/style_local.gemfile
+++ b/gems/json-merge/gemfiles/modular/style_local.gemfile
@@ -1,19 +1,21 @@
# frozen_string_literal: true
-# We run rubocop on the latest version of Ruby,
-# but in support of the oldest supported version of Ruby
+# Style tasks run on the latest Ruby; RuboCop-LTS selects the compatibility
+# rules for the configured Ruby floor independently from task dependency floors.
# Local path overrides for development.
# Loaded by the associated non-local gemfile when RUBOCOP_LTS_LOCAL != "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
local_gems = %w[rubocop-lts rubocop-lts-rspec rubocop-ruby3_2 standard-rubocop-lts]
+declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
+local_gems_to_eval = local_gems - %w[json-merge] - declared_gems
# export VENDORED_GEMS=rubocop-lts,rubocop-lts-rspec,rubocop-ruby3_2,standard-rubocop-lts
platform :mri do
eval_nomono_gems(
- gems: local_gems,
+ gems: local_gems_to_eval,
prefix: 'RUBOCOP_LTS',
path_env: 'RUBOCOP_LTS_LOCAL',
vendored_gems_env: 'VENDORED_GEMS',
diff --git a/gems/json-merge/gemfiles/modular/templating.gemfile b/gems/json-merge/gemfiles/modular/templating.gemfile
index e3c24e6b7..a672de184 100644
--- a/gems/json-merge/gemfiles/modular/templating.gemfile
+++ b/gems/json-merge/gemfiles/modular/templating.gemfile
@@ -1,22 +1,24 @@
# frozen_string_literal: true
structuredmerge_remote = ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false').zero?
-kettle_remote = ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false').zero?
+kettle_remote = ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false').zero?
if structuredmerge_remote
- # Merge recipes and parser dependencies for released installs.
+ # Parser dependencies for released installs.
+ gem 'tree_sitter_language_pack', '~> 1.13', '>= 1.13.3'
+ # Merge recipes for released installs.
gem 'kettle-jem', '>= 7.0'
end
if kettle_remote
# Template/plugin checks for released installs.
- gem 'kettle-drift', '~> 1.0', '>= 1.0.5', require: false
+ gem 'kettle-drift', '~> 1.0', '>= 1.0.6', require: false
end
# Set STRUCTUREDMERGE_DEV=/path/to/structuredmerge/ruby/gems for local development with path-based dependencies.
# When false (default / CI), released kettle-jem brings merge gems and parser dependencies.
# Local path overrides bring the same dependencies from sibling gemspecs.
#
-# Set KETTLE_RB_DEV=/path/to/kettle-rb for local development with Kettle plugin gems.
+# Set KETTLE_DEV_DEV=/path/to/my for local development with Kettle plugin gems.
# When false (default / CI), released Kettle plugin gems are used.
eval_gemfile 'templating_local.gemfile' unless structuredmerge_remote && kettle_remote
diff --git a/gems/json-merge/gemfiles/modular/templating_local.gemfile b/gems/json-merge/gemfiles/modular/templating_local.gemfile
index b9b83f3c0..c3cb51d29 100644
--- a/gems/json-merge/gemfiles/modular/templating_local.gemfile
+++ b/gems/json-merge/gemfiles/modular/templating_local.gemfile
@@ -1,10 +1,10 @@
# frozen_string_literal: true
# Local path overrides for templating development.
-# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_RB_DEV
+# Loaded by the associated non-local gemfile when STRUCTUREDMERGE_DEV or KETTLE_DEV_DEV
# is not "false".
-require 'nomono/bundler' unless defined?(Nomono)
+require 'nomono/bundler'
structuredmerge_local_gems = %w[
tree_haver
@@ -39,19 +39,14 @@ structuredmerge_local_gems = %w[
ast-crispr-ruby-prism
]
-kettle_rb_local_gems = %w[
+kettle_dev_local_gems = %w[
kettle-dev kettle-test kettle-soup-cover kettle-drift
]
declared_gems = instance_variable_get(:@dependencies).to_a.map(&:name)
structuredmerge_local_gems_to_eval = structuredmerge_local_gems - %w[json-merge] - declared_gems
-kettle_rb_local_gems_to_eval = kettle_rb_local_gems - %w[json-merge] - declared_gems
+kettle_dev_local_gems_to_eval = kettle_dev_local_gems - %w[json-merge] - declared_gems
-tslp_dev = ENV.fetch('TSLP_DEV', nil)
-
-# export VENDORED_GEMS=
platform :mri do
- gem 'tree_sitter_language_pack', path: tslp_dev unless tslp_dev.to_s.empty?
-
if ENV.fetch('STRUCTUREDMERGE_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
gems: structuredmerge_local_gems_to_eval,
@@ -63,11 +58,11 @@ platform :mri do
)
end
- if ENV.fetch('KETTLE_RB_DEV', 'false').casecmp('false') != 0
+ if ENV.fetch('KETTLE_DEV_DEV', 'false').casecmp('false') != 0
eval_nomono_gems(
- gems: kettle_rb_local_gems_to_eval,
- prefix: 'KETTLE_RB',
- path_env: 'KETTLE_RB_DEV',
+ gems: kettle_dev_local_gems_to_eval,
+ prefix: 'KETTLE_DEV',
+ path_env: 'KETTLE_DEV_DEV',
vendored_gems_env: 'VENDORED_GEMS',
vendor_gem_dir_env: 'VENDOR_GEM_DIR',
debug_env: 'KETTLE_DEV_DEBUG'
diff --git a/gems/json-merge/gemfiles/modular/webrick/r4/v1.9.gemfile b/gems/json-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
new file mode 100644
index 000000000..b1329ba84
--- /dev/null
+++ b/gems/json-merge/gemfiles/modular/webrick/r4/v1.9.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '~> 1.9'
diff --git a/gems/json-merge/gemfiles/modular/webrick/vHEAD.gemfile b/gems/json-merge/gemfiles/modular/webrick/vHEAD.gemfile
new file mode 100644
index 000000000..c7e6f81a1
--- /dev/null
+++ b/gems/json-merge/gemfiles/modular/webrick/vHEAD.gemfile
@@ -0,0 +1 @@
+gem 'webrick', '>= 1.9'
diff --git a/gems/json-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile b/gems/json-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
index bd4e884df..e2f6501eb 100644
--- a/gems/json-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
+++ b/gems/json-merge/gemfiles/modular/x_std_libs/r4/libs.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../../erb/r4/v5.0.gemfile'
eval_gemfile '../../mutex_m/r4/v0.3.gemfile'
eval_gemfile '../../stringio/r4/v3.0.gemfile'
eval_gemfile '../../benchmark/r4/v0.5.gemfile'
+eval_gemfile '../../cgi/r4/v0.5.gemfile'
+eval_gemfile '../../webrick/r4/v1.9.gemfile'
diff --git a/gems/json-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile b/gems/json-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
index 91f383c11..ab75cccf1 100644
--- a/gems/json-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
+++ b/gems/json-merge/gemfiles/modular/x_std_libs/vHEAD.gemfile
@@ -2,3 +2,5 @@ eval_gemfile '../erb/vHEAD.gemfile'
eval_gemfile '../mutex_m/vHEAD.gemfile'
eval_gemfile '../stringio/vHEAD.gemfile'
eval_gemfile '../benchmark/vHEAD.gemfile'
+eval_gemfile '../cgi/vHEAD.gemfile'
+eval_gemfile '../webrick/vHEAD.gemfile'
diff --git a/gems/json-merge/lib/json/merge/conflict_resolver.rb b/gems/json-merge/lib/json/merge/conflict_resolver.rb
index 78034f90a..f99658468 100644
--- a/gems/json-merge/lib/json/merge/conflict_resolver.rb
+++ b/gems/json-merge/lib/json/merge/conflict_resolver.rb
@@ -9,6 +9,7 @@ module Merge
# resolver = ConflictResolver.new(template_analysis, dest_analysis)
# resolver.resolve(result)
class ConflictResolver < Ast::Merge::ConflictResolverBase
+ include Ast::Merge::CommentLayoutEmissionSupport
include Ast::Merge::StructuredEmitterProvenanceSupport
class MissingSharedInlineRegionError < Json::Merge::Error; end
@@ -104,7 +105,7 @@ def freeze_node?(node)
# @param dest_nodes [Array] Destination nodes
# @param template_analysis [FileAnalysis] Template analysis for line access
# @param dest_analysis [FileAnalysis] Destination analysis for line access
- def merge_node_lists_to_emitter(template_nodes, dest_nodes, template_analysis, dest_analysis)
+ def merge_node_lists_to_emitter(template_nodes, dest_nodes, template_analysis, dest_analysis, dest_owners: nil)
# Build signature maps for matching
template_by_sig = build_signature_map(template_nodes, template_analysis)
dest_by_sig = build_signature_map(dest_nodes, dest_analysis)
@@ -171,7 +172,8 @@ def merge_node_lists_to_emitter(template_nodes, dest_nodes, template_analysis, d
template_node = template_info[:node]
# Both have this node - merge them (recursively if containers)
- merge_matched_nodes_to_emitter(template_node, dest_node, template_analysis, dest_analysis)
+ merge_matched_nodes_to_emitter(template_node, dest_node, template_analysis, dest_analysis,
+ dest_owners: dest_nodes)
consumed_template_indices << template_info[:index]
sig_cursor[dest_sig] = cursor + 1
@@ -195,7 +197,8 @@ def merge_node_lists_to_emitter(template_nodes, dest_nodes, template_analysis, d
end
# Merge matched nodes
- merge_matched_nodes_to_emitter(template_node, dest_node, template_analysis, dest_analysis)
+ merge_matched_nodes_to_emitter(template_node, dest_node, template_analysis, dest_analysis,
+ dest_owners: dest_nodes)
elsif @remove_template_missing_nodes
emit_removed_destination_node_comments(dest_node, dest_analysis)
else
@@ -236,7 +239,11 @@ def trailing_group_node_matched?(node, _signature)
# @param dest_node [NodeWrapper] Destination node
# @param template_analysis [FileAnalysis] Template analysis
# @param dest_analysis [FileAnalysis] Destination analysis
- def merge_matched_nodes_to_emitter(template_node, dest_node, template_analysis, dest_analysis)
+ def merge_matched_nodes_to_emitter(template_node, dest_node, template_analysis, dest_analysis, dest_owners: nil)
+ if preference_for_pair(template_node, dest_node) == :template
+ emit_retained_gap_before_matched_template_node(dest_node, dest_analysis, owners: dest_owners)
+ end
+
if dest_node.container? && template_node.container?
# Both are containers - recursively merge their children
merge_container_to_emitter(template_node, dest_node, template_analysis, dest_analysis)
@@ -298,7 +305,8 @@ def merge_matched_nodes_to_emitter(template_node, dest_node, template_analysis,
template_value.mergeable_children,
dest_value.mergeable_children,
template_analysis,
- dest_analysis
+ dest_analysis,
+ dest_owners: dest_value.mergeable_children
)
emit_container_trailing_lines(trailing_source_node, trailing_source_analysis)
@@ -355,6 +363,15 @@ def merge_matched_nodes_to_emitter(template_node, dest_node, template_analysis,
end
end
+ def emit_retained_gap_before_matched_template_node(dest_node, dest_analysis, owners: nil)
+ gap_lines = retained_owner_leading_gap_lines_for(dest_node, dest_analysis, owners: owners)
+ return if gap_lines.empty?
+ return if @emitter.blank_lines?(gap_lines) && @emitter.ends_with_blank_line?
+
+ gap = retained_owner_leading_gap_for(dest_node, dest_analysis, owners: owners)
+ @emitter.emit_raw_lines(gap_lines, metadata: emitter_block_metadata(dest_analysis, gap.start_line))
+ end
+
# Merge container nodes by emitting via emitter
# @param template_node [NodeWrapper] Template container node
# @param dest_node [NodeWrapper] Destination container node
diff --git a/gems/json-merge/lib/json/merge/file_analysis.rb b/gems/json-merge/lib/json/merge/file_analysis.rb
index 81cad85b6..0156c4083 100644
--- a/gems/json-merge/lib/json/merge/file_analysis.rb
+++ b/gems/json-merge/lib/json/merge/file_analysis.rb
@@ -200,13 +200,8 @@ def root_merge_node
end
def parse_json
- # TreeHaver handles backend selection against the grammar Json::Merge
- # has already registered during bootstrap.
- parser = if @parser_path
- TreeHaver.parser_for(:json, library_path: @parser_path)
- else
- TreeHaver.parser_for(:json)
- end
+ Json::Merge.register_backend!
+ parser = TreeHaver.parser_for(:json, backend_type: :tree_sitter)
@ast = parser.parse(@source)
diff --git a/gems/json-merge/spec/fixtures_integration_spec.rb b/gems/json-merge/spec/fixtures_integration_spec.rb
index f17bce414..768fb98e5 100644
--- a/gems/json-merge/spec/fixtures_integration_spec.rb
+++ b/gems/json-merge/spec/fixtures_integration_spec.rb
@@ -87,24 +87,23 @@ def json_ready(value)
expect(string_result[:ok]).to be(true)
end
- it 'fails closed for JSONC analysis when no TreeHaver JSON backend is available' do
+ it 'self-registers the JSON backend for direct file analysis' do
source = <<~JSON
{
- // devcontainer files commonly use JSONC comments.
"name": "Ruby",
"customizations": {
"jetbrains": {
"backend": "RubyMine"
}
- },
+ }
}
JSON
analysis = described_class::FileAnalysis.new(source)
- expect(analysis).not_to be_valid
- expect(analysis.root_object).to be_nil
- expect(analysis.errors).not_to be_empty
+ expect(analysis).to be_valid
+ expect(analysis.root_object).not_to be_nil
+ expect(analysis.errors).to be_empty
end
it 'conforms to the structure fixtures' do
diff --git a/gems/json-merge/spec/retained_blank_gap_spec.rb b/gems/json-merge/spec/retained_blank_gap_spec.rb
new file mode 100644
index 000000000..bb0a6dbd7
--- /dev/null
+++ b/gems/json-merge/spec/retained_blank_gap_spec.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require 'json/merge'
+
+RSpec.describe Json::Merge::SmartMerger, :json_grammar do
+ it 'preserves destination blank gaps between retained matched pairs under template preference' do
+ template = <<~JSON
+ {
+ "alpha": "1",
+ "beta": "2"
+ }
+ JSON
+ destination = <<~JSON
+ {
+ "alpha": "9",
+
+ "beta": "8"
+ }
+ JSON
+ expected = <<~JSON
+ {
+ "alpha": "1",
+
+ "beta": "2"
+ }
+ JSON
+
+ expect(described_class.new(template, destination, preference: :template).merge).to eq(expected)
+ end
+
+ it 'preserves destination blank gaps between retained matched nested pairs under template preference' do
+ template = <<~JSON
+ {
+ "app": {
+ "alpha": "1",
+ "beta": "2"
+ }
+ }
+ JSON
+ destination = <<~JSON
+ {
+ "app": {
+ "alpha": "9",
+
+ "beta": "8"
+ }
+ }
+ JSON
+ expected = <<~JSON
+ {
+ "app": {
+ "alpha": "1",
+
+ "beta": "2"
+ }
+ }
+ JSON
+
+ expect(described_class.new(template, destination, preference: :template).merge).to eq(expected)
+ end
+end
diff --git a/gems/json-merge/spec/spec_helper.rb b/gems/json-merge/spec/spec_helper.rb
index b1c9d9c49..127a823f4 100644
--- a/gems/json-merge/spec/spec_helper.rb
+++ b/gems/json-merge/spec/spec_helper.rb
@@ -8,7 +8,12 @@
# The rescue LoadError handles that scenario.
begin
require 'kettle-soup-cover'
- require 'simplecov' if Kettle::Soup::Cover::DO_COV # `.simplecov` is run here!
+ if Kettle::Soup::Cover::DO_COV
+ # Requiring simplecov loads the project-local `.simplecov`.
+ require 'simplecov'
+ require 'kettle/soup/cover/config'
+ SimpleCov.start
+ end
rescue LoadError => e
# check the error message and re-raise when unexpected
raise e unless e.message.include?('kettle')
diff --git a/gems/kettle-jem/.github/workflows/ci.yml b/gems/kettle-jem/.github/workflows/ci.yml
index 2d12ab169..540e43d0e 100644
--- a/gems/kettle-jem/.github/workflows/ci.yml
+++ b/gems/kettle-jem/.github/workflows/ci.yml
@@ -37,10 +37,10 @@ jobs:
steps:
- name: Checkout kettle-jem
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup Ruby & RubyGems
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: "${{ matrix.ruby }}"
rubygems: "${{ matrix.rubygems }}"
diff --git a/gems/kettle-jem/.github/workflows/coverage.yml b/gems/kettle-jem/.github/workflows/coverage.yml
index e974040b9..da8a4281a 100644
--- a/gems/kettle-jem/.github/workflows/coverage.yml
+++ b/gems/kettle-jem/.github/workflows/coverage.yml
@@ -54,12 +54,12 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: "${{ matrix.ruby }}"
rubygems: "${{ matrix.rubygems }}"
diff --git a/gems/kettle-jem/.github/workflows/current.yml b/gems/kettle-jem/.github/workflows/current.yml
index ff24160f1..9e5ea8691 100644
--- a/gems/kettle-jem/.github/workflows/current.yml
+++ b/gems/kettle-jem/.github/workflows/current.yml
@@ -45,12 +45,12 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
diff --git a/gems/kettle-jem/.github/workflows/dep-heads.yml b/gems/kettle-jem/.github/workflows/dep-heads.yml
index d632a147a..e562781bf 100644
--- a/gems/kettle-jem/.github/workflows/dep-heads.yml
+++ b/gems/kettle-jem/.github/workflows/dep-heads.yml
@@ -1,5 +1,4 @@
-# Targets the evergreen latest release of ruby, truffleruby, and jruby
-# and tests against the HEAD of runtime dependencies
+# Targets enabled evergreen Ruby engines and tests against the HEAD of runtime dependencies
name: Runtime Deps @ HEAD
permissions:
@@ -43,39 +42,32 @@ jobs:
- ruby: "ruby"
appraisal: "dep-heads"
exec_cmd: "kettle-test"
+ # Run directly from the generated appraisal Gemfile so setup-ruby
+ # does not bootstrap Appraisal.root.gemfile against dependency
+ # sources before this dep-heads appraisal is selected.
+ # This makes gemfiles/dep_heads.gemfile required checked-in output
+ # for repositories using this generated workflow.
+ bundle_gemfile: "gemfiles/dep_heads.gemfile"
+ direct_bundle: true
rubygems: latest
bundler: latest
steps:
- name: Checkout
if: ${{ !env.ACT }}
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
if: ${{ !env.ACT }}
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
bundler: ${{ matrix.bundler }}
bundler-cache: true
- - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
- id: bundleAppraisalAttempt1
- if: ${{ !env.ACT }}
- run: bundle exec appraisal ${{ matrix.appraisal }} install
- # Continue to the next step on failure
- continue-on-error: true
-
- # Effectively an automatic retry of the previous step.
- - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
- id: bundleAppraisalAttempt2
- # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip.
- if: ${{ !env.ACT && steps.bundleAppraisalAttempt1.outcome == 'failure' }}
- run: bundle exec appraisal ${{ matrix.appraisal }} install
-
- name: Restore RSpec status log
if: "${{!env.ACT}}"
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
@@ -86,9 +78,9 @@ jobs:
rspec-status-dep-heads-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
rspec-status-dep-heads-${{matrix.ruby}}-${{matrix.appraisal}}-
- - name: Tests for ${{ matrix.ruby }} via Appraisal and ${{ matrix.exec_cmd }}
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
if: ${{ !env.ACT }}
- run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
+ run: bundle exec ${{ matrix.exec_cmd }}
truffleruby:
if: "(github.event_name != 'push' || (!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]'))) && (github.event_name != 'pull_request' || startsWith(github.head_ref, 'engines/') || startsWith(github.head_ref, 'truffleruby/'))"
@@ -104,6 +96,11 @@ jobs:
- ruby: "truffleruby"
appraisal: "dep-heads"
exec_cmd: "kettle-test"
+ # Run directly from the generated appraisal Gemfile so setup-ruby
+ # does not bootstrap Appraisal.root.gemfile against dependency
+ # sources before this dep-heads appraisal is selected.
+ # This makes gemfiles/dep_heads.gemfile required checked-in output
+ # for repositories using this generated workflow.
bundle_gemfile: "gemfiles/dep_heads.gemfile"
direct_bundle: true
rubygems: default
@@ -112,13 +109,13 @@ jobs:
steps:
- name: Checkout
if: ${{ !env.ACT }}
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
if: ${{ !env.ACT }}
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
@@ -145,7 +142,7 @@ jobs:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental || endsWith(matrix.ruby, 'head') }}
env:
- BUNDLE_GEMFILE: ${{ github.workspace }}/Appraisal.root.gemfile
+ BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.bundle_gemfile || 'Appraisal.root.gemfile' }}
strategy:
fail-fast: true
matrix:
@@ -153,6 +150,13 @@ jobs:
- ruby: "jruby"
appraisal: "dep-heads"
exec_cmd: "kettle-test"
+ # Run directly from the generated appraisal Gemfile so setup-ruby
+ # does not bootstrap Appraisal.root.gemfile against dependency
+ # sources before this dep-heads appraisal is selected.
+ # This makes gemfiles/dep_heads.gemfile required checked-in output
+ # for repositories using this generated workflow.
+ bundle_gemfile: "gemfiles/dep_heads.gemfile"
+ direct_bundle: true
rubygems: default
bundler: default
experimental: true
@@ -160,30 +164,19 @@ jobs:
steps:
- name: Checkout
if: ${{ !env.ACT }}
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
if: ${{ !env.ACT }}
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
bundler: ${{ matrix.bundler }}
bundler-cache: true
- - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
- id: bundleAppraisalAttempt1
- if: ${{ !env.ACT }}
- run: bundle exec appraisal ${{ matrix.appraisal }} install
- continue-on-error: true
-
- - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
- id: bundleAppraisalAttempt2
- if: ${{ !env.ACT && steps.bundleAppraisalAttempt1.outcome == 'failure' }}
- run: bundle exec appraisal ${{ matrix.appraisal }} install
-
- name: Restore RSpec status log
if: "${{!env.ACT}}"
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
@@ -194,6 +187,6 @@ jobs:
rspec-status-dep-heads-${{matrix.ruby}}-${{matrix.appraisal}}-${{hashFiles('**/Gemfile.lock','Appraisal.root.gemfile','gemfiles/**/*.gemfile')}}-
rspec-status-dep-heads-${{matrix.ruby}}-${{matrix.appraisal}}-
- - name: Tests for ${{ matrix.ruby }} via Appraisal and ${{ matrix.exec_cmd }}
+ - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
if: ${{ !env.ACT }}
- run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
+ run: bundle exec ${{ matrix.exec_cmd }}
diff --git a/gems/kettle-jem/.github/workflows/dependency-review.yml b/gems/kettle-jem/.github/workflows/dependency-review.yml
index ee085b6ff..0316e06bd 100644
--- a/gems/kettle-jem/.github/workflows/dependency-review.yml
+++ b/gems/kettle-jem/.github/workflows/dependency-review.yml
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: 'Dependency Review'
diff --git a/gems/kettle-jem/.github/workflows/heads.yml b/gems/kettle-jem/.github/workflows/heads.yml
index 95b0f24a4..a7b208445 100644
--- a/gems/kettle-jem/.github/workflows/heads.yml
+++ b/gems/kettle-jem/.github/workflows/heads.yml
@@ -48,13 +48,13 @@ jobs:
steps:
- name: Checkout
if: ${{ !env.ACT }}
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
if: ${{ !env.ACT }}
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
@@ -109,13 +109,13 @@ jobs:
steps:
- name: Checkout
if: ${{ !env.ACT }}
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
if: ${{ !env.ACT }}
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
@@ -167,13 +167,13 @@ jobs:
steps:
- name: Checkout
if: ${{ !env.ACT }}
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
if: ${{ !env.ACT }}
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
diff --git a/gems/kettle-jem/.github/workflows/jruby.yml b/gems/kettle-jem/.github/workflows/jruby.yml
index c92a3d1d7..936909741 100644
--- a/gems/kettle-jem/.github/workflows/jruby.yml
+++ b/gems/kettle-jem/.github/workflows/jruby.yml
@@ -47,13 +47,13 @@ jobs:
steps:
- name: Checkout
if: ${{ !env.ACT }}
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
if: ${{ !env.ACT }}
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
diff --git a/gems/kettle-jem/.github/workflows/locked_deps.yml b/gems/kettle-jem/.github/workflows/locked_deps.yml
index 1740ee3d8..6ab882686 100644
--- a/gems/kettle-jem/.github/workflows/locked_deps.yml
+++ b/gems/kettle-jem/.github/workflows/locked_deps.yml
@@ -71,12 +71,12 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
diff --git a/gems/kettle-jem/.github/workflows/opencollective.yml b/gems/kettle-jem/.github/workflows/opencollective.yml
index 8d1fd4753..5b5c3649f 100644
--- a/gems/kettle-jem/.github/workflows/opencollective.yml
+++ b/gems/kettle-jem/.github/workflows/opencollective.yml
@@ -16,11 +16,11 @@ jobs:
README_UPDATER_TOKEN: ${{ secrets.README_UPDATER_TOKEN }}
REPO: ${{ github.repository }}
steps:
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ruby
rubygems: default
diff --git a/gems/kettle-jem/.github/workflows/style.yml b/gems/kettle-jem/.github/workflows/style.yml
index de17a7678..ec079a197 100644
--- a/gems/kettle-jem/.github/workflows/style.yml
+++ b/gems/kettle-jem/.github/workflows/style.yml
@@ -42,12 +42,12 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
diff --git a/gems/kettle-jem/.github/workflows/templating.yml b/gems/kettle-jem/.github/workflows/templating.yml
index e8515054b..56f319ab3 100644
--- a/gems/kettle-jem/.github/workflows/templating.yml
+++ b/gems/kettle-jem/.github/workflows/templating.yml
@@ -46,12 +46,12 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
diff --git a/gems/kettle-jem/.github/workflows/truffle.yml b/gems/kettle-jem/.github/workflows/truffle.yml
index b41ba5a5b..334651f3d 100644
--- a/gems/kettle-jem/.github/workflows/truffle.yml
+++ b/gems/kettle-jem/.github/workflows/truffle.yml
@@ -47,13 +47,13 @@ jobs:
steps:
- name: Checkout
if: ${{ !env.ACT }}
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
if: ${{ !env.ACT }}
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
diff --git a/gems/kettle-jem/.github/workflows/unlocked_deps.yml b/gems/kettle-jem/.github/workflows/unlocked_deps.yml
index 53346f247..5cb3b4b8c 100644
--- a/gems/kettle-jem/.github/workflows/unlocked_deps.yml
+++ b/gems/kettle-jem/.github/workflows/unlocked_deps.yml
@@ -62,12 +62,12 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Ruby & RubyGems
- uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0
+ uses: ruby/setup-ruby@a30dfa457ad68707b8b910ac3a244714b61c0626 # v1.320.0
with:
ruby-version: ${{ matrix.ruby }}
rubygems: ${{ matrix.rubygems }}
diff --git a/gems/kettle-jem/.kettle-drift.lock b/gems/kettle-jem/.kettle-drift.lock
index bc1265c3c..a39b59e0a 100644
--- a/gems/kettle-jem/.kettle-drift.lock
+++ b/gems/kettle-jem/.kettle-drift.lock
@@ -32,9 +32,9 @@
{
"file": ".github/workflows/dep-heads.yml",
"lines": [
- 44,
- 105,
- 154
+ 43,
+ 97,
+ 151
]
}
],
@@ -48,6 +48,16 @@
]
}
],
+ "exec_cmd: \"kettle-test\"\n# Run directly from the generated appraisal Gemfile so setup-ruby": [
+ {
+ "file": ".github/workflows/dep-heads.yml",
+ "lines": [
+ 44,
+ 98,
+ 152
+ ]
+ }
+ ],
"exec_cmd: \"kettle-test\"\nrubygems: default": [
{
"file": ".github/workflows/heads.yml",
diff --git a/gems/kettle-jem/.rubocop_gradual.lock b/gems/kettle-jem/.rubocop_gradual.lock
index 0334d6fb6..2968adb54 100644
--- a/gems/kettle-jem/.rubocop_gradual.lock
+++ b/gems/kettle-jem/.rubocop_gradual.lock
@@ -1,5 +1,13 @@
{
- "kettle-jem.gemspec:1742431759": [
+ "benchmarks/fixtures/skeleton/Gemfile:3218324611": [
+ [8, 1, 9, "Gemspec/DevelopmentDependencies: Specify development dependencies in gemspec.", 1499175571]
+ ],
+ "benchmarks/kettle_jem_ractor_planning.rb:4068228537": [
+ [43, 1, 6, "Style/GlobalStdStream: Use `$stdout` instead of `STDOUT`.", 3356722952],
+ [466, 8, 66, "Style/RedundantFormat: Use `\"step duration share count\"` directly instead of `format`.", 4013676740],
+ [622, 6, 309, "Style/RedundantFormat: Use `\"variant +/- min median mean max recipes cmds pr pt fr ft safe f_units pr_job pt_job fr_job ft_job recipes changed\"` directly instead of `format`.", 3979716419]
+ ],
+ "kettle-jem.gemspec:2340002234": [
[19, 32, 10, "Gemspec/RequiredRubyVersion: `required_ruby_version` and `TargetRubyVersion` (3.2, which may be specified in .rubocop.yml) should be equal.", 3888670706],
[90, 3, 70, "Gemspec/DependencyVersion: Dependency version specification is required.", 4023754366],
[91, 3, 65, "Gemspec/DependencyVersion: Dependency version specification is required.", 1638532368],
@@ -19,5 +27,65 @@
[109, 3, 54, "Gemspec/DependencyVersion: Dependency version specification is required.", 527713396],
[111, 3, 54, "Gemspec/DependencyVersion: Dependency version specification is required.", 3116501450],
[112, 3, 54, "Gemspec/DependencyVersion: Dependency version specification is required.", 2771890615]
+ ],
+ "lib/kettle/jem.rb:1835077538": [
+ [3877, 9, 10, "ThreadSafety/NewThread: Avoid starting new threads.", 3411682361],
+ [4278, 9, 32, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 2221659486],
+ [10943, 9, 10, "ThreadSafety/NewThread: Avoid starting new threads.", 3411682361]
+ ],
+ "lib/kettle/jem/tasks/install_task.rb:2120658194": [
+ [1099, 47, 29, "Style/SafeNavigation: Use safe navigation (`&.`) instead of checking if an object exists before calling the method.", 964126728]
+ ],
+ "spec/e2e/rubygems_thin_vertical_slice_spec.rb:3402585310": [
+ [3, 1, 58, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*RubyGems_thin_vertical_slice*_spec.rb`.", 3968596449],
+ [3, 29, 30, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 3589370396]
+ ],
+ "spec/integration/appraisal_helper_and_token_spec.rb:3707928361": [
+ [3, 1, 67, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*appraisal_helpers_and_template_tokens*_spec.rb`.", 1438226331],
+ [3, 29, 39, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 1357968070]
+ ],
+ "spec/integration/appraisals_and_gemfile_template_spec.rb:1317014732": [
+ [3, 1, 63, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*Appraisals_and_Gemfile_templating*_spec.rb`.", 2367084249],
+ [3, 29, 35, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 1539510212]
+ ],
+ "spec/integration/config_metadata_template_spec.rb:3410327496": [
+ [3, 1, 67, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*configuration_and_metadata_templating*_spec.rb`.", 3610099387],
+ [3, 29, 39, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 1907259302]
+ ],
+ "spec/integration/coverage_template_spec.rb:3265006228": [
+ [3, 1, 66, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*coverage_bootstrap_template_behavior*_spec.rb`.", 823415992],
+ [3, 29, 38, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 151296325]
+ ],
+ "spec/integration/gemspec_template_spec.rb:3136728880": [
+ [3, 1, 48, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*gemspec_templating*_spec.rb`.", 30263623],
+ [3, 29, 20, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 2014438586]
+ ],
+ "spec/integration/github_workflow_template_spec.rb:3021876464": [
+ [3, 1, 56, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*GitHub_workflow_templating*_spec.rb`.", 446190427],
+ [3, 29, 28, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 855400678]
+ ],
+ "spec/integration/readme_changelog_template_spec.rb:3264156297": [
+ [3, 1, 61, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*README_and_changelog_templating*_spec.rb`.", 997155358],
+ [3, 29, 33, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 3993812611]
+ ],
+ "spec/integration/recipe_planning_spec.rb:1254848899": [
+ [3, 1, 71, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*recipe_planning_and_writeintent_behavior*_spec.rb`.", 2828860406],
+ [3, 29, 43, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 2383456363]
+ ],
+ "spec/integration/shim_profile_spec.rb:3401820158": [
+ [3, 1, 53, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*shim_profile_templating*_spec.rb`.", 837334745],
+ [3, 29, 25, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 2022445956]
+ ],
+ "spec/integration/structural_merge_template_spec.rb:2021995953": [
+ [3, 1, 64, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*structural_merge_template_behavior*_spec.rb`.", 1693815617],
+ [3, 29, 36, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 3903270460]
+ ],
+ "spec/integration/template_bootstrap_spec.rb:539081283": [
+ [3, 1, 71, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*template_selection_and_bootstrap_behavior*_spec.rb`.", 2832878461],
+ [3, 29, 43, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 1664161888]
+ ],
+ "spec/system/install_orchestration_spec.rb:352463012": [
+ [3, 1, 70, "RSpec/SpecFilePathFormat: Spec path should end with `kettle/jem*install_and_local_orchestration_behavior*_spec.rb`.", 1687390280],
+ [3, 29, 42, "RSpec/DescribeMethod: The second argument to describe should be the method being tested. '#instance' or '.class'.", 2090400053]
]
}
diff --git a/gems/kettle-jem/CHANGELOG.md b/gems/kettle-jem/CHANGELOG.md
index d92efeab4..c23652df7 100644
--- a/gems/kettle-jem/CHANGELOG.md
+++ b/gems/kettle-jem/CHANGELOG.md
@@ -20,10 +20,43 @@ Please file a bug if you notice a violation of semantic versioning.
### Added
+- Templating plan reports now include per-recipe duration metadata, template
+ planning deduplicates destination and template-source file reads, and runtime
+ loading is reduced to explicit main-Ractor extension points. A disabled
+ classified planning strategy now identifies worker-safe recipes, can opt into
+ experimental Ractor workers with `KETTLE_JEM_RACTOR_WORKERS`, records
+ execution counters, and preserves sequential report parity in preparation for
+ Ractor-based recipe planning.
+- Added a `benchmarks/` harness that templates a reset Bundler gem skeleton and
+ compares classified planning and phase-gated file work with and without
+ opt-in Ractor workers. The harness now defaults `KJ_MIN_RUBY` to `1.8.7` so
+ benchmark runs exercise legacy workflow and gemfile generation through the
+ supported one-shot `template --accept-config` flow, prints progress while
+ long benchmark matrices run, records planning and file-worker execution
+ counters for both Ractors and threads, and records the latest benchmark
+ outcome in a committed results README.
+- Apply now routes recipe report mutations through explicit write intents and
+ phase-gated per-file work units, preparing the file-processing path for
+ opt-in `KETTLE_JEM_RACTOR_FILE_WORKERS` execution without changing phase gates
+ or final filesystem outcomes.
+- The former monolithic thin-slice spec has been split into behavior-named
+ integration, system, and end-to-end specs so the project test harness can
+ parallelize templating coverage more effectively.
+- Generated README Support & Community rows now include a RubyForum help badge.
+- Generated READMEs can now render template-managed corporate sponsor logos
+ from `readme.corporate_sponsors` config or family-provided sponsorship data.
+- `kettle-jem` now supports `--events` for newline-delimited JSON progress
+ events, including named event type filters via comma-separated
+ `--events=TYPE,...` values, phase events, per-recipe template progress,
+ post-apply and command-step events, diagnostics, and summary events for family
+ orchestration consumers.
- Generated CI workflow templates now cache `.rspec_status` with explicit
per-workflow keys so `kettle-test` / `turbo_tests2` can reuse timing data
across MRI, JRuby, TruffleRuby, coverage, heads, dep-heads, and framework
matrix runs.
+- Generated dep-heads workflows now document why every engine job runs directly
+ from `gemfiles/dep_heads.gemfile`, making that generated Appraisal file
+ required checked-in output for the workflow.
- JRuby 9.2 workflow templates now use the legacy-engine bundle install path
instead of `ruby/setup-ruby` bundler caching so old Bundler does not fail
setup against gem servers without the full legacy index.
@@ -31,6 +64,9 @@ Please file a bug if you notice a violation of semantic versioning.
collection entries with template package entries so project-specific
packaged files are not lost when the template rewrites the generated gemspec
structure.
+- Main Gemfile templating now removes repeated direct sibling execution blocks
+ left behind by older `nomono` bootstrap output when applying the simplified
+ `require "nomono/bundler"` loader.
- Gemspec templating now restores additional legacy Prism policy behavior for
destination-only metadata fields, Bundler `git ls-files` package declarations,
and empty development-dependency section cleanup after runtime dependency
@@ -38,8 +74,9 @@ Please file a bug if you notice a violation of semantic versioning.
- Added the repo-local `bin/kettle-jem-workflow-pins` maintenance script to
update the GitHub Actions SHA pin index used by generated workflow templates
via `kettle-gha-sha-pins`.
-- Generated local Gemfile templates now document why `nomono` is explicitly
- activated before requiring `nomono/bundler`.
+- Generated local Gemfile templates now use a simple `require "nomono/bundler"`
+ loader, with a provider-relative loader for `nomono` itself, instead of
+ emitting runtime lockfile parsing or explicit gem activation ceremony.
- Added the repo-local `bin/kettle-jem-deps-floor` maintenance script to scan
dependency-bearing kettle-jem templates and update their dependency floors.
- `kettle-jem install` now generates a curated `bin/appraisal` binstub for the
@@ -69,6 +106,33 @@ Please file a bug if you notice a violation of semantic versioning.
### Changed
+- Templating now reuses static, shareable regexes and small lookup lists in the
+ recipe dispatch and template-policy paths instead of reallocating them during
+ each recipe execution.
+- Opt-in recipe-planning Ractor mode now batches worker-safe recipes across a
+ bounded chunked worker pool instead of spawning one Ractor per recipe, and it
+ keeps parser/merge paths with known unshareable dependency state on the main
+ Ractor.
+- Templating can now opt into thread-backed recipe planning and file work with
+ `KETTLE_JEM_THREAD_WORKERS` and `KETTLE_JEM_THREAD_FILE_WORKERS`, providing a
+ benchmarkable alternative to main-thread and Ractor execution.
+- Templating now supports benchmark-oriented skip controls for external
+ post-template work: `--skip-drift-check`, `--skip-rubocop-gradual`, and
+ `--skip-binstubs`, with matching `KETTLE_JEM_SKIP_*` environment variables.
+- Templating reports now persist phase duration metadata, install command steps
+ record elapsed duration, and benchmark summaries show recipe-phase time apart
+ from external command time.
+- The benchmark harness now supports `KETTLE_JEM_BENCHMARK_MODE=raw-template`
+ to compare scoped raw `TemplateTask` runs separately from the default
+ install-orchestrated one-shot template flow.
+- The benchmark harness now defaults worker counts to `1,min(4,n/2),min(8,n/2),n`
+ instead of only `min(2,n)`, giving higher-core machines a useful default
+ scaling matrix while keeping low-core hosts bounded.
+- Benchmark summaries now show each variant's median percentage delta against
+ `baseline-main` immediately after the variant name.
+- README recipe reports now include sub-step timing metadata, and benchmark
+ results summarize the baseline README timing breakdown.
+
- Generated gemspec templates now require `kettle-dev` >= 2.3.7.
- kettle-jem now requires `kettle-rb` >= 0.1.4.
- Refreshed generated GitHub Actions workflow pins for `ruby/setup-ruby` and
@@ -152,12 +216,67 @@ Please file a bug if you notice a violation of semantic versioning.
- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
repository-only files by default to reduce downstream distro packaging churn.
+- kettle-jem-template-20260720-001 - Generated READMEs can now render
+ template-managed corporate sponsor logos from project or family config.
+- kettle-jem-template-20260720-002 - Generated development Gemfiles now use the
+ released `tree_sitter_language_pack` gem 1.13.3 or newer by default.
+- kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
+ config now uses the installed `smorg-rb` Ruby driver name.
+- kettle-jem-template-20260720-004 - Generated multi-engine workflow files now
+ omit JRuby and TruffleRuby jobs when project config declares MRI-only engines.
+- kettle-jem-template-20260720-005 - Generated README Support & Community rows
+ now include a RubyForum help badge.
+
### Deprecated
### Removed
### Fixed
+- Generated license summaries now link split license detail files to the
+ repository `blob/main` copy instead of packaging-relative files that are
+ intentionally excluded from gem manifests.
+- Generated root Gemfiles no longer duplicate the
+ `tree_sitter_language_pack` declaration that belongs to the templating
+ modular Gemfile.
+- Generated README source badges now use GitHub's canonical capitalization.
+- Generated nomono local Gemfiles now use the normal `require "nomono/bundler"`
+ loader instead of a nomono-specific `require_relative` path.
+- Install orchestration now bundles each distinct Bundler environment it will
+ execute under, and probes RuboCop Gradual tasks with the same environment used
+ for the eventual command.
+- Bundler child commands now strip inherited command-line Git configuration, so
+ parent `safe.bareRepository=explicit` settings do not break Bundler Git source
+ caches during templating.
+- Generated semantic diff Git driver configuration now consistently uses the
+ installed `smorg-rb` executable and Git diff driver name for Ruby diffs.
+- Generated multi-engine workflow files, including `heads.yml` and
+ `dep-heads.yml`, now omit JRuby and TruffleRuby jobs when the project config
+ declares an MRI-only `engines` list.
+- `kettle-jem`'s generated development Gemfiles now depend on released
+ `tree_sitter_language_pack` 1.13.2 or newer by default, while still
+ allowing templating runs to switch to a local source with
+ `VENDORED_GEMS=tree_sitter_language_pack` / `VENDOR_GEM_DIR`.
+- Gemspec templating now deletes empty generated development-dependency comment
+ sections through Prism-backed CRISPR structural edits, preventing blank-line
+ churn before the closing `Gem::Specification` `end`.
+- Fixed the `kettle-jem` package manifest so runtime template assets are
+ included even when the gemspec is loaded from the monorepo root.
+- Generated local templating Gemfiles can now route
+ `tree_sitter_language_pack` through nomono's `VENDORED_GEMS` /
+ `VENDOR_GEM_DIR` support instead of using a one-off inferred local path.
+
+- Templating setup now respects explicit `STRUCTUREDMERGE_DEV=false` and
+ `KETTLE_DEV_DEV=false` values when reading the kettle-family local install
+ marker, preventing prepare-mode bundle updates from re-enabling stale local
+ Gemfile wiring.
+- Generated root Gemfiles no longer add a separate `gem "nomono"` bootstrap
+ line when templating the `nomono` gem itself, avoiding duplicate dependency
+ declarations against the package gemspec.
+- `kettle-jem prepare` no longer explicitly asks Bundler to update parser gems
+ before they exist in a member lockfile, allowing cold-start templating
+ bootstraps to introduce vendored parser path dependencies during
+ `bundle install`.
- Workflow template pin maintenance now compares and updates complete pinned
action strings in source files, so `bin/kettle-jem-workflow-pins --check`
fails when template files drift from `github_actions_step_pins` even if the
@@ -171,9 +290,10 @@ Please file a bug if you notice a violation of semantic versioning.
`sig//**/*.rbs` content into the package-level signature and
removes the nested files, including when the package-level signature is
managed by a template entry.
-- Generated dep-heads workflows now run current TruffleRuby directly from the
+- Generated dep-heads workflows now run every engine job directly from the
generated `gemfiles/dep_heads.gemfile`, avoiding `Appraisal.root.gemfile`
- bootstrap failures with TruffleRuby's bundled RubyGems/Bundler and gem.coop.
+ bootstrap failures with RubyGems/Bundler and gem.coop before the dep-heads
+ appraisal is selected.
- Packaged Rakefile templating now merges destination Rakefiles by default
instead of replacing them wholesale, preserving project-specific rake tasks
such as release or adapter test helpers.
@@ -793,7 +913,7 @@ Please file a bug if you notice a violation of semantic versioning.
`kettle-drift` binstubs when they already exist from local/plugin installs
without requiring unreleased `kettle-drift` in every generated gemspec.
- Added `kettle-drift` to generated templating Gemfiles, resolved remotely in
- templating mode and via `KETTLE_RB_DEV` locally, separate from the
+ templating mode and via `KETTLE_DEV_DEV` locally, separate from the
`STRUCTUREDMERGE_DEV` StructuredMerge local gem set.
- Refreshed generated README metadata blocks after template README merging so
version-derived gemspec metadata such as `source_code_uri` does not stay stale.
diff --git a/gems/kettle-jem/Gemfile b/gems/kettle-jem/Gemfile
index c7b6554af..494373787 100644
--- a/gems/kettle-jem/Gemfile
+++ b/gems/kettle-jem/Gemfile
@@ -53,25 +53,9 @@ if direct_sibling_gems.any? &&
ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero?)
direct_sibling_dev_was_set = ENV.key?("STRUCTUREDMERGE_DEV")
direct_sibling_dev_original = ENV.fetch("STRUCTUREDMERGE_DEV", nil)
+ require "nomono/bundler"
begin
- nomono_activation_requirements = nomono_requirements
- nomono_lockfile = File.expand_path("Gemfile.lock", __dir__)
- if File.file?(nomono_lockfile)
- nomono_locked_spec = Bundler::LockfileParser
- .new(Bundler.read_file(nomono_lockfile))
- .specs
- .find { |spec| spec.name == "nomono" }
- nomono_locked = nomono_locked_spec &&
- Gem::Requirement.new(nomono_requirements).satisfied_by?(nomono_locked_spec.version)
- if nomono_locked
- nomono_activation_requirements = ["= #{nomono_locked_spec.version}"]
- end
- end
- Kernel.send(:gem, "nomono", *nomono_activation_requirements)
- require "nomono/bundler"
- if direct_sibling_templating && !direct_sibling_local
- ENV["STRUCTUREDMERGE_DEV"] = File.expand_path("..", __dir__)
- end
+ ENV["STRUCTUREDMERGE_DEV"] = File.expand_path("..", __dir__) if direct_sibling_templating && !direct_sibling_local
eval_nomono_gems(
gems: direct_sibling_gems,
@@ -79,8 +63,6 @@ if direct_sibling_gems.any? &&
path_env: "STRUCTUREDMERGE_DEV",
root: ["src", "my", "structuredmerge"]
)
- rescue LoadError
- warn "Install nomono to enable STRUCTUREDMERGE_DEV local sibling-gem dependencies."
ensure
if direct_sibling_templating && !direct_sibling_local
if direct_sibling_dev_was_set
@@ -98,7 +80,7 @@ eval_gemfile "gemfiles/modular/templating.gemfile" if ENV.fetch("K_JEM_TEMPLATIN
# Debugging
eval_gemfile "gemfiles/modular/debug.gemfile"
-# Code Coverage (env-switched: KETTLE_RB_DEV=true for local paths)
+# Code Coverage (env-switched: KETTLE_DEV_DEV=true for local paths)
eval_gemfile "gemfiles/modular/coverage.gemfile"
# Linting
diff --git a/gems/kettle-jem/Gemfile.lock b/gems/kettle-jem/Gemfile.lock
index bd7918522..4db943597 100644
--- a/gems/kettle-jem/Gemfile.lock
+++ b/gems/kettle-jem/Gemfile.lock
@@ -27,267 +27,43 @@ PATH
tree_haver (= 7.1.0)
yaml-merge (= 7.1.0)
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-markdown-markly
+GEM
+ remote: https://gem.coop/
specs:
+ addressable (2.9.0)
+ public_suffix (>= 2.0.2, < 8.0)
+ ansi (1.6.0)
+ appraisal2 (3.2.0)
+ bundler (>= 1.17.3)
+ rake (>= 10)
+ thor (>= 0.14)
+ appraisal2-rubocop (1.0.0)
+ appraisal2 (>= 3.1.4)
+ rubocop (>= 1.0)
+ version_gem (~> 1.1, >= 1.1.14)
+ ast (2.4.3)
+ ast-crispr (7.1.0)
+ ast-merge (= 7.1.0)
+ service_actor (~> 3.9)
+ version_gem (~> 1.1, >= 1.1.9)
ast-crispr-markdown-markly (7.1.0)
ast-crispr (= 7.1.0)
markly-merge (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr-ruby-prism
- specs:
ast-crispr-ruby-prism (7.1.0)
ast-crispr (= 7.1.0)
prism-merge (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-crispr
- specs:
- ast-crispr (7.1.0)
- ast-merge (= 7.1.0)
- service_actor (~> 3.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge-git
- specs:
- ast-merge-git (7.1.0)
- ast-merge (= 7.1.0)
- json-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-merge
- specs:
ast-merge (7.1.0)
benchmark
token-resolver (~> 2.0, >= 2.0.4)
tree_haver (= 7.1.0)
version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ast-template
- specs:
- ast-template (7.1.0)
- ast-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/bash-merge
- specs:
+ backports (3.25.3)
bash-merge (7.1.0)
ast-merge (= 7.1.0)
tree_haver (= 7.1.0)
version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/binary-merge
- specs:
- binary-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/citrus-toml-merge
- specs:
- citrus-toml-merge (7.1.0)
- toml-merge (= 7.1.0)
- toml-rb (~> 4.1)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/commonmarker-merge
- specs:
- commonmarker-merge (7.1.0)
- commonmarker (~> 2.2)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/dotenv-merge
- specs:
- dotenv-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/go-merge
- specs:
- go-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/json-merge
- specs:
- json-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/kramdown-merge
- specs:
- kramdown-merge (7.1.0)
- kramdown (~> 2.5)
- markdown-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markdown-merge
- specs:
- markdown-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/markly-merge
- specs:
- markly-merge (7.1.0)
- markdown-merge (= 7.1.0)
- markly (~> 0.9)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/parslet-toml-merge
- specs:
- parslet-toml-merge (7.1.0)
- toml (~> 0.3)
- toml-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/plain-merge
- specs:
- plain-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/prism-merge
- specs:
- prism-merge (7.1.0)
- prism (~> 1.6)
- ruby-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/psych-merge
- specs:
- psych-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
- yaml-merge (= 7.1.0)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rbs-merge
- specs:
- rbs-merge (7.1.0)
- ast-merge (= 7.1.0)
- rbs (>= 3.10)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.14)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/ruby-merge
- specs:
- ruby-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/rust-merge
- specs:
- rust-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/smorg-rb
- specs:
- smorg-rb (7.1.0)
- ast-merge (= 7.1.0)
- ast-merge-git (= 7.1.0)
- go-merge (= 7.1.0)
- json-merge (= 7.1.0)
- kettle-jem (= 7.1.0)
- markly-merge (= 7.1.0)
- plain-merge (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/toml-merge
- specs:
- toml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/tree_haver
- specs:
- tree_haver (7.1.0)
- citrus (~> 3.0)
- parslet (~> 2.0)
- tree_sitter_language_pack (>= 1.9.0.pre.rc.40, < 2.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/typescript-merge
- specs:
- typescript-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/yaml-merge
- specs:
- yaml-merge (7.1.0)
- ast-merge (= 7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /home/pboling/src/my/structuredmerge/ruby/gems/zip-merge
- specs:
- zip-merge (7.1.0)
- tree_haver (= 7.1.0)
- version_gem (~> 1.1, >= 1.1.9)
-
-PATH
- remote: /var/home/pboling/src/my/structuredmerge/vendor/tree-sitter-language-pack/packages/ruby
- specs:
- tree_sitter_language_pack (1.12.5)
- rb_sys (>= 0.9, < 0.9.128)
- sorbet-runtime (~> 0.5)
-
-GEM
- remote: https://gem.coop/
- specs:
- addressable (2.9.0)
- public_suffix (>= 2.0.2, < 8.0)
- ansi (1.6.0)
- appraisal2 (3.2.0)
- bundler (>= 1.17.3)
- rake (>= 10)
- thor (>= 0.14)
- appraisal2-rubocop (1.0.0)
- appraisal2 (>= 3.1.4)
- rubocop (>= 1.0)
- version_gem (~> 1.1, >= 1.1.14)
- ast (2.4.3)
- backports (3.25.3)
benchmark (0.5.0)
bigdecimal (4.1.2)
bundler-audit (0.9.3)
@@ -295,9 +71,17 @@ GEM
thor (~> 1.0)
cgi (0.5.2)
citrus (3.0.2)
+ citrus-toml-merge (7.1.0)
+ toml-merge (= 7.1.0)
+ toml-rb (~> 4.1)
+ version_gem (~> 1.1, >= 1.1.9)
cmdparse (3.0.7)
commonmarker (2.9.0-x86_64-linux)
- concurrent-ruby (1.3.7)
+ commonmarker-merge (7.1.0)
+ commonmarker (~> 2.2)
+ markdown-merge (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ concurrent-ruby (1.3.8)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
@@ -305,6 +89,10 @@ GEM
delegate (0.6.1)
diff-lcs (1.6.2)
diffy (3.4.4)
+ dotenv-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.14)
dry-configurable (1.4.0)
dry-core (~> 1.0)
zeitwerk (~> 2.6)
@@ -335,7 +123,7 @@ GEM
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
emoji_regex (15.0.0)
- erb (6.0.5)
+ erb (6.0.6)
gem_bench (2.0.5)
bundler (>= 1.14)
version_gem (~> 1.1, >= 1.1.4)
@@ -354,21 +142,24 @@ GEM
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.21.1)
- kettle-dev (2.3.7)
+ json-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ kettle-dev (2.3.9)
emoji_regex (>= 15.0)
kettle-rb (~> 0.1, >= 0.1.2)
kettle-test (~> 2.0, >= 2.0.4)
ruby-progressbar (~> 1.13)
- kettle-drift (1.0.5)
- version_gem (~> 1.1, >= 1.1.13)
- kettle-rb (0.1.4)
- kettle-soup-cover (3.0.1)
+ kettle-rb (0.1.5)
+ kettle-soup-cover (3.0.4)
+ kettle-wash (~> 0.1, >= 0.1.0)
simplecov (>= 1.0)
simplecov-cobertura (>= 4.0)
simplecov-console (~> 0.9, >= 0.9.5)
simplecov-rcov (~> 0.3, >= 0.3.7)
simplecov_lcov_formatter (~> 0.9, >= 0.9.0)
- kettle-test (2.0.11)
+ kettle-test (2.0.12)
appraisal2 (~> 3.0, >= 3.0.6)
backports (~> 3.0)
rspec (~> 3.0)
@@ -379,18 +170,32 @@ GEM
silent_stream (~> 1.0, >= 1.0.12)
timecop-rspec (~> 1.0, >= 1.0.3)
turbo_tests2 (~> 3.1, >= 3.1.12)
+ kettle-wash (0.1.1)
+ version_gem (~> 1.1, >= 1.1.14)
kramdown (2.5.2)
rexml (>= 3.4.4)
+ kramdown-merge (7.1.0)
+ kramdown (~> 2.5)
+ markdown-merge (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
logger (1.7.0)
+ markdown-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
markly (0.16.0)
+ markly-merge (7.1.0)
+ markdown-merge (= 7.1.0)
+ markly (~> 0.9)
+ version_gem (~> 1.1, >= 1.1.9)
mutex_m (0.3.0)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
- nomono (1.0.8)
+ nomono (1.1.0)
openssl (4.0.2)
ostruct (0.6.3)
parallel (1.28.0)
@@ -404,20 +209,31 @@ GEM
prettyprint
prettyprint (0.2.0)
prism (1.9.0)
+ prism-merge (7.1.0)
+ prism (~> 1.6)
+ ruby-merge (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
psych (5.4.0)
date
stringio
+ psych-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ yaml-merge (= 7.1.0)
public_suffix (7.0.5)
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
- rake-compiler-dock (= 1.12.0)
rbs (4.0.3)
logger
prism (>= 1.6.0)
tsort
+ rbs-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ rbs (>= 3.10)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.14)
rdoc (6.17.0)
erb
psych (>= 4.0.0)
@@ -500,7 +316,7 @@ GEM
rubocop-md (2.0.4)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
- rubocop-minitest (0.39.1)
+ rubocop-minitest (0.40.0)
lint_roller (~> 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
@@ -541,6 +357,10 @@ GEM
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-ast (>= 1.44.0, < 2.0)
+ ruby-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
ruby-progressbar (1.13.0)
ruby_engine (2.0.3)
ruby_version (1.0.3)
@@ -561,7 +381,7 @@ GEM
simplecov (>= 0.4.1)
simplecov_lcov_formatter (0.9.0)
simplecov (>= 0.18)
- sorbet-runtime (0.6.13342)
+ sorbet-runtime (0.6.13351)
standard (1.56.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
@@ -597,14 +417,23 @@ GEM
delegate (~> 0.1)
rspec (~> 3.0)
timecop (>= 0.7, < 1)
- token-resolver (2.0.4)
+ token-resolver (2.0.5)
parslet (~> 2.0)
- version_gem (~> 1.1, >= 1.1.13)
- toml (0.3.0)
- parslet (>= 1.8.0, < 3.0.0)
+ version_gem (~> 1.1, >= 1.1.14)
+ toml-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
toml-rb (4.2.0)
citrus (~> 3.0, > 3.0)
racc (~> 1.7)
+ tree_haver (7.1.0)
+ citrus (~> 3.0)
+ parslet (~> 2.0)
+ tree_sitter_language_pack (>= 1.13.2, < 2.0)
+ version_gem (~> 1.1, >= 1.1.9)
+ tree_sitter_language_pack (1.13.3-x86_64-linux)
+ sorbet-runtime (~> 0.5)
tsort (0.2.0)
turbo_tests2 (3.2.0)
parallel_tests (>= 3.3.0, < 6)
@@ -620,6 +449,10 @@ GEM
kramdown (>= 2.4, < 3)
kramdown-parser-gfm (~> 1.1)
version_gem (~> 1.1, >= 1.1.13)
+ yaml-merge (7.1.0)
+ ast-merge (= 7.1.0)
+ tree_haver (= 7.1.0)
+ version_gem (~> 1.1, >= 1.1.9)
yard (0.9.45)
yard-fence (0.9.6)
rdoc (>= 6.11, < 8)
@@ -646,76 +479,45 @@ PLATFORMS
DEPENDENCIES
appraisal2 (~> 3.2, >= 3.2.0)
appraisal2-rubocop (~> 1.0, >= 1.0.0)
- ast-crispr!
- ast-crispr-markdown-markly!
- ast-crispr-ruby-prism!
- ast-merge!
- ast-merge-git!
- ast-template!
- bash-merge!
benchmark (~> 0.5, >= 0.5.0)
- binary-merge!
bundler-audit (~> 0.9.3)
cgi (~> 0.5)
- citrus-toml-merge!
- commonmarker-merge!
debug (>= 1.1)
- dotenv-merge!
- erb (~> 6.0, >= 6.0.5)
+ erb (~> 6.0, >= 6.0.6)
gem_bench (~> 2.0, >= 2.0.5)
gitmoji-regex (~> 2.0, >= 2.0.4)
- go-merge!
irb (~> 1.17)
- json-merge!
- kettle-drift (~> 1.0, >= 1.0.5)
kettle-jem!
- kettle-soup-cover (~> 3.0, >= 3.0.1)
- kettle-test (~> 2.0, >= 2.0.11)
+ kettle-soup-cover (~> 3.0, >= 3.0.3)
+ kettle-test (~> 2.0, >= 2.0.12)
kramdown (~> 2.5, >= 2.5.2)
- kramdown-merge!
kramdown-parser-gfm (~> 1.1)
- markdown-merge!
- markly-merge!
mutex_m (~> 0.2)
nomono (~> 1.0, >= 1.0.8)
- parslet-toml-merge!
- plain-merge!
- prism-merge!
- psych-merge!
rake (~> 13.0)
- rbs-merge!
rdoc (~> 6.11)
reek (~> 6.5, >= 6.5.0)
require_bench (~> 1.0, >= 1.0.4)
rubocop-gradual (~> 0.4, >= 0.4.0)
rubocop-lts (~> 24.2, >= 24.2.1)
rubocop-lts-rspec (~> 1.0, >= 1.0.5)
- rubocop-minitest (~> 0.39, >= 0.39.1)
+ rubocop-minitest (~> 0.40, >= 0.40.0)
rubocop-on-rbs (~> 2.0, >= 2.0.0)
rubocop-packaging (~> 0.6, >= 0.6.0)
rubocop-ruby3_2 (~> 3.0, >= 3.0.6)
- ruby-merge!
ruby-progressbar (~> 1.13)
- rust-merge!
- smorg-rb!
standard (~> 1.56, >= 1.56.0)
stone_checksums (~> 1.0, >= 1.0.6)
stringio (>= 3.0)
- toml-merge!
- tree_haver!
- tree_sitter_language_pack!
turbo_tests2 (~> 3.2, >= 3.2.0)
- typescript-merge!
webrick (~> 1.9)
yaml-converter (~> 0.2, >= 0.2.3)
- yaml-merge!
yard (~> 0.9, >= 0.9.45)
yard-fence (~> 0.9, >= 0.9.6)
yard-junk (~> 0.1, >= 0.1.0)
yard-relative_markdown_links (~> 0.6)
yard-timekeeper (~> 0.2, >= 0.2.4)
yard-yaml (~> 0.2, >= 0.2.3)
- zip-merge!
CHECKSUMS
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
@@ -727,13 +529,11 @@ CHECKSUMS
ast-crispr-markdown-markly (7.1.0)
ast-crispr-ruby-prism (7.1.0)
ast-merge (7.1.0)
- ast-merge-git (7.1.0)
- ast-template (7.1.0)
backports (3.25.3) sha256=94298d32dc3c40ca15633b54e282780b49e2db0c045f602ea1907e4f63a17235
bash-merge (7.1.0)
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
- binary-merge (7.1.0)
+ bundler (4.0.17) sha256=214e21431b5665dd2f99df8a5511c6b151d7a72e8015c8b38f8b775b61cbb6c1
bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9
cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb
citrus (3.0.2) sha256=4ec2412fc389ad186735f4baee1460f7900a8e130ffe3f216b30d4f9c684f650
@@ -741,7 +541,7 @@ CHECKSUMS
cmdparse (3.0.7) sha256=f7c5cace10bec6abf853370ae095e4b97a84ed9d847b3fb38f41cc4fbc950739
commonmarker (2.9.0-x86_64-linux) sha256=8cfe92970eef585a19ddf6613224b91cab64d6029834661bda801f877c9c7f43
commonmarker-merge (7.1.0)
- concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
debug (1.11.1) sha256=2e0b0ac6119f2207a6f8ac7d4a73ca8eb4e440f64da0a3136c30343146e952b6
delegate (0.6.1) sha256=54cf946cacfe05b1c23114edd8fbd8d54e9cea7abf36b95130ab53cc88b8f7e4
@@ -756,22 +556,21 @@ CHECKSUMS
dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
emoji_regex (15.0.0) sha256=a508b2c0bee561169564e0aec96085020c900520d335e5533fd8e78e59493829
- erb (6.0.5) sha256=858e63488cb796c9daba8b6e9ff4b3879c395022049be9a66a8e00980e612eac
+ erb (6.0.6) sha256=a9b24986700f5bf127c4f297c5403c3ca41b83b0a316c0cd09a096b56e644ae5
gem_bench (2.0.5) sha256=0dc0fb44a5a5eb7b2f5c1c68a5b0164d72007132822c012bac3abe976b199ead
geom2d (0.4.1) sha256=ea0998ea90c4f2752e24fe13d85a4f89bee689d151316140ebcc6369bf634ed9
gitmoji-regex (2.0.4) sha256=01410d3217940bd0e7b2299ec805245afe8d0f06a5d6d38f623d63a63c0ac34f
- go-merge (7.1.0)
hexapdf (1.9.1) sha256=2d1f6a3622e6bc2a70a707d4c3f3fa44f5552ecd9d899f6283abb07398a84884
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583
json-merge (7.1.0)
- kettle-dev (2.3.7) sha256=eb370113cd030d03cbe2d33b31c99858951017e5ad21a17e9ed89dc3770028ee
- kettle-drift (1.0.5)
+ kettle-dev (2.3.9) sha256=03b2f72c6dda4d2c4401ee3c0c96853116c922766e7b5b04224434a49b571bfc
kettle-jem (7.1.0)
- kettle-rb (0.1.4) sha256=9cef7ce4f7021666b7222292f29051e51eaf042e8a5db11f3f4dd72f74243fc1
- kettle-soup-cover (3.0.1) sha256=83ebe2aa099f15781e4796b5faef0dc2720fba48f6b9d34808670b91baf271e4
- kettle-test (2.0.11) sha256=c710c90f7ab79d51f9452f0c09f5f90657e7a893f63583855c164d0b1b107ab2
+ kettle-rb (0.1.5) sha256=0322a569860c86e70f90d5ebe72353b8720b7054c7efa9f9044857f5c972d29f
+ kettle-soup-cover (3.0.4) sha256=36d4df472362d2020d16411d7ce26ba2fe2a41fb8be64577ff9b5280acf99d86
+ kettle-test (2.0.12) sha256=3a8e5c5f38db03a6f0a8896da6f3576d24e36f53796578c19aafaa2ba5a8ea52
+ kettle-wash (0.1.1) sha256=ae2e08b64c72c46ceed5ffa197ed859e85352f38ed0412fca2e18ce29b2dc4f9
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
kramdown-merge (7.1.0)
kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729
@@ -783,15 +582,13 @@ CHECKSUMS
markly-merge (7.1.0)
mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
- nomono (1.0.8) sha256=bf4b9b426cbf216ab17b70db474f691b8ae1f1e29de8db4b0ecd405e6e7e1c80
+ nomono (1.1.0) sha256=463dd4c79da02a855739a1b5483190d527b7868688be905e84abdb3449b32c88
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
parallel (1.28.0) sha256=33e6de1484baf2524792d178b0913fc8eb94c628d6cfe45599ad4458c638c970
parallel_tests (5.7.0) sha256=3f1762c46ca2c223b8af8ef877217f9d76974e191bfa934f2580b58bcf1d005c
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
parslet (2.0.0) sha256=d45130695d39b43d7e6a91f4d2ec66b388a8d822bae38de9b4de9a5fbde1f606
- parslet-toml-merge (7.1.0)
- plain-merge (7.1.0)
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
@@ -802,8 +599,6 @@ CHECKSUMS
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
- rake-compiler-dock (1.12.0)
- rb_sys (0.9.127)
rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14
rbs-merge (7.1.0)
rdoc (6.17.0) sha256=0f50d4e568fc98195f9bb155a9e8dff6c7feabfb515fb22ef6df1d12ad5a02b7
@@ -830,7 +625,7 @@ CHECKSUMS
rubocop-lts (24.2.2) sha256=be6c745e1bb61daebd6af3cc3227c60f95be9f642a080773cad7df14c5f9f174
rubocop-lts-rspec (1.0.5) sha256=439552fd27440802cc499889e013bffa28aadc41adae5d4dfff3d984a2a809b4
rubocop-md (2.0.4) sha256=0d076b6b5e99dea2ddc928c4bd702497decb9a8400da7808091e02ebcafcfb93
- rubocop-minitest (0.39.1) sha256=998398d6da4026d297f0f9bf709a1eac5f2b6947c24431f94af08138510cf7ed
+ rubocop-minitest (0.40.0) sha256=353c698199115f12151144cf0b5a96f69bb9d77b660cf6536df2c4250c672a9d
rubocop-on-rbs (2.0.0) sha256=ce74d1b3d5daead19f4b611623656c185821dfc9aed9c7079bb1e5d7d7c464be
rubocop-packaging (0.6.0) sha256=fb92bd0fb48e6f8cdb1648d2249b0cd51c2497dcc87340132d22f01edbf558a7
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
@@ -844,7 +639,6 @@ CHECKSUMS
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
ruby_engine (2.0.3) sha256=ca2ae7def8cfcdc2bfb6a186d36d5d59c8b403245dc0256c3802b767fa278aaa
ruby_version (1.0.3) sha256=5930f9950746b7e6c973184398ee364ee7440b170fef7922b9f5cdf317f1ccb5
- rust-merge (7.1.0)
service_actor (3.9.4) sha256=e63b523630b9a7e62959b2a90113b08d2565b5de9c148557b281ef847c9539ce
silent_stream (1.0.12) sha256=377c43aa10033fe90c33b39ea8cd97d79f2d1c4856df598efc56f3091f3ae782
simplecov (1.0.2) sha256=c6459434efe4b948b46477cc2df2faa73ab365f83a33c7c17f81262f4f7f1244
@@ -852,8 +646,7 @@ CHECKSUMS
simplecov-console (0.9.5) sha256=b1108bcfff5f210143e2b8301698c367b01586f20d25a73e95475a5df6fc6ff6
simplecov-rcov (0.3.7) sha256=372f50bf6df6b6350b7d0c840f2f8bdabe021861a43c26877b747c9ac96139fc
simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
- smorg-rb (7.1.0)
- sorbet-runtime (0.6.13342) sha256=dbeb9892597f593ed2b29e38018912787f6c4e0c4b736d8af0d6bd3c63bde3c3
+ sorbet-runtime (0.6.13351) sha256=f8fee17c6e3edf835dc6823d26afb9a7c8969c6710d1fabe2fb43f4e0c15c64f
standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
@@ -866,15 +659,13 @@ CHECKSUMS
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
timecop (0.9.11) sha256=41284dc6e5041f2184f781ace766f942108c842f8d8c1386a26e6343decc7542
timecop-rspec (1.0.3) sha256=005f14841bb606dcaefb060e321b5388e2e59537742bee8b3a9a9a40e598fab9
- token-resolver (2.0.4) sha256=33b926958f504525bba3ed511ab66fbcbf8ef30390815e931436b30f27ffcad0
- toml (0.3.0)
+ token-resolver (2.0.5) sha256=b852f924287ffb58a440856e862b056c8ad97e74b4b2526cee43e0771f40c25c
toml-merge (7.1.0)
toml-rb (4.2.0) sha256=10a48c91613e20cf63483a7a776767dfb3cd7d70e9327c0237443da601e13776
tree_haver (7.1.0)
- tree_sitter_language_pack (1.12.5)
+ tree_sitter_language_pack (1.13.3-x86_64-linux) sha256=1ffd045bd236ea54f58c5872ee66121d01033359c1f28f375b7fd4a4b5620cf9
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
turbo_tests2 (3.2.0) sha256=8b35421548399d1923567b177970f42671c65695b93cdd134d78fbcbab85dff0
- typescript-merge (7.1.0)
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
version_gem (1.1.14) sha256=6b7306c7e9416d06067561981ab3444e2cecb844f26cc325ae3c27b44cf85613
@@ -888,8 +679,7 @@ CHECKSUMS
yard-timekeeper (0.2.4) sha256=62f8d001d737c6e2ac688e7b37386f958dceb0f6aff9c909575e1bec8d20775a
yard-yaml (0.2.3) sha256=fe5fef18819e1cbd05bb8f1b9e1baad6bf70c28125eb75b57bbf6397b0831812
zeitwerk (2.8.2) sha256=7212a61311083c604184b1ea2574b9aa05cd14f855a0841c06985cabe9181d12
- zip-merge (7.1.0)
zlib (3.2.3) sha256=5bd316698b32f31a64ab910a8b6c282442ca1626a81bbd6a1674e8522e319c20
BUNDLED WITH
- 4.0.16
+ 4.0.17
diff --git a/gems/kettle-jem/LICENSE.md b/gems/kettle-jem/LICENSE.md
index 6ad318705..65a770d1f 100644
--- a/gems/kettle-jem/LICENSE.md
+++ b/gems/kettle-jem/LICENSE.md
@@ -3,8 +3,8 @@
This project is made available under the following licenses.
Choose the option that best fits your use case:
-- [AGPL-3.0-only](AGPL-3.0-only.md)
-- [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md)
+- [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md)
+- [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md)
If none of the above licenses fit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
diff --git a/gems/kettle-jem/README.md b/gems/kettle-jem/README.md
index 2eb923dfa..b241d1bf2 100644
--- a/gems/kettle-jem/README.md
+++ b/gems/kettle-jem/README.md
@@ -47,8 +47,8 @@ to build `kettle-jem` extension gems against the supported plugin seam.
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf]|
-| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
-| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
+| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
+| Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
| Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
| Compliance | [![License: AGPL-3.0-only OR PolyForm-Small-Business-1.0.0][📄license-img]][📄license] [![Apache license compatibility: Category X][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
| Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -87,6 +87,8 @@ The _amazing_ test matrix is powered by the kettle-dev stack.
This gem is part of the StructuredMerge Ruby package family. The implementation inventory, layering model, and backend notes live in the [root package-family guide][sm-family-guide]. Shared behavior is defined by the [StructuredMerge fixtures][sm-family-fixtures] and implemented by the [Go][sm-family-go], [Ruby][sm-family-ruby], [Rust][sm-family-rust], and [TypeScript][sm-family-typescript] repositories.
+Merge analysis must enter parsing through `tree_haver`. Parser-specific gems register concrete TreeHaver backends; substrate gems register grammar mappings and keep shared format or language merge behavior in one place. Missing backends fail closed instead of falling back to direct parser-library calls.
+
[sm-family-guide]: https://github.com/structuredmerge/structuredmerge-ruby#package-family
@@ -462,7 +464,7 @@ fill missing keys during config sync, and act as runtime overrides.
| Variable | Description |
|----------|-------------|
-| `KETTLE_RB_DEV` | Workspace root for local sibling gems. `true` = `~/src/my`; a path = that path; unset/`false` = released gems. |
+| `KETTLE_DEV_DEV` | Workspace root for local sibling gems. `true` = `~/src/my`; a path = that path; unset/`false` = released gems. |
| `KETTLE_DEV_DEBUG` | Set to `true` for verbose debug output. |
| `FUNDING_ORG` | OpenCollective organization handle for FUNDING.yml. Auto-derived from git remote if unset. |
| `OPENCOLLECTIVE_HANDLE` | Alternative to `FUNDING_ORG` for personal OpenCollective pages. |
@@ -578,7 +580,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
## 📄 License
-The gem is available under the following licenses: [AGPL-3.0-only](AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](PolyForm-Small-Business-1.0.0.md).
+The gem is available under the following licenses: [AGPL-3.0-only](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/AGPL-3.0-only.md), [PolyForm-Small-Business-1.0.0](https://github.com/structuredmerge/structuredmerge-ruby/blob/main/PolyForm-Small-Business-1.0.0.md).
See [LICENSE.md][📄license] for details.
If none of the available licenses suit your use case, please [contact us](mailto:floss@galtzo.com) to discuss a custom commercial license.
@@ -648,6 +650,8 @@ Thanks for RTFM. ☺️
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
+[✉️ruby-forum-img]: https://img.shields.io/badge/RubyForum-Help-CC342D?style=for-the-badge&logo=ruby&logoColor=white
+[✉️ruby-forum]: https://www.rubyforum.org/c/help/8
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
[⛳️gem-namespace]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem
@@ -693,7 +697,7 @@ Thanks for RTFM. ☺️
[📜src-gl]: https://gitlab.com/structuredmerge/structuredmerge-ruby/-/tree/main/gems/kettle-jem
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
[📜src-cb]: https://codeberg.org/structuredmerge/structuredmerge-ruby/src/branch/main/gems/kettle-jem
-[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
+[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
[📜src-gh]: https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
diff --git a/gems/kettle-jem/Rakefile b/gems/kettle-jem/Rakefile
index c9b733eba..93608c46d 100644
--- a/gems/kettle-jem/Rakefile
+++ b/gems/kettle-jem/Rakefile
@@ -6,7 +6,7 @@
# kettle-jem will then preserve content between those markers across template runs.
# kettle-jem:unfreeze
-# kettle-jem Rakefile v7.1.0 - 2026-07-19
+# kettle-jem Rakefile v7.1.0 - 2026-07-22
# Ruby 2.3 (Safe Navigation) or higher required
#
# See LICENSE.md for license information.
diff --git a/gems/kettle-jem/benchmarks/README.md b/gems/kettle-jem/benchmarks/README.md
new file mode 100644
index 000000000..6fe2165cb
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/README.md
@@ -0,0 +1,200 @@
+# kettle-jem benchmarks
+
+This directory contains a repeatable benchmark harness for comparing
+`kettle-jem` recipe planning and phase-gated file work with and without opt-in
+Ractor workers.
+
+The fixture at `fixtures/skeleton/` is generated from a standard
+`bundle gem skeleton --git` run, with the generated `.git/` directory removed
+so the skeleton can be committed as project data. Benchmark runs never mutate
+that fixture directly. Each measured run copies it into `tmp/benchmarks/work/`,
+runs one-shot templating from that copied gem root, writes reports under
+`tmp/benchmarks/reports/`, writes a machine-readable timing summary to
+`tmp/benchmarks/summary.json`, updates `results/README.md`, and resets the
+copied skeleton before and after the run.
+
+Run the benchmark from the `kettle-jem` project root. Because the development
+bundle currently resolves `tree_sitter_language_pack` from the StructuredMerge
+Git fork, install the bundle before the first benchmark run or whenever the
+lockfile changes:
+
+```bash
+cd /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
+
+mise exec -C . -- env \
+GIT_CONFIG_COUNT=1 \
+GIT_CONFIG_KEY_0=safe.bareRepository \
+GIT_CONFIG_VALUE_0=all \
+K_JEM_TEMPLATING=true \
+STRUCTUREDMERGE_DEV=/home/pboling/src/my/structuredmerge/ruby/gems \
+VENDORED_GEMS= \
+VENDOR_GEM_DIR= \
+bundle install
+
+mise exec -C . -- env \
+K_JEM_TEMPLATING=true \
+STRUCTUREDMERGE_DEV=/home/pboling/src/my/structuredmerge/ruby/gems \
+VENDORED_GEMS= \
+VENDOR_GEM_DIR= \
+bundle exec ruby benchmarks/kettle_jem_ractor_planning.rb
+```
+
+## Examples
+
+Default install-orchestrated benchmark:
+
+```console
+cd /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
+
+mise exec -C . -- env \
+GIT_CONFIG_COUNT=1 \
+GIT_CONFIG_KEY_0=safe.bareRepository \
+GIT_CONFIG_VALUE_0=all \
+K_JEM_TEMPLATING=true \
+STRUCTUREDMERGE_DEV=/home/pboling/src/my/structuredmerge/ruby/gems \
+VENDORED_GEMS= \
+VENDOR_GEM_DIR= \
+bundle install
+
+mise exec -C . -- env \
+K_JEM_TEMPLATING=true \
+STRUCTUREDMERGE_DEV=/home/pboling/src/my/structuredmerge/ruby/gems \
+VENDORED_GEMS= \
+VENDOR_GEM_DIR= \
+KETTLE_JEM_BENCHMARK_RUNS=3 \
+bundle exec ruby benchmarks/kettle_jem_ractor_planning.rb
+```
+
+Raw template-only benchmark:
+
+```console
+cd /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
+
+mise exec -C . -- env \
+GIT_CONFIG_COUNT=1 \
+GIT_CONFIG_KEY_0=safe.bareRepository \
+GIT_CONFIG_VALUE_0=all \
+K_JEM_TEMPLATING=true \
+STRUCTUREDMERGE_DEV=/home/pboling/src/my/structuredmerge/ruby/gems \
+VENDORED_GEMS= \
+VENDOR_GEM_DIR= \
+bundle install
+
+mise exec -C . -- env \
+K_JEM_TEMPLATING=true \
+STRUCTUREDMERGE_DEV=/home/pboling/src/my/structuredmerge/ruby/gems \
+VENDORED_GEMS= \
+VENDOR_GEM_DIR= \
+KETTLE_JEM_BENCHMARK_MODE=raw-template \
+KETTLE_JEM_BENCHMARK_RUNS=3 \
+bundle exec ruby benchmarks/kettle_jem_ractor_planning.rb
+```
+
+`raw-template` pre-bootstraps `.structuredmerge/kettle-jem.yml` outside the measured interval, then benchmarks scoped template `--only "**/*"` so it routes through `TemplateTask` instead of the default install-orchestrated flow.
+
+Combined-worker-only benchmark:
+
+```console
+cd /home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem
+
+mise exec -C . -- env \
+GIT_CONFIG_COUNT=1 \
+GIT_CONFIG_KEY_0=safe.bareRepository \
+GIT_CONFIG_VALUE_0=all \
+K_JEM_TEMPLATING=true \
+STRUCTUREDMERGE_DEV=/home/pboling/src/my/structuredmerge/ruby/gems \
+VENDORED_GEMS= \
+VENDOR_GEM_DIR= \
+bundle install
+
+mise exec -C . -- env \
+K_JEM_TEMPLATING=true \
+STRUCTUREDMERGE_DEV=/home/pboling/src/my/structuredmerge/ruby/gems \
+VENDORED_GEMS= \
+VENDOR_GEM_DIR= \
+KETTLE_JEM_BENCHMARK_RUNS=3 \
+bundle exec ruby benchmarks/kettle_jem_ractor_planning.rb --only combined
+```
+
+`--only combined` retains `baseline-main` for delta calculations and skips the planning-only and file-only split variants. Multiple selectors can be comma-separated or repeated.
+
+## ENV Variables
+
+Useful environment variables:
+
+| Variable | Default | Purpose |
+| --- | --- | --- |
+| `KETTLE_JEM_BENCHMARK_RUNS` | `3` | Number of measured runs for each variant. |
+| `KETTLE_JEM_BENCHMARK_WORKERS` | `1,min(4,n/2),min(8,n/2),n` | Comma-separated worker counts for Ractor and thread variants, where `n` is `Etc.nprocessors`. |
+| `KETTLE_JEM_BENCHMARK_COMMAND` | `template` | Public `kettle-jem` command to benchmark: `plan`, `apply`, `template`, or `install`. |
+| `KETTLE_JEM_BENCHMARK_MODE` | `install-template` | Template benchmark mode: `install-template` keeps the one-shot install orchestration path; `raw-template` scopes `template` to all targets with `--only "**/*"` so it routes through `TemplateTask`. |
+| `KETTLE_JEM_BENCHMARK_ONLY` | unset | Optional comma-separated variant selectors: `baseline`, `planning`, `file`, `combined`, `ractor`, or `thread`. CLI `--only` uses the same tokens and combines with this env var. |
+| `KETTLE_JEM_BENCHMARK_MIN_RUBY` | `1.8.7` | Minimum Ruby value passed through `KJ_MIN_RUBY` to broaden generated workflow/gemfile coverage. |
+
+Benchmark runs set `KETTLE_JEM_SKIP_DRIFT_CHECK=true`,
+`KETTLE_JEM_SKIP_RUBOCOP_GRADUAL=true`, `KETTLE_JEM_SKIP_BINSTUBS=true`, and
+`KETTLE_JEM_SKIP_LOCK_NORMALIZATION=true` so external drift/style/setup cleanup
+does not pad the template timing comparison.
+
+The harness invokes `exe/kettle-jem` through the kettle-jem development bundle
+with `BUNDLE_GEMFILE` pinned to this checkout's `Gemfile`, so local sibling
+StructuredMerge APIs are used while destination setup commands still sanitize
+Bundler activation and select the copied fixture's own Gemfile. The development
+bundle resolves `tree_sitter_language_pack` from
+released `tree_sitter_language_pack` gem with the Ruby ABI platform-gem fix.
+Run `bundle install` with the same `K_JEM_TEMPLATING`, `STRUCTUREDMERGE_DEV`,
+`VENDORED_GEMS`, and `VENDOR_GEM_DIR` values shown above before invoking the
+benchmark; otherwise Bundler can fail with "The git source ... is not yet
+checked out." The `GIT_CONFIG_*` variables allow Bundler's bare Git cache on
+systems configured with `safe.bareRepository=explicit`.
+
+The default `template` benchmark compares:
+
+- baseline classified planning with no Ractor workers
+- planning-only Ractor workers via `KETTLE_JEM_RACTOR_WORKERS`
+- planning-only thread workers via `KETTLE_JEM_THREAD_WORKERS`
+- file-only Ractor workers via `KETTLE_JEM_RACTOR_FILE_WORKERS`
+- file-only thread workers via `KETTLE_JEM_THREAD_FILE_WORKERS`
+- combined planning and file Ractor workers
+- combined planning and file thread workers
+
+Use `--only combined` or `KETTLE_JEM_BENCHMARK_ONLY=combined` when only the combined planning+file worker runs are useful. Baseline remains selected automatically so the summary can still show percentage deltas.
+
+Benchmark summaries include planning execution counters from each report:
+worker-safe recipe count, Ractor/thread spawn count, and recipe count actually
+executed by planning Ractors or threads. They also include file-work counters:
+file work units, file-worker Ractor/thread spawns, and file work units committed
+in Ractors or threads. These counters distinguish "workers were enabled" from
+"work actually ran concurrently".
+
+Reports also persist phase durations and install command-step durations. The
+benchmark table surfaces recipe-phase and external-command time separately so
+template execution changes are not hidden by setup commands. Summary tables also
+show each variant's median wall-clock percentage delta against `baseline-main`
+as the second column. When README sub-step timings are present, the generated
+results README also includes a baseline README timing breakdown so repeated
+Markdown/AST work can be targeted directly.
+
+Long runs print timestamped progress lines before and after each measured
+variant run, including elapsed seconds, recipe/change counts, planning Ractor
+and thread recipe counts, and file Ractor/thread unit counts for completed runs.
+
+For `plan`, file-worker variants are skipped because no filesystem apply phase
+runs. The default `template --accept-config` run exercises kettle-jem's
+supported one-shot install flow: environment variables seed
+`.structuredmerge/kettle-jem.yml`, the config bootstrap is written, and the
+install/template task continues through the follow-up apply against that config.
+Set `KETTLE_JEM_BENCHMARK_MODE=raw-template` to benchmark scoped
+`template --only "**/*"` runs through `TemplateTask`, which isolates raw template
+apply work from install orchestration. Raw-template mode first writes
+`.structuredmerge/kettle-jem.yml` outside the measured interval so the timed run
+uses the same accepted configuration shape without measuring install
+orchestration.
+
+The latest committed benchmark summary lives at `results/README.md`. If the
+full benchmark has already run and `tmp/benchmarks/summary.json` still exists,
+regenerate only that committed summary without rerunning templating:
+
+```bash
+mise exec -C /path/to/kettle-jem -- ruby benchmarks/kettle_jem_ractor_planning.rb --summarize-only
+```
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/.gitignore b/gems/kettle-jem/benchmarks/fixtures/skeleton/.gitignore
new file mode 100644
index 000000000..9106b2a34
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/.gitignore
@@ -0,0 +1,8 @@
+/.bundle/
+/.yardoc
+/_yardoc/
+/coverage/
+/doc/
+/pkg/
+/spec/reports/
+/tmp/
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/Gemfile b/gems/kettle-jem/benchmarks/fixtures/skeleton/Gemfile
new file mode 100644
index 000000000..dd67942d4
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/Gemfile
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+# Specify your gem's dependencies in skeleton.gemspec
+gemspec
+
+gem "irb"
+gem "rake", "~> 13.0"
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/README.md b/gems/kettle-jem/benchmarks/fixtures/skeleton/README.md
new file mode 100644
index 000000000..ac3a148ad
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/README.md
@@ -0,0 +1,35 @@
+# Skeleton
+
+TODO: Delete this and the text below, and describe your gem
+
+Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/skeleton`. To experiment with that code, run `bin/console` for an interactive prompt.
+
+## Installation
+
+TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.
+
+Install the gem and add to the application's Gemfile by executing:
+
+```bash
+bundle add UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
+```
+
+If bundler is not being used to manage dependencies, install the gem by executing:
+
+```bash
+gem install UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
+```
+
+## Usage
+
+TODO: Write usage instructions here
+
+## Development
+
+After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
+
+To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
+
+## Contributing
+
+Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/skeleton.
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/Rakefile b/gems/kettle-jem/benchmarks/fixtures/skeleton/Rakefile
new file mode 100644
index 000000000..cd510a029
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/Rakefile
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+
+require "bundler/gem_tasks"
+task default: %i[]
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/bin/console b/gems/kettle-jem/benchmarks/fixtures/skeleton/bin/console
new file mode 100755
index 000000000..db1f39cec
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/bin/console
@@ -0,0 +1,11 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+require "bundler/setup"
+require "skeleton"
+
+# You can add fixtures and/or initialization code here to make experimenting
+# with your gem easier. You can also use a different console, if you like.
+
+require "irb"
+IRB.start(__FILE__)
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/bin/setup b/gems/kettle-jem/benchmarks/fixtures/skeleton/bin/setup
new file mode 100755
index 000000000..dce67d860
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/bin/setup
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+set -euo pipefail
+IFS=$'\n\t'
+set -vx
+
+bundle install
+
+# Do any other automated setup that you need to do here
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/lib/skeleton.rb b/gems/kettle-jem/benchmarks/fixtures/skeleton/lib/skeleton.rb
new file mode 100644
index 000000000..c8a8e6842
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/lib/skeleton.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+
+require_relative "skeleton/version"
+
+module Skeleton
+ class Error < StandardError; end
+ # Your code goes here...
+end
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/lib/skeleton/version.rb b/gems/kettle-jem/benchmarks/fixtures/skeleton/lib/skeleton/version.rb
new file mode 100644
index 000000000..7f8c5cf27
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/lib/skeleton/version.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+module Skeleton
+ VERSION = "0.1.0"
+end
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/sig/skeleton.rbs b/gems/kettle-jem/benchmarks/fixtures/skeleton/sig/skeleton.rbs
new file mode 100644
index 000000000..3e1127be8
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/sig/skeleton.rbs
@@ -0,0 +1,4 @@
+module Skeleton
+ VERSION: String
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
+end
diff --git a/gems/kettle-jem/benchmarks/fixtures/skeleton/skeleton.gemspec b/gems/kettle-jem/benchmarks/fixtures/skeleton/skeleton.gemspec
new file mode 100644
index 000000000..c1fd0d516
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/fixtures/skeleton/skeleton.gemspec
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+require_relative "lib/skeleton/version"
+
+Gem::Specification.new do |spec|
+ spec.name = "skeleton"
+ spec.version = Skeleton::VERSION
+ spec.authors = ["Peter H. Boling"]
+ spec.email = ["peter.boling@gmail.com"]
+
+ spec.summary = "TODO: Write a short summary, because RubyGems requires one."
+ spec.description = "TODO: Write a longer description or delete this line."
+ spec.homepage = "TODO: Put your gem's website or public repo URL here."
+ spec.required_ruby_version = ">= 3.2.0"
+ spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
+ spec.metadata["homepage_uri"] = spec.homepage
+ spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
+
+ # Uncomment the line below to require MFA for gem pushes.
+ # This helps protect your gem from supply chain attacks by ensuring
+ # no one can publish a new version without multi-factor authentication.
+ # See: https://guides.rubygems.org/mfa-requirement-opt-in/
+ # spec.metadata["rubygems_mfa_required"] = "true"
+
+ # Specify which files should be added to the gem when it is released.
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
+ gemspec = File.basename(__FILE__)
+ spec.files = IO.popen(%w[git ls-files -z], chdir: __dir__, err: IO::NULL) do |ls|
+ ls.readlines("\x0", chomp: true).reject do |f|
+ (f == gemspec) ||
+ f.start_with?(*%w[bin/ Gemfile .gitignore])
+ end
+ end
+ spec.bindir = "exe"
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
+ spec.require_paths = ["lib"]
+
+ # Uncomment to register a new dependency of your gem
+ # spec.add_dependency "example-gem", "~> 1.0"
+
+ # For more information and examples about making a new gem, check out our
+ # guide at: https://guides.rubygems.org/make-your-own-gem/
+end
diff --git a/gems/kettle-jem/benchmarks/kettle_jem_ractor_planning.rb b/gems/kettle-jem/benchmarks/kettle_jem_ractor_planning.rb
new file mode 100755
index 000000000..82f2a145a
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/kettle_jem_ractor_planning.rb
@@ -0,0 +1,687 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+require "etc"
+require "fileutils"
+require "json"
+require "open3"
+require "rbconfig"
+require "time"
+
+BENCHMARK_ROOT = File.expand_path(__dir__)
+PROJECT_ROOT = File.expand_path("..", BENCHMARK_ROOT)
+FIXTURE_ROOT = File.join(BENCHMARK_ROOT, "fixtures", "skeleton")
+WORK_PARENT = File.join(PROJECT_ROOT, "tmp", "benchmarks", "work")
+WORKTREE = File.join(WORK_PARENT, "skeleton")
+REPORT_ROOT = File.join(PROJECT_ROOT, "tmp", "benchmarks", "reports")
+SUMMARY_PATH = File.join(PROJECT_ROOT, "tmp", "benchmarks", "summary.json")
+RESULTS_README = File.join(BENCHMARK_ROOT, "results", "README.md")
+KETTLE_JEM_EXE = File.join(PROJECT_ROOT, "exe", "kettle-jem")
+KETTLE_JEM_GEMFILE = File.join(PROJECT_ROOT, "Gemfile")
+summarize_only = false
+only_args = []
+remaining_args = []
+until ARGV.empty?
+ arg = ARGV.shift
+ case arg
+ when "--summarize-only"
+ summarize_only = true
+ when "--only"
+ value = ARGV.shift
+ raise "--only requires a value" unless value
+
+ only_args << value
+ when /\A--only=(.+)\z/
+ only_args << Regexp.last_match(1)
+ else
+ remaining_args << arg
+ end
+end
+raise "Unsupported arguments: #{remaining_args.join(" ")}" unless remaining_args.empty?
+
+SUMMARIZE_ONLY = summarize_only
+STDOUT.sync = true
+
+RUNS = Integer(ENV.fetch("KETTLE_JEM_BENCHMARK_RUNS", "3"))
+NPROCESSORS = Etc.nprocessors
+HALF_NPROCESSORS = [1, NPROCESSORS / 2].max
+DEFAULT_WORKER_COUNTS = [1, [4, HALF_NPROCESSORS].min, [8, HALF_NPROCESSORS].min, NPROCESSORS].uniq
+WORKER_COUNTS = ENV.fetch("KETTLE_JEM_BENCHMARK_WORKERS", DEFAULT_WORKER_COUNTS.join(","))
+ .split(",")
+ .map { |value| Integer(value.strip) }
+ .uniq
+COMMAND = ENV.fetch("KETTLE_JEM_BENCHMARK_COMMAND", "template")
+BENCHMARK_MODE = ENV.fetch("KETTLE_JEM_BENCHMARK_MODE", "install-template")
+BENCHMARK_ONLY = (ENV.fetch("KETTLE_JEM_BENCHMARK_ONLY", "").split(",") + only_args.flat_map { |arg| arg.split(",") })
+ .map { |token| token.strip.downcase }
+ .reject(&:empty?)
+ .uniq
+VALID_BENCHMARK_ONLY = %w[baseline planning file combined ractor thread].freeze
+
+raise "KETTLE_JEM_BENCHMARK_RUNS must be positive" unless RUNS.positive?
+raise "KETTLE_JEM_BENCHMARK_WORKERS must include at least one value" if WORKER_COUNTS.empty?
+unless WORKER_COUNTS.all?(&:positive?)
+ raise "KETTLE_JEM_BENCHMARK_WORKERS values must be positive"
+end
+raise "Missing fixture skeleton at #{FIXTURE_ROOT}" unless Dir.exist?(FIXTURE_ROOT)
+unless %w[plan apply template install].include?(COMMAND)
+ raise "Unsupported benchmark command #{COMMAND.inspect}"
+end
+unless %w[install-template raw-template].include?(BENCHMARK_MODE)
+ raise "Unsupported benchmark mode #{BENCHMARK_MODE.inspect}"
+end
+unknown_only = BENCHMARK_ONLY - VALID_BENCHMARK_ONLY
+raise "Unsupported benchmark selector(s): #{unknown_only.join(", ")}" unless unknown_only.empty?
+if COMMAND != "template" && BENCHMARK_MODE != "install-template"
+ raise "KETTLE_JEM_BENCHMARK_MODE=#{BENCHMARK_MODE} requires KETTLE_JEM_BENCHMARK_COMMAND=template"
+end
+
+BASE_ENV = {
+ "BUNDLE_GEMFILE" => KETTLE_JEM_GEMFILE,
+ "STRUCTUREDMERGE_DEV" => ENV.fetch("STRUCTUREDMERGE_DEV", File.expand_path("..", PROJECT_ROOT)),
+ "KETTLE_JEM_ACCEPT_CONFIG" => "true",
+ "KETTLE_JEM_SKIP_COMMIT" => "true",
+ "KETTLE_JEM_SKIP_DRIFT_CHECK" => "true",
+ "KETTLE_JEM_SKIP_RUBOCOP_GRADUAL" => "true",
+ "KETTLE_JEM_SKIP_BINSTUBS" => "true",
+ "KETTLE_JEM_SKIP_LOCK_NORMALIZATION" => "true",
+ "KETTLE_JEM_TEMPLATE_PROFILE" => "full",
+ "KJ_REPOSITORY_TOPOLOGY" => "standalone",
+ "KJ_AUTHOR_NAME" => "Benchmark Author",
+ "KJ_AUTHOR_EMAIL" => "benchmark@example.com",
+ "KJ_AUTHOR_DOMAIN" => "example.com",
+ "KJ_GH_USER" => "benchmark",
+ "KJ_HOMEPAGE_URI" => "https://example.com/skeleton",
+ "KJ_MIN_RUBY" => ENV.fetch("KETTLE_JEM_BENCHMARK_MIN_RUBY", "1.8.7"),
+ "allowed" => "true",
+ "force" => "true",
+ "git_drivers" => "false",
+ "hook_templates" => "false"
+}.freeze
+
+def benchmark_variants
+ variants = [
+ {
+ name: "baseline-main",
+ family: "baseline",
+ worker_type: "none",
+ env: {
+ "KETTLE_JEM_RECIPE_PLANNING_STRATEGY" => "classified",
+ "KETTLE_JEM_RACTOR_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_WORKERS" => "0",
+ "KETTLE_JEM_RACTOR_FILE_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_FILE_WORKERS" => "0"
+ }
+ }
+ ]
+
+ WORKER_COUNTS.each do |workers|
+ variants << {
+ name: "planning-ractor-#{workers}",
+ family: "planning",
+ worker_type: "ractor",
+ env: {
+ "KETTLE_JEM_RECIPE_PLANNING_STRATEGY" => "classified",
+ "KETTLE_JEM_RACTOR_WORKERS" => workers.to_s,
+ "KETTLE_JEM_THREAD_WORKERS" => "0",
+ "KETTLE_JEM_RACTOR_FILE_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_FILE_WORKERS" => "0"
+ }
+ }
+ variants << {
+ name: "planning-thread-#{workers}",
+ family: "planning",
+ worker_type: "thread",
+ env: {
+ "KETTLE_JEM_RECIPE_PLANNING_STRATEGY" => "classified",
+ "KETTLE_JEM_RACTOR_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_WORKERS" => workers.to_s,
+ "KETTLE_JEM_RACTOR_FILE_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_FILE_WORKERS" => "0"
+ }
+ }
+ next if COMMAND == "plan"
+
+ variants << {
+ name: "file-ractor-#{workers}",
+ family: "file",
+ worker_type: "ractor",
+ env: {
+ "KETTLE_JEM_RECIPE_PLANNING_STRATEGY" => "classified",
+ "KETTLE_JEM_RACTOR_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_WORKERS" => "0",
+ "KETTLE_JEM_RACTOR_FILE_WORKERS" => workers.to_s,
+ "KETTLE_JEM_THREAD_FILE_WORKERS" => "0"
+ }
+ }
+ variants << {
+ name: "file-thread-#{workers}",
+ family: "file",
+ worker_type: "thread",
+ env: {
+ "KETTLE_JEM_RECIPE_PLANNING_STRATEGY" => "classified",
+ "KETTLE_JEM_RACTOR_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_WORKERS" => "0",
+ "KETTLE_JEM_RACTOR_FILE_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_FILE_WORKERS" => workers.to_s
+ }
+ }
+ variants << {
+ name: "combined-ractor-#{workers}",
+ family: "combined",
+ worker_type: "ractor",
+ env: {
+ "KETTLE_JEM_RECIPE_PLANNING_STRATEGY" => "classified",
+ "KETTLE_JEM_RACTOR_WORKERS" => workers.to_s,
+ "KETTLE_JEM_THREAD_WORKERS" => "0",
+ "KETTLE_JEM_RACTOR_FILE_WORKERS" => workers.to_s,
+ "KETTLE_JEM_THREAD_FILE_WORKERS" => "0"
+ }
+ }
+ variants << {
+ name: "combined-thread-#{workers}",
+ family: "combined",
+ worker_type: "thread",
+ env: {
+ "KETTLE_JEM_RECIPE_PLANNING_STRATEGY" => "classified",
+ "KETTLE_JEM_RACTOR_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_WORKERS" => workers.to_s,
+ "KETTLE_JEM_RACTOR_FILE_WORKERS" => "0",
+ "KETTLE_JEM_THREAD_FILE_WORKERS" => workers.to_s
+ }
+ }
+ end
+ variants
+end
+
+def selected_variants
+ variants = benchmark_variants
+ return variants if BENCHMARK_ONLY.empty?
+
+ selected = variants.select do |variant|
+ variant.fetch(:name) == "baseline-main" ||
+ BENCHMARK_ONLY.include?(variant.fetch(:family)) ||
+ BENCHMARK_ONLY.include?(variant.fetch(:worker_type))
+ end
+ selected_names = selected.map { |variant| variant.fetch(:name) }
+ if selected_names == ["baseline-main"] && !BENCHMARK_ONLY.include?("baseline")
+ raise "No benchmark variants matched --only #{BENCHMARK_ONLY.join(", ")}"
+ end
+ selected
+end
+
+def reset_worktree
+ FileUtils.rm_rf(WORKTREE)
+ FileUtils.mkdir_p(WORK_PARENT)
+ FileUtils.cp_r(FIXTURE_ROOT, WORK_PARENT)
+end
+
+def percentile(values, fraction)
+ sorted = values.sort
+ sorted.fetch([(sorted.length - 1) * fraction, 0].max.round)
+end
+
+def summarize(times)
+ {
+ min: times.min,
+ median: percentile(times, 0.5),
+ max: times.max,
+ mean: times.sum / times.length
+ }
+end
+
+def progress(message)
+ puts "[#{Time.now.iso8601}] #{message}"
+end
+
+def report_snapshot(path)
+ report = JSON.parse(File.read(path))
+ planning_execution = report.fetch("recipe_planning_execution", {})
+ file_execution = report.fetch("file_work_execution", {})
+ phase_timings = Array(report["phase_timings"])
+ install_steps = Array(report["install_steps"]) + Array(report["template_steps"])
+ command_duration_ms = install_steps.sum do |step|
+ command_results = Array(step["command_results"])
+ if command_results.empty?
+ step.fetch("duration_ms", 0).to_f
+ else
+ command_results.sum { |result| result.fetch("duration_ms", 0).to_f }
+ end
+ end
+ readme_timings = report_readme_timings(report)
+ {
+ strategy: report["recipe_planning_strategy"],
+ planning_workers: report["recipe_planning_workers"],
+ planning_thread_workers: report.fetch("recipe_planning_thread_workers", 0),
+ file_workers: report.fetch("file_work_workers", 0),
+ file_thread_workers: report.fetch("file_work_thread_workers", 0),
+ worker_safe_recipes: planning_execution.fetch("worker_safe_recipes", 0),
+ main_only_recipes: planning_execution.fetch("main_only_recipes", 0),
+ ractor_spawns: planning_execution.fetch("ractor_spawn_count", 0),
+ ractor_recipes: planning_execution.fetch("ractor_recipe_count", 0),
+ thread_spawns: planning_execution.fetch("thread_spawn_count", 0),
+ thread_recipes: planning_execution.fetch("thread_recipe_count", 0),
+ file_work_units: file_execution.fetch("file_work_units", 0),
+ file_ractor_spawns: file_execution.fetch("file_ractor_spawn_count", 0),
+ file_ractor_units: file_execution.fetch("file_ractor_units", 0),
+ file_thread_spawns: file_execution.fetch("file_thread_spawn_count", 0),
+ file_thread_units: file_execution.fetch("file_thread_units", 0),
+ phase_duration_ms: phase_timings.sum { |entry| entry.fetch("duration_ms", 0).to_f }.round(3),
+ recipes_duration_ms: phase_timings.select { |entry| entry.fetch("phase", "") == "recipes" }.sum { |entry| entry.fetch("duration_ms", 0).to_f }.round(3),
+ apply_duration_ms: phase_timings.select { |entry| entry.fetch("phase", "") == "apply" }.sum { |entry| entry.fetch("duration_ms", 0).to_f }.round(3),
+ command_duration_ms: command_duration_ms.round(3),
+ readme_duration_ms: readme_timings.sum { |entry| entry.fetch(:duration_ms, 0).to_f }.round(3),
+ readme_timings: readme_timings,
+ recipes: Array(report["recipe_reports"]).length,
+ changed: Array(report["changed_files"]).length
+ }
+end
+
+def report_readme_timings(report)
+ timings = Array(report["recipe_reports"]).flat_map do |recipe_report|
+ next [] unless recipe_report["relative_path"].to_s == "README.md"
+
+ Array(recipe_report.dig("metadata", "readme_timings"))
+ end.compact
+ grouped = timings.each_with_object({}) do |timing, groups|
+ name = timing.fetch("name").to_s
+ group = groups[name] ||= {name: name, count: 0, duration_ms: 0.0}
+ group[:count] += 1
+ group[:duration_ms] += timing.fetch("duration_ms", 0).to_f
+ end
+ grouped.values
+ .map { |entry| entry.merge(duration_ms: entry.fetch(:duration_ms).round(3)) }
+ .sort_by { |entry| -entry.fetch(:duration_ms) }
+end
+
+def run_variant(variant, index)
+ report_path = File.join(REPORT_ROOT, "#{variant.fetch(:name)}-#{index}.json")
+ env = ENV.to_h.merge(BASE_ENV).merge(variant.fetch(:env))
+ command = benchmark_command(report_path)
+
+ progress("starting #{variant.fetch(:name)} run #{index}/#{RUNS}")
+ reset_worktree
+ prepare_raw_template_worktree(env) if raw_template_mode?
+ started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
+ stdout, stderr, status = Open3.capture3(env, *command, chdir: WORKTREE)
+ elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at
+ raise <<~MESSAGE unless status.success?
+ Benchmark variant #{variant.fetch(:name)} run #{index} failed with status
+ #{status.exitstatus}.
+ Command: #{command.join(" ")}
+ STDOUT:
+ #{stdout}
+ STDERR:
+ #{stderr}
+ MESSAGE
+
+ snapshot = report_snapshot(report_path)
+ progress(
+ format(
+ "finished %s run %d/%d in %.3fs (%d recipes, %d changed, plan ractor/thread %d/%d, file ractor/thread %d/%d)",
+ variant: variant.fetch(:name),
+ index: index,
+ runs: RUNS,
+ elapsed: elapsed,
+ recipes: snapshot.fetch(:recipes),
+ changed: snapshot.fetch(:changed),
+ plan_ractor: snapshot.fetch(:ractor_recipes),
+ plan_thread: snapshot.fetch(:thread_recipes),
+ file_ractor: snapshot.fetch(:file_ractor_units),
+ file_thread: snapshot.fetch(:file_thread_units)
+ )
+ )
+ [elapsed, snapshot]
+ensure
+ reset_worktree
+end
+
+def benchmark_command(report_path)
+ command = [
+ "bundle",
+ "exec",
+ "env",
+ "K_JEM_TEMPLATING=true",
+ RbConfig.ruby,
+ KETTLE_JEM_EXE,
+ COMMAND,
+ "--force",
+ "--quiet",
+ "--accept-config",
+ "--skip-commit",
+ "--report",
+ report_path
+ ]
+ command.concat(raw_template_command_options) if raw_template_mode?
+ command
+end
+
+def prepare_raw_template_worktree(env)
+ report_path = File.join(REPORT_ROOT, "raw-template-bootstrap.json")
+ command = [
+ "bundle",
+ "exec",
+ "env",
+ "K_JEM_TEMPLATING=true",
+ RbConfig.ruby,
+ KETTLE_JEM_EXE,
+ "template",
+ "--force",
+ "--quiet",
+ "--accept-config",
+ "--skip-commit",
+ "--report",
+ report_path,
+ "--only",
+ ".structuredmerge/kettle-jem.yml"
+ ]
+ _stdout, stderr, status = Open3.capture3(env, *command, chdir: WORKTREE)
+ return if status.success?
+
+ raise <<~MESSAGE
+ Raw-template benchmark bootstrap failed with status #{status.exitstatus}.
+ Command: #{command.join(" ")}
+ STDERR:
+ #{stderr}
+ MESSAGE
+end
+
+def raw_template_mode?
+ COMMAND == "template" && BENCHMARK_MODE == "raw-template"
+end
+
+def raw_template_command_options
+ ["--only", "**/*"]
+end
+
+def benchmark_command_label
+ label = "kettle-jem #{COMMAND}"
+ label = "#{label} #{raw_template_command_options.join(" ")}" if raw_template_mode?
+ label
+end
+
+def format_seconds(value)
+ format("%.3fs", value)
+end
+
+def format_baseline_delta(value, baseline)
+ return "n/a" if baseline.to_f.zero?
+
+ format("%+.1f%%", ((value - baseline) / baseline) * 100.0)
+end
+
+def format_share(value, total)
+ return "n/a" if total.to_f.zero?
+
+ format("%.1f%%", (value / total) * 100.0)
+end
+
+def timing_entry_value(entry, key, default = nil)
+ entry.fetch(key.to_s) { entry.fetch(key.to_sym, default) }
+end
+
+def best_non_baseline_variant(variants)
+ variants
+ .reject { |name, _result| name.to_s == "baseline-main" }
+ .min_by do |_name, result|
+ summary = timing_entry_value(result, :summary, {})
+ timing_entry_value(summary, :median, Float::INFINITY).to_f
+ end
+end
+
+def readme_timing_lines(title, timings)
+ timing_entries = Array(timings)
+ return [] if timing_entries.empty?
+
+ total = timing_entries.sum { |entry| timing_entry_value(entry, :duration_ms, 0).to_f }
+ lines = [
+ "",
+ "## #{title}",
+ "",
+ "| Step | Duration | Share | Count |",
+ "| --- | ---: | ---: | ---: |"
+ ]
+ timing_entries.each do |entry|
+ duration_ms = timing_entry_value(entry, :duration_ms, 0).to_f
+ count = timing_entry_value(entry, :count, 0)
+ lines << format(
+ "| `%s` | %s | %s | %d |",
+ name: timing_entry_value(entry, :name),
+ duration: format_seconds(duration_ms / 1000.0),
+ share: format_share(duration_ms, total),
+ count: count
+ )
+ end
+ lines
+end
+
+def print_readme_timing_table(title, timings)
+ timing_entries = Array(timings)
+ return if timing_entries.empty?
+
+ total = timing_entries.sum { |entry| timing_entry_value(entry, :duration_ms, 0).to_f }
+ puts
+ puts title
+ puts
+ puts format("%-44s %10s %8s %5s", "step", "duration", "share", "count")
+ timing_entries.each do |entry|
+ duration_ms = timing_entry_value(entry, :duration_ms, 0).to_f
+ puts format(
+ "%-44s %10.3fs %8s %5d",
+ timing_entry_value(entry, :name),
+ duration_ms / 1000.0,
+ format_share(duration_ms, total),
+ timing_entry_value(entry, :count, 0)
+ )
+ end
+end
+
+def summary_payload(results, generated_at: Time.now)
+ {
+ generated_at: generated_at.iso8601,
+ fixture: FIXTURE_ROOT,
+ command: benchmark_command_label,
+ mode: BENCHMARK_MODE,
+ only: BENCHMARK_ONLY,
+ runs: RUNS,
+ worker_counts: WORKER_COUNTS,
+ min_ruby: BASE_ENV.fetch("KJ_MIN_RUBY"),
+ report_root: REPORT_ROOT,
+ variants: results.transform_values do |result|
+ {
+ times: result.fetch(:times),
+ summary: result.fetch(:summary),
+ snapshot: result.fetch(:snapshot)
+ }
+ end
+ }
+end
+
+def write_summary_json(payload)
+ FileUtils.mkdir_p(File.dirname(SUMMARY_PATH))
+ File.write(SUMMARY_PATH, "#{JSON.pretty_generate(payload)}\n")
+end
+
+def read_summary_json
+ raise "Missing benchmark summary at #{SUMMARY_PATH}" unless File.file?(SUMMARY_PATH)
+
+ JSON.parse(File.read(SUMMARY_PATH))
+end
+
+def build_results_readme(payload)
+ variants = payload.fetch("variants")
+ snapshot_count = ->(snapshot, key) { snapshot.fetch(key, 0) }
+ baseline_median = variants.fetch("baseline-main").fetch("summary").fetch("median")
+ baseline_readme_timings = Array(variants.fetch("baseline-main").fetch("snapshot").fetch("readme_timings", []))
+ best_variant_name, best_variant = best_non_baseline_variant(variants)
+ best_readme_timings = if best_variant
+ Array(best_variant.fetch("snapshot").fetch("readme_timings", []))
+ else
+ []
+ end
+ lines = [
+ "# kettle-jem benchmark results",
+ "",
+ "Last generated: `#{payload.fetch("generated_at")}`",
+ "",
+ "| Setting | Value |",
+ "| --- | --- |",
+ "| Fixture | `#{payload.fetch("fixture")}` |",
+ "| Command | `#{payload.fetch("command")}` |",
+ "| Mode | `#{payload.fetch("mode", "install-template")}` |",
+ "| Only | `#{Array(payload.fetch("only", [])).empty? ? "all" : payload.fetch("only").join(", ")}` |",
+ "| Runs per variant | `#{payload.fetch("runs")}` |",
+ "| Worker counts | `#{payload.fetch("worker_counts").join(", ")}` |",
+ "| Minimum Ruby | `#{payload.fetch("min_ruby")}` |",
+ "| Source reports | `#{payload.fetch("report_root")}` |",
+ "",
+ "| Variant | +/- baseline | Min | Median | Mean | Max | Recipe phase | Command steps | Plan Ractors | Plan threads | File Ractors | File threads | Safe recipes | Plan Ractor jobs | Plan thread jobs | File units | File Ractor units | File thread units | Recipes | Changed |",
+ "| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |"
+ ]
+ variants.each do |name, result|
+ summary = result.fetch("summary")
+ snapshot = result.fetch("snapshot")
+ lines << format(
+ "| `%s` | %s | %s | %s | %s | %s | %s | %s | %d | %d | %d | %d | %d | %d | %d | %d | %d | %d | %d | %d |",
+ name: name,
+ baseline_delta: format_baseline_delta(summary.fetch("median"), baseline_median),
+ min: format_seconds(summary.fetch("min")),
+ median: format_seconds(summary.fetch("median")),
+ mean: format_seconds(summary.fetch("mean")),
+ max: format_seconds(summary.fetch("max")),
+ recipe_phase: format_seconds(snapshot_count.call(snapshot, "recipes_duration_ms") / 1000.0),
+ command_steps: format_seconds(snapshot_count.call(snapshot, "command_duration_ms") / 1000.0),
+ plan_ractors: snapshot_count.call(snapshot, "planning_workers"),
+ plan_threads: snapshot_count.call(snapshot, "planning_thread_workers"),
+ file_ractors: snapshot_count.call(snapshot, "file_workers"),
+ file_threads: snapshot_count.call(snapshot, "file_thread_workers"),
+ safe: snapshot_count.call(snapshot, "worker_safe_recipes"),
+ plan_ractor_recipes: snapshot_count.call(snapshot, "ractor_recipes"),
+ plan_thread_recipes: snapshot_count.call(snapshot, "thread_recipes"),
+ file_units: snapshot_count.call(snapshot, "file_work_units"),
+ file_ractor_units: snapshot_count.call(snapshot, "file_ractor_units"),
+ file_thread_units: snapshot_count.call(snapshot, "file_thread_units"),
+ recipes: snapshot_count.call(snapshot, "recipes"),
+ changed: snapshot_count.call(snapshot, "changed")
+ )
+ end
+ lines.concat(readme_timing_lines("Baseline README timing breakdown", baseline_readme_timings))
+ lines.concat(readme_timing_lines("Fastest non-baseline README timing breakdown (`#{best_variant_name}`)", best_readme_timings)) if best_variant_name
+ lines << ""
+ lines << "These results are generated by `ruby benchmarks/kettle_jem_ractor_planning.rb`."
+ lines << "Regenerate this README from the saved summary without rerunning the benchmark with:"
+ lines << ""
+ lines << "```bash"
+ lines << "ruby benchmarks/kettle_jem_ractor_planning.rb --summarize-only"
+ lines << "```"
+ lines << ""
+ "#{lines.join("\n")}\n"
+end
+
+def write_results_readme(payload)
+ FileUtils.mkdir_p(File.dirname(RESULTS_README))
+ File.write(RESULTS_README, build_results_readme(payload))
+end
+
+if SUMMARIZE_ONLY
+ payload = read_summary_json
+ write_results_readme(payload)
+ puts "results README: #{RESULTS_README}"
+ exit
+end
+
+FileUtils.rm_rf(REPORT_ROOT)
+FileUtils.mkdir_p(REPORT_ROOT)
+reset_worktree
+
+variants = selected_variants
+puts "kettle-jem Ractor planning benchmark"
+puts "fixture: #{FIXTURE_ROOT}"
+puts "command: #{benchmark_command_label}"
+puts "mode: #{BENCHMARK_MODE}"
+puts "only: #{BENCHMARK_ONLY.empty? ? "all" : BENCHMARK_ONLY.join(", ")}"
+puts "runs: #{RUNS}"
+puts "worker counts: #{WORKER_COUNTS.join(", ")}"
+puts "variants: #{variants.length}"
+puts
+results = variants.to_h do |variant|
+ times = []
+ snapshots = []
+ RUNS.times do |index|
+ elapsed, snapshot = run_variant(variant, index + 1)
+ times << elapsed
+ snapshots << snapshot
+ end
+ [variant.fetch(:name), {times: times, summary: summarize(times), snapshot: snapshots.last}]
+end
+
+puts
+puts "summary"
+puts
+baseline_median = results.fetch("baseline-main").fetch(:summary).fetch(:median)
+puts format(
+ "%-28s %8s %8s %8s %8s %8s %8s %8s %4s %4s %4s %4s %4s %4s %4s %4s %4s %4s %7s %7s",
+ "variant",
+ "+/-",
+ "min",
+ "median",
+ "mean",
+ "max",
+ "recipes",
+ "cmds",
+ "pr",
+ "pt",
+ "fr",
+ "ft",
+ "safe",
+ "f_units",
+ "pr_job",
+ "pt_job",
+ "fr_job",
+ "ft_job",
+ "recipes",
+ "changed"
+)
+results.each do |name, result|
+ summary = result.fetch(:summary)
+ snapshot = result.fetch(:snapshot)
+ puts format(
+ "%-28s %8s %8.3fs %8.3fs %8.3fs %8.3fs %8.3fs %8.3fs %4d %4d %4d %4d %4d %4d %4d %4d %4d %4d %7d %7d",
+ name,
+ format_baseline_delta(summary.fetch(:median), baseline_median),
+ summary.fetch(:min),
+ summary.fetch(:median),
+ summary.fetch(:mean),
+ summary.fetch(:max),
+ snapshot.fetch(:recipes_duration_ms) / 1000.0,
+ snapshot.fetch(:command_duration_ms) / 1000.0,
+ snapshot.fetch(:planning_workers),
+ snapshot.fetch(:planning_thread_workers),
+ snapshot.fetch(:file_workers),
+ snapshot.fetch(:file_thread_workers),
+ snapshot.fetch(:worker_safe_recipes),
+ snapshot.fetch(:file_work_units),
+ snapshot.fetch(:ractor_recipes),
+ snapshot.fetch(:thread_recipes),
+ snapshot.fetch(:file_ractor_units),
+ snapshot.fetch(:file_thread_units),
+ snapshot.fetch(:recipes),
+ snapshot.fetch(:changed)
+ )
+end
+baseline_readme_timings = Array(results.fetch("baseline-main").fetch(:snapshot).fetch(:readme_timings, []))
+print_readme_timing_table("baseline README timings", baseline_readme_timings)
+best_variant_name, best_variant = best_non_baseline_variant(results)
+if best_variant_name
+ best_readme_timings = Array(best_variant.fetch(:snapshot).fetch(:readme_timings, []))
+ print_readme_timing_table("#{best_variant_name} README timings", best_readme_timings)
+end
+
+payload = summary_payload(results)
+write_summary_json(payload)
+write_results_readme(JSON.parse(JSON.generate(payload)))
+
+puts
+puts "reports: #{REPORT_ROOT}"
+puts "summary: #{SUMMARY_PATH}"
+puts "results README: #{RESULTS_README}"
diff --git a/gems/kettle-jem/benchmarks/results/README.md b/gems/kettle-jem/benchmarks/results/README.md
new file mode 100644
index 000000000..7aa63cca9
--- /dev/null
+++ b/gems/kettle-jem/benchmarks/results/README.md
@@ -0,0 +1,78 @@
+# kettle-jem benchmark results
+
+Last generated: `2026-07-20T22:47:34-06:00`
+
+| Setting | Value |
+| --- | --- |
+| Fixture | `/var/home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem/benchmarks/fixtures/skeleton` |
+| Command | `kettle-jem template` |
+| Mode | `install-template` |
+| Only | `combined` |
+| Runs per variant | `3` |
+| Worker counts | `1, 4, 8, 22` |
+| Minimum Ruby | `1.8.7` |
+| Source reports | `/var/home/pboling/src/my/structuredmerge/ruby/gems/kettle-jem/tmp/benchmarks/reports` |
+
+| Variant | +/- baseline | Min | Median | Mean | Max | Recipe phase | Command steps | Plan Ractors | Plan threads | File Ractors | File threads | Safe recipes | Plan Ractor jobs | Plan thread jobs | File units | File Ractor units | File thread units | Recipes | Changed |
+| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
+| `baseline-main` | +0.0% | 13.106s | 13.335s | 13.300s | 13.460s | 8.032s | 3.086s | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 132 | 0 | 0 | 146 | 134 |
+| `combined-ractor-1` | +7.5% | 13.951s | 14.331s | 14.598s | 15.513s | 10.125s | 3.107s | 1 | 0 | 1 | 0 | 2 | 2 | 0 | 132 | 132 | 0 | 146 | 134 |
+| `combined-thread-1` | +2.9% | 12.697s | 13.727s | 13.712s | 14.712s | 8.372s | 3.122s | 0 | 1 | 0 | 1 | 2 | 0 | 140 | 132 | 0 | 132 | 146 | 134 |
+| `combined-ractor-4` | +13.3% | 14.953s | 15.110s | 15.415s | 16.181s | 9.326s | 3.197s | 4 | 0 | 4 | 0 | 2 | 2 | 0 | 132 | 132 | 0 | 146 | 134 |
+| `combined-thread-4` | -2.4% | 12.724s | 13.017s | 13.158s | 13.733s | 8.385s | 3.254s | 0 | 4 | 0 | 4 | 2 | 0 | 140 | 132 | 0 | 132 | 146 | 134 |
+| `combined-ractor-8` | +9.0% | 14.249s | 14.529s | 14.679s | 15.258s | 9.748s | 3.225s | 8 | 0 | 8 | 0 | 2 | 2 | 0 | 132 | 132 | 0 | 146 | 134 |
+| `combined-thread-8` | -7.1% | 12.283s | 12.394s | 12.662s | 13.308s | 7.538s | 2.939s | 0 | 8 | 0 | 8 | 2 | 0 | 140 | 132 | 0 | 132 | 146 | 134 |
+| `combined-ractor-22` | +8.5% | 13.665s | 14.468s | 14.277s | 14.699s | 8.604s | 3.019s | 22 | 0 | 22 | 0 | 2 | 2 | 0 | 132 | 132 | 0 | 146 | 134 |
+| `combined-thread-22` | -6.1% | 12.438s | 12.521s | 12.581s | 12.785s | 7.709s | 3.079s | 0 | 22 | 0 | 22 | 2 | 0 | 140 | 132 | 0 | 132 | 146 | 134 |
+
+## Baseline README timing breakdown
+
+| Step | Duration | Share | Count |
+| --- | ---: | ---: | ---: |
+| `prepare.integration_badges` | 0.479s | 16.8% | 1 |
+| `postprocess.readme_post_processor` | 0.453s | 15.9% | 3 |
+| `readme.append_used_link_definitions` | 0.391s | 13.7% | 1 |
+| `postprocess.conditional_blocks` | 0.286s | 10.0% | 3 |
+| `postprocess.logo_link_prune` | 0.222s | 7.8% | 3 |
+| `postprocess.badge_policy` | 0.215s | 7.5% | 3 |
+| `readme.merge_template` | 0.209s | 7.3% | 1 |
+| `badge_policy.fossa` | 0.120s | 4.2% | 3 |
+| `postprocess.metadata_block` | 0.108s | 3.8% | 3 |
+| `postprocess.project_heading` | 0.099s | 3.5% | 3 |
+| `badge_policy.codetriage` | 0.095s | 3.3% | 3 |
+| `prepare.remove_sections` | 0.094s | 3.3% | 1 |
+| `postprocess.synopsis_heading` | 0.086s | 3.0% | 3 |
+| `postprocess.blank_lines` | 0.000s | 0.0% | 3 |
+| `postprocess.kloc_badge` | 0.000s | 0.0% | 3 |
+| `postprocess.monorepo_thin_projection` | 0.000s | 0.0% | 3 |
+| `postprocess.monorepo_subgem_recipe` | 0.000s | 0.0% | 3 |
+
+## Fastest non-baseline README timing breakdown (`combined-thread-8`)
+
+| Step | Duration | Share | Count |
+| --- | ---: | ---: | ---: |
+| `postprocess.kloc_badge` | 1.016s | 29.0% | 3 |
+| `prepare.integration_badges` | 0.546s | 15.6% | 1 |
+| `postprocess.readme_post_processor` | 0.388s | 11.1% | 3 |
+| `readme.append_used_link_definitions` | 0.318s | 9.1% | 1 |
+| `postprocess.conditional_blocks` | 0.228s | 6.5% | 3 |
+| `readme.merge_template` | 0.166s | 4.7% | 1 |
+| `postprocess.logo_link_prune` | 0.158s | 4.5% | 3 |
+| `postprocess.badge_policy` | 0.156s | 4.5% | 3 |
+| `prepare.remove_sections` | 0.121s | 3.5% | 1 |
+| `postprocess.metadata_block` | 0.101s | 2.9% | 3 |
+| `postprocess.project_heading` | 0.083s | 2.4% | 3 |
+| `badge_policy.fossa` | 0.081s | 2.3% | 3 |
+| `badge_policy.codetriage` | 0.075s | 2.1% | 3 |
+| `postprocess.synopsis_heading` | 0.068s | 1.9% | 3 |
+| `postprocess.blank_lines` | 0.000s | 0.0% | 3 |
+| `postprocess.monorepo_thin_projection` | 0.000s | 0.0% | 3 |
+| `postprocess.monorepo_subgem_recipe` | 0.000s | 0.0% | 3 |
+
+These results are generated by `ruby benchmarks/kettle_jem_ractor_planning.rb`.
+Regenerate this README from the saved summary without rerunning the benchmark with:
+
+```bash
+ruby benchmarks/kettle_jem_ractor_planning.rb --summarize-only
+```
+
diff --git a/gems/kettle-jem/docs/Kettle.html b/gems/kettle-jem/docs/Kettle.html
index 26e571d62..3afc5c43e 100644
--- a/gems/kettle-jem/docs/Kettle.html
+++ b/gems/kettle-jem/docs/Kettle.html
@@ -6,7 +6,7 @@
Module: Kettle
- — Documentation by YARD 0.9.44
+ — Documentation by YARD 0.9.45
@@ -110,9 +110,9 @@ Defined Under Namespace
diff --git a/gems/kettle-jem/docs/Kettle/Jem.html b/gems/kettle-jem/docs/Kettle/Jem.html
index 8d1c42517..c238173d2 100644
--- a/gems/kettle-jem/docs/Kettle/Jem.html
+++ b/gems/kettle-jem/docs/Kettle/Jem.html
@@ -6,7 +6,7 @@
Module: Kettle::Jem
- — Documentation by YARD 0.9.44
+ — Documentation by YARD 0.9.45
@@ -96,7 +96,7 @@ Defined Under Namespace
- Classes: DecisionEvaluation, DecisionPolicy, Error, GemSpecReader, PluginContext, PluginHelpers, PluginOutput, PluginRegistrar, PluginRegistry, RRRRBMatrixEntry, RubyGemsResolver
+ Classes: DecisionEvaluation, DecisionPolicy, Error, EventStream, GemSpecReader, PluginContext, PluginHelpers, PluginOutput, PluginRegistrar, PluginRegistry, RubyGemsResolver
@@ -139,6 +139,13 @@