Skip to content

Bump rubocop from 1.88.0 to 1.89.0 - #1034

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/bundler/rubocop-1.89.0
Open

Bump rubocop from 1.88.0 to 1.89.0#1034
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/bundler/rubocop-1.89.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 10, 2026

Copy link
Copy Markdown
Contributor

Bumps rubocop from 1.88.0 to 1.89.0.

Release notes

Sourced from rubocop's releases.

RuboCop v1.89.0

New features

  • #15492: Add AllCops/ProjectIndexIncludesGems for bundle-wide indexing. ([@​bbatsov][])
  • #15498: Add DelegatingMethods option to Lint/DuplicateMethods to register custom delegate-shaped methods. ([@​bbatsov][])
  • #15042: Add DisallowedCops configuration option to Style/DisableCopsWithinSourceCodeDirective. ([@​hammadxcm][])
  • #15441: Add new AllowYARDCommentBlockSeparator option to Layout/LeadingCommentSpace. ([@​koic][])
  • #15466: Add new Lint/DeprecatedReference cop to detect references to methods and constants documented as @deprecated, powered by the project index. ([@​bbatsov][])
  • #15491: Add new Lint/NameTypo cop. ([@​bbatsov][])
  • #15468: Add new Lint/UnusedPrivateMethod cop for project-wide dead-code detection via the project index (disabled by default). ([@​bbatsov][])
  • #14598: Make Style/DisableCopsWithinSourceCodeDirective impossible to disable via directive comments when explicitly enabled with Enabled: true. ([@​rafaelfranca][])
  • #15511: Support textDocument/codeAction requests in the built-in language server, so LSP clients that request code actions (Eglot, Helix, Flycheck, ...) can apply RuboCop's autocorrects, not only clients that read them off the published diagnostic. ([@​bbatsov][])
  • #8565: Support NewCops in department configuration to enable pending cops per department, including cops added up to a specific version (e.g. Style: NewCops: '1.19'). ([@​koic][])
  • #9373: Support autocorrection for tab indentation in Layout/IndentationWidth and Style/ClassAndModuleChildren. ([@​ioquatix][], [@​koic][])

Bug fixes

  • #15257: Fix a false negative for Lint/ToEnumArguments when explicit extra keyword arguments are passed (e.g. def m(x:); to_enum(:m, x: x, y: 1); end), which raises ArgumentError when the enumerator is used. ([@​RedZapdos123][])
  • #15452: Fix a false positive for Layout/HashAlignment when using EnforcedHashRocketStyle: table and a hash key spans multiple lines. ([@​dduugg][])
  • #12269: Fix a false positive for Lint/UselessAssignment with modifier conditions. ([@​bbatsov][])
  • #13786: Fix a false positive for Lint/Void with setter methods. ([@​bbatsov][])
  • #15507: Fix a false positive for Naming/VariableNumber when using an empty symbol hash key. ([@​koic][])
  • #15284: Fix a false positive for Style/MutableConstant with Data.define. ([@​bbatsov][])
  • #15483: Fix a false positive for Style/MissingRespondToMissing when respond_to_missing? is defined in a reopening of the class and UseProjectIndex is enabled. ([@​bbatsov][])
  • #15500: Fix an error for Lint/LiteralAsCondition when a literal condition has an empty branch. ([@​koic][])
  • #15499: Fix an error for Lint/UselessRuby2Keywords when ruby2_keywords is used with a symbol but no method definition is found. ([@​koic][])
  • #15453: Fix an error for Metrics/MethodLength when a method contains a heredoc and __ENCODING__. ([@​koic][])
  • #15442: Fix an error for Style/ArrayIntersect cop when the block-based check calls member?/include? without an explicit receiver. ([@​dduugg][])
  • #15434: Fix an error for Style/NegativeArrayIndex cop. ([@​viralpraxis][])
  • #15469: Fix an error for Style/RedundantFormat when a format string uses a positional argument number beyond the 64-bit range. ([@​koic][])
  • #15454: Fix an error for Style/RedundantFormat when the argument for a positional variable width is missing. ([@​koic][])
  • #15298: Fix an incorrect autocorrect for Lint/LiteralInInterpolation. ([@​bbatsov][])
  • #15515: Fix an incorrect autocorrect for Style/ArrayIntersect when using safe navigation none? with a block. ([@​koic][])
  • #15364: Fix an incorrect autocorrect for Style/MultipleComparison that dropped an allowed method comparison appearing between the compared values. ([@​bbatsov][])
  • #15367: Fix an incorrect autocorrect for Style/RedundantFileExtensionInRequire that produced invalid Ruby when a backslash preceded the .rb extension. ([@​bbatsov][])
  • #12017: Fix Lint/Void to no longer autocorrect a constant used in a void context, since removing it can change behavior through constant autoloading side effects. ([@​bbatsov][])
  • #14797: Avoid cache writes during server checks. ([@​sjh9714][])
  • #15484: Fix false negatives for Lint/InheritException when Exception is inherited indirectly through a project class (UseProjectIndex). ([@​bbatsov][])
  • #15357: Fix a false negative for Lint/AmbiguousAssignment when using attribute or index assignment. ([@​sngsmz][])
  • #9571: Fix false negatives in Layout/ClassStructure when class body elements are wrapped in begin blocks. ([@​koic][])
  • #9570: Fix false negatives in Layout/ClassStructure when using private_class_method or public_class_method def modifiers. ([@​koic][])
  • #15438: Fix false positives in Style/ArrayIntersect when the receiver of include? in a block is not an array literal. ([@​koic][])
  • #15445: Fix false positives in Style/MultilineIfThen when using the Prism parser engine and an elsif without then follows a branch using then with a body on the same line. ([@​koic][])
  • #15058: Fix false positives in Lint/DuplicateMethods for anonymous classes (Class.new) passed as arguments to the same named-receiver method call (e.g. T.cast). Each Class.new block is an independent class, so methods defined in different blocks should not be treated as duplicates. ([@​rafaelfranca][])
  • #15486: Fix false negatives for Style/RedundantConstantBase inside namespaces when the constant provably resolves identically without :: (UseProjectIndex). ([@​bbatsov][])
  • #15505: Fix incompatible autocorrect between Style/Lambda and Style/SymbolProc producing a syntax error like ->(x)(&:method) when both cops run on lambda { |x| x.method }. ([@​koic][])
  • #15481: Fix cross-file offenses depending on which files are inspected: the project index now always covers the whole project (UseProjectIndex). ([@​bbatsov][])
  • #13794: Fix Layout/LineLength autocorrection for endless methods with block bodies. ([@​hervetatche][])
  • #15462: Fix an error for Lint/ConstantReassignment when a built-in constant name is assigned and UseProjectIndex is enabled. ([@​bbatsov][])
  • #15321: Fix Style/ClassAndModuleChildren ignoring EnforcedStyleForClasses and EnforcedStyleForModules, and skip autocorrection when mixed per-type styles make the result ambiguous. ([@​bbatsov][])

... (truncated)

Changelog

Sourced from rubocop's changelog.

1.89.0 (2026-08-04)

New features

  • #15492: Add AllCops/ProjectIndexIncludesGems for bundle-wide indexing. ([@​bbatsov][])
  • #15498: Add DelegatingMethods option to Lint/DuplicateMethods to register custom delegate-shaped methods. ([@​bbatsov][])
  • #15042: Add DisallowedCops configuration option to Style/DisableCopsWithinSourceCodeDirective. ([@​hammadxcm][])
  • #15441: Add new AllowYARDCommentBlockSeparator option to Layout/LeadingCommentSpace. ([@​koic][])
  • #15466: Add new Lint/DeprecatedReference cop to detect references to methods and constants documented as @deprecated, powered by the project index. ([@​bbatsov][])
  • #15491: Add new Lint/NameTypo cop. ([@​bbatsov][])
  • #15468: Add new Lint/UnusedPrivateMethod cop for project-wide dead-code detection via the project index (disabled by default). ([@​bbatsov][])
  • #14598: Make Style/DisableCopsWithinSourceCodeDirective impossible to disable via directive comments when explicitly enabled with Enabled: true. ([@​rafaelfranca][])
  • #15511: Support textDocument/codeAction requests in the built-in language server, so LSP clients that request code actions (Eglot, Helix, Flycheck, ...) can apply RuboCop's autocorrects, not only clients that read them off the published diagnostic. ([@​bbatsov][])
  • #8565: Support NewCops in department configuration to enable pending cops per department, including cops added up to a specific version (e.g. Style: NewCops: '1.19'). ([@​koic][])
  • #9373: Support autocorrection for tab indentation in Layout/IndentationWidth and Style/ClassAndModuleChildren. ([@​ioquatix][], [@​koic][])

Bug fixes

  • #15257: Fix a false negative for Lint/ToEnumArguments when explicit extra keyword arguments are passed (e.g. def m(x:); to_enum(:m, x: x, y: 1); end), which raises ArgumentError when the enumerator is used. ([@​RedZapdos123][])
  • #15452: Fix a false positive for Layout/HashAlignment when using EnforcedHashRocketStyle: table and a hash key spans multiple lines. ([@​dduugg][])
  • #12269: Fix a false positive for Lint/UselessAssignment with modifier conditions. ([@​bbatsov][])
  • #13786: Fix a false positive for Lint/Void with setter methods. ([@​bbatsov][])
  • #15507: Fix a false positive for Naming/VariableNumber when using an empty symbol hash key. ([@​koic][])
  • #15284: Fix a false positive for Style/MutableConstant with Data.define. ([@​bbatsov][])
  • #15483: Fix a false positive for Style/MissingRespondToMissing when respond_to_missing? is defined in a reopening of the class and UseProjectIndex is enabled. ([@​bbatsov][])
  • #15500: Fix an error for Lint/LiteralAsCondition when a literal condition has an empty branch. ([@​koic][])
  • #15499: Fix an error for Lint/UselessRuby2Keywords when ruby2_keywords is used with a symbol but no method definition is found. ([@​koic][])
  • #15453: Fix an error for Metrics/MethodLength when a method contains a heredoc and __ENCODING__. ([@​koic][])
  • #15442: Fix an error for Style/ArrayIntersect cop when the block-based check calls member?/include? without an explicit receiver. ([@​dduugg][])
  • #15434: Fix an error for Style/NegativeArrayIndex cop. ([@​viralpraxis][])
  • #15469: Fix an error for Style/RedundantFormat when a format string uses a positional argument number beyond the 64-bit range. ([@​koic][])
  • #15454: Fix an error for Style/RedundantFormat when the argument for a positional variable width is missing. ([@​koic][])
  • #15298: Fix an incorrect autocorrect for Lint/LiteralInInterpolation. ([@​bbatsov][])
  • #15515: Fix an incorrect autocorrect for Style/ArrayIntersect when using safe navigation none? with a block. ([@​koic][])
  • #15364: Fix an incorrect autocorrect for Style/MultipleComparison that dropped an allowed method comparison appearing between the compared values. ([@​bbatsov][])
  • #15367: Fix an incorrect autocorrect for Style/RedundantFileExtensionInRequire that produced invalid Ruby when a backslash preceded the .rb extension. ([@​bbatsov][])
  • #12017: Fix Lint/Void to no longer autocorrect a constant used in a void context, since removing it can change behavior through constant autoloading side effects. ([@​bbatsov][])
  • #14797: Avoid cache writes during server checks. ([@​sjh9714][])
  • #15484: Fix false negatives for Lint/InheritException when Exception is inherited indirectly through a project class (UseProjectIndex). ([@​bbatsov][])
  • #15357: Fix a false negative for Lint/AmbiguousAssignment when using attribute or index assignment. ([@​sngsmz][])
  • #9571: Fix false negatives in Layout/ClassStructure when class body elements are wrapped in begin blocks. ([@​koic][])
  • #9570: Fix false negatives in Layout/ClassStructure when using private_class_method or public_class_method def modifiers. ([@​koic][])
  • #15438: Fix false positives in Style/ArrayIntersect when the receiver of include? in a block is not an array literal. ([@​koic][])
  • #15445: Fix false positives in Style/MultilineIfThen when using the Prism parser engine and an elsif without then follows a branch using then with a body on the same line. ([@​koic][])
  • #15058: Fix false positives in Lint/DuplicateMethods for anonymous classes (Class.new) passed as arguments to the same named-receiver method call (e.g. T.cast). Each Class.new block is an independent class, so methods defined in different blocks should not be treated as duplicates. ([@​rafaelfranca][])
  • #15486: Fix false negatives for Style/RedundantConstantBase inside namespaces when the constant provably resolves identically without :: (UseProjectIndex). ([@​bbatsov][])
  • #15505: Fix incompatible autocorrect between Style/Lambda and Style/SymbolProc producing a syntax error like ->(x)(&:method) when both cops run on lambda { |x| x.method }. ([@​koic][])
  • #15481: Fix cross-file offenses depending on which files are inspected: the project index now always covers the whole project (UseProjectIndex). ([@​bbatsov][])
  • #13794: Fix Layout/LineLength autocorrection for endless methods with block bodies. ([@​hervetatche][])
  • #15462: Fix an error for Lint/ConstantReassignment when a built-in constant name is assigned and UseProjectIndex is enabled. ([@​bbatsov][])

... (truncated)

Commits
  • 65854e6 Cut 1.89
  • f5dbd74 Update Changelog
  • 2f96cd7 Add new Lint/NameTypo cop
  • 9a91e2b Promote the resolved-ancestry guard to ProjectIndexHelp
  • e917b65 Merge pull request #15522 from joklek-vinted/fix/mise-toml-with-single-quotes
  • 619e3d2 Fix Ruby version detection from mise.toml with single quotes
  • 7999d1a [Fix #15501] Improve Style/RedundantLineContinuation performance on adjacen...
  • 63d9361 Advertise executeCommandProvider in the language server
  • 893a02f Cache the LSP project index across requests
  • 3b9755f Merge pull request #15516 from koic/fix_a_flaky_line_length_spec_timeout_on_j...
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.88.0 to 1.89.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](rubocop/rubocop@v1.88.0...v1.89.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.89.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies ruby Pull requests that update Ruby code labels Aug 10, 2026
1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

gem compare json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT require_paths:
    2.20.0: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.20.0", "lib"]
    2.21.2: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.21.2", "lib"]
  DIFFERENT rubygems_version:
    2.20.0: 4.0.12
    2.21.2: 4.0.16
  DIFFERENT version:
    2.20.0: 2.20.0
    2.21.2: 2.21.2
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
            CHANGES.md +16/-0
            README.md +5/-5
            ext/json/ext/generator/generator.c +72/-3
            ext/json/ext/json.h +4/-0
            ext/json/ext/parser/extconf.rb +6/-16
            ext/json/ext/parser/parser.c +140/-43
            lib/json.rb +18/-3
            lib/json/common.rb +9/-0
            lib/json/ext.rb +26/-0
            lib/json/ext/generator/state.rb +1/-0
            lib/json/truffle_ruby/generator.rb +36/-1
            lib/json/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    2.20.0->2.21.2:
      * Changed:
            README.md +5/-5

@github-actions

Copy link
Copy Markdown
Contributor

gem compare json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT require_paths:
    2.20.0: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.20.0", "lib"]
    2.21.2: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.21.2", "lib"]
  DIFFERENT rubygems_version:
    2.20.0: 4.0.12
    2.21.2: 4.0.16
  DIFFERENT version:
    2.20.0: 2.20.0
    2.21.2: 2.21.2
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
            CHANGES.md +16/-0
            README.md +5/-5
            ext/json/ext/generator/generator.c +72/-3
            ext/json/ext/json.h +4/-0
            ext/json/ext/parser/extconf.rb +6/-16
            ext/json/ext/parser/parser.c +140/-43
            lib/json.rb +18/-3
            lib/json/common.rb +9/-0
            lib/json/ext.rb +26/-0
            lib/json/ext/generator/state.rb +1/-0
            lib/json/truffle_ruby/generator.rb +36/-1
            lib/json/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    2.20.0->2.21.2:
      * Changed:
            README.md +5/-5

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

gem compare json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT require_paths:
    2.20.0: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.20.0", "lib"]
    2.21.2: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.21.2", "lib"]
  DIFFERENT rubygems_version:
    2.20.0: 4.0.12
    2.21.2: 4.0.16
  DIFFERENT version:
    2.20.0: 2.20.0
    2.21.2: 2.21.2
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
            CHANGES.md +16/-0
            README.md +5/-5
            ext/json/ext/generator/generator.c +72/-3
            ext/json/ext/json.h +4/-0
            ext/json/ext/parser/extconf.rb +6/-16
            ext/json/ext/parser/parser.c +140/-43
            lib/json.rb +18/-3
            lib/json/common.rb +9/-0
            lib/json/ext.rb +26/-0
            lib/json/ext/generator/state.rb +1/-0
            lib/json/truffle_ruby/generator.rb +36/-1
            lib/json/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    2.20.0->2.21.2:
      * Changed:
            README.md +5/-5

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
        CHANGES.md
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/CHANGES.md	2026-08-10 02:34:52.852204023 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/CHANGES.md	2026-08-10 02:34:52.873204146 +0000
                @@ -4,0 +5,16 @@
                +### 2026-07-31 (2.21.2)
                +
                +* Fix a use-after-free bug in `JSON::ResumableParser`. [GHSA-9hj4-r449-hfvc].
                +
                +### 2026-07-13 (2.21.1)
                +
                +* Fix a compilation issue on Window and Microsoft Visual C++.
                +
                +### 2026-07-12 (2.21.0)
                +
                +* `JSON.generate` now accept a `sort_keys` option, which takes either a boolean or a block.
                +* Added `#empty?` and `#partial_value?` methods on `JSON::ResumableParser`.
                +* Numerous correctness and performance fixes for `JSON::ResumableParser`.
                +* Avoid triggering Ruby's `float out of range` warning when parsing out of range numbers.
                +* Declare C types with Ruby 4.1 `RUBY_TYPED_THREAD_SAFE_FREE`.
                +
        README.md
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/README.md	2026-08-10 02:34:52.853204029 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/README.md	2026-08-10 02:34:52.874204152 +0000
                @@ -88 +88 @@
                -JSON.generate(Position.new(1, 2)) # => Position not allowed in JSON (JSON::GeneratorError)
                +JSON.generate(Position.new(1, 2), strict: true) # => Position not allowed in JSON (JSON::GeneratorError)
                @@ -120 +120 @@
                -coder = JSON::Combining.new do |object, is_object_key|
                +coder = JSON::Coder.new do |object, is_object_key|
                @@ -123,2 +123,2 @@
                -    if !string.valid_encoding? || string.encoding != Encoding::UTF_8
                -      Base64.encode64(string)
                +    if !object.valid_encoding? || object.encoding != Encoding::UTF_8
                +      Base64.encode64(object)
                @@ -126 +126 @@
                -      string
                +      object
        ext/json/ext/generator/generator.c
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/ext/json/ext/generator/generator.c	2026-08-10 02:34:52.854204034 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/ext/json/ext/generator/generator.c	2026-08-10 02:34:53.004204914 +0000
                @@ -36,0 +37 @@
                +    VALUE sort_keys;
                @@ -39 +40 @@
                -static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8;
                +static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8, default_sort_keys_proc;
                @@ -43 +44 @@
                -             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json;
                +             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json, sym_sort_keys;
                @@ -711,0 +713 @@
                +    rb_gc_mark_movable(state->sort_keys);
                @@ -722,0 +725 @@
                +    state->sort_keys = rb_gc_location(state->sort_keys);
                @@ -742 +745 @@
                -    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -771,0 +775 @@
                +    RB_OBJ_WRITTEN(vstate, Qundef, state->sort_keys);
                @@ -1052,0 +1057,5 @@
                +    if (RB_UNLIKELY(data->state->sort_keys)) {
                +        obj = rb_proc_call_with_block(data->state->sort_keys, 1, &obj, Qnil);
                +        Check_Type(obj, T_HASH);
                +    }
                +
                @@ -1378,0 +1388 @@
                +    RB_OBJ_WRITTEN(obj, Qundef, objState->sort_keys);
                @@ -1724,0 +1735,49 @@
                +static VALUE cState_set_default_sort_keys_proc(VALUE self, VALUE proc)
                +{
                +    if (!rb_obj_is_proc(proc)) {
                +        rb_raise(rb_eTypeError, "sort_key_proc must be a Proc");
                +    }
                +    return default_sort_keys_proc = proc;
                +}
                +
                +static VALUE normalize_sort_keys(VALUE value)
                +{
                +    if (rb_obj_is_proc(value)) {
                +        return value;
                +    } else if (value == Qtrue) {
                +        return default_sort_keys_proc;
                +    } else if (RTEST(value)) {
                +        rb_raise(rb_eTypeError, "The `sort_keys` argument must be a boolean or a Proc");
                +    } else {
                +        return Qfalse;
                +    }
                +}
                +
                +/*
                + * call-seq: sort_keys
                + *
                + * Get the value of sort_keys.
                + */
                +static VALUE cState_sort_keys_p(VALUE self)
                +{
                +    GET_STATE(self);
                +    return state->sort_keys;
                +}
                +
                +/*
                + * call-seq: sort_keys=(value)
                + *
                + * value is a boolean or a proc. If the value is the boolean true, object keys
                + * will be sorted lexicographically in ascending order.
                + *
                + * If the value is a proc, it receives the entire Hash and must return a Hash
                + * with its pairs in the desired order, allowing for arbitrary sorting.
                + */
                +static VALUE cState_sort_keys_set(VALUE self, VALUE value)
                +{
                +    rb_check_frozen(self);
                +    GET_STATE(self);
                +    RB_OBJ_WRITE(self, &state->sort_keys, normalize_sort_keys(value));
                +    return Qnil;
                +}
                +
                @@ -1834,0 +1894,3 @@
                +    else if (key == sym_sort_keys)             {
                +        state_write_value(data, &state->sort_keys, normalize_sort_keys(val));
                +    }
                @@ -1911,0 +1974,2 @@
                +    rb_global_variable(&default_sort_keys_proc);
                +
                @@ -1920,0 +1985,2 @@
                +    rb_define_singleton_method(cState, "default_sort_keys_proc=", cState_set_default_sort_keys_proc, 1);
                +
                @@ -1959,0 +2026,2 @@
                +    rb_define_method(cState, "sort_keys", cState_sort_keys_p, 0);
                +    rb_define_method(cState, "sort_keys=", cState_sort_keys_set, 1);
                @@ -1988,0 +2057 @@
                +    sym_sort_keys = ID2SYM(rb_intern("sort_keys"));
        ext/json/ext/json.h
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/ext/json/ext/json.h	2026-08-10 02:34:52.854204034 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/ext/json/ext/json.h	2026-08-10 02:34:53.004204914 +0000
                @@ -33,0 +34,4 @@
                +#ifndef RUBY_TYPED_THREAD_SAFE_FREE
                +#define RUBY_TYPED_THREAD_SAFE_FREE RUBY_TYPED_FREE_IMMEDIATELY
                +#endif
                +
        ext/json/ext/parser/extconf.rb
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/ext/json/ext/parser/extconf.rb	2026-08-10 02:34:52.859204064 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/ext/json/ext/parser/extconf.rb	2026-08-10 02:34:53.004204914 +0000
                @@ -18,16 +17,0 @@
                -def have_builtin_func(name, check_expr, opt = "", &b)
                -  checking_for checking_message(name.funcall_style, nil, opt) do
                -    if try_compile(<<SRC, opt, &b)
                -int foo;
                -int main() { #{check_expr}; return 0; }
                -SRC
                -      $defs.push(format("-DHAVE_BUILTIN_%s", name.tr_cpp))
                -      true
                -    else
                -      false
                -    end
                -  end
                -end
                -
                -have_builtin_func("__builtin_clzll", "__builtin_clzll(0)")
                -
                @@ -47,0 +32,6 @@
                +
                +# Disable function outlining on clang to prevent some of the repeated instructions
                +# in json_eat_whitespace being outlined into function calls.
                +# Note: This verifies '-mno-outline' is accepted as a valid compiler flag
                +# and will not pass it if unsupported.
                +append_cflags("-mno-outline")
        ext/json/ext/parser/parser.c
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/ext/json/ext/parser/parser.c	2026-08-10 02:34:52.861204076 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/ext/json/ext/parser/parser.c	2026-08-10 02:34:53.005204920 +0000
                @@ -8 +8,4 @@
                -static ID i_new, i_try_convert, i_uminus, i_encode, i_at_line, i_at_column;
                +static ID i_new, i_try_convert, i_encode, i_at_line, i_at_column;
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                +static ID i_uminus;
                +#endif
                @@ -317 +320 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -514 +517 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                @@ -588,0 +592,2 @@
                +    JSON_ASSERT(!state->parser);
                +    JSON_ASSERT(state->cursor);
                @@ -621,4 +626,8 @@
                -    long line, column;
                -    cursor_position(state, &line, &column);
                -
                -    VALUE warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    VALUE warning;
                +    if (state->parser) { // line and columns can't be accurate in resumable
                +        warning = rb_utf8_str_new_cstr(message);
                +    } else {
                +        long line, column;
                +        cursor_position(state, &line, &column);
                +        warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    }
                @@ -768 +777 @@
                -json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config)
                +json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config, const char *resume_pos)
                @@ -774,0 +784,5 @@
                +    // An incomplete comment suspends a resumable parse by rewinding the cursor
                +    // and throwing. Callers that already consumed a token not yet committed to
                +    // the frame stack pass resume_pos so the rewind re-reads that token too.
                +    // Non-resumable error positions keep pointing at the comment either way.
                +    const char *rewind_pos = (state->parser && resume_pos) ? resume_pos : start;
                @@ -779,2 +793,9 @@
                -            state->cursor = memchr(state->cursor, '\n', state->end - state->cursor);
                -            if (!state->cursor) {
                +            const char *newline = memchr(state->cursor, '\n', state->end - state->cursor);
                +            if (!newline) {
                +                // state->parser marks resumable mode, where the buffer end is only a
                +                // chunk boundary: the terminating newline may still arrive, so leave
                +                // the comment unterminated instead of consuming to end as a one-shot
                +                // parse would.
                +                if (state->parser) {
                +                    raise_eos_error_at("unterminated comment, expected end of line", state, rewind_pos);
                +                }
                @@ -783 +804 @@
                -                state->cursor++;
                +                state->cursor = newline + 1;
                @@ -793 +814 @@
                -                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, start);
                +                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, rewind_pos);
                @@ -805 +826 @@
                -            raise_parse_error_at("unexpected token %s", state, start, eos(state));
                +            raise_parse_error_at("unexpected token %s", state, eos(state) ? rewind_pos : start, eos(state));
                @@ -816 +837 @@
                -json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +json_eat_whitespace_resume_at(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments, const char *resume_pos)
                @@ -851 +872 @@
                -                json_eat_comments(state, config);
                +                json_eat_comments(state, config, resume_pos);
                @@ -859,0 +881,6 @@
                +ALWAYS_INLINE(static) void
                +json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +{
                +    json_eat_whitespace_resume_at(state, config, include_comments, NULL);
                +}
                +
                @@ -1132,0 +1160,7 @@
                +        // If the value is so small that it definitely underflows to 0.0, return early
                +        // to avoid triggering a "Float out of range" warning from rb_cstr_to_dbl.
                +        // When mantissa_digits + exponent < -324, value < 10^(-324) < DBL_TRUE_MIN/2,
                +        // so it rounds to 0 in IEEE 754 round-to-nearest.
                +        if (RB_UNLIKELY(mantissa_digits + exponent < -324)) {
                +            return rb_float_new(negative ? -0.0 : 0.0);
                +        }
                @@ -1432 +1466 @@
                -static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start)
                +static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start, bool resumable)
                @@ -1488,0 +1523,10 @@
                +    // A number touching the end of the buffer may still grow in a later chunk,
                +    // so the caller will rewind and wait. Decoding it now would build a value
                +    // -- for a long run of digits, an expensive bignum -- only to discard it,
                +    // and repeating that on every resumed chunk is quadratic in the number's
                +    // length. The digit scan above already advanced the cursor, which is all
                +    // the caller needs to detect the incomplete number.
                +    if (RB_UNLIKELY(resumable && eos(state))) {
                +        return Qundef;
                +    }
                +
                @@ -1565,0 +1610,7 @@
                +        // A trailing comma lands us here expecting an element but finding the
                +        // closing bracket; hand off to ARRAY_COMMA to close. An empty array
                +        // closes inline at '[', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && frame->type == JSON_FRAME_ARRAY && peek(state) == ']') {
                +            goto JSON_PHASE_ARRAY_COMMA;
                +        }
                +
                @@ -1606 +1657 @@
                -                value = json_parse_number(state, config, true, value_start);
                +                value = json_parse_number(state, config, true, value_start, resumable);
                @@ -1629 +1680 @@
                -                value = json_parse_number(state, config, false, value_start);
                +                value = json_parse_number(state, config, false, value_start, resumable);
                @@ -1661 +1712,3 @@
                -                json_eat_whitespace(state, config, true);
                +                // The '[' is consumed but its frame is only pushed below, so a
                +                // comment suspending here must resume from the bracket.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1690 +1743,2 @@
                -                json_eat_whitespace(state, config, true);
                +                // Same as '[': the frame is only pushed below.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1747,0 +1802,7 @@
                +        // A trailing comma lands us here expecting a key but finding the closing
                +        // brace; hand off to OBJECT_COMMA to close. An empty object closes inline
                +        // at '{', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && peek(state) == '}') {
                +            goto JSON_PHASE_OBJECT_COMMA;
                +        }
                +
                @@ -1810,7 +1871,4 @@
                -            if (config->allow_trailing_comma) {
                -                json_eat_whitespace(state, config, true);
                -                if (peek(state) == ']') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_ARRAY_COMMA;
                -                }
                -            }
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_VALUE once the ']' is in the buffer.
                @@ -1855,9 +1913,4 @@
                -            json_eat_whitespace(state, config, true);
                -
                -            if (config->allow_trailing_comma) {
                -                if (peek(state) == '}') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_OBJECT_COMMA;
                -                }
                -            }
                -
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_OBJECT_KEY once the '}' is in the buffer.
                @@ -2183 +2236 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -2268 +2321 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -2521,0 +2575 @@
                +        parser->state.start = parser->state.cursor = parser->state.end = 0;
                @@ -2618 +2672,6 @@
                -    // Copy the value stack as we need to mutate it.
                +    // Copy the value stack as we need to mutate it. The collapse loop folds each
                +    // open container by popping its entries and pushing the single result, so a
                +    // parent always reclaims its child's slot; head exceeds its live size by at
                +    // most one, either for the missing-value placeholder pushed below or for the
                +    // result of folding an empty innermost container. That one spare slot keeps
                +    // rvalue_stack_push from growing (reallocating) this ALLOCV buffer.
                @@ -2620,3 +2679,3 @@
                -    parser.value_stack.capa = (capa + missing_object_value);
                -    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, capa + missing_object_value);
                -    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, parser.value_stack.capa);
                +    parser.value_stack.capa = capa + 1;
                +    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, parser.value_stack.capa);
                +    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, capa);
                @@ -2715 +2774 @@
                - * call-seq: value? -> true or false
                + * call-seq: eos? -> true or false
                @@ -2725,0 +2785,35 @@
                + * call-seq: partial_value? -> true or false
                + *
                + * Returns whether a document is currently under construction: an unclosed
                + * container, a key awaiting its value, etc.
                + *
                + * It answers the same question as <tt>!partial_value.nil?</tt>, but as a
                + * cheap predicate on the parser's internal state, without materializing the
                + * partially parsed Ruby objects:
                + *   parser << '{"a":1,'
                + *   parser.parse # => false
                + *   parser.partial_value? # => true
                + *
                + * A fully parsed document whose value hasn't been retrieved yet is not under
                + * construction: #value? returns true and #partial_value? returns false.
                + */
                +static VALUE cResumableParser_partial_value_p(VALUE self)
                +{
                +    JSON_ResumableParser *parser = cResumableParser_get(self);
                +
                +    // Mirror of #value?: values on the stack while the document isn't DONE
                +    // belong to a partially built document. A container whose first key or
                +    // element hasn't been parsed yet has no frame nor value registered (the
                +    // tokenizer rewinds to the container start on EOS), so that state is
                +    // observable through the buffer (#eos?/#rest) instead, keeping this
                +    // predicate consistent with #partial_value returning nil.
                +    if (parser->value_stack.head > 0) {
                +        json_frame *frame = json_frame_stack_peek(&parser->frames);
                +        if (frame->phase != JSON_PHASE_DONE) {
                +            return Qtrue;
                +        }
                +    }
                +    return Qfalse;
                +}
                +
                +/*
                @@ -2780,0 +2875 @@
                +    rb_define_method(cResumableParser, "partial_value?", cResumableParser_partial_value_p, 0);
                @@ -2814,0 +2910 @@
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                @@ -2815,0 +2912 @@
                +#endif
        lib/json.rb
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/lib/json.rb	2026-08-10 02:34:52.862204081 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/lib/json.rb	2026-08-10 02:34:53.006204926 +0000
                @@ -124 +124,3 @@
                -# defaults to +100+; specify +false+ to disable depth checking.
                +# defaults to +100+;
                +# You can set it to +false+ to disable depth checking entirely, but that is dangerous
                +# when parsing untrusted input.
                @@ -126 +128 @@
                -# With the default, +false+:
                +# With the default, +100+:
                @@ -386,0 +389,9 @@
                +# With +false+:
                +#   obj = []
                +#   obj[0] = obj
                +#   # Raises  SystemStackError: stack level too deep
                +#   JSON.generate(obj, max_nesting: false)
                +#
                +# Setting +max_nesting+ to +false+ can lead to a stackoverflow and may leave the program
                +# in an unrecoverable state. It is discouraged.
                +#
                @@ -411 +421,0 @@
                -#   defaults to the empty \String, <tt>''</tt>;
                @@ -418,0 +429,5 @@
                +# - Option +sort_keys+ (boolean or \Proc) controls whether and how the keys of a
                +#   hash are sorted when generating the output; defaults to <tt>false</tt>.
                +#   When +true+, keys are sorted lexicographically. When a \Proc, it receives
                +#   the entire \Hash and must return a \Hash with its pairs in the desired
                +#   order, allowing for arbitrary sort orders.
        lib/json/common.rb
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/lib/json/common.rb	2026-08-10 02:34:52.870204128 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/lib/json/common.rb	2026-08-10 02:34:53.008204937 +0000
                @@ -157,0 +158,9 @@
                +
                +      # The default proc used when the +sort_keys+ generation option is +true+.
                +      # It returns a new hash with the entries sorted by their keys.
                +      sort_keys_proc = ->(hash) { hash.sort.to_h }
                +      if defined?(::Ractor) && Ractor.respond_to?(:shareable_lambda)
                +        sort_keys_proc = Ractor.shareable_lambda(&sort_keys_proc)
                +      end
                +      generator::State.default_sort_keys_proc = sort_keys_proc
                +
        lib/json/ext.rb
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/lib/json/ext.rb	2026-08-10 02:34:52.870204128 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/lib/json/ext.rb	2026-08-10 02:34:53.008204937 +0000
                @@ -43,0 +44,26 @@
                +  if defined?(ResumableParser) # Not yet available on JRuby
                +    class ResumableParser
                +      # Returns whether the parser is entirely done: no unconsumed bytes in
                +      # the buffer, no document under construction and no parsed value
                +      # awaiting retrieval.
                +      #
                +      # The main use case is detecting a truncated stream once the input is
                +      # exhausted:
                +      #
                +      #   loop do
                +      #     begin
                +      #       parser << socket.readpartial(4096)
                +      #     rescue EOFError
                +      #       break
                +      #     end
                +      #     while parser.parse
                +      #       process(parser.value)
                +      #     end
                +      #   end
                +      #   warn "stream was truncated" unless parser.empty?
                +      def empty?
                +        eos? && !partial_value? && !value?
                +      end
                +    end
                +  end
                +
        lib/json/ext/generator/state.rb
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/lib/json/ext/generator/state.rb	2026-08-10 02:34:52.871204134 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/lib/json/ext/generator/state.rb	2026-08-10 02:34:53.008204937 +0000
                @@ -56,0 +57 @@
                +            sort_keys: sort_keys
        lib/json/truffle_ruby/generator.rb
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/lib/json/truffle_ruby/generator.rb	2026-08-10 02:34:52.872204140 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/lib/json/truffle_ruby/generator.rb	2026-08-10 02:34:53.009204943 +0000
                @@ -113,0 +114,2 @@
                +        singleton_class.attr_accessor :default_sort_keys_proc # :nodoc:
                +
                @@ -166,0 +169 @@
                +          @sort_keys             = false
                @@ -201,0 +205,27 @@
                +        # Controls key sorting in the generated JSON. If set to +true+, object
                +        # keys are sorted by key lexicographically. If set to a Proc, it
                +        # receives the entire Hash and must return a Hash with its pairs in the
                +        # desired order.
                +        attr_reader :sort_keys
                +
                +        def sort_keys=(value) # :nodoc:
                +          type_error = false
                +          @sort_keys = case value
                +          when Proc
                +            value
                +          when true
                +            State.default_sort_keys_proc
                +          when nil, false
                +            false
                +          else
                +            type_error = true
                +            false
                +          end
                +
                +          if type_error
                +            raise TypeError, "The `sort_keys` argument must be a boolean or a Proc"
                +          end
                +
                +          @sort_keys
                +        end
                +
                @@ -287,0 +318 @@
                +          self.sort_keys         = opts[:sort_keys]           if opts.key?(:sort_keys)
                @@ -352 +383 @@
                -              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj)
                +              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj) and !@sort_keys
                @@ -354,0 +386,4 @@
                +            if @sort_keys
                +              obj = @sort_keys.call(obj)
                +            end
                +
        lib/json/version.rb
                --- /tmp/d20260810-469-d15bjw/json-2.20.0/lib/json/version.rb	2026-08-10 02:34:52.872204140 +0000
                +++ /tmp/d20260810-469-d15bjw/json-2.21.2/lib/json/version.rb	2026-08-10 02:34:53.009204943 +0000
                @@ -4 +4 @@
                -  VERSION = '2.20.0'
                +  VERSION = '2.21.2'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
        CHANGES.md
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/CHANGES.md	2026-08-10 02:35:01.180534891 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/CHANGES.md	2026-08-10 02:35:01.189534913 +0000
                @@ -4,0 +5,16 @@
                +### 2026-07-31 (2.21.2)
                +
                +* Fix a use-after-free bug in `JSON::ResumableParser`. [GHSA-9hj4-r449-hfvc].
                +
                +### 2026-07-13 (2.21.1)
                +
                +* Fix a compilation issue on Window and Microsoft Visual C++.
                +
                +### 2026-07-12 (2.21.0)
                +
                +* `JSON.generate` now accept a `sort_keys` option, which takes either a boolean or a block.
                +* Added `#empty?` and `#partial_value?` methods on `JSON::ResumableParser`.
                +* Numerous correctness and performance fixes for `JSON::ResumableParser`.
                +* Avoid triggering Ruby's `float out of range` warning when parsing out of range numbers.
                +* Declare C types with Ruby 4.1 `RUBY_TYPED_THREAD_SAFE_FREE`.
                +
        README.md
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/README.md	2026-08-10 02:35:01.180534891 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/README.md	2026-08-10 02:35:01.190534916 +0000
                @@ -88 +88 @@
                -JSON.generate(Position.new(1, 2)) # => Position not allowed in JSON (JSON::GeneratorError)
                +JSON.generate(Position.new(1, 2), strict: true) # => Position not allowed in JSON (JSON::GeneratorError)
                @@ -120 +120 @@
                -coder = JSON::Combining.new do |object, is_object_key|
                +coder = JSON::Coder.new do |object, is_object_key|
                @@ -123,2 +123,2 @@
                -    if !string.valid_encoding? || string.encoding != Encoding::UTF_8
                -      Base64.encode64(string)
                +    if !object.valid_encoding? || object.encoding != Encoding::UTF_8
                +      Base64.encode64(object)
                @@ -126 +126 @@
                -      string
                +      object
        ext/json/ext/generator/generator.c
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/ext/json/ext/generator/generator.c	2026-08-10 02:35:01.181534893 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/ext/json/ext/generator/generator.c	2026-08-10 02:35:01.191534918 +0000
                @@ -36,0 +37 @@
                +    VALUE sort_keys;
                @@ -39 +40 @@
                -static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8;
                +static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8, default_sort_keys_proc;
                @@ -43 +44 @@
                -             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json;
                +             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json, sym_sort_keys;
                @@ -711,0 +713 @@
                +    rb_gc_mark_movable(state->sort_keys);
                @@ -722,0 +725 @@
                +    state->sort_keys = rb_gc_location(state->sort_keys);
                @@ -742 +745 @@
                -    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -771,0 +775 @@
                +    RB_OBJ_WRITTEN(vstate, Qundef, state->sort_keys);
                @@ -1052,0 +1057,5 @@
                +    if (RB_UNLIKELY(data->state->sort_keys)) {
                +        obj = rb_proc_call_with_block(data->state->sort_keys, 1, &obj, Qnil);
                +        Check_Type(obj, T_HASH);
                +    }
                +
                @@ -1378,0 +1388 @@
                +    RB_OBJ_WRITTEN(obj, Qundef, objState->sort_keys);
                @@ -1724,0 +1735,49 @@
                +static VALUE cState_set_default_sort_keys_proc(VALUE self, VALUE proc)
                +{
                +    if (!rb_obj_is_proc(proc)) {
                +        rb_raise(rb_eTypeError, "sort_key_proc must be a Proc");
                +    }
                +    return default_sort_keys_proc = proc;
                +}
                +
                +static VALUE normalize_sort_keys(VALUE value)
                +{
                +    if (rb_obj_is_proc(value)) {
                +        return value;
                +    } else if (value == Qtrue) {
                +        return default_sort_keys_proc;
                +    } else if (RTEST(value)) {
                +        rb_raise(rb_eTypeError, "The `sort_keys` argument must be a boolean or a Proc");
                +    } else {
                +        return Qfalse;
                +    }
                +}
                +
                +/*
                + * call-seq: sort_keys
                + *
                + * Get the value of sort_keys.
                + */
                +static VALUE cState_sort_keys_p(VALUE self)
                +{
                +    GET_STATE(self);
                +    return state->sort_keys;
                +}
                +
                +/*
                + * call-seq: sort_keys=(value)
                + *
                + * value is a boolean or a proc. If the value is the boolean true, object keys
                + * will be sorted lexicographically in ascending order.
                + *
                + * If the value is a proc, it receives the entire Hash and must return a Hash
                + * with its pairs in the desired order, allowing for arbitrary sorting.
                + */
                +static VALUE cState_sort_keys_set(VALUE self, VALUE value)
                +{
                +    rb_check_frozen(self);
                +    GET_STATE(self);
                +    RB_OBJ_WRITE(self, &state->sort_keys, normalize_sort_keys(value));
                +    return Qnil;
                +}
                +
                @@ -1834,0 +1894,3 @@
                +    else if (key == sym_sort_keys)             {
                +        state_write_value(data, &state->sort_keys, normalize_sort_keys(val));
                +    }
                @@ -1911,0 +1974,2 @@
                +    rb_global_variable(&default_sort_keys_proc);
                +
                @@ -1920,0 +1985,2 @@
                +    rb_define_singleton_method(cState, "default_sort_keys_proc=", cState_set_default_sort_keys_proc, 1);
                +
                @@ -1959,0 +2026,2 @@
                +    rb_define_method(cState, "sort_keys", cState_sort_keys_p, 0);
                +    rb_define_method(cState, "sort_keys=", cState_sort_keys_set, 1);
                @@ -1988,0 +2057 @@
                +    sym_sort_keys = ID2SYM(rb_intern("sort_keys"));
        ext/json/ext/json.h
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/ext/json/ext/json.h	2026-08-10 02:35:01.181534893 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/ext/json/ext/json.h	2026-08-10 02:35:01.191534918 +0000
                @@ -33,0 +34,4 @@
                +#ifndef RUBY_TYPED_THREAD_SAFE_FREE
                +#define RUBY_TYPED_THREAD_SAFE_FREE RUBY_TYPED_FREE_IMMEDIATELY
                +#endif
                +
        ext/json/ext/parser/extconf.rb
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/ext/json/ext/parser/extconf.rb	2026-08-10 02:35:01.181534893 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/ext/json/ext/parser/extconf.rb	2026-08-10 02:35:01.299535186 +0000
                @@ -18,16 +17,0 @@
                -def have_builtin_func(name, check_expr, opt = "", &b)
                -  checking_for checking_message(name.funcall_style, nil, opt) do
                -    if try_compile(<<SRC, opt, &b)
                -int foo;
                -int main() { #{check_expr}; return 0; }
                -SRC
                -      $defs.push(format("-DHAVE_BUILTIN_%s", name.tr_cpp))
                -      true
                -    else
                -      false
                -    end
                -  end
                -end
                -
                -have_builtin_func("__builtin_clzll", "__builtin_clzll(0)")
                -
                @@ -47,0 +32,6 @@
                +
                +# Disable function outlining on clang to prevent some of the repeated instructions
                +# in json_eat_whitespace being outlined into function calls.
                +# Note: This verifies '-mno-outline' is accepted as a valid compiler flag
                +# and will not pass it if unsupported.
                +append_cflags("-mno-outline")
        ext/json/ext/parser/parser.c
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/ext/json/ext/parser/parser.c	2026-08-10 02:35:01.182534896 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/ext/json/ext/parser/parser.c	2026-08-10 02:35:01.300535188 +0000
                @@ -8 +8,4 @@
                -static ID i_new, i_try_convert, i_uminus, i_encode, i_at_line, i_at_column;
                +static ID i_new, i_try_convert, i_encode, i_at_line, i_at_column;
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                +static ID i_uminus;
                +#endif
                @@ -317 +320 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -514 +517 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                @@ -588,0 +592,2 @@
                +    JSON_ASSERT(!state->parser);
                +    JSON_ASSERT(state->cursor);
                @@ -621,4 +626,8 @@
                -    long line, column;
                -    cursor_position(state, &line, &column);
                -
                -    VALUE warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    VALUE warning;
                +    if (state->parser) { // line and columns can't be accurate in resumable
                +        warning = rb_utf8_str_new_cstr(message);
                +    } else {
                +        long line, column;
                +        cursor_position(state, &line, &column);
                +        warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    }
                @@ -768 +777 @@
                -json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config)
                +json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config, const char *resume_pos)
                @@ -774,0 +784,5 @@
                +    // An incomplete comment suspends a resumable parse by rewinding the cursor
                +    // and throwing. Callers that already consumed a token not yet committed to
                +    // the frame stack pass resume_pos so the rewind re-reads that token too.
                +    // Non-resumable error positions keep pointing at the comment either way.
                +    const char *rewind_pos = (state->parser && resume_pos) ? resume_pos : start;
                @@ -779,2 +793,9 @@
                -            state->cursor = memchr(state->cursor, '\n', state->end - state->cursor);
                -            if (!state->cursor) {
                +            const char *newline = memchr(state->cursor, '\n', state->end - state->cursor);
                +            if (!newline) {
                +                // state->parser marks resumable mode, where the buffer end is only a
                +                // chunk boundary: the terminating newline may still arrive, so leave
                +                // the comment unterminated instead of consuming to end as a one-shot
                +                // parse would.
                +                if (state->parser) {
                +                    raise_eos_error_at("unterminated comment, expected end of line", state, rewind_pos);
                +                }
                @@ -783 +804 @@
                -                state->cursor++;
                +                state->cursor = newline + 1;
                @@ -793 +814 @@
                -                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, start);
                +                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, rewind_pos);
                @@ -805 +826 @@
                -            raise_parse_error_at("unexpected token %s", state, start, eos(state));
                +            raise_parse_error_at("unexpected token %s", state, eos(state) ? rewind_pos : start, eos(state));
                @@ -816 +837 @@
                -json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +json_eat_whitespace_resume_at(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments, const char *resume_pos)
                @@ -851 +872 @@
                -                json_eat_comments(state, config);
                +                json_eat_comments(state, config, resume_pos);
                @@ -859,0 +881,6 @@
                +ALWAYS_INLINE(static) void
                +json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +{
                +    json_eat_whitespace_resume_at(state, config, include_comments, NULL);
                +}
                +
                @@ -1132,0 +1160,7 @@
                +        // If the value is so small that it definitely underflows to 0.0, return early
                +        // to avoid triggering a "Float out of range" warning from rb_cstr_to_dbl.
                +        // When mantissa_digits + exponent < -324, value < 10^(-324) < DBL_TRUE_MIN/2,
                +        // so it rounds to 0 in IEEE 754 round-to-nearest.
                +        if (RB_UNLIKELY(mantissa_digits + exponent < -324)) {
                +            return rb_float_new(negative ? -0.0 : 0.0);
                +        }
                @@ -1432 +1466 @@
                -static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start)
                +static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start, bool resumable)
                @@ -1488,0 +1523,10 @@
                +    // A number touching the end of the buffer may still grow in a later chunk,
                +    // so the caller will rewind and wait. Decoding it now would build a value
                +    // -- for a long run of digits, an expensive bignum -- only to discard it,
                +    // and repeating that on every resumed chunk is quadratic in the number's
                +    // length. The digit scan above already advanced the cursor, which is all
                +    // the caller needs to detect the incomplete number.
                +    if (RB_UNLIKELY(resumable && eos(state))) {
                +        return Qundef;
                +    }
                +
                @@ -1565,0 +1610,7 @@
                +        // A trailing comma lands us here expecting an element but finding the
                +        // closing bracket; hand off to ARRAY_COMMA to close. An empty array
                +        // closes inline at '[', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && frame->type == JSON_FRAME_ARRAY && peek(state) == ']') {
                +            goto JSON_PHASE_ARRAY_COMMA;
                +        }
                +
                @@ -1606 +1657 @@
                -                value = json_parse_number(state, config, true, value_start);
                +                value = json_parse_number(state, config, true, value_start, resumable);
                @@ -1629 +1680 @@
                -                value = json_parse_number(state, config, false, value_start);
                +                value = json_parse_number(state, config, false, value_start, resumable);
                @@ -1661 +1712,3 @@
                -                json_eat_whitespace(state, config, true);
                +                // The '[' is consumed but its frame is only pushed below, so a
                +                // comment suspending here must resume from the bracket.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1690 +1743,2 @@
                -                json_eat_whitespace(state, config, true);
                +                // Same as '[': the frame is only pushed below.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1747,0 +1802,7 @@
                +        // A trailing comma lands us here expecting a key but finding the closing
                +        // brace; hand off to OBJECT_COMMA to close. An empty object closes inline
                +        // at '{', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && peek(state) == '}') {
                +            goto JSON_PHASE_OBJECT_COMMA;
                +        }
                +
                @@ -1810,7 +1871,4 @@
                -            if (config->allow_trailing_comma) {
                -                json_eat_whitespace(state, config, true);
                -                if (peek(state) == ']') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_ARRAY_COMMA;
                -                }
                -            }
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_VALUE once the ']' is in the buffer.
                @@ -1855,9 +1913,4 @@
                -            json_eat_whitespace(state, config, true);
                -
                -            if (config->allow_trailing_comma) {
                -                if (peek(state) == '}') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_OBJECT_COMMA;
                -                }
                -            }
                -
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_OBJECT_KEY once the '}' is in the buffer.
                @@ -2183 +2236 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -2268 +2321 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -2521,0 +2575 @@
                +        parser->state.start = parser->state.cursor = parser->state.end = 0;
                @@ -2618 +2672,6 @@
                -    // Copy the value stack as we need to mutate it.
                +    // Copy the value stack as we need to mutate it. The collapse loop folds each
                +    // open container by popping its entries and pushing the single result, so a
                +    // parent always reclaims its child's slot; head exceeds its live size by at
                +    // most one, either for the missing-value placeholder pushed below or for the
                +    // result of folding an empty innermost container. That one spare slot keeps
                +    // rvalue_stack_push from growing (reallocating) this ALLOCV buffer.
                @@ -2620,3 +2679,3 @@
                -    parser.value_stack.capa = (capa + missing_object_value);
                -    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, capa + missing_object_value);
                -    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, parser.value_stack.capa);
                +    parser.value_stack.capa = capa + 1;
                +    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, parser.value_stack.capa);
                +    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, capa);
                @@ -2715 +2774 @@
                - * call-seq: value? -> true or false
                + * call-seq: eos? -> true or false
                @@ -2725,0 +2785,35 @@
                + * call-seq: partial_value? -> true or false
                + *
                + * Returns whether a document is currently under construction: an unclosed
                + * container, a key awaiting its value, etc.
                + *
                + * It answers the same question as <tt>!partial_value.nil?</tt>, but as a
                + * cheap predicate on the parser's internal state, without materializing the
                + * partially parsed Ruby objects:
                + *   parser << '{"a":1,'
                + *   parser.parse # => false
                + *   parser.partial_value? # => true
                + *
                + * A fully parsed document whose value hasn't been retrieved yet is not under
                + * construction: #value? returns true and #partial_value? returns false.
                + */
                +static VALUE cResumableParser_partial_value_p(VALUE self)
                +{
                +    JSON_ResumableParser *parser = cResumableParser_get(self);
                +
                +    // Mirror of #value?: values on the stack while the document isn't DONE
                +    // belong to a partially built document. A container whose first key or
                +    // element hasn't been parsed yet has no frame nor value registered (the
                +    // tokenizer rewinds to the container start on EOS), so that state is
                +    // observable through the buffer (#eos?/#rest) instead, keeping this
                +    // predicate consistent with #partial_value returning nil.
                +    if (parser->value_stack.head > 0) {
                +        json_frame *frame = json_frame_stack_peek(&parser->frames);
                +        if (frame->phase != JSON_PHASE_DONE) {
                +            return Qtrue;
                +        }
                +    }
                +    return Qfalse;
                +}
                +
                +/*
                @@ -2780,0 +2875 @@
                +    rb_define_method(cResumableParser, "partial_value?", cResumableParser_partial_value_p, 0);
                @@ -2814,0 +2910 @@
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                @@ -2815,0 +2912 @@
                +#endif
        lib/json.rb
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/lib/json.rb	2026-08-10 02:35:01.185534903 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/lib/json.rb	2026-08-10 02:35:01.301535191 +0000
                @@ -124 +124,3 @@
                -# defaults to +100+; specify +false+ to disable depth checking.
                +# defaults to +100+;
                +# You can set it to +false+ to disable depth checking entirely, but that is dangerous
                +# when parsing untrusted input.
                @@ -126 +128 @@
                -# With the default, +false+:
                +# With the default, +100+:
                @@ -386,0 +389,9 @@
                +# With +false+:
                +#   obj = []
                +#   obj[0] = obj
                +#   # Raises  SystemStackError: stack level too deep
                +#   JSON.generate(obj, max_nesting: false)
                +#
                +# Setting +max_nesting+ to +false+ can lead to a stackoverflow and may leave the program
                +# in an unrecoverable state. It is discouraged.
                +#
                @@ -411 +421,0 @@
                -#   defaults to the empty \String, <tt>''</tt>;
                @@ -418,0 +429,5 @@
                +# - Option +sort_keys+ (boolean or \Proc) controls whether and how the keys of a
                +#   hash are sorted when generating the output; defaults to <tt>false</tt>.
                +#   When +true+, keys are sorted lexicographically. When a \Proc, it receives
                +#   the entire \Hash and must return a \Hash with its pairs in the desired
                +#   order, allowing for arbitrary sort orders.
        lib/json/common.rb
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/lib/json/common.rb	2026-08-10 02:35:01.187534908 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/lib/json/common.rb	2026-08-10 02:35:01.302535193 +0000
                @@ -157,0 +158,9 @@
                +
                +      # The default proc used when the +sort_keys+ generation option is +true+.
                +      # It returns a new hash with the entries sorted by their keys.
                +      sort_keys_proc = ->(hash) { hash.sort.to_h }
                +      if defined?(::Ractor) && Ractor.respond_to?(:shareable_lambda)
                +        sort_keys_proc = Ractor.shareable_lambda(&sort_keys_proc)
                +      end
                +      generator::State.default_sort_keys_proc = sort_keys_proc
                +
        lib/json/ext.rb
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/lib/json/ext.rb	2026-08-10 02:35:01.188534911 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/lib/json/ext.rb	2026-08-10 02:35:01.302535193 +0000
                @@ -43,0 +44,26 @@
                +  if defined?(ResumableParser) # Not yet available on JRuby
                +    class ResumableParser
                +      # Returns whether the parser is entirely done: no unconsumed bytes in
                +      # the buffer, no document under construction and no parsed value
                +      # awaiting retrieval.
                +      #
                +      # The main use case is detecting a truncated stream once the input is
                +      # exhausted:
                +      #
                +      #   loop do
                +      #     begin
                +      #       parser << socket.readpartial(4096)
                +      #     rescue EOFError
                +      #       break
                +      #     end
                +      #     while parser.parse
                +      #       process(parser.value)
                +      #     end
                +      #   end
                +      #   warn "stream was truncated" unless parser.empty?
                +      def empty?
                +        eos? && !partial_value? && !value?
                +      end
                +    end
                +  end
                +
        lib/json/ext/generator/state.rb
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/lib/json/ext/generator/state.rb	2026-08-10 02:35:01.188534911 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/lib/json/ext/generator/state.rb	2026-08-10 02:35:01.303535196 +0000
                @@ -56,0 +57 @@
                +            sort_keys: sort_keys
        lib/json/truffle_ruby/generator.rb
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/lib/json/truffle_ruby/generator.rb	2026-08-10 02:35:01.189534913 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/lib/json/truffle_ruby/generator.rb	2026-08-10 02:35:01.303535196 +0000
                @@ -113,0 +114,2 @@
                +        singleton_class.attr_accessor :default_sort_keys_proc # :nodoc:
                +
                @@ -166,0 +169 @@
                +          @sort_keys             = false
                @@ -201,0 +205,27 @@
                +        # Controls key sorting in the generated JSON. If set to +true+, object
                +        # keys are sorted by key lexicographically. If set to a Proc, it
                +        # receives the entire Hash and must return a Hash with its pairs in the
                +        # desired order.
                +        attr_reader :sort_keys
                +
                +        def sort_keys=(value) # :nodoc:
                +          type_error = false
                +          @sort_keys = case value
                +          when Proc
                +            value
                +          when true
                +            State.default_sort_keys_proc
                +          when nil, false
                +            false
                +          else
                +            type_error = true
                +            false
                +          end
                +
                +          if type_error
                +            raise TypeError, "The `sort_keys` argument must be a boolean or a Proc"
                +          end
                +
                +          @sort_keys
                +        end
                +
                @@ -287,0 +318 @@
                +          self.sort_keys         = opts[:sort_keys]           if opts.key?(:sort_keys)
                @@ -352 +383 @@
                -              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj)
                +              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj) and !@sort_keys
                @@ -354,0 +386,4 @@
                +            if @sort_keys
                +              obj = @sort_keys.call(obj)
                +            end
                +
        lib/json/version.rb
                --- /tmp/d20260810-470-4ay2g6/json-2.20.0/lib/json/version.rb	2026-08-10 02:35:01.189534913 +0000
                +++ /tmp/d20260810-470-4ay2g6/json-2.21.2/lib/json/version.rb	2026-08-10 02:35:01.303535196 +0000
                @@ -4 +4 @@
                -  VERSION = '2.20.0'
                +  VERSION = '2.21.2'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
        CHANGES.md
                --- /tmp/d20260810-461-6zikya/json-2.20.0/CHANGES.md	2026-08-10 02:35:06.545232444 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/CHANGES.md	2026-08-10 02:35:06.565232479 +0000
                @@ -4,0 +5,16 @@
                +### 2026-07-31 (2.21.2)
                +
                +* Fix a use-after-free bug in `JSON::ResumableParser`. [GHSA-9hj4-r449-hfvc].
                +
                +### 2026-07-13 (2.21.1)
                +
                +* Fix a compilation issue on Window and Microsoft Visual C++.
                +
                +### 2026-07-12 (2.21.0)
                +
                +* `JSON.generate` now accept a `sort_keys` option, which takes either a boolean or a block.
                +* Added `#empty?` and `#partial_value?` methods on `JSON::ResumableParser`.
                +* Numerous correctness and performance fixes for `JSON::ResumableParser`.
                +* Avoid triggering Ruby's `float out of range` warning when parsing out of range numbers.
                +* Declare C types with Ruby 4.1 `RUBY_TYPED_THREAD_SAFE_FREE`.
                +
        README.md
                --- /tmp/d20260810-461-6zikya/json-2.20.0/README.md	2026-08-10 02:35:06.546232446 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/README.md	2026-08-10 02:35:06.566232481 +0000
                @@ -88 +88 @@
                -JSON.generate(Position.new(1, 2)) # => Position not allowed in JSON (JSON::GeneratorError)
                +JSON.generate(Position.new(1, 2), strict: true) # => Position not allowed in JSON (JSON::GeneratorError)
                @@ -120 +120 @@
                -coder = JSON::Combining.new do |object, is_object_key|
                +coder = JSON::Coder.new do |object, is_object_key|
                @@ -123,2 +123,2 @@
                -    if !string.valid_encoding? || string.encoding != Encoding::UTF_8
                -      Base64.encode64(string)
                +    if !object.valid_encoding? || object.encoding != Encoding::UTF_8
                +      Base64.encode64(object)
                @@ -126 +126 @@
                -      string
                +      object
        ext/json/ext/generator/generator.c
                --- /tmp/d20260810-461-6zikya/json-2.20.0/ext/json/ext/generator/generator.c	2026-08-10 02:35:06.549232451 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/ext/json/ext/generator/generator.c	2026-08-10 02:35:06.566232481 +0000
                @@ -36,0 +37 @@
                +    VALUE sort_keys;
                @@ -39 +40 @@
                -static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8;
                +static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8, default_sort_keys_proc;
                @@ -43 +44 @@
                -             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json;
                +             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json, sym_sort_keys;
                @@ -711,0 +713 @@
                +    rb_gc_mark_movable(state->sort_keys);
                @@ -722,0 +725 @@
                +    state->sort_keys = rb_gc_location(state->sort_keys);
                @@ -742 +745 @@
                -    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -771,0 +775 @@
                +    RB_OBJ_WRITTEN(vstate, Qundef, state->sort_keys);
                @@ -1052,0 +1057,5 @@
                +    if (RB_UNLIKELY(data->state->sort_keys)) {
                +        obj = rb_proc_call_with_block(data->state->sort_keys, 1, &obj, Qnil);
                +        Check_Type(obj, T_HASH);
                +    }
                +
                @@ -1378,0 +1388 @@
                +    RB_OBJ_WRITTEN(obj, Qundef, objState->sort_keys);
                @@ -1724,0 +1735,49 @@
                +static VALUE cState_set_default_sort_keys_proc(VALUE self, VALUE proc)
                +{
                +    if (!rb_obj_is_proc(proc)) {
                +        rb_raise(rb_eTypeError, "sort_key_proc must be a Proc");
                +    }
                +    return default_sort_keys_proc = proc;
                +}
                +
                +static VALUE normalize_sort_keys(VALUE value)
                +{
                +    if (rb_obj_is_proc(value)) {
                +        return value;
                +    } else if (value == Qtrue) {
                +        return default_sort_keys_proc;
                +    } else if (RTEST(value)) {
                +        rb_raise(rb_eTypeError, "The `sort_keys` argument must be a boolean or a Proc");
                +    } else {
                +        return Qfalse;
                +    }
                +}
                +
                +/*
                + * call-seq: sort_keys
                + *
                + * Get the value of sort_keys.
                + */
                +static VALUE cState_sort_keys_p(VALUE self)
                +{
                +    GET_STATE(self);
                +    return state->sort_keys;
                +}
                +
                +/*
                + * call-seq: sort_keys=(value)
                + *
                + * value is a boolean or a proc. If the value is the boolean true, object keys
                + * will be sorted lexicographically in ascending order.
                + *
                + * If the value is a proc, it receives the entire Hash and must return a Hash
                + * with its pairs in the desired order, allowing for arbitrary sorting.
                + */
                +static VALUE cState_sort_keys_set(VALUE self, VALUE value)
                +{
                +    rb_check_frozen(self);
                +    GET_STATE(self);
                +    RB_OBJ_WRITE(self, &state->sort_keys, normalize_sort_keys(value));
                +    return Qnil;
                +}
                +
                @@ -1834,0 +1894,3 @@
                +    else if (key == sym_sort_keys)             {
                +        state_write_value(data, &state->sort_keys, normalize_sort_keys(val));
                +    }
                @@ -1911,0 +1974,2 @@
                +    rb_global_variable(&default_sort_keys_proc);
                +
                @@ -1920,0 +1985,2 @@
                +    rb_define_singleton_method(cState, "default_sort_keys_proc=", cState_set_default_sort_keys_proc, 1);
                +
                @@ -1959,0 +2026,2 @@
                +    rb_define_method(cState, "sort_keys", cState_sort_keys_p, 0);
                +    rb_define_method(cState, "sort_keys=", cState_sort_keys_set, 1);
                @@ -1988,0 +2057 @@
                +    sym_sort_keys = ID2SYM(rb_intern("sort_keys"));
        ext/json/ext/json.h
                --- /tmp/d20260810-461-6zikya/json-2.20.0/ext/json/ext/json.h	2026-08-10 02:35:06.550232453 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/ext/json/ext/json.h	2026-08-10 02:35:06.567232482 +0000
                @@ -33,0 +34,4 @@
                +#ifndef RUBY_TYPED_THREAD_SAFE_FREE
                +#define RUBY_TYPED_THREAD_SAFE_FREE RUBY_TYPED_FREE_IMMEDIATELY
                +#endif
                +
        ext/json/ext/parser/extconf.rb
                --- /tmp/d20260810-461-6zikya/json-2.20.0/ext/json/ext/parser/extconf.rb	2026-08-10 02:35:06.550232453 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/ext/json/ext/parser/extconf.rb	2026-08-10 02:35:06.568232484 +0000
                @@ -18,16 +17,0 @@
                -def have_builtin_func(name, check_expr, opt = "", &b)
                -  checking_for checking_message(name.funcall_style, nil, opt) do
                -    if try_compile(<<SRC, opt, &b)
                -int foo;
                -int main() { #{check_expr}; return 0; }
                -SRC
                -      $defs.push(format("-DHAVE_BUILTIN_%s", name.tr_cpp))
                -      true
                -    else
                -      false
                -    end
                -  end
                -end
                -
                -have_builtin_func("__builtin_clzll", "__builtin_clzll(0)")
                -
                @@ -47,0 +32,6 @@
                +
                +# Disable function outlining on clang to prevent some of the repeated instructions
                +# in json_eat_whitespace being outlined into function calls.
                +# Note: This verifies '-mno-outline' is accepted as a valid compiler flag
                +# and will not pass it if unsupported.
                +append_cflags("-mno-outline")
        ext/json/ext/parser/parser.c
                --- /tmp/d20260810-461-6zikya/json-2.20.0/ext/json/ext/parser/parser.c	2026-08-10 02:35:06.551232455 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/ext/json/ext/parser/parser.c	2026-08-10 02:35:06.708232726 +0000
                @@ -8 +8,4 @@
                -static ID i_new, i_try_convert, i_uminus, i_encode, i_at_line, i_at_column;
                +static ID i_new, i_try_convert, i_encode, i_at_line, i_at_column;
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                +static ID i_uminus;
                +#endif
                @@ -317 +320 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -514 +517 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                @@ -588,0 +592,2 @@
                +    JSON_ASSERT(!state->parser);
                +    JSON_ASSERT(state->cursor);
                @@ -621,4 +626,8 @@
                -    long line, column;
                -    cursor_position(state, &line, &column);
                -
                -    VALUE warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    VALUE warning;
                +    if (state->parser) { // line and columns can't be accurate in resumable
                +        warning = rb_utf8_str_new_cstr(message);
                +    } else {
                +        long line, column;
                +        cursor_position(state, &line, &column);
                +        warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    }
                @@ -768 +777 @@
                -json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config)
                +json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config, const char *resume_pos)
                @@ -774,0 +784,5 @@
                +    // An incomplete comment suspends a resumable parse by rewinding the cursor
                +    // and throwing. Callers that already consumed a token not yet committed to
                +    // the frame stack pass resume_pos so the rewind re-reads that token too.
                +    // Non-resumable error positions keep pointing at the comment either way.
                +    const char *rewind_pos = (state->parser && resume_pos) ? resume_pos : start;
                @@ -779,2 +793,9 @@
                -            state->cursor = memchr(state->cursor, '\n', state->end - state->cursor);
                -            if (!state->cursor) {
                +            const char *newline = memchr(state->cursor, '\n', state->end - state->cursor);
                +            if (!newline) {
                +                // state->parser marks resumable mode, where the buffer end is only a
                +                // chunk boundary: the terminating newline may still arrive, so leave
                +                // the comment unterminated instead of consuming to end as a one-shot
                +                // parse would.
                +                if (state->parser) {
                +                    raise_eos_error_at("unterminated comment, expected end of line", state, rewind_pos);
                +                }
                @@ -783 +804 @@
                -                state->cursor++;
                +                state->cursor = newline + 1;
                @@ -793 +814 @@
                -                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, start);
                +                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, rewind_pos);
                @@ -805 +826 @@
                -            raise_parse_error_at("unexpected token %s", state, start, eos(state));
                +            raise_parse_error_at("unexpected token %s", state, eos(state) ? rewind_pos : start, eos(state));
                @@ -816 +837 @@
                -json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +json_eat_whitespace_resume_at(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments, const char *resume_pos)
                @@ -851 +872 @@
                -                json_eat_comments(state, config);
                +                json_eat_comments(state, config, resume_pos);
                @@ -859,0 +881,6 @@
                +ALWAYS_INLINE(static) void
                +json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +{
                +    json_eat_whitespace_resume_at(state, config, include_comments, NULL);
                +}
                +
                @@ -1132,0 +1160,7 @@
                +        // If the value is so small that it definitely underflows to 0.0, return early
                +        // to avoid triggering a "Float out of range" warning from rb_cstr_to_dbl.
                +        // When mantissa_digits + exponent < -324, value < 10^(-324) < DBL_TRUE_MIN/2,
                +        // so it rounds to 0 in IEEE 754 round-to-nearest.
                +        if (RB_UNLIKELY(mantissa_digits + exponent < -324)) {
                +            return rb_float_new(negative ? -0.0 : 0.0);
                +        }
                @@ -1432 +1466 @@
                -static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start)
                +static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start, bool resumable)
                @@ -1488,0 +1523,10 @@
                +    // A number touching the end of the buffer may still grow in a later chunk,
                +    // so the caller will rewind and wait. Decoding it now would build a value
                +    // -- for a long run of digits, an expensive bignum -- only to discard it,
                +    // and repeating that on every resumed chunk is quadratic in the number's
                +    // length. The digit scan above already advanced the cursor, which is all
                +    // the caller needs to detect the incomplete number.
                +    if (RB_UNLIKELY(resumable && eos(state))) {
                +        return Qundef;
                +    }
                +
                @@ -1565,0 +1610,7 @@
                +        // A trailing comma lands us here expecting an element but finding the
                +        // closing bracket; hand off to ARRAY_COMMA to close. An empty array
                +        // closes inline at '[', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && frame->type == JSON_FRAME_ARRAY && peek(state) == ']') {
                +            goto JSON_PHASE_ARRAY_COMMA;
                +        }
                +
                @@ -1606 +1657 @@
                -                value = json_parse_number(state, config, true, value_start);
                +                value = json_parse_number(state, config, true, value_start, resumable);
                @@ -1629 +1680 @@
                -                value = json_parse_number(state, config, false, value_start);
                +                value = json_parse_number(state, config, false, value_start, resumable);
                @@ -1661 +1712,3 @@
                -                json_eat_whitespace(state, config, true);
                +                // The '[' is consumed but its frame is only pushed below, so a
                +                // comment suspending here must resume from the bracket.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1690 +1743,2 @@
                -                json_eat_whitespace(state, config, true);
                +                // Same as '[': the frame is only pushed below.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1747,0 +1802,7 @@
                +        // A trailing comma lands us here expecting a key but finding the closing
                +        // brace; hand off to OBJECT_COMMA to close. An empty object closes inline
                +        // at '{', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && peek(state) == '}') {
                +            goto JSON_PHASE_OBJECT_COMMA;
                +        }
                +
                @@ -1810,7 +1871,4 @@
                -            if (config->allow_trailing_comma) {
                -                json_eat_whitespace(state, config, true);
                -                if (peek(state) == ']') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_ARRAY_COMMA;
                -                }
                -            }
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_VALUE once the ']' is in the buffer.
                @@ -1855,9 +1913,4 @@
                -            json_eat_whitespace(state, config, true);
                -
                -            if (config->allow_trailing_comma) {
                -                if (peek(state) == '}') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_OBJECT_COMMA;
                -                }
                -            }
                -
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_OBJECT_KEY once the '}' is in the buffer.
                @@ -2183 +2236 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -2268 +2321 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -2521,0 +2575 @@
                +        parser->state.start = parser->state.cursor = parser->state.end = 0;
                @@ -2618 +2672,6 @@
                -    // Copy the value stack as we need to mutate it.
                +    // Copy the value stack as we need to mutate it. The collapse loop folds each
                +    // open container by popping its entries and pushing the single result, so a
                +    // parent always reclaims its child's slot; head exceeds its live size by at
                +    // most one, either for the missing-value placeholder pushed below or for the
                +    // result of folding an empty innermost container. That one spare slot keeps
                +    // rvalue_stack_push from growing (reallocating) this ALLOCV buffer.
                @@ -2620,3 +2679,3 @@
                -    parser.value_stack.capa = (capa + missing_object_value);
                -    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, capa + missing_object_value);
                -    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, parser.value_stack.capa);
                +    parser.value_stack.capa = capa + 1;
                +    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, parser.value_stack.capa);
                +    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, capa);
                @@ -2715 +2774 @@
                - * call-seq: value? -> true or false
                + * call-seq: eos? -> true or false
                @@ -2725,0 +2785,35 @@
                + * call-seq: partial_value? -> true or false
                + *
                + * Returns whether a document is currently under construction: an unclosed
                + * container, a key awaiting its value, etc.
                + *
                + * It answers the same question as <tt>!partial_value.nil?</tt>, but as a
                + * cheap predicate on the parser's internal state, without materializing the
                + * partially parsed Ruby objects:
                + *   parser << '{"a":1,'
                + *   parser.parse # => false
                + *   parser.partial_value? # => true
                + *
                + * A fully parsed document whose value hasn't been retrieved yet is not under
                + * construction: #value? returns true and #partial_value? returns false.
                + */
                +static VALUE cResumableParser_partial_value_p(VALUE self)
                +{
                +    JSON_ResumableParser *parser = cResumableParser_get(self);
                +
                +    // Mirror of #value?: values on the stack while the document isn't DONE
                +    // belong to a partially built document. A container whose first key or
                +    // element hasn't been parsed yet has no frame nor value registered (the
                +    // tokenizer rewinds to the container start on EOS), so that state is
                +    // observable through the buffer (#eos?/#rest) instead, keeping this
                +    // predicate consistent with #partial_value returning nil.
                +    if (parser->value_stack.head > 0) {
                +        json_frame *frame = json_frame_stack_peek(&parser->frames);
                +        if (frame->phase != JSON_PHASE_DONE) {
                +            return Qtrue;
                +        }
                +    }
                +    return Qfalse;
                +}
                +
                +/*
                @@ -2780,0 +2875 @@
                +    rb_define_method(cResumableParser, "partial_value?", cResumableParser_partial_value_p, 0);
                @@ -2814,0 +2910 @@
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                @@ -2815,0 +2912 @@
                +#endif
        lib/json.rb
                --- /tmp/d20260810-461-6zikya/json-2.20.0/lib/json.rb	2026-08-10 02:35:06.559232469 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/lib/json.rb	2026-08-10 02:35:06.710232730 +0000
                @@ -124 +124,3 @@
                -# defaults to +100+; specify +false+ to disable depth checking.
                +# defaults to +100+;
                +# You can set it to +false+ to disable depth checking entirely, but that is dangerous
                +# when parsing untrusted input.
                @@ -126 +128 @@
                -# With the default, +false+:
                +# With the default, +100+:
                @@ -386,0 +389,9 @@
                +# With +false+:
                +#   obj = []
                +#   obj[0] = obj
                +#   # Raises  SystemStackError: stack level too deep
                +#   JSON.generate(obj, max_nesting: false)
                +#
                +# Setting +max_nesting+ to +false+ can lead to a stackoverflow and may leave the program
                +# in an unrecoverable state. It is discouraged.
                +#
                @@ -411 +421,0 @@
                -#   defaults to the empty \String, <tt>''</tt>;
                @@ -418,0 +429,5 @@
                +# - Option +sort_keys+ (boolean or \Proc) controls whether and how the keys of a
                +#   hash are sorted when generating the output; defaults to <tt>false</tt>.
                +#   When +true+, keys are sorted lexicographically. When a \Proc, it receives
                +#   the entire \Hash and must return a \Hash with its pairs in the desired
                +#   order, allowing for arbitrary sort orders.
        lib/json/common.rb
                --- /tmp/d20260810-461-6zikya/json-2.20.0/lib/json/common.rb	2026-08-10 02:35:06.562232474 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/lib/json/common.rb	2026-08-10 02:35:06.714232736 +0000
                @@ -157,0 +158,9 @@
                +
                +      # The default proc used when the +sort_keys+ generation option is +true+.
                +      # It returns a new hash with the entries sorted by their keys.
                +      sort_keys_proc = ->(hash) { hash.sort.to_h }
                +      if defined?(::Ractor) && Ractor.respond_to?(:shareable_lambda)
                +        sort_keys_proc = Ractor.shareable_lambda(&sort_keys_proc)
                +      end
                +      generator::State.default_sort_keys_proc = sort_keys_proc
                +
        lib/json/ext.rb
                --- /tmp/d20260810-461-6zikya/json-2.20.0/lib/json/ext.rb	2026-08-10 02:35:06.562232474 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/lib/json/ext.rb	2026-08-10 02:35:06.714232736 +0000
                @@ -43,0 +44,26 @@
                +  if defined?(ResumableParser) # Not yet available on JRuby
                +    class ResumableParser
                +      # Returns whether the parser is entirely done: no unconsumed bytes in
                +      # the buffer, no document under construction and no parsed value
                +      # awaiting retrieval.
                +      #
                +      # The main use case is detecting a truncated stream once the input is
                +      # exhausted:
                +      #
                +      #   loop do
                +      #     begin
                +      #       parser << socket.readpartial(4096)
                +      #     rescue EOFError
                +      #       break
                +      #     end
                +      #     while parser.parse
                +      #       process(parser.value)
                +      #     end
                +      #   end
                +      #   warn "stream was truncated" unless parser.empty?
                +      def empty?
                +        eos? && !partial_value? && !value?
                +      end
                +    end
                +  end
                +
        lib/json/ext/generator/state.rb
                --- /tmp/d20260810-461-6zikya/json-2.20.0/lib/json/ext/generator/state.rb	2026-08-10 02:35:06.563232475 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/lib/json/ext/generator/state.rb	2026-08-10 02:35:06.714232736 +0000
                @@ -56,0 +57 @@
                +            sort_keys: sort_keys
        lib/json/truffle_ruby/generator.rb
                --- /tmp/d20260810-461-6zikya/json-2.20.0/lib/json/truffle_ruby/generator.rb	2026-08-10 02:35:06.563232475 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/lib/json/truffle_ruby/generator.rb	2026-08-10 02:35:06.715232738 +0000
                @@ -113,0 +114,2 @@
                +        singleton_class.attr_accessor :default_sort_keys_proc # :nodoc:
                +
                @@ -166,0 +169 @@
                +          @sort_keys             = false
                @@ -201,0 +205,27 @@
                +        # Controls key sorting in the generated JSON. If set to +true+, object
                +        # keys are sorted by key lexicographically. If set to a Proc, it
                +        # receives the entire Hash and must return a Hash with its pairs in the
                +        # desired order.
                +        attr_reader :sort_keys
                +
                +        def sort_keys=(value) # :nodoc:
                +          type_error = false
                +          @sort_keys = case value
                +          when Proc
                +            value
                +          when true
                +            State.default_sort_keys_proc
                +          when nil, false
                +            false
                +          else
                +            type_error = true
                +            false
                +          end
                +
                +          if type_error
                +            raise TypeError, "The `sort_keys` argument must be a boolean or a Proc"
                +          end
                +
                +          @sort_keys
                +        end
                +
                @@ -287,0 +318 @@
                +          self.sort_keys         = opts[:sort_keys]           if opts.key?(:sort_keys)
                @@ -352 +383 @@
                -              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj)
                +              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj) and !@sort_keys
                @@ -354,0 +386,4 @@
                +            if @sort_keys
                +              obj = @sort_keys.call(obj)
                +            end
                +
        lib/json/version.rb
                --- /tmp/d20260810-461-6zikya/json-2.20.0/lib/json/version.rb	2026-08-10 02:35:06.563232475 +0000
                +++ /tmp/d20260810-461-6zikya/json-2.21.2/lib/json/version.rb	2026-08-10 02:35:06.715232738 +0000
                @@ -4 +4 @@
                -  VERSION = '2.20.0'
                +  VERSION = '2.21.2'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare language_server-protocol 3.17.0.5 3.17.0.6

Compared versions: ["3.17.0.5", "3.17.0.6"]
  DIFFERENT rubygems_version:
    3.17.0.5: 3.6.8
    3.17.0.6: 4.0.10
  DIFFERENT version:
    3.17.0.5: 3.17.0.5
    3.17.0.6: 3.17.0.6
  DIFFERENT files:
    3.17.0.5->3.17.0.6:
      * Added:
            lib/language_server/protocol/constant/lsp_error_codes.rb +41/-0
            lib/language_server/protocol/constant/trace_values.rb +20/-0
            lib/language_server/protocol/interface/base_symbol_information.rb +68/-0
            lib/language_server/protocol/interface/did_change_configuration_registration_options.rb +30/-0
            lib/language_server/protocol/interface/document_diagnostic_report.rb +89/-0
            lib/language_server/protocol/interface/file_operation_client_capabilities.rb +95/-0
            lib/language_server/protocol/interface/file_operation_options.rb +83/-0
            lib/language_server/protocol/interface/general_client_capabilities.rb +91/-0
            lib/language_server/protocol/interface/inline_value.rb +88/-0
            lib/language_server/protocol/interface/markdown_client_capabilities.rb +59/-0
            lib/language_server/protocol/interface/prepare_rename_result.rb +69/-0
            lib/language_server/protocol/interface/resource_operation.rb +47/-0
            lib/language_server/protocol/interface/text_document_filter.rb +69/-0
            lib/language_server/protocol/interface/type_hierarchy_client_capabilities.rb +38/-0
            lib/language_server/protocol/interface/window_client_capabilities.rb +63/-0
            lib/language_server/protocol/interface/workspace_client_capabilities.rb +176/-0
            lib/language_server/protocol/interface/workspace_document_diagnostic_report.rb +89/-0
            lib/language_server/protocol/interface/workspace_folders_initialize_params.rb +39/-0
            sig/language_server/protocol/constant/code_action_kind.rbs +85/-0
            sig/language_server/protocol/constant/code_action_trigger_kind.rbs +22/-0
            sig/language_server/protocol/constant/completion_item_kind.rbs +36/-0
            sig/language_server/protocol/constant/completion_item_tag.rbs +16/-0
            sig/language_server/protocol/constant/completion_trigger_kind.rbs +26/-0
            sig/language_server/protocol/constant/diagnostic_severity.rbs +24/-0
            sig/language_server/protocol/constant/diagnostic_tag.rbs +24/-0
            sig/language_server/protocol/constant/document_diagnostic_report_kind.rbs +21/-0
            sig/language_server/protocol/constant/document_highlight_kind.rbs +23/-0
            sig/language_server/protocol/constant/error_codes.rbs +73/-0
            sig/language_server/protocol/constant/failure_handling_kind.rbs +30/-0
            sig/language_server/protocol/constant/file_change_type.rbs +23/-0
            sig/language_server/protocol/constant/file_operation_pattern_kind.rbs +20/-0
            sig/language_server/protocol/constant/folding_range_kind.rbs +24/-0
            sig/language_server/protocol/constant/initialize_error_codes.rbs +18/-0
            sig/language_server/protocol/constant/inlay_hint_kind.rbs +19/-0
            sig/language_server/protocol/constant/insert_text_format.rbs +25/-0
            sig/language_server/protocol/constant/insert_text_mode.rbs +30/-0
            sig/language_server/protocol/constant/lsp_error_codes.rbs +41/-0
            sig/language_server/protocol/constant/markup_kind.rbs +23/-0
            sig/language_server/protocol/constant/message_type.rbs +24/-0
            sig/language_server/protocol/constant/moniker_kind.rbs +24/-0
            sig/language_server/protocol/constant/notebook_cell_kind.rbs +19/-0
            sig/language_server/protocol/constant/position_encoding_kind.rbs +32/-0
            sig/language_server/protocol/constant/prepare_support_default_behavior.rbs +13/-0
            sig/language_server/protocol/constant/resource_operation_kind.rbs +23/-0
            sig/language_server/protocol/constant/semantic_token_modifiers.rbs +18/-0
            sig/language_server/protocol/constant/semantic_token_types.rbs +35/-0
            sig/language_server/protocol/constant/signature_help_trigger_kind.rbs +24/-0
            sig/language_server/protocol/constant/symbol_kind.rbs +37/-0
            sig/language_server/protocol/constant/symbol_tag.rbs +15/-0
            sig/language_server/protocol/constant/text_document_save_reason.rbs +24/-0
            sig/language_server/protocol/constant/text_document_sync_kind.rbs +27/-0
            sig/language_server/protocol/constant/token_format.rbs +9/-0
            sig/language_server/protocol/constant/trace_values.rbs +20/-0
            sig/language_server/protocol/constant/uniqueness_level.rbs +31/-0
            sig/language_server/protocol/constant/watch_kind.rbs +20/-0
            sig/language_server/protocol/interface/annotated_text_edit.rbs +30/-0
            sig/language_server/protocol/interface/apply_workspace_edit_params.rbs +25/-0
            sig/language_server/protocol/interface/base_symbol_information.rbs +31/-0
            sig/language_server/protocol/interface/call_hierarchy_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/call_hierarchy_incoming_call.rbs +27/-0
            sig/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_item.rbs +46/-0
            sig/language_server/protocol/interface/call_hierarchy_options.rbs +24/-0
            sig/language_server/protocol/interface/call_hierarchy_outgoing_call.rbs +27/-0
            sig/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_prepare_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/cancel_params.rbs +19/-0
            sig/language_server/protocol/interface/change_annotation.rbs +30/-0
            sig/language_server/protocol/interface/client_capabilities.rbs +37/-0
            sig/language_server/protocol/interface/code_action.rbs +46/-0
            sig/language_server/protocol/interface/code_action_client_capabilities.rbs +40/-0
            sig/language_server/protocol/interface/code_action_context.rbs +29/-0
            sig/language_server/protocol/interface/code_action_options.rbs +28/-0
            sig/language_server/protocol/interface/code_action_params.rbs +34/-0
            sig/language_server/protocol/interface/code_action_registration_options.rbs +31/-0
            sig/language_server/protocol/interface/code_description.rbs +24/-0
            sig/language_server/protocol/interface/code_lens.rbs +32/-0
            sig/language_server/protocol/interface/code_lens_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/code_lens_options.rbs +25/-0
            sig/language_server/protocol/interface/code_lens_params.rbs +28/-0
            sig/language_server/protocol/interface/code_lens_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/code_lens_workspace_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/color.rbs +31/-0
            sig/language_server/protocol/interface/color_information.rbs +25/-0
            sig/language_server/protocol/interface/color_presentation.rbs +25/-0
            sig/language_server/protocol/interface/color_presentation_params.rbs +34/-0
            sig/language_server/protocol/interface/command.rbs +31/-0
            sig/language_server/protocol/interface/completion_client_capabilities.rbs +37/-0
            sig/language_server/protocol/interface/completion_context.rbs +25/-0
            sig/language_server/protocol/interface/completion_item.rbs +77/-0
            sig/language_server/protocol/interface/completion_item_label_details.rbs +27/-0
            sig/language_server/protocol/interface/completion_list.rbs +29/-0
            sig/language_server/protocol/interface/completion_options.rbs +34/-0
            sig/language_server/protocol/interface/completion_params.rbs +34/-0
            sig/language_server/protocol/interface/completion_registration_options.rbs +37/-0
            sig/language_server/protocol/interface/configuration_item.rbs +22/-0
            sig/language_server/protocol/interface/configuration_params.rbs +22/-0
            sig/language_server/protocol/interface/create_file.rbs +31/-0
            sig/language_server/protocol/interface/create_file_options.rbs +25/-0
            sig/language_server/protocol/interface/create_files_params.rbs +25/-0
            sig/language_server/protocol/interface/declaration_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/declaration_options.rbs +19/-0
            sig/language_server/protocol/interface/declaration_params.rbs +28/-0
            sig/language_server/protocol/interface/declaration_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/definition_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/definition_options.rbs +22/-0
            sig/language_server/protocol/interface/definition_params.rbs +31/-0
            sig/language_server/protocol/interface/definition_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/delete_file.rbs +31/-0
            sig/language_server/protocol/interface/delete_file_options.rbs +25/-0
            sig/language_server/protocol/interface/delete_files_params.rbs +25/-0
            sig/language_server/protocol/interface/diagnostic.rbs +47/-0
            sig/language_server/protocol/interface/diagnostic_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/diagnostic_options.rbs +33/-0
            sig/language_server/protocol/interface/diagnostic_registration_options.rbs +39/-0
            sig/language_server/protocol/interface/diagnostic_related_information.rbs +27/-0
            sig/language_server/protocol/interface/diagnostic_server_cancellation_data.rbs +24/-0
            sig/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/did_change_configuration_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/did_change_configuration_params.rbs +22/-0
            sig/language_server/protocol/interface/did_change_configuration_registration_options.rbs +19/-0
            sig/language_server/protocol/interface/did_change_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_change_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/did_change_watched_files_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/did_change_watched_files_params.rbs +22/-0
            sig/language_server/protocol/interface/did_change_watched_files_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/did_change_workspace_folders_params.rbs +22/-0
            sig/language_server/protocol/interface/did_close_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_close_text_document_params.rbs +22/-0
            sig/language_server/protocol/interface/did_open_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_open_text_document_params.rbs +22/-0
            sig/language_server/protocol/interface/did_save_notebook_document_params.rbs +24/-0
            sig/language_server/protocol/interface/did_save_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/document_color_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/document_color_options.rbs +19/-0
            sig/language_server/protocol/interface/document_color_params.rbs +28/-0
            sig/language_server/protocol/interface/document_color_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_diagnostic_params.rbs +36/-0
            sig/language_server/protocol/interface/document_diagnostic_report.rbs +37/-0
            sig/language_server/protocol/interface/document_diagnostic_report_partial_result.rbs +24/-0
            sig/language_server/protocol/interface/document_filter.rbs +34/-0
            sig/language_server/protocol/interface/document_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_formatting_options.rbs +22/-0
            sig/language_server/protocol/interface/document_formatting_params.rbs +28/-0
            sig/language_server/protocol/interface/document_formatting_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_highlight.rbs +27/-0
            sig/language_server/protocol/interface/document_highlight_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_highlight_options.rbs +22/-0
            sig/language_server/protocol/interface/document_highlight_params.rbs +31/-0
            sig/language_server/protocol/interface/document_highlight_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_link.rbs +32/-0
            sig/language_server/protocol/interface/document_link_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/document_link_options.rbs +25/-0
            sig/language_server/protocol/interface/document_link_params.rbs +28/-0
            sig/language_server/protocol/interface/document_link_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_on_type_formatting_options.rbs +25/-0
            sig/language_server/protocol/interface/document_on_type_formatting_params.rbs +31/-0
            sig/language_server/protocol/interface/document_on_type_formatting_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/document_range_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_range_formatting_options.rbs +22/-0
            sig/language_server/protocol/interface/document_range_formatting_params.rbs +31/-0
            sig/language_server/protocol/interface/document_range_formatting_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_symbol.rbs +46/-0
            sig/language_server/protocol/interface/document_symbol_client_capabilities.rbs +34/-0
            sig/language_server/protocol/interface/document_symbol_options.rbs +25/-0
            sig/language_server/protocol/interface/document_symbol_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/execute_command_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/execute_command_options.rbs +25/-0
            sig/language_server/protocol/interface/execute_command_params.rbs +28/-0
            sig/language_server/protocol/interface/execute_command_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/execution_summary.rbs +22/-0
            sig/language_server/protocol/interface/file_create.rbs +24/-0
            sig/language_server/protocol/interface/file_delete.rbs +24/-0
            sig/language_server/protocol/interface/file_event.rbs +25/-0
            sig/language_server/protocol/interface/file_operation_client_capabilities.rbs +45/-0
            sig/language_server/protocol/interface/file_operation_filter.rbs +28/-0
            sig/language_server/protocol/interface/file_operation_options.rbs +39/-0
            sig/language_server/protocol/interface/file_operation_pattern.rbs +31/-0
            sig/language_server/protocol/interface/file_operation_pattern_options.rbs +24/-0
            sig/language_server/protocol/interface/file_operation_registration_options.rbs +24/-0
            sig/language_server/protocol/interface/file_rename.rbs +27/-0
            sig/language_server/protocol/interface/file_system_watcher.rbs +22/-0
            sig/language_server/protocol/interface/folding_range.rbs +38/-0
            sig/language_server/protocol/interface/folding_range_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/folding_range_options.rbs +19/-0
            sig/language_server/protocol/interface/folding_range_params.rbs +28/-0
            sig/language_server/protocol/interface/folding_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/formatting_options.rbs +34/-0
            sig/language_server/protocol/interface/full_document_diagnostic_report.rbs +30/-0
            sig/language_server/protocol/interface/general_client_capabilities.rbs +33/-0
            sig/language_server/protocol/interface/hover.rbs +25/-0
            sig/language_server/protocol/interface/hover_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/hover_options.rbs +22/-0
            sig/language_server/protocol/interface/hover_params.rbs +28/-0
            sig/language_server/protocol/interface/hover_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/hover_result.rbs +19/-0
            sig/language_server/protocol/interface/implementation_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/implementation_options.rbs +19/-0
            sig/language_server/protocol/interface/implementation_params.rbs +28/-0
            sig/language_server/protocol/interface/implementation_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/initialize_error.rbs +23/-0
            sig/language_server/protocol/interface/initialize_params.rbs +46/-0
            sig/language_server/protocol/interface/initialize_result.rbs +25/-0
            sig/language_server/protocol/interface/initialized_params.rbs +16/-0
            sig/language_server/protocol/interface/inlay_hint.rbs +45/-0
            sig/language_server/protocol/interface/inlay_hint_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/inlay_hint_label_part.rbs +34/-0
            sig/language_server/protocol/interface/inlay_hint_options.rbs +27/-0
            sig/language_server/protocol/interface/inlay_hint_registration_options.rbs +33/-0
            sig/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/inline_value.rbs +40/-0
            sig/language_server/protocol/interface/inline_value_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/inline_value_context.rbs +25/-0
            sig/language_server/protocol/interface/inline_value_evaluatable_expression.rbs +29/-0
            sig/language_server/protocol/interface/inline_value_options.rbs +24/-0
            sig/language_server/protocol/interface/inline_value_params.rbs +33/-0
            sig/language_server/protocol/interface/inline_value_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/inline_value_text.rbs +27/-0
            sig/language_server/protocol/interface/inline_value_variable_lookup.rbs +32/-0
            sig/language_server/protocol/interface/inline_value_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/insert_replace_edit.rbs +30/-0
            sig/language_server/protocol/interface/linked_editing_range_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/linked_editing_range_options.rbs +19/-0
            sig/language_server/protocol/interface/linked_editing_range_params.rbs +25/-0
            sig/language_server/protocol/interface/linked_editing_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/linked_editing_ranges.rbs +27/-0
            sig/language_server/protocol/interface/location.rbs +26/-0
            sig/language_server/protocol/interface/location_link.rbs +32/-0
            sig/language_server/protocol/interface/log_message_params.rbs +25/-0
            sig/language_server/protocol/interface/markdown_client_capabilities.rbs +30/-0
            sig/language_server/protocol/interface/markup_content.rbs +46/-0
            sig/language_server/protocol/interface/message.rbs +19/-0
            sig/language_server/protocol/interface/message_action_item.rbs +19/-0
            sig/language_server/protocol/interface/moniker.rbs +33/-0
            sig/language_server/protocol/interface/moniker_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/moniker_options.rbs +19/-0
            sig/language_server/protocol/interface/moniker_params.rbs +28/-0
            sig/language_server/protocol/interface/moniker_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/notebook_cell.rbs +37/-0
            sig/language_server/protocol/interface/notebook_cell_array_change.rbs +31/-0
            sig/language_server/protocol/interface/notebook_cell_text_document_filter.rbs +28/-0
            sig/language_server/protocol/interface/notebook_document.rbs +36/-0
            sig/language_server/protocol/interface/notebook_document_change_event.rbs +27/-0
            sig/language_server/protocol/interface/notebook_document_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/notebook_document_filter.rbs +32/-0
            sig/language_server/protocol/interface/notebook_document_identifier.rbs +24/-0
            sig/language_server/protocol/interface/notebook_document_sync_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/notebook_document_sync_options.rbs +37/-0
            sig/language_server/protocol/interface/notebook_document_sync_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/notification_message.rbs +25/-0
            sig/language_server/protocol/interface/optional_versioned_text_document_identifier.rbs +25/-0
            sig/language_server/protocol/interface/parameter_information.rbs +26/-0
            sig/language_server/protocol/interface/partial_result_params.rbs +19/-0
            sig/language_server/protocol/interface/position.rbs +51/-0
            sig/language_server/protocol/interface/prepare_rename_params.rbs +25/-0
            sig/language_server/protocol/interface/prepare_rename_result.rbs +31/-0
            sig/language_server/protocol/interface/previous_result_id.rbs +27/-0
            sig/language_server/protocol/interface/progress_params.rbs +22/-0
            sig/language_server/protocol/interface/publish_diagnostics_client_capabilities.rbs +34/-0
            sig/language_server/protocol/interface/publish_diagnostics_params.rbs +28/-0
            sig/language_server/protocol/interface/range.rbs +35/-0
            sig/language_server/protocol/interface/reference_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/reference_context.rbs +23/-0
            sig/language_server/protocol/interface/reference_options.rbs +22/-0
            sig/language_server/protocol/interface/reference_params.rbs +34/-0
            sig/language_server/protocol/interface/reference_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/registration.rbs +28/-0
            sig/language_server/protocol/interface/registration_params.rbs +19/-0
            sig/language_server/protocol/interface/regular_expressions_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/related_full_document_diagnostic_report.rbs +33/-0
            sig/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rbs +30/-0
            sig/language_server/protocol/interface/relative_pattern.rbs +29/-0
            sig/language_server/protocol/interface/rename_file.rbs +34/-0
            sig/language_server/protocol/interface/rename_file_options.rbs +25/-0
            sig/language_server/protocol/interface/rename_files_params.rbs +25/-0
            sig/language_server/protocol/interface/rename_options.rbs +25/-0
            sig/language_server/protocol/interface/rename_params.rbs +31/-0
            sig/language_server/protocol/interface/rename_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/request_message.rbs +28/-0
            sig/language_server/protocol/interface/resource_operation.rbs +25/-0
            sig/language_server/protocol/interface/response_error.rbs +25/-0
            sig/language_server/protocol/interface/response_message.rbs +28/-0
            sig/language_server/protocol/interface/save_options.rbs +22/-0
            sig/language_server/protocol/interface/selection_range.rbs +26/-0
            sig/language_server/protocol/interface/selection_range_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/selection_range_options.rbs +19/-0
            sig/language_server/protocol/interface/selection_range_params.rbs +31/-0
            sig/language_server/protocol/interface/selection_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_client_capabilities.rbs +46/-0
            sig/language_server/protocol/interface/semantic_tokens_delta.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_delta_params.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_delta_partial_result.rbs +22/-0
            sig/language_server/protocol/interface/semantic_tokens_edit.rbs +28/-0
            sig/language_server/protocol/interface/semantic_tokens_legend.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_options.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_params.rbs +28/-0
            sig/language_server/protocol/interface/semantic_tokens_partial_result.rbs +22/-0
            sig/language_server/protocol/interface/semantic_tokens_range_params.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_registration_options.rbs +37/-0
            sig/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/server_capabilities.rbs +125/-0
            sig/language_server/protocol/interface/set_trace_params.rbs +19/-0
            sig/language_server/protocol/interface/show_document_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/show_document_params.rbs +33/-0
            sig/language_server/protocol/interface/show_document_result.rbs +24/-0
            sig/language_server/protocol/interface/show_message_params.rbs +25/-0
            sig/language_server/protocol/interface/show_message_request_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/show_message_request_params.rbs +25/-0
            sig/language_server/protocol/interface/signature_help.rbs +30/-0
            sig/language_server/protocol/interface/signature_help_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/signature_help_context.rbs +33/-0
            sig/language_server/protocol/interface/signature_help_options.rbs +28/-0
            sig/language_server/protocol/interface/signature_help_params.rbs +31/-0
            sig/language_server/protocol/interface/signature_help_registration_options.rbs +31/-0
            sig/language_server/protocol/interface/signature_information.rbs +33/-0
            sig/language_server/protocol/interface/static_registration_options.rbs +23/-0
            sig/language_server/protocol/interface/symbol_information.rbs +38/-0
            sig/language_server/protocol/interface/text_document_change_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/text_document_client_capabilities.rbs +109/-0
            sig/language_server/protocol/interface/text_document_content_change_event.rbs +29/-0
            sig/language_server/protocol/interface/text_document_edit.rbs +28/-0
            sig/language_server/protocol/interface/text_document_filter.rbs +43/-0
            sig/language_server/protocol/interface/text_document_identifier.rbs +22/-0
            sig/language_server/protocol/interface/text_document_item.rbs +32/-0
            sig/language_server/protocol/interface/text_document_position_params.rbs +26/-0
            sig/language_server/protocol/interface/text_document_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/text_document_save_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/text_document_sync_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/text_document_sync_options.rbs +31/-0
            sig/language_server/protocol/interface/text_edit.rbs +25/-0
            sig/language_server/protocol/interface/type_definition_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/type_definition_options.rbs +19/-0
            sig/language_server/protocol/interface/type_definition_params.rbs +28/-0
            sig/language_server/protocol/interface/type_definition_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/type_hierarchy_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/type_hierarchy_item.rbs +43/-0
            sig/language_server/protocol/interface/type_hierarchy_options.rbs +24/-0
            sig/language_server/protocol/interface/type_hierarchy_prepare_params.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_subtypes_params.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_supertypes_params.rbs +30/-0
            sig/language_server/protocol/interface/unchanged_document_diagnostic_report.rbs +28/-0
            sig/language_server/protocol/interface/unregistration.rbs +25/-0
            sig/language_server/protocol/interface/unregistration_params.rbs +19/-0
            sig/language_server/protocol/interface/versioned_notebook_document_identifier.rbs +27/-0
            sig/language_server/protocol/interface/versioned_text_document_identifier.rbs +25/-0
            sig/language_server/protocol/interface/will_save_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/window_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/work_done_progress_begin.rbs +31/-0
            sig/language_server/protocol/interface/work_done_progress_cancel_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_create_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_end.rbs +22/-0
            sig/language_server/protocol/interface/work_done_progress_options.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_report.rbs +28/-0
            sig/language_server/protocol/interface/workspace_client_capabilities.rbs +61/-0
            sig/language_server/protocol/interface/workspace_diagnostic_params.rbs +33/-0
            sig/language_server/protocol/interface/workspace_diagnostic_report.rbs +24/-0
            sig/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rbs +24/-0
            sig/language_server/protocol/interface/workspace_document_diagnostic_report.rbs +36/-0
            sig/language_server/protocol/interface/workspace_edit.rbs +39/-0
            sig/language_server/protocol/interface/workspace_edit_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/workspace_folder.rbs +25/-0
            sig/language_server/protocol/interface/workspace_folders_change_event.rbs +25/-0
            sig/language_server/protocol/interface/workspace_folders_initialize_params.rbs +19/-0
            sig/language_server/protocol/interface/workspace_folders_server_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/workspace_full_document_diagnostic_report.rbs +36/-0
            sig/language_server/protocol/interface/workspace_symbol.rbs +41/-0
            sig/language_server/protocol/interface/workspace_symbol_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/workspace_symbol_options.rbs +25/-0
            sig/language_server/protocol/interface/workspace_symbol_params.rbs +28/-0
            sig/language_server/protocol/interface/workspace_symbol_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rbs +33/-0
            sig/language_server/protocol/transport/io/reader.rbs +18/-0
            sig/language_server/protocol/transport/io/writer.rbs +18/-0
            sig/language_server/protocol/transport/stdio/reader.rbs +11/-0
            sig/language_server/protocol/transport/stdio/writer.rbs +11/-0
            sig/language_server/protocol/version.rbs +5/-0
      * Changed:
            lib/language_server/protocol/constant.rb +4/-0
            lib/language_server/protocol/constant/initialize_error_codes.rb +2/-0
            lib/language_server/protocol/interface.rb +32/-4
            lib/language_server/protocol/interface/annotated_text_edit.rb +12/-10
            lib/language_server/protocol/interface/apply_workspace_edit_params.rb +3/-0
            lib/language_server/protocol/interface/apply_workspace_edit_result.rb +9/-5
            lib/language_server/protocol/interface/call_hierarchy_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/call_hierarchy_incoming_call.rb +6/-1
            lib/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rb +14/-9
            lib/language_server/protocol/interface/call_hierarchy_item.rb +12/-8
            lib/language_server/protocol/interface/call_hierarchy_options.rb +5/-0
            lib/language_server/protocol/interface/call_hierarchy_outgoing_call.rb +8/-2
            lib/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rb +14/-9
            lib/language_server/protocol/interface/call_hierarchy_prepare_params.rb +5/-0
            lib/language_server/protocol/interface/call_hierarchy_registration_options.rb +8/-3
            lib/language_server/protocol/interface/cancel_params.rb +1/-1
            lib/language_server/protocol/interface/change_annotation.rb +2/-0
            lib/language_server/protocol/interface/client_capabilities.rb +10/-3
            lib/language_server/protocol/interface/code_action.rb +23/-21
            lib/language_server/protocol/interface/code_action_client_capabilities.rb +19/-3
            lib/language_server/protocol/interface/code_action_context.rb +10/-9
            lib/language_server/protocol/interface/code_action_options.rb +15/-10
            lib/language_server/protocol/interface/code_action_params.rb +21/-21
            lib/language_server/protocol/interface/code_action_registration_options.rb +18/-13
            lib/language_server/protocol/interface/code_description.rb +3/-1
            lib/language_server/protocol/interface/code_lens.rb +6/-7
            lib/language_server/protocol/interface/code_lens_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/code_lens_options.rb +10/-7
            lib/language_server/protocol/interface/code_lens_params.rb +15/-12
            lib/language_server/protocol/interface/code_lens_registration_options.rb +13/-10
            lib/language_server/protocol/interface/code_lens_workspace_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/color.rb +4/-4
            lib/language_server/protocol/interface/color_information.rb +3/-0
            lib/language_server/protocol/interface/color_presentation.rb +7/-8
            lib/language_server/protocol/interface/color_presentation_params.rb +24/-21
            lib/language_server/protocol/interface/command.rb +6/-0
            lib/language_server/protocol/interface/completion_client_capabilities.rb +20/-12
            lib/language_server/protocol/interface/completion_context.rb +3/-5
            lib/language_server/protocol/interface/completion_item.rb +45/-34
            lib/language_server/protocol/interface/completion_item_label_details.rb +6/-6
            lib/language_server/protocol/interface/completion_list.rb +5/-4
            lib/language_server/protocol/interface/completion_options.rb +24/-24
            lib/language_server/protocol/interface/completion_params.rb +16/-14
            lib/language_server/protocol/interface/completion_registration_options.rb +30/-27
            lib/language_server/protocol/interface/configuration_params.rb +3/-0
            lib/language_server/protocol/interface/create_file.rb +5/-3
            lib/language_server/protocol/interface/create_files_params.rb +4/-2
            lib/language_server/protocol/interface/declaration_client_capabilities.rb +6/-3
            lib/language_server/protocol/interface/declaration_params.rb +2/-2
            lib/language_server/protocol/interface/declaration_registration_options.rb +3/-3
            lib/language_server/protocol/interface/definition_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/definition_options.rb +3/-0
            lib/language_server/protocol/interface/definition_params.rb +5/-2
            lib/language_server/protocol/interface/definition_registration_options.rb +6/-3
            lib/language_server/protocol/interface/delete_file.rb +4/-2
            lib/language_server/protocol/interface/delete_files_params.rb +4/-2
            lib/language_server/protocol/interface/diagnostic.rb +20/-9
            lib/language_server/protocol/interface/diagnostic_client_capabilities.rb +5/-5
            lib/language_server/protocol/interface/diagnostic_options.rb +9/-7
            lib/language_server/protocol/interface/diagnostic_registration_options.rb +12/-10
            lib/language_server/protocol/interface/diagnostic_related_information.rb +3/-3
            lib/language_server/protocol/interface/diagnostic_server_cancellation_data.rb +2/-0
            lib/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rb +5/-3
            lib/language_server/protocol/interface/did_change_configuration_params.rb +3/-0
            lib/language_server/protocol/interface/did_change_notebook_document_params.rb +14/-8
            lib/language_server/protocol/interface/did_change_text_document_params.rb +12/-11
            lib/language_server/protocol/interface/did_change_watched_files_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/did_change_watched_files_params.rb +3/-0
            lib/language_server/protocol/interface/did_change_watched_files_registration_options.rb +1/-1
            lib/language_server/protocol/interface/did_change_workspace_folders_params.rb +3/-0
            lib/language_server/protocol/interface/did_close_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_close_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/did_open_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_open_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/did_save_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_save_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/document_color_client_capabilities.rb +3/-1
            lib/language_server/protocol/interface/document_color_params.rb +15/-12
            lib/language_server/protocol/interface/document_color_registration_options.rb +10/-10
            lib/language_server/protocol/interface/document_diagnostic_params.rb +22/-20
            lib/language_server/protocol/interface/document_diagnostic_report_partial_result.rb +3/-1
            lib/language_server/protocol/interface/document_filter.rb +27/-14
            lib/language_server/protocol/interface/document_formatting_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_formatting_params.rb +13/-10
            lib/language_server/protocol/interface/document_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_highlight.rb +1/-1
            lib/language_server/protocol/interface/document_highlight_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_highlight_options.rb +3/-0
            lib/language_server/protocol/interface/document_highlight_params.rb +5/-2
            lib/language_server/protocol/interface/document_highlight_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_link.rb +7/-6
            lib/language_server/protocol/interface/document_link_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/document_link_options.rb +10/-7
            lib/language_server/protocol/interface/document_link_params.rb +15/-12
            lib/language_server/protocol/interface/document_link_registration_options.rb +13/-10
            lib/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_params.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_range_formatting_client_capabilities.rb +4/-1
            lib/language_server/protocol/interface/document_range_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_range_formatting_params.rb +13/-10
            lib/language_server/protocol/interface/document_range_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_symbol.rb +14/-12
            lib/language_server/protocol/interface/document_symbol_client_capabilities.rb +8/-1
            lib/language_server/protocol/interface/document_symbol_options.rb +12/-7
            lib/language_server/protocol/interface/document_symbol_params.rb +15/-12
            lib/language_server/protocol/interface/document_symbol_registration_options.rb +15/-10
            lib/language_server/protocol/interface/execute_command_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/execute_command_options.rb +10/-7
            lib/language_server/protocol/interface/execute_command_params.rb +13/-10
            lib/language_server/protocol/interface/execute_command_registration_options.rb +8/-8
            lib/language_server/protocol/interface/execution_summary.rb +1/-1
            lib/language_server/protocol/interface/file_create.rb +2/-0
            lib/language_server/protocol/interface/file_delete.rb +2/-0
            lib/language_server/protocol/interface/file_event.rb +3/-3
            lib/language_server/protocol/interface/file_operation_filter.rb +4/-2
            lib/language_server/protocol/interface/file_operation_pattern.rb +6/-8
            lib/language_server/protocol/interface/file_operation_pattern_options.rb +2/-0
            lib/language_server/protocol/interface/file_operation_registration_options.rb +2/-0
            lib/language_server/protocol/interface/file_rename.rb +2/-0
            lib/language_server/protocol/interface/file_system_watcher.rb +4/-3
            lib/language_server/protocol/interface/folding_range.rb +18/-22
            lib/language_server/protocol/interface/folding_range_client_capabilities.rb +6/-2
            lib/language_server/protocol/interface/folding_range_params.rb +15/-12
            lib/language_server/protocol/interface/folding_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/formatting_options.rb +7/-1
            lib/language_server/protocol/interface/full_document_diagnostic_report.rb +3/-1
            lib/language_server/protocol/interface/hover.rb +2/-2
            lib/language_server/protocol/interface/hover_client_capabilities.rb +2/-3
            lib/language_server/protocol/interface/hover_options.rb +3/-0
            lib/language_server/protocol/interface/hover_params.rb +3/-0
            lib/language_server/protocol/interface/hover_registration_options.rb +6/-3
            lib/language_server/protocol/interface/implementation_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/implementation_params.rb +2/-2
            lib/language_server/protocol/interface/implementation_registration_options.rb +3/-3
            lib/language_server/protocol/interface/initialize_error.rb +4/-0
            lib/language_server/protocol/interface/initialize_params.rb +36/-24
            lib/language_server/protocol/interface/initialize_result.rb +5/-0
            lib/language_server/protocol/interface/inlay_hint.rb +2/-6
            lib/language_server/protocol/interface/inlay_hint_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/inlay_hint_label_part.rb +2/-0
            lib/language_server/protocol/interface/inlay_hint_options.rb +9/-7
            lib/language_server/protocol/interface/inlay_hint_params.rb +13/-11
            lib/language_server/protocol/interface/inlay_hint_registration_options.rb +12/-10
            lib/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/inline_value_client_capabilities.rb +3/-2
            lib/language_server/protocol/interface/inline_value_context.rb +5/-3
            lib/language_server/protocol/interface/inline_value_evaluatable_expression.rb +4/-6
            lib/language_server/protocol/interface/inline_value_options.rb +2/-0
            lib/language_server/protocol/interface/inline_value_params.rb +12/-10
            lib/language_server/protocol/interface/inline_value_registration_options.rb +5/-3
            lib/language_server/protocol/interface/inline_value_text.rb +2/-0
            lib/language_server/protocol/interface/inline_value_variable_lookup.rb +4/-6
            lib/language_server/protocol/interface/inline_value_workspace_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/insert_replace_edit.rb +2/-0
            lib/language_server/protocol/interface/linked_editing_range_client_capabilities.rb +7/-3
            lib/language_server/protocol/interface/linked_editing_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/linked_editing_ranges.rb +10/-6
            lib/language_server/protocol/interface/location.rb +5/-1
            lib/language_server/protocol/interface/location_link.rb +12/-10
            lib/language_server/protocol/interface/log_message_params.rb +4/-1
            lib/language_server/protocol/interface/log_trace_params.rb +0/-7
            lib/language_server/protocol/interface/markup_content.rb +16/-18
            lib/language_server/protocol/interface/moniker.rb +2/-0
            lib/language_server/protocol/interface/moniker_client_capabilities.rb +8/-4
            lib/language_server/protocol/interface/moniker_params.rb +2/-2
            lib/language_server/protocol/interface/moniker_registration_options.rb +3/-3
            lib/language_server/protocol/interface/notebook_cell.rb +6/-2
            lib/language_server/protocol/interface/notebook_cell_array_change.rb +5/-3
            lib/language_server/protocol/interface/notebook_cell_text_document_filter.rb +2/-0
            lib/language_server/protocol/interface/notebook_document.rb +7/-3
            lib/language_server/protocol/interface/notebook_document_change_event.rb +5/-1
            lib/language_server/protocol/interface/notebook_document_client_capabilities.rb +4/-0
            lib/language_server/protocol/interface/notebook_document_filter.rb +5/-26
            lib/language_server/protocol/interface/notebook_document_identifier.rb +4/-2
            lib/language_server/protocol/interface/notebook_document_sync_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/notebook_document_sync_options.rb +4/-2
            lib/language_server/protocol/interface/notebook_document_sync_registration_options.rb +3/-1
            lib/language_server/protocol/interface/optional_versioned_text_document_identifier.rb +17/-18
            lib/language_server/protocol/interface/parameter_information.rb +6/-8
            lib/language_server/protocol/interface/partial_result_params.rb +2/-2
            lib/language_server/protocol/interface/position.rb +40/-6
            lib/language_server/protocol/interface/previous_result_id.rb +4/-2
            lib/language_server/protocol/interface/progress_params.rb +1/-1
            lib/language_server/protocol/interface/publish_diagnostics_client_capabilities.rb +11/-0
            lib/language_server/protocol/interface/publish_diagnostics_params.rb +8/-4
            lib/language_server/protocol/interface/range.rb +13/-0
            lib/language_server/protocol/interface/reference_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/reference_context.rb +4/-0
            lib/language_server/protocol/interface/reference_options.rb +3/-0
            lib/language_server/protocol/interface/reference_params.rb +12/-9
            lib/language_server/protocol/interface/reference_registration_options.rb +6/-3
            lib/language_server/protocol/interface/registration.rb +1/-1
            lib/language_server/protocol/interface/regular_expressions_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/related_full_document_diagnostic_report.rb +19/-15
            lib/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rb +19/-15
            lib/language_server/protocol/interface/relative_pattern.rb +4/-2
            lib/language_server/protocol/interface/rename_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/rename_file.rb +5/-3
            lib/language_server/protocol/interface/rename_files_params.rb +6/-4
            lib/language_server/protocol/interface/rename_options.rb +12/-7
            lib/language_server/protocol/interface/rename_params.rb +16/-13
            lib/language_server/protocol/interface/rename_registration_options.rb +15/-10
            lib/language_server/protocol/interface/save_options.rb +3/-0
            lib/language_server/protocol/interface/selection_range.rb +6/-3
            lib/language_server/protocol/interface/selection_range_client_capabilities.rb +3/-4
            lib/language_server/protocol/interface/selection_range_params.rb +23/-20
            lib/language_server/protocol/interface/selection_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/semantic_tokens.rb +4/-1
            lib/language_server/protocol/interface/semantic_tokens_client_capabilities.rb +14/-8
            lib/language_server/protocol/interface/semantic_tokens_delta.rb +4/-2
            lib/language_server/protocol/interface/semantic_tokens_delta_params.rb +24/-21
            lib/language_server/protocol/interface/semantic_tokens_delta_partial_result.rb +3/-0
            lib/language_server/protocol/interface/semantic_tokens_edit.rb +6/-3
            lib/language_server/protocol/interface/semantic_tokens_legend.rb +3/-0
            lib/language_server/protocol/interface/semantic_tokens_options.rb +11/-8
            lib/language_server/protocol/interface/semantic_tokens_params.rb +15/-12
            lib/language_server/protocol/interface/semantic_tokens_partial_result.rb +4/-1
            lib/language_server/protocol/interface/semantic_tokens_range_params.rb +23/-20
            lib/language_server/protocol/interface/semantic_tokens_registration_options.rb +14/-11
            lib/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rb +4/-1
            lib/language_server/protocol/interface/server_capabilities.rb +59/-36
            lib/language_server/protocol/interface/set_trace_params.rb +1/-4
            lib/language_server/protocol/interface/show_document_client_capabilities.rb +4/-2
            lib/language_server/protocol/interface/show_document_params.rb +6/-4
            lib/language_server/protocol/interface/show_document_result.rb +3/-1
            lib/language_server/protocol/interface/show_message_params.rb +4/-1
            lib/language_server/protocol/interface/show_message_request_params.rb +1/-1
            lib/language_server/protocol/interface/signature_help.rb +5/-6
            lib/language_server/protocol/interface/signature_help_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/signature_help_context.rb +8/-9
            lib/language_server/protocol/interface/signature_help_options.rb +15/-12
            lib/language_server/protocol/interface/signature_help_params.rb +16/-12
            lib/language_server/protocol/interface/signature_help_registration_options.rb +18/-15
            lib/language_server/protocol/interface/signature_information.rb +3/-1
            lib/language_server/protocol/interface/static_registration_options.rb +2/-1
            lib/language_server/protocol/interface/symbol_information.rb +32/-28
            lib/language_server/protocol/interface/text_document_change_registration_options.rb +12/-13
            lib/language_server/protocol/interface/text_document_client_capabilities.rb +48/-19
            lib/language_server/protocol/interface/text_document_content_change_event.rb +4/-2
            lib/language_server/protocol/interface/text_document_edit.rb +10/-1
            lib/language_server/protocol/interface/text_document_identifier.rb +5/-2
            lib/language_server/protocol/interface/text_document_item.rb +7/-3
            lib/language_server/protocol/interface/text_document_position_params.rb +4/-0
            lib/language_server/protocol/interface/text_document_registration_options.rb +3/-3
            lib/language_server/protocol/interface/text_document_save_registration_options.rb +6/-3
            lib/language_server/protocol/interface/text_document_sync_options.rb +10/-14
            lib/language_server/protocol/interface/text_edit.rb +3/-0
            lib/language_server/protocol/interface/type_definition_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/type_definition_params.rb +2/-2
            lib/language_server/protocol/interface/type_definition_registration_options.rb +3/-3
            lib/language_server/protocol/interface/type_hierarchy_item.rb +6/-3
            lib/language_server/protocol/interface/type_hierarchy_options.rb +5/-0
            lib/language_server/protocol/interface/type_hierarchy_prepare_params.rb +5/-0
            lib/language_server/protocol/interface/type_hierarchy_registration_options.rb +8/-3
            lib/language_server/protocol/interface/type_hierarchy_subtypes_params.rb +14/-9
            lib/language_server/protocol/interface/type_hierarchy_supertypes_params.rb +14/-9
            lib/language_server/protocol/interface/unchanged_document_diagnostic_report.rb +3/-1
            lib/language_server/protocol/interface/unregistration.rb +2/-2
            lib/language_server/protocol/interface/versioned_notebook_document_identifier.rb +5/-3
            lib/language_server/protocol/interface/versioned_text_document_identifier.rb +13/-13
            lib/language_server/protocol/interface/will_save_text_document_params.rb +1/-1
            lib/language_server/protocol/interface/work_done_progress_begin.rb +4/-4
            lib/language_server/protocol/interface/work_done_progress_report.rb +4/-5
            lib/language_server/protocol/interface/workspace_diagnostic_params.rb +22/-20
            lib/language_server/protocol/interface/workspace_diagnostic_report.rb +2/-0
            lib/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rb +2/-0
            lib/language_server/protocol/interface/workspace_edit.rb +28/-17
            lib/language_server/protocol/interface/workspace_edit_client_capabilities.rb +10/-1
            lib/language_server/protocol/interface/workspace_folder.rb +4/-1
            lib/language_server/protocol/interface/workspace_folders_server_capabilities.rb +1/-1
            lib/language_server/protocol/interface/workspace_full_document_diagnostic_report.rb +23/-21
            lib/language_server/protocol/interface/workspace_symbol.rb +33/-27
            lib/language_server/protocol/interface/workspace_symbol_client_capabilities.rb +10/-4
            lib/language_server/protocol/interface/workspace_symbol_options.rb +12/-7
            lib/language_server/protocol/interface/workspace_symbol_params.rb +14/-14
            lib/language_server/protocol/interface/workspace_symbol_registration_options.rb +12/-7
            lib/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rb +23/-21
            lib/language_server/protocol/version.rb +1/-1

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

gem compare language_server-protocol 3.17.0.5 3.17.0.6

Compared versions: ["3.17.0.5", "3.17.0.6"]
  DIFFERENT rubygems_version:
    3.17.0.5: 3.6.8
    3.17.0.6: 4.0.10
  DIFFERENT version:
    3.17.0.5: 3.17.0.5
    3.17.0.6: 3.17.0.6
  DIFFERENT files:
    3.17.0.5->3.17.0.6:
      * Added:
            lib/language_server/protocol/constant/lsp_error_codes.rb +41/-0
            lib/language_server/protocol/constant/trace_values.rb +20/-0
            lib/language_server/protocol/interface/base_symbol_information.rb +68/-0
            lib/language_server/protocol/interface/did_change_configuration_registration_options.rb +30/-0
            lib/language_server/protocol/interface/document_diagnostic_report.rb +89/-0
            lib/language_server/protocol/interface/file_operation_client_capabilities.rb +95/-0
            lib/language_server/protocol/interface/file_operation_options.rb +83/-0
            lib/language_server/protocol/interface/general_client_capabilities.rb +91/-0
            lib/language_server/protocol/interface/inline_value.rb +88/-0
            lib/language_server/protocol/interface/markdown_client_capabilities.rb +59/-0
            lib/language_server/protocol/interface/prepare_rename_result.rb +69/-0
            lib/language_server/protocol/interface/resource_operation.rb +47/-0
            lib/language_server/protocol/interface/text_document_filter.rb +69/-0
            lib/language_server/protocol/interface/type_hierarchy_client_capabilities.rb +38/-0
            lib/language_server/protocol/interface/window_client_capabilities.rb +63/-0
            lib/language_server/protocol/interface/workspace_client_capabilities.rb +176/-0
            lib/language_server/protocol/interface/workspace_document_diagnostic_report.rb +89/-0
            lib/language_server/protocol/interface/workspace_folders_initialize_params.rb +39/-0
            sig/language_server/protocol/constant/code_action_kind.rbs +85/-0
            sig/language_server/protocol/constant/code_action_trigger_kind.rbs +22/-0
            sig/language_server/protocol/constant/completion_item_kind.rbs +36/-0
            sig/language_server/protocol/constant/completion_item_tag.rbs +16/-0
            sig/language_server/protocol/constant/completion_trigger_kind.rbs +26/-0
            sig/language_server/protocol/constant/diagnostic_severity.rbs +24/-0
            sig/language_server/protocol/constant/diagnostic_tag.rbs +24/-0
            sig/language_server/protocol/constant/document_diagnostic_report_kind.rbs +21/-0
            sig/language_server/protocol/constant/document_highlight_kind.rbs +23/-0
            sig/language_server/protocol/constant/error_codes.rbs +73/-0
            sig/language_server/protocol/constant/failure_handling_kind.rbs +30/-0
            sig/language_server/protocol/constant/file_change_type.rbs +23/-0
            sig/language_server/protocol/constant/file_operation_pattern_kind.rbs +20/-0
            sig/language_server/protocol/constant/folding_range_kind.rbs +24/-0
            sig/language_server/protocol/constant/initialize_error_codes.rbs +18/-0
            sig/language_server/protocol/constant/inlay_hint_kind.rbs +19/-0
            sig/language_server/protocol/constant/insert_text_format.rbs +25/-0
            sig/language_server/protocol/constant/insert_text_mode.rbs +30/-0
            sig/language_server/protocol/constant/lsp_error_codes.rbs +41/-0
            sig/language_server/protocol/constant/markup_kind.rbs +23/-0
            sig/language_server/protocol/constant/message_type.rbs +24/-0
            sig/language_server/protocol/constant/moniker_kind.rbs +24/-0
            sig/language_server/protocol/constant/notebook_cell_kind.rbs +19/-0
            sig/language_server/protocol/constant/position_encoding_kind.rbs +32/-0
            sig/language_server/protocol/constant/prepare_support_default_behavior.rbs +13/-0
            sig/language_server/protocol/constant/resource_operation_kind.rbs +23/-0
            sig/language_server/protocol/constant/semantic_token_modifiers.rbs +18/-0
            sig/language_server/protocol/constant/semantic_token_types.rbs +35/-0
            sig/language_server/protocol/constant/signature_help_trigger_kind.rbs +24/-0
            sig/language_server/protocol/constant/symbol_kind.rbs +37/-0
            sig/language_server/protocol/constant/symbol_tag.rbs +15/-0
            sig/language_server/protocol/constant/text_document_save_reason.rbs +24/-0
            sig/language_server/protocol/constant/text_document_sync_kind.rbs +27/-0
            sig/language_server/protocol/constant/token_format.rbs +9/-0
            sig/language_server/protocol/constant/trace_values.rbs +20/-0
            sig/language_server/protocol/constant/uniqueness_level.rbs +31/-0
            sig/language_server/protocol/constant/watch_kind.rbs +20/-0
            sig/language_server/protocol/interface/annotated_text_edit.rbs +30/-0
            sig/language_server/protocol/interface/apply_workspace_edit_params.rbs +25/-0
            sig/language_server/protocol/interface/apply_workspace_edit_result.rbs +30/-0
            sig/language_server/protocol/interface/base_symbol_information.rbs +31/-0
            sig/language_server/protocol/interface/call_hierarchy_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/call_hierarchy_incoming_call.rbs +27/-0
            sig/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_item.rbs +46/-0
            sig/language_server/protocol/interface/call_hierarchy_options.rbs +24/-0
            sig/language_server/protocol/interface/call_hierarchy_outgoing_call.rbs +27/-0
            sig/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_prepare_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/cancel_params.rbs +19/-0
            sig/language_server/protocol/interface/change_annotation.rbs +30/-0
            sig/language_server/protocol/interface/client_capabilities.rbs +37/-0
            sig/language_server/protocol/interface/code_action.rbs +46/-0
            sig/language_server/protocol/interface/code_action_client_capabilities.rbs +40/-0
            sig/language_server/protocol/interface/code_action_context.rbs +29/-0
            sig/language_server/protocol/interface/code_action_options.rbs +28/-0
            sig/language_server/protocol/interface/code_action_params.rbs +34/-0
            sig/language_server/protocol/interface/code_action_registration_options.rbs +31/-0
            sig/language_server/protocol/interface/code_description.rbs +24/-0
            sig/language_server/protocol/interface/code_lens.rbs +32/-0
            sig/language_server/protocol/interface/code_lens_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/code_lens_options.rbs +25/-0
            sig/language_server/protocol/interface/code_lens_params.rbs +28/-0
            sig/language_server/protocol/interface/code_lens_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/code_lens_workspace_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/color.rbs +31/-0
            sig/language_server/protocol/interface/color_information.rbs +25/-0
            sig/language_server/protocol/interface/color_presentation.rbs +25/-0
            sig/language_server/protocol/interface/color_presentation_params.rbs +34/-0
            sig/language_server/protocol/interface/command.rbs +31/-0
            sig/language_server/protocol/interface/completion_client_capabilities.rbs +37/-0
            sig/language_server/protocol/interface/completion_context.rbs +25/-0
            sig/language_server/protocol/interface/completion_item.rbs +77/-0
            sig/language_server/protocol/interface/completion_item_label_details.rbs +27/-0
            sig/language_server/protocol/interface/completion_list.rbs +29/-0
            sig/language_server/protocol/interface/completion_options.rbs +34/-0
            sig/language_server/protocol/interface/completion_params.rbs +34/-0
            sig/language_server/protocol/interface/completion_registration_options.rbs +37/-0
            sig/language_server/protocol/interface/configuration_item.rbs +22/-0
            sig/language_server/protocol/interface/configuration_params.rbs +22/-0
            sig/language_server/protocol/interface/create_file.rbs +31/-0
            sig/language_server/protocol/interface/create_file_options.rbs +25/-0
            sig/language_server/protocol/interface/create_files_params.rbs +25/-0
            sig/language_server/protocol/interface/declaration_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/declaration_options.rbs +19/-0
            sig/language_server/protocol/interface/declaration_params.rbs +28/-0
            sig/language_server/protocol/interface/declaration_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/definition_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/definition_options.rbs +22/-0
            sig/language_server/protocol/interface/definition_params.rbs +31/-0
            sig/language_server/protocol/interface/definition_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/delete_file.rbs +31/-0
            sig/language_server/protocol/interface/delete_file_options.rbs +25/-0
            sig/language_server/protocol/interface/delete_files_params.rbs +25/-0
            sig/language_server/protocol/interface/diagnostic.rbs +47/-0
            sig/language_server/protocol/interface/diagnostic_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/diagnostic_options.rbs +33/-0
            sig/language_server/protocol/interface/diagnostic_registration_options.rbs +39/-0
            sig/language_server/protocol/interface/diagnostic_related_information.rbs +27/-0
            sig/language_server/protocol/interface/diagnostic_server_cancellation_data.rbs +24/-0
            sig/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/did_change_configuration_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/did_change_configuration_params.rbs +22/-0
            sig/language_server/protocol/interface/did_change_configuration_registration_options.rbs +19/-0
            sig/language_server/protocol/interface/did_change_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_change_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/did_change_watched_files_params.rbs +22/-0
            sig/language_server/protocol/interface/did_change_watched_files_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/did_change_workspace_folders_params.rbs +22/-0
            sig/language_server/protocol/interface/did_close_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_close_text_document_params.rbs +22/-0
            sig/language_server/protocol/interface/did_open_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_open_text_document_params.rbs +22/-0
            sig/language_server/protocol/interface/did_save_notebook_document_params.rbs +24/-0
            sig/language_server/protocol/interface/did_save_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/document_color_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/document_color_params.rbs +28/-0
            sig/language_server/protocol/interface/document_color_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_diagnostic_params.rbs +36/-0
            sig/language_server/protocol/interface/document_diagnostic_report.rbs +37/-0
            sig/language_server/protocol/interface/document_diagnostic_report_partial_result.rbs +24/-0
            sig/language_server/protocol/interface/document_filter.rbs +34/-0
            sig/language_server/protocol/interface/document_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_formatting_options.rbs +22/-0
            sig/language_server/protocol/interface/document_formatting_params.rbs +28/-0
            sig/language_server/protocol/interface/document_formatting_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_highlight.rbs +27/-0
            sig/language_server/protocol/interface/document_highlight_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_highlight_options.rbs +22/-0
            sig/language_server/protocol/interface/document_highlight_params.rbs +31/-0
            sig/language_server/protocol/interface/document_highlight_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_link.rbs +32/-0
            sig/language_server/protocol/interface/document_link_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/document_link_options.rbs +25/-0
            sig/language_server/protocol/interface/document_link_params.rbs +28/-0
            sig/language_server/protocol/interface/document_link_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_on_type_formatting_options.rbs +25/-0
            sig/language_server/protocol/interface/document_on_type_formatting_params.rbs +31/-0
            sig/language_server/protocol/interface/document_on_type_formatting_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/document_range_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_range_formatting_options.rbs +22/-0
            sig/language_server/protocol/interface/document_range_formatting_params.rbs +31/-0
            sig/language_server/protocol/interface/document_range_formatting_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_symbol.rbs +46/-0
            sig/language_server/protocol/interface/document_symbol_client_capabilities.rbs +34/-0
            sig/language_server/protocol/interface/document_symbol_options.rbs +25/-0
            sig/language_server/protocol/interface/document_symbol_params.rbs +28/-0
            sig/language_server/protocol/interface/document_symbol_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/execute_command_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/execute_command_options.rbs +25/-0
            sig/language_server/protocol/interface/execute_command_params.rbs +28/-0
            sig/language_server/protocol/interface/execute_command_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/execution_summary.rbs +22/-0
            sig/language_server/protocol/interface/file_create.rbs +24/-0
            sig/language_server/protocol/interface/file_delete.rbs +24/-0
            sig/language_server/protocol/interface/file_event.rbs +25/-0
            sig/language_server/protocol/interface/file_operation_client_capabilities.rbs +45/-0
            sig/language_server/protocol/interface/file_operation_filter.rbs +28/-0
            sig/language_server/protocol/interface/file_operation_options.rbs +39/-0
            sig/language_server/protocol/interface/file_operation_pattern.rbs +31/-0
            sig/language_server/protocol/interface/file_operation_pattern_options.rbs +24/-0
            sig/language_server/protocol/interface/file_operation_registration_options.rbs +24/-0
            sig/language_server/protocol/interface/file_rename.rbs +27/-0
            sig/language_server/protocol/interface/file_system_watcher.rbs +22/-0
            sig/language_server/protocol/interface/folding_range.rbs +38/-0
            sig/language_server/protocol/interface/folding_range_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/folding_range_options.rbs +19/-0
            sig/language_server/protocol/interface/folding_range_params.rbs +28/-0
            sig/language_server/protocol/interface/folding_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/formatting_options.rbs +34/-0
            sig/language_server/protocol/interface/full_document_diagnostic_report.rbs +30/-0
            sig/language_server/protocol/interface/general_client_capabilities.rbs +33/-0
            sig/language_server/protocol/interface/hover.rbs +25/-0
            sig/language_server/protocol/interface/hover_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/hover_options.rbs +22/-0
            sig/language_server/protocol/interface/hover_params.rbs +28/-0
            sig/language_server/protocol/interface/hover_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/hover_result.rbs +19/-0
            sig/language_server/protocol/interface/implementation_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/implementation_options.rbs +19/-0
            sig/language_server/protocol/interface/implementation_params.rbs +28/-0
            sig/language_server/protocol/interface/implementation_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/initialize_error.rbs +23/-0
            sig/language_server/protocol/interface/initialize_params.rbs +46/-0
            sig/language_server/protocol/interface/initialize_result.rbs +25/-0
            sig/language_server/protocol/interface/initialized_params.rbs +16/-0
            sig/language_server/protocol/interface/inlay_hint.rbs +45/-0
            sig/language_server/protocol/interface/inlay_hint_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/inlay_hint_label_part.rbs +34/-0
            sig/language_server/protocol/interface/inlay_hint_options.rbs +27/-0
            sig/language_server/protocol/interface/inlay_hint_params.rbs +30/-0
            sig/language_server/protocol/interface/inlay_hint_registration_options.rbs +33/-0
            sig/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/inline_value.rbs +40/-0
            sig/language_server/protocol/interface/inline_value_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/inline_value_context.rbs +25/-0
            sig/language_server/protocol/interface/inline_value_evaluatable_expression.rbs +29/-0
            sig/language_server/protocol/interface/inline_value_options.rbs +24/-0
            sig/language_server/protocol/interface/inline_value_params.rbs +33/-0
            sig/language_server/protocol/interface/inline_value_text.rbs +27/-0
            sig/language_server/protocol/interface/inline_value_variable_lookup.rbs +32/-0
            sig/language_server/protocol/interface/inline_value_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/insert_replace_edit.rbs +30/-0
            sig/language_server/protocol/interface/linked_editing_range_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/linked_editing_range_options.rbs +19/-0
            sig/language_server/protocol/interface/linked_editing_range_params.rbs +25/-0
            sig/language_server/protocol/interface/linked_editing_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/linked_editing_ranges.rbs +27/-0
            sig/language_server/protocol/interface/location.rbs +26/-0
            sig/language_server/protocol/interface/location_link.rbs +32/-0
            sig/language_server/protocol/interface/log_trace_params.rbs +22/-0
            sig/language_server/protocol/interface/markdown_client_capabilities.rbs +30/-0
            sig/language_server/protocol/interface/markup_content.rbs +46/-0
            sig/language_server/protocol/interface/message.rbs +19/-0
            sig/language_server/protocol/interface/message_action_item.rbs +19/-0
            sig/language_server/protocol/interface/moniker.rbs +33/-0
            sig/language_server/protocol/interface/moniker_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/moniker_options.rbs +19/-0
            sig/language_server/protocol/interface/moniker_params.rbs +28/-0
            sig/language_server/protocol/interface/moniker_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/notebook_cell.rbs +37/-0
            sig/language_server/protocol/interface/notebook_cell_array_change.rbs +31/-0
            sig/language_server/protocol/interface/notebook_cell_text_document_filter.rbs +28/-0
            sig/language_server/protocol/interface/notebook_document.rbs +36/-0
            sig/language_server/protocol/interface/notebook_document_change_event.rbs +27/-0
            sig/language_server/protocol/interface/notebook_document_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/notebook_document_filter.rbs +32/-0
            sig/language_server/protocol/interface/notebook_document_identifier.rbs +24/-0
            sig/language_server/protocol/interface/notebook_document_sync_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/notebook_document_sync_options.rbs +37/-0
            sig/language_server/protocol/interface/notebook_document_sync_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/notification_message.rbs +25/-0
            sig/language_server/protocol/interface/optional_versioned_text_document_identifier.rbs +25/-0
            sig/language_server/protocol/interface/parameter_information.rbs +26/-0
            sig/language_server/protocol/interface/partial_result_params.rbs +19/-0
            sig/language_server/protocol/interface/position.rbs +51/-0
            sig/language_server/protocol/interface/prepare_rename_params.rbs +25/-0
            sig/language_server/protocol/interface/prepare_rename_result.rbs +31/-0
            sig/language_server/protocol/interface/previous_result_id.rbs +27/-0
            sig/language_server/protocol/interface/progress_params.rbs +22/-0
            sig/language_server/protocol/interface/publish_diagnostics_client_capabilities.rbs +34/-0
            sig/language_server/protocol/interface/publish_diagnostics_params.rbs +28/-0
            sig/language_server/protocol/interface/range.rbs +35/-0
            sig/language_server/protocol/interface/reference_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/reference_context.rbs +23/-0
            sig/language_server/protocol/interface/reference_options.rbs +22/-0
            sig/language_server/protocol/interface/reference_params.rbs +34/-0
            sig/language_server/protocol/interface/reference_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/registration.rbs +28/-0
            sig/language_server/protocol/interface/registration_params.rbs +19/-0
            sig/language_server/protocol/interface/regular_expressions_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/related_full_document_diagnostic_report.rbs +33/-0
            sig/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rbs +30/-0
            sig/language_server/protocol/interface/relative_pattern.rbs +29/-0
            sig/language_server/protocol/interface/rename_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/rename_file.rbs +34/-0
            sig/language_server/protocol/interface/rename_file_options.rbs +25/-0
            sig/language_server/protocol/interface/rename_files_params.rbs +25/-0
            sig/language_server/protocol/interface/rename_options.rbs +25/-0
            sig/language_server/protocol/interface/rename_params.rbs +31/-0
            sig/language_server/protocol/interface/rename_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/request_message.rbs +28/-0
            sig/language_server/protocol/interface/resource_operation.rbs +25/-0
            sig/language_server/protocol/interface/response_error.rbs +25/-0
            sig/language_server/protocol/interface/response_message.rbs +28/-0
            sig/language_server/protocol/interface/save_options.rbs +22/-0
            sig/language_server/protocol/interface/selection_range.rbs +26/-0
            sig/language_server/protocol/interface/selection_range_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/selection_range_options.rbs +19/-0
            sig/language_server/protocol/interface/selection_range_params.rbs +31/-0
            sig/language_server/protocol/interface/selection_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_client_capabilities.rbs +46/-0
            sig/language_server/protocol/interface/semantic_tokens_delta.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_delta_params.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_delta_partial_result.rbs +22/-0
            sig/language_server/protocol/interface/semantic_tokens_edit.rbs +28/-0
            sig/language_server/protocol/interface/semantic_tokens_legend.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_options.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_params.rbs +28/-0
            sig/language_server/protocol/interface/semantic_tokens_partial_result.rbs +22/-0
            sig/language_server/protocol/interface/semantic_tokens_range_params.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_registration_options.rbs +37/-0
            sig/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/server_capabilities.rbs +125/-0
            sig/language_server/protocol/interface/set_trace_params.rbs +19/-0
            sig/language_server/protocol/interface/show_document_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/show_document_params.rbs +33/-0
            sig/language_server/protocol/interface/show_document_result.rbs +24/-0
            sig/language_server/protocol/interface/show_message_params.rbs +25/-0
            sig/language_server/protocol/interface/show_message_request_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/show_message_request_params.rbs +25/-0
            sig/language_server/protocol/interface/signature_help.rbs +30/-0
            sig/language_server/protocol/interface/signature_help_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/signature_help_context.rbs +33/-0
            sig/language_server/protocol/interface/signature_help_options.rbs +28/-0
            sig/language_server/protocol/interface/signature_help_params.rbs +31/-0
            sig/language_server/protocol/interface/signature_help_registration_options.rbs +31/-0
            sig/language_server/protocol/interface/signature_information.rbs +33/-0
            sig/language_server/protocol/interface/static_registration_options.rbs +23/-0
            sig/language_server/protocol/interface/symbol_information.rbs +38/-0
            sig/language_server/protocol/interface/text_document_change_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/text_document_client_capabilities.rbs +109/-0
            sig/language_server/protocol/interface/text_document_content_change_event.rbs +29/-0
            sig/language_server/protocol/interface/text_document_edit.rbs +28/-0
            sig/language_server/protocol/interface/text_document_filter.rbs +43/-0
            sig/language_server/protocol/interface/text_document_identifier.rbs +22/-0
            sig/language_server/protocol/interface/text_document_item.rbs +32/-0
            sig/language_server/protocol/interface/text_document_position_params.rbs +26/-0
            sig/language_server/protocol/interface/text_document_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/text_document_save_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/text_document_sync_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/text_document_sync_options.rbs +31/-0
            sig/language_server/protocol/interface/text_edit.rbs +25/-0
            sig/language_server/protocol/interface/type_definition_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/type_definition_options.rbs +19/-0
            sig/language_server/protocol/interface/type_definition_params.rbs +28/-0
            sig/language_server/protocol/interface/type_definition_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/type_hierarchy_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/type_hierarchy_item.rbs +43/-0
            sig/language_server/protocol/interface/type_hierarchy_options.rbs +24/-0
            sig/language_server/protocol/interface/type_hierarchy_prepare_params.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_subtypes_params.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_supertypes_params.rbs +30/-0
            sig/language_server/protocol/interface/unchanged_document_diagnostic_report.rbs +28/-0
            sig/language_server/protocol/interface/unregistration.rbs +25/-0
            sig/language_server/protocol/interface/unregistration_params.rbs +19/-0
            sig/language_server/protocol/interface/versioned_notebook_document_identifier.rbs +27/-0
            sig/language_server/protocol/interface/versioned_text_document_identifier.rbs +25/-0
            sig/language_server/protocol/interface/will_save_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/window_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/work_done_progress_begin.rbs +31/-0
            sig/language_server/protocol/interface/work_done_progress_cancel_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_create_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_end.rbs +22/-0
            sig/language_server/protocol/interface/work_done_progress_options.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_report.rbs +28/-0
            sig/language_server/protocol/interface/workspace_client_capabilities.rbs +61/-0
            sig/language_server/protocol/interface/workspace_diagnostic_params.rbs +33/-0
            sig/language_server/protocol/interface/workspace_diagnostic_report.rbs +24/-0
            sig/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rbs +24/-0
            sig/language_server/protocol/interface/workspace_document_diagnostic_report.rbs +36/-0
            sig/language_server/protocol/interface/workspace_edit.rbs +39/-0
            sig/language_server/protocol/interface/workspace_edit_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/workspace_folder.rbs +25/-0
            sig/language_server/protocol/interface/workspace_folders_change_event.rbs +25/-0
            sig/language_server/protocol/interface/workspace_folders_initialize_params.rbs +19/-0
            sig/language_server/protocol/interface/workspace_folders_server_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/workspace_full_document_diagnostic_report.rbs +36/-0
            sig/language_server/protocol/interface/workspace_symbol.rbs +41/-0
            sig/language_server/protocol/interface/workspace_symbol_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/workspace_symbol_options.rbs +25/-0
            sig/language_server/protocol/interface/workspace_symbol_params.rbs +28/-0
            sig/language_server/protocol/interface/workspace_symbol_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rbs +33/-0
            sig/language_server/protocol/transport/io/reader.rbs +18/-0
            sig/language_server/protocol/transport/io/writer.rbs +18/-0
            sig/language_server/protocol/transport/stdio/reader.rbs +11/-0
            sig/language_server/protocol/transport/stdio/writer.rbs +11/-0
            sig/language_server/protocol/version.rbs +5/-0
      * Changed:
            lib/language_server/protocol/constant.rb +4/-0
            lib/language_server/protocol/constant/initialize_error_codes.rb +2/-0
            lib/language_server/protocol/interface.rb +32/-4
            lib/language_server/protocol/interface/annotated_text_edit.rb +12/-10
            lib/language_server/protocol/interface/apply_workspace_edit_params.rb +3/-0
            lib/language_server/protocol/interface/apply_workspace_edit_result.rb +9/-5
            lib/language_server/protocol/interface/call_hierarchy_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/call_hierarchy_incoming_call.rb +6/-1
            lib/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rb +14/-9
            lib/language_server/protocol/interface/call_hierarchy_item.rb +12/-8
            lib/language_server/protocol/interface/call_hierarchy_options.rb +5/-0
            lib/language_server/protocol/interface/call_hierarchy_outgoing_call.rb +8/-2
            lib/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rb +14/-9
            lib/language_server/protocol/interface/call_hierarchy_prepare_params.rb +5/-0
            lib/language_server/protocol/interface/call_hierarchy_registration_options.rb +8/-3
            lib/language_server/protocol/interface/cancel_params.rb +1/-1
            lib/language_server/protocol/interface/change_annotation.rb +2/-0
            lib/language_server/protocol/interface/client_capabilities.rb +10/-3
            lib/language_server/protocol/interface/code_action.rb +23/-21
            lib/language_server/protocol/interface/code_action_client_capabilities.rb +19/-3
            lib/language_server/protocol/interface/code_action_context.rb +10/-9
            lib/language_server/protocol/interface/code_action_options.rb +15/-10
            lib/language_server/protocol/interface/code_action_params.rb +21/-21
            lib/language_server/protocol/interface/code_action_registration_options.rb +18/-13
            lib/language_server/protocol/interface/code_description.rb +3/-1
            lib/language_server/protocol/interface/code_lens.rb +6/-7
            lib/language_server/protocol/interface/code_lens_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/code_lens_options.rb +10/-7
            lib/language_server/protocol/interface/code_lens_params.rb +15/-12
            lib/language_server/protocol/interface/code_lens_registration_options.rb +13/-10
            lib/language_server/protocol/interface/code_lens_workspace_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/color.rb +4/-4
            lib/language_server/protocol/interface/color_information.rb +3/-0
            lib/language_server/protocol/interface/color_presentation.rb +7/-8
            lib/language_server/protocol/interface/color_presentation_params.rb +24/-21
            lib/language_server/protocol/interface/command.rb +6/-0
            lib/language_server/protocol/interface/completion_client_capabilities.rb +20/-12
            lib/language_server/protocol/interface/completion_context.rb +3/-5
            lib/language_server/protocol/interface/completion_item.rb +45/-34
            lib/language_server/protocol/interface/completion_item_label_details.rb +6/-6
            lib/language_server/protocol/interface/completion_list.rb +5/-4
            lib/language_server/protocol/interface/completion_options.rb +24/-24
            lib/language_server/protocol/interface/completion_params.rb +16/-14
            lib/language_server/protocol/interface/completion_registration_options.rb +30/-27
            lib/language_server/protocol/interface/configuration_params.rb +3/-0
            lib/language_server/protocol/interface/create_file.rb +5/-3
            lib/language_server/protocol/interface/create_files_params.rb +4/-2
            lib/language_server/protocol/interface/declaration_client_capabilities.rb +6/-3
            lib/language_server/protocol/interface/declaration_params.rb +2/-2
            lib/language_server/protocol/interface/declaration_registration_options.rb +3/-3
            lib/language_server/protocol/interface/definition_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/definition_options.rb +3/-0
            lib/language_server/protocol/interface/definition_params.rb +5/-2
            lib/language_server/protocol/interface/definition_registration_options.rb +6/-3
            lib/language_server/protocol/interface/delete_file.rb +4/-2
            lib/language_server/protocol/interface/delete_files_params.rb +4/-2
            lib/language_server/protocol/interface/diagnostic.rb +20/-9
            lib/language_server/protocol/interface/diagnostic_client_capabilities.rb +5/-5
            lib/language_server/protocol/interface/diagnostic_options.rb +9/-7
            lib/language_server/protocol/interface/diagnostic_registration_options.rb +12/-10
            lib/language_server/protocol/interface/diagnostic_related_information.rb +3/-3
            lib/language_server/protocol/interface/diagnostic_server_cancellation_data.rb +2/-0
            lib/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rb +5/-3
            lib/language_server/protocol/interface/did_change_configuration_params.rb +3/-0
            lib/language_server/protocol/interface/did_change_notebook_document_params.rb +14/-8
            lib/language_server/protocol/interface/did_change_text_document_params.rb +12/-11
            lib/language_server/protocol/interface/did_change_watched_files_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/did_change_watched_files_params.rb +3/-0
            lib/language_server/protocol/interface/did_change_watched_files_registration_options.rb +1/-1
            lib/language_server/protocol/interface/did_change_workspace_folders_params.rb +3/-0
            lib/language_server/protocol/interface/did_close_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_close_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/did_open_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_open_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/did_save_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_save_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/document_color_client_capabilities.rb +3/-1
            lib/language_server/protocol/interface/document_color_params.rb +15/-12
            lib/language_server/protocol/interface/document_color_registration_options.rb +10/-10
            lib/language_server/protocol/interface/document_diagnostic_params.rb +22/-20
            lib/language_server/protocol/interface/document_diagnostic_report_partial_result.rb +3/-1
            lib/language_server/protocol/interface/document_filter.rb +27/-14
            lib/language_server/protocol/interface/document_formatting_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_formatting_params.rb +13/-10
            lib/language_server/protocol/interface/document_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_highlight.rb +1/-1
            lib/language_server/protocol/interface/document_highlight_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_highlight_options.rb +3/-0
            lib/language_server/protocol/interface/document_highlight_params.rb +5/-2
            lib/language_server/protocol/interface/document_highlight_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_link.rb +7/-6
            lib/language_server/protocol/interface/document_link_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/document_link_options.rb +10/-7
            lib/language_server/protocol/interface/document_link_params.rb +15/-12
            lib/language_server/protocol/interface/document_link_registration_options.rb +13/-10
            lib/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_params.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_range_formatting_client_capabilities.rb +4/-1
            lib/language_server/protocol/interface/document_range_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_range_formatting_params.rb +13/-10
            lib/language_server/protocol/interface/document_range_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_symbol.rb +14/-12
            lib/language_server/protocol/interface/document_symbol_client_capabilities.rb +8/-1
            lib/language_server/protocol/interface/document_symbol_options.rb +12/-7
            lib/language_server/protocol/interface/document_symbol_params.rb +15/-12
            lib/language_server/protocol/interface/document_symbol_registration_options.rb +15/-10
            lib/language_server/protocol/interface/execute_command_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/execute_command_options.rb +10/-7
            lib/language_server/protocol/interface/execute_command_params.rb +13/-10
            lib/language_server/protocol/interface/execute_command_registration_options.rb +8/-8
            lib/language_server/protocol/interface/execution_summary.rb +1/-1
            lib/language_server/protocol/interface/file_create.rb +2/-0
            lib/language_server/protocol/interface/file_delete.rb +2/-0
            lib/language_server/protocol/interface/file_event.rb +3/-3
            lib/language_server/protocol/interface/file_operation_filter.rb +4/-2
            lib/language_server/protocol/interface/file_operation_pattern.rb +6/-8
            lib/language_server/protocol/interface/file_operation_pattern_options.rb +2/-0
            lib/language_server/protocol/interface/file_operation_registration_options.rb +2/-0
            lib/language_server/protocol/interface/file_rename.rb +2/-0
            lib/language_server/protocol/interface/file_system_watcher.rb +4/-3
            lib/language_server/protocol/interface/folding_range.rb +18/-22
            lib/language_server/protocol/interface/folding_range_client_capabilities.rb +6/-2
            lib/language_server/protocol/interface/folding_range_params.rb +15/-12
            lib/language_server/protocol/interface/folding_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/formatting_options.rb +7/-1
            lib/language_server/protocol/interface/full_document_diagnostic_report.rb +3/-1
            lib/language_server/protocol/interface/hover.rb +2/-2
            lib/language_server/protocol/interface/hover_client_capabilities.rb +2/-3
            lib/language_server/protocol/interface/hover_options.rb +3/-0
            lib/language_server/protocol/interface/hover_params.rb +3/-0
            lib/language_server/protocol/interface/hover_registration_options.rb +6/-3
            lib/language_server/protocol/interface/implementation_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/implementation_params.rb +2/-2
            lib/language_server/protocol/interface/implementation_registration_options.rb +3/-3
            lib/language_server/protocol/interface/initialize_error.rb +4/-0
            lib/language_server/protocol/interface/initialize_params.rb +36/-24
            lib/language_server/protocol/interface/initialize_result.rb +5/-0
            lib/language_server/protocol/interface/inlay_hint.rb +2/-6
            lib/language_server/protocol/interface/inlay_hint_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/inlay_hint_label_part.rb +2/-0
            lib/language_server/protocol/interface/inlay_hint_options.rb +9/-7
            lib/language_server/protocol/interface/inlay_hint_params.rb +13/-11
            lib/language_server/protocol/interface/inlay_hint_registration_options.rb +12/-10
            lib/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/inline_value_client_capabilities.rb +3/-2
            lib/language_server/protocol/interface/inline_value_context.rb +5/-3
            lib/language_server/protocol/interface/inline_value_evaluatable_expression.rb +4/-6
            lib/language_server/protocol/interface/inline_value_options.rb +2/-0
            lib/language_server/protocol/interface/inline_value_params.rb +12/-10
            lib/language_server/protocol/interface/inline_value_registration_options.rb +5/-3
            lib/language_server/protocol/interface/inline_value_text.rb +2/-0
            lib/language_server/protocol/interface/inline_value_variable_lookup.rb +4/-6
            lib/language_server/protocol/interface/inline_value_workspace_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/insert_replace_edit.rb +2/-0
            lib/language_server/protocol/interface/linked_editing_range_client_capabilities.rb +7/-3
            lib/language_server/protocol/interface/linked_editing_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/linked_editing_ranges.rb +10/-6
            lib/language_server/protocol/interface/location.rb +5/-1
            lib/language_server/protocol/interface/location_link.rb +12/-10
            lib/language_server/protocol/interface/log_message_params.rb +4/-1
            lib/language_server/protocol/interface/log_trace_params.rb +0/-7
            lib/language_server/protocol/interface/markup_content.rb +16/-18
            lib/language_server/protocol/interface/moniker.rb +2/-0
            lib/language_server/protocol/interface/moniker_client_capabilities.rb +8/-4
            lib/language_server/protocol/interface/moniker_params.rb +2/-2
            lib/language_server/protocol/interface/moniker_registration_options.rb +3/-3
            lib/language_server/protocol/interface/notebook_cell.rb +6/-2
            lib/language_server/protocol/interface/notebook_cell_array_change.rb +5/-3
            lib/language_server/protocol/interface/notebook_cell_text_document_filter.rb +2/-0
            lib/language_server/protocol/interface/notebook_document.rb +7/-3
            lib/language_server/protocol/interface/notebook_document_change_event.rb +5/-1
            lib/language_server/protocol/interface/notebook_document_client_capabilities.rb +4/-0
            lib/language_server/protocol/interface/notebook_document_filter.rb +5/-26
            lib/language_server/protocol/interface/notebook_document_identifier.rb +4/-2
            lib/language_server/protocol/interface/notebook_document_sync_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/notebook_document_sync_options.rb +4/-2
            lib/language_server/protocol/interface/notebook_document_sync_registration_options.rb +3/-1
            lib/language_server/protocol/interface/optional_versioned_text_document_identifier.rb +17/-18
            lib/language_server/protocol/interface/parameter_information.rb +6/-8
            lib/language_server/protocol/interface/partial_result_params.rb +2/-2
            lib/language_server/protocol/interface/position.rb +40/-6
            lib/language_server/protocol/interface/previous_result_id.rb +4/-2
            lib/language_server/protocol/interface/progress_params.rb +1/-1
            lib/language_server/protocol/interface/publish_diagnostics_client_capabilities.rb +11/-0
            lib/language_server/protocol/interface/publish_diagnostics_params.rb +8/-4
            lib/language_server/protocol/interface/range.rb +13/-0
            lib/language_server/protocol/interface/reference_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/reference_context.rb +4/-0
            lib/language_server/protocol/interface/reference_options.rb +3/-0
            lib/language_server/protocol/interface/reference_params.rb +12/-9
            lib/language_server/protocol/interface/reference_registration_options.rb +6/-3
            lib/language_server/protocol/interface/registration.rb +1/-1
            lib/language_server/protocol/interface/regular_expressions_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/related_full_document_diagnostic_report.rb +19/-15
            lib/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rb +19/-15
            lib/language_server/protocol/interface/relative_pattern.rb +4/-2
            lib/language_server/protocol/interface/rename_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/rename_file.rb +5/-3
            lib/language_server/protocol/interface/rename_files_params.rb +6/-4
            lib/language_server/protocol/interface/rename_options.rb +12/-7
            lib/language_server/protocol/interface/rename_params.rb +16/-13
            lib/language_server/protocol/interface/rename_registration_options.rb +15/-10
            lib/language_server/protocol/interface/save_options.rb +3/-0
            lib/language_server/protocol/interface/selection_range.rb +6/-3
            lib/language_server/protocol/interface/selection_range_client_capabilities.rb +3/-4
            lib/language_server/protocol/interface/selection_range_params.rb +23/-20
            lib/language_server/protocol/interface/selection_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/semantic_tokens.rb +4/-1
            lib/language_server/protocol/interface/semantic_tokens_client_capabilities.rb +14/-8
            lib/language_server/protocol/interface/semantic_tokens_delta.rb +4/-2
            lib/language_server/protocol/interface/semantic_tokens_delta_params.rb +24/-21
            lib/language_server/protocol/interface/semantic_tokens_delta_partial_result.rb +3/-0
            lib/language_server/protocol/interface/semantic_tokens_edit.rb +6/-3
            lib/language_server/protocol/interface/semantic_tokens_legend.rb +3/-0
            lib/language_server/protocol/interface/semantic_tokens_options.rb +11/-8
            lib/language_server/protocol/interface/semantic_tokens_params.rb +15/-12
            lib/language_server/protocol/interface/semantic_tokens_partial_result.rb +4/-1
            lib/language_server/protocol/interface/semantic_tokens_range_params.rb +23/-20
            lib/language_server/protocol/interface/semantic_tokens_registration_options.rb +14/-11
            lib/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rb +4/-1
            lib/language_server/protocol/interface/server_capabilities.rb +59/-36
            lib/language_server/protocol/interface/set_trace_params.rb +1/-4
            lib/language_server/protocol/interface/show_document_client_capabilities.rb +4/-2
            lib/language_server/protocol/interface/show_document_params.rb +6/-4
            lib/language_server/protocol/interface/show_document_result.rb +3/-1
            lib/language_server/protocol/interface/show_message_params.rb +4/-1
            lib/language_server/protocol/interface/show_message_request_params.rb +1/-1
            lib/language_server/protocol/interface/signature_help.rb +5/-6
            lib/language_server/protocol/interface/signature_help_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/signature_help_context.rb +8/-9
            lib/language_server/protocol/interface/signature_help_options.rb +15/-12
            lib/language_server/protocol/interface/signature_help_params.rb +16/-12
            lib/language_server/protocol/interface/signature_help_registration_options.rb +18/-15
            lib/language_server/protocol/interface/signature_information.rb +3/-1
            lib/language_server/protocol/interface/static_registration_options.rb +2/-1
            lib/language_server/protocol/interface/symbol_information.rb +32/-28
            lib/language_server/protocol/interface/text_document_change_registration_options.rb +12/-13
            lib/language_server/protocol/interface/text_document_client_capabilities.rb +48/-19
            lib/language_server/protocol/interface/text_document_content_change_event.rb +4/-2
            lib/language_server/protocol/interface/text_document_edit.rb +10/-1
            lib/language_server/protocol/interface/text_document_identifier.rb +5/-2
            lib/language_server/protocol/interface/text_document_item.rb +7/-3
            lib/language_server/protocol/interface/text_document_position_params.rb +4/-0
            lib/language_server/protocol/interface/text_document_registration_options.rb +3/-3
            lib/language_server/protocol/interface/text_document_save_registration_options.rb +6/-3
            lib/language_server/protocol/interface/text_document_sync_options.rb +10/-14
            lib/language_server/protocol/interface/text_edit.rb +3/-0
            lib/language_server/protocol/interface/type_definition_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/type_definition_params.rb +2/-2
            lib/language_server/protocol/interface/type_definition_registration_options.rb +3/-3
            lib/language_server/protocol/interface/type_hierarchy_item.rb +6/-3
            lib/language_server/protocol/interface/type_hierarchy_options.rb +5/-0
            lib/language_server/protocol/interface/type_hierarchy_prepare_params.rb +5/-0
            lib/language_server/protocol/interface/type_hierarchy_registration_options.rb +8/-3
            lib/language_server/protocol/interface/type_hierarchy_subtypes_params.rb +14/-9
            lib/language_server/protocol/interface/type_hierarchy_supertypes_params.rb +14/-9
            lib/language_server/protocol/interface/unchanged_document_diagnostic_report.rb +3/-1
            lib/language_server/protocol/interface/unregistration.rb +2/-2
            lib/language_server/protocol/interface/versioned_notebook_document_identifier.rb +5/-3
            lib/language_server/protocol/interface/versioned_text_document_identifier.rb +13/-13
            lib/language_server/protocol/interface/will_save_text_document_params.rb +1/-1
            lib/language_server/protocol/interface/work_done_progress_begin.rb +4/-4
            lib/language_server/protocol/interface/work_done_progress_report.rb +4/-5
            lib/language_server/protocol/interface/workspace_diagnostic_params.rb +22/-20
            lib/language_server/protocol/interface/workspace_diagnostic_report.rb +2/-0
            lib/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rb +2/-0
            lib/language_server/protocol/interface/workspace_edit.rb +28/-17
            lib/language_server/protocol/interface/workspace_edit_client_capabilities.rb +10/-1
            lib/language_server/protocol/interface/workspace_folder.rb +4/-1
            lib/language_server/protocol/interface/workspace_folders_server_capabilities.rb +1/-1
            lib/language_server/protocol/interface/workspace_full_document_diagnostic_report.rb +23/-21
            lib/language_server/protocol/interface/workspace_symbol.rb +33/-27
            lib/language_server/protocol/interface/workspace_symbol_client_capabilities.rb +10/-4
            lib/language_server/protocol/interface/workspace_symbol_options.rb +12/-7
            lib/language_server/protocol/interface/workspace_symbol_params.rb +14/-14
            lib/language_server/protocol/interface/workspace_symbol_registration_options.rb +12/-7
            lib/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rb +23/-21
            lib/language_server/protocol/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT require_paths:
    2.20.0: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.20.0", "lib"]
    2.21.2: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.21.2", "lib"]
  DIFFERENT rubygems_version:
    2.20.0: 4.0.12
    2.21.2: 4.0.16
  DIFFERENT version:
    2.20.0: 2.20.0
    2.21.2: 2.21.2
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
            CHANGES.md +16/-0
            README.md +5/-5
            ext/json/ext/generator/generator.c +72/-3
            ext/json/ext/json.h +4/-0
            ext/json/ext/parser/extconf.rb +6/-16
            ext/json/ext/parser/parser.c +140/-43
            lib/json.rb +18/-3
            lib/json/common.rb +9/-0
            lib/json/ext.rb +26/-0
            lib/json/ext/generator/state.rb +1/-0
            lib/json/truffle_ruby/generator.rb +36/-1
            lib/json/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    2.20.0->2.21.2:
      * Changed:
            README.md +5/-5

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

gem compare json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT require_paths:
    2.20.0: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.20.0", "lib"]
    2.21.2: ["/opt/hostedtoolcache/Ruby/4.0.6/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.21.2", "lib"]
  DIFFERENT rubygems_version:
    2.20.0: 4.0.12
    2.21.2: 4.0.16
  DIFFERENT version:
    2.20.0: 2.20.0
    2.21.2: 2.21.2
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
            CHANGES.md +16/-0
            README.md +5/-5
            ext/json/ext/generator/generator.c +72/-3
            ext/json/ext/json.h +4/-0
            ext/json/ext/parser/extconf.rb +6/-16
            ext/json/ext/parser/parser.c +140/-43
            lib/json.rb +18/-3
            lib/json/common.rb +9/-0
            lib/json/ext.rb +26/-0
            lib/json/ext/generator/state.rb +1/-0
            lib/json/truffle_ruby/generator.rb +36/-1
            lib/json/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    2.20.0->2.21.2:
      * Changed:
            README.md +5/-5

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff language_server-protocol 3.17.0.5 3.17.0.6

Diff too large (1019206 chars)

@github-actions

Copy link
Copy Markdown
Contributor

gem compare language_server-protocol 3.17.0.5 3.17.0.6

Compared versions: ["3.17.0.5", "3.17.0.6"]
  DIFFERENT rubygems_version:
    3.17.0.5: 3.6.8
    3.17.0.6: 4.0.10
  DIFFERENT version:
    3.17.0.5: 3.17.0.5
    3.17.0.6: 3.17.0.6
  DIFFERENT files:
    3.17.0.5->3.17.0.6:
      * Added:
            lib/language_server/protocol/constant/lsp_error_codes.rb +41/-0
            lib/language_server/protocol/constant/trace_values.rb +20/-0
            lib/language_server/protocol/interface/base_symbol_information.rb +68/-0
            lib/language_server/protocol/interface/did_change_configuration_registration_options.rb +30/-0
            lib/language_server/protocol/interface/document_diagnostic_report.rb +89/-0
            lib/language_server/protocol/interface/file_operation_client_capabilities.rb +95/-0
            lib/language_server/protocol/interface/file_operation_options.rb +83/-0
            lib/language_server/protocol/interface/general_client_capabilities.rb +91/-0
            lib/language_server/protocol/interface/inline_value.rb +88/-0
            lib/language_server/protocol/interface/markdown_client_capabilities.rb +59/-0
            lib/language_server/protocol/interface/prepare_rename_result.rb +69/-0
            lib/language_server/protocol/interface/resource_operation.rb +47/-0
            lib/language_server/protocol/interface/text_document_filter.rb +69/-0
            lib/language_server/protocol/interface/type_hierarchy_client_capabilities.rb +38/-0
            lib/language_server/protocol/interface/window_client_capabilities.rb +63/-0
            lib/language_server/protocol/interface/workspace_client_capabilities.rb +176/-0
            lib/language_server/protocol/interface/workspace_document_diagnostic_report.rb +89/-0
            lib/language_server/protocol/interface/workspace_folders_initialize_params.rb +39/-0
            sig/language_server/protocol/constant/code_action_kind.rbs +85/-0
            sig/language_server/protocol/constant/code_action_trigger_kind.rbs +22/-0
            sig/language_server/protocol/constant/completion_item_kind.rbs +36/-0
            sig/language_server/protocol/constant/completion_item_tag.rbs +16/-0
            sig/language_server/protocol/constant/completion_trigger_kind.rbs +26/-0
            sig/language_server/protocol/constant/diagnostic_severity.rbs +24/-0
            sig/language_server/protocol/constant/diagnostic_tag.rbs +24/-0
            sig/language_server/protocol/constant/document_diagnostic_report_kind.rbs +21/-0
            sig/language_server/protocol/constant/document_highlight_kind.rbs +23/-0
            sig/language_server/protocol/constant/error_codes.rbs +73/-0
            sig/language_server/protocol/constant/failure_handling_kind.rbs +30/-0
            sig/language_server/protocol/constant/file_change_type.rbs +23/-0
            sig/language_server/protocol/constant/file_operation_pattern_kind.rbs +20/-0
            sig/language_server/protocol/constant/folding_range_kind.rbs +24/-0
            sig/language_server/protocol/constant/initialize_error_codes.rbs +18/-0
            sig/language_server/protocol/constant/inlay_hint_kind.rbs +19/-0
            sig/language_server/protocol/constant/insert_text_format.rbs +25/-0
            sig/language_server/protocol/constant/insert_text_mode.rbs +30/-0
            sig/language_server/protocol/constant/lsp_error_codes.rbs +41/-0
            sig/language_server/protocol/constant/markup_kind.rbs +23/-0
            sig/language_server/protocol/constant/message_type.rbs +24/-0
            sig/language_server/protocol/constant/moniker_kind.rbs +24/-0
            sig/language_server/protocol/constant/notebook_cell_kind.rbs +19/-0
            sig/language_server/protocol/constant/position_encoding_kind.rbs +32/-0
            sig/language_server/protocol/constant/prepare_support_default_behavior.rbs +13/-0
            sig/language_server/protocol/constant/resource_operation_kind.rbs +23/-0
            sig/language_server/protocol/constant/semantic_token_modifiers.rbs +18/-0
            sig/language_server/protocol/constant/semantic_token_types.rbs +35/-0
            sig/language_server/protocol/constant/signature_help_trigger_kind.rbs +24/-0
            sig/language_server/protocol/constant/symbol_kind.rbs +37/-0
            sig/language_server/protocol/constant/symbol_tag.rbs +15/-0
            sig/language_server/protocol/constant/text_document_save_reason.rbs +24/-0
            sig/language_server/protocol/constant/text_document_sync_kind.rbs +27/-0
            sig/language_server/protocol/constant/token_format.rbs +9/-0
            sig/language_server/protocol/constant/trace_values.rbs +20/-0
            sig/language_server/protocol/constant/uniqueness_level.rbs +31/-0
            sig/language_server/protocol/constant/watch_kind.rbs +20/-0
            sig/language_server/protocol/interface/annotated_text_edit.rbs +30/-0
            sig/language_server/protocol/interface/apply_workspace_edit_params.rbs +25/-0
            sig/language_server/protocol/interface/apply_workspace_edit_result.rbs +30/-0
            sig/language_server/protocol/interface/base_symbol_information.rbs +31/-0
            sig/language_server/protocol/interface/call_hierarchy_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/call_hierarchy_incoming_call.rbs +27/-0
            sig/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_item.rbs +46/-0
            sig/language_server/protocol/interface/call_hierarchy_options.rbs +24/-0
            sig/language_server/protocol/interface/call_hierarchy_outgoing_call.rbs +27/-0
            sig/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_prepare_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/cancel_params.rbs +19/-0
            sig/language_server/protocol/interface/change_annotation.rbs +30/-0
            sig/language_server/protocol/interface/client_capabilities.rbs +37/-0
            sig/language_server/protocol/interface/code_action.rbs +46/-0
            sig/language_server/protocol/interface/code_action_client_capabilities.rbs +40/-0
            sig/language_server/protocol/interface/code_action_context.rbs +29/-0
            sig/language_server/protocol/interface/code_action_options.rbs +28/-0
            sig/language_server/protocol/interface/code_action_params.rbs +34/-0
            sig/language_server/protocol/interface/code_action_registration_options.rbs +31/-0
            sig/language_server/protocol/interface/code_description.rbs +24/-0
            sig/language_server/protocol/interface/code_lens.rbs +32/-0
            sig/language_server/protocol/interface/code_lens_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/code_lens_options.rbs +25/-0
            sig/language_server/protocol/interface/code_lens_params.rbs +28/-0
            sig/language_server/protocol/interface/code_lens_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/code_lens_workspace_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/color.rbs +31/-0
            sig/language_server/protocol/interface/color_information.rbs +25/-0
            sig/language_server/protocol/interface/color_presentation.rbs +25/-0
            sig/language_server/protocol/interface/color_presentation_params.rbs +34/-0
            sig/language_server/protocol/interface/command.rbs +31/-0
            sig/language_server/protocol/interface/completion_client_capabilities.rbs +37/-0
            sig/language_server/protocol/interface/completion_context.rbs +25/-0
            sig/language_server/protocol/interface/completion_item.rbs +77/-0
            sig/language_server/protocol/interface/completion_item_label_details.rbs +27/-0
            sig/language_server/protocol/interface/completion_list.rbs +29/-0
            sig/language_server/protocol/interface/completion_options.rbs +34/-0
            sig/language_server/protocol/interface/completion_params.rbs +34/-0
            sig/language_server/protocol/interface/completion_registration_options.rbs +37/-0
            sig/language_server/protocol/interface/configuration_item.rbs +22/-0
            sig/language_server/protocol/interface/configuration_params.rbs +22/-0
            sig/language_server/protocol/interface/create_file.rbs +31/-0
            sig/language_server/protocol/interface/create_file_options.rbs +25/-0
            sig/language_server/protocol/interface/create_files_params.rbs +25/-0
            sig/language_server/protocol/interface/declaration_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/declaration_options.rbs +19/-0
            sig/language_server/protocol/interface/declaration_params.rbs +28/-0
            sig/language_server/protocol/interface/declaration_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/definition_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/definition_options.rbs +22/-0
            sig/language_server/protocol/interface/definition_params.rbs +31/-0
            sig/language_server/protocol/interface/definition_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/delete_file.rbs +31/-0
            sig/language_server/protocol/interface/delete_file_options.rbs +25/-0
            sig/language_server/protocol/interface/delete_files_params.rbs +25/-0
            sig/language_server/protocol/interface/diagnostic.rbs +47/-0
            sig/language_server/protocol/interface/diagnostic_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/diagnostic_options.rbs +33/-0
            sig/language_server/protocol/interface/diagnostic_registration_options.rbs +39/-0
            sig/language_server/protocol/interface/diagnostic_related_information.rbs +27/-0
            sig/language_server/protocol/interface/diagnostic_server_cancellation_data.rbs +24/-0
            sig/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/did_change_configuration_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/did_change_configuration_params.rbs +22/-0
            sig/language_server/protocol/interface/did_change_configuration_registration_options.rbs +19/-0
            sig/language_server/protocol/interface/did_change_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_change_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/did_change_watched_files_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/did_change_watched_files_params.rbs +22/-0
            sig/language_server/protocol/interface/did_change_watched_files_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/did_change_workspace_folders_params.rbs +22/-0
            sig/language_server/protocol/interface/did_close_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_close_text_document_params.rbs +22/-0
            sig/language_server/protocol/interface/did_open_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_open_text_document_params.rbs +22/-0
            sig/language_server/protocol/interface/did_save_notebook_document_params.rbs +24/-0
            sig/language_server/protocol/interface/did_save_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/document_color_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/document_color_options.rbs +19/-0
            sig/language_server/protocol/interface/document_color_params.rbs +28/-0
            sig/language_server/protocol/interface/document_color_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_diagnostic_params.rbs +36/-0
            sig/language_server/protocol/interface/document_diagnostic_report.rbs +37/-0
            sig/language_server/protocol/interface/document_diagnostic_report_partial_result.rbs +24/-0
            sig/language_server/protocol/interface/document_filter.rbs +34/-0
            sig/language_server/protocol/interface/document_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_formatting_options.rbs +22/-0
            sig/language_server/protocol/interface/document_formatting_params.rbs +28/-0
            sig/language_server/protocol/interface/document_formatting_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_highlight.rbs +27/-0
            sig/language_server/protocol/interface/document_highlight_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_highlight_options.rbs +22/-0
            sig/language_server/protocol/interface/document_highlight_params.rbs +31/-0
            sig/language_server/protocol/interface/document_highlight_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_link.rbs +32/-0
            sig/language_server/protocol/interface/document_link_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/document_link_options.rbs +25/-0
            sig/language_server/protocol/interface/document_link_params.rbs +28/-0
            sig/language_server/protocol/interface/document_link_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_on_type_formatting_options.rbs +25/-0
            sig/language_server/protocol/interface/document_on_type_formatting_params.rbs +31/-0
            sig/language_server/protocol/interface/document_on_type_formatting_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/document_range_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_range_formatting_options.rbs +22/-0
            sig/language_server/protocol/interface/document_range_formatting_params.rbs +31/-0
            sig/language_server/protocol/interface/document_range_formatting_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_symbol.rbs +46/-0
            sig/language_server/protocol/interface/document_symbol_client_capabilities.rbs +34/-0
            sig/language_server/protocol/interface/document_symbol_options.rbs +25/-0
            sig/language_server/protocol/interface/document_symbol_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/execute_command_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/execute_command_options.rbs +25/-0
            sig/language_server/protocol/interface/execute_command_params.rbs +28/-0
            sig/language_server/protocol/interface/execute_command_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/execution_summary.rbs +22/-0
            sig/language_server/protocol/interface/file_create.rbs +24/-0
            sig/language_server/protocol/interface/file_delete.rbs +24/-0
            sig/language_server/protocol/interface/file_event.rbs +25/-0
            sig/language_server/protocol/interface/file_operation_client_capabilities.rbs +45/-0
            sig/language_server/protocol/interface/file_operation_filter.rbs +28/-0
            sig/language_server/protocol/interface/file_operation_options.rbs +39/-0
            sig/language_server/protocol/interface/file_operation_pattern.rbs +31/-0
            sig/language_server/protocol/interface/file_operation_pattern_options.rbs +24/-0
            sig/language_server/protocol/interface/file_operation_registration_options.rbs +24/-0
            sig/language_server/protocol/interface/file_rename.rbs +27/-0
            sig/language_server/protocol/interface/file_system_watcher.rbs +22/-0
            sig/language_server/protocol/interface/folding_range.rbs +38/-0
            sig/language_server/protocol/interface/folding_range_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/folding_range_options.rbs +19/-0
            sig/language_server/protocol/interface/folding_range_params.rbs +28/-0
            sig/language_server/protocol/interface/folding_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/formatting_options.rbs +34/-0
            sig/language_server/protocol/interface/full_document_diagnostic_report.rbs +30/-0
            sig/language_server/protocol/interface/general_client_capabilities.rbs +33/-0
            sig/language_server/protocol/interface/hover.rbs +25/-0
            sig/language_server/protocol/interface/hover_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/hover_options.rbs +22/-0
            sig/language_server/protocol/interface/hover_params.rbs +28/-0
            sig/language_server/protocol/interface/hover_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/hover_result.rbs +19/-0
            sig/language_server/protocol/interface/implementation_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/implementation_options.rbs +19/-0
            sig/language_server/protocol/interface/implementation_params.rbs +28/-0
            sig/language_server/protocol/interface/implementation_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/initialize_error.rbs +23/-0
            sig/language_server/protocol/interface/initialize_params.rbs +46/-0
            sig/language_server/protocol/interface/initialize_result.rbs +25/-0
            sig/language_server/protocol/interface/initialized_params.rbs +16/-0
            sig/language_server/protocol/interface/inlay_hint.rbs +45/-0
            sig/language_server/protocol/interface/inlay_hint_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/inlay_hint_label_part.rbs +34/-0
            sig/language_server/protocol/interface/inlay_hint_options.rbs +27/-0
            sig/language_server/protocol/interface/inlay_hint_registration_options.rbs +33/-0
            sig/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/inline_value.rbs +40/-0
            sig/language_server/protocol/interface/inline_value_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/inline_value_context.rbs +25/-0
            sig/language_server/protocol/interface/inline_value_evaluatable_expression.rbs +29/-0
            sig/language_server/protocol/interface/inline_value_options.rbs +24/-0
            sig/language_server/protocol/interface/inline_value_params.rbs +33/-0
            sig/language_server/protocol/interface/inline_value_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/inline_value_text.rbs +27/-0
            sig/language_server/protocol/interface/inline_value_variable_lookup.rbs +32/-0
            sig/language_server/protocol/interface/inline_value_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/insert_replace_edit.rbs +30/-0
            sig/language_server/protocol/interface/linked_editing_range_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/linked_editing_range_options.rbs +19/-0
            sig/language_server/protocol/interface/linked_editing_range_params.rbs +25/-0
            sig/language_server/protocol/interface/linked_editing_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/linked_editing_ranges.rbs +27/-0
            sig/language_server/protocol/interface/location.rbs +26/-0
            sig/language_server/protocol/interface/location_link.rbs +32/-0
            sig/language_server/protocol/interface/log_message_params.rbs +25/-0
            sig/language_server/protocol/interface/markdown_client_capabilities.rbs +30/-0
            sig/language_server/protocol/interface/markup_content.rbs +46/-0
            sig/language_server/protocol/interface/message.rbs +19/-0
            sig/language_server/protocol/interface/message_action_item.rbs +19/-0
            sig/language_server/protocol/interface/moniker.rbs +33/-0
            sig/language_server/protocol/interface/moniker_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/moniker_options.rbs +19/-0
            sig/language_server/protocol/interface/moniker_params.rbs +28/-0
            sig/language_server/protocol/interface/moniker_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/notebook_cell.rbs +37/-0
            sig/language_server/protocol/interface/notebook_cell_array_change.rbs +31/-0
            sig/language_server/protocol/interface/notebook_cell_text_document_filter.rbs +28/-0
            sig/language_server/protocol/interface/notebook_document.rbs +36/-0
            sig/language_server/protocol/interface/notebook_document_change_event.rbs +27/-0
            sig/language_server/protocol/interface/notebook_document_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/notebook_document_filter.rbs +32/-0
            sig/language_server/protocol/interface/notebook_document_identifier.rbs +24/-0
            sig/language_server/protocol/interface/notebook_document_sync_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/notebook_document_sync_options.rbs +37/-0
            sig/language_server/protocol/interface/notebook_document_sync_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/notification_message.rbs +25/-0
            sig/language_server/protocol/interface/optional_versioned_text_document_identifier.rbs +25/-0
            sig/language_server/protocol/interface/parameter_information.rbs +26/-0
            sig/language_server/protocol/interface/partial_result_params.rbs +19/-0
            sig/language_server/protocol/interface/position.rbs +51/-0
            sig/language_server/protocol/interface/prepare_rename_params.rbs +25/-0
            sig/language_server/protocol/interface/prepare_rename_result.rbs +31/-0
            sig/language_server/protocol/interface/previous_result_id.rbs +27/-0
            sig/language_server/protocol/interface/progress_params.rbs +22/-0
            sig/language_server/protocol/interface/publish_diagnostics_client_capabilities.rbs +34/-0
            sig/language_server/protocol/interface/publish_diagnostics_params.rbs +28/-0
            sig/language_server/protocol/interface/range.rbs +35/-0
            sig/language_server/protocol/interface/reference_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/reference_context.rbs +23/-0
            sig/language_server/protocol/interface/reference_options.rbs +22/-0
            sig/language_server/protocol/interface/reference_params.rbs +34/-0
            sig/language_server/protocol/interface/reference_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/registration.rbs +28/-0
            sig/language_server/protocol/interface/registration_params.rbs +19/-0
            sig/language_server/protocol/interface/regular_expressions_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/related_full_document_diagnostic_report.rbs +33/-0
            sig/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rbs +30/-0
            sig/language_server/protocol/interface/relative_pattern.rbs +29/-0
            sig/language_server/protocol/interface/rename_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/rename_file.rbs +34/-0
            sig/language_server/protocol/interface/rename_file_options.rbs +25/-0
            sig/language_server/protocol/interface/rename_files_params.rbs +25/-0
            sig/language_server/protocol/interface/rename_options.rbs +25/-0
            sig/language_server/protocol/interface/rename_params.rbs +31/-0
            sig/language_server/protocol/interface/rename_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/request_message.rbs +28/-0
            sig/language_server/protocol/interface/resource_operation.rbs +25/-0
            sig/language_server/protocol/interface/response_error.rbs +25/-0
            sig/language_server/protocol/interface/response_message.rbs +28/-0
            sig/language_server/protocol/interface/save_options.rbs +22/-0
            sig/language_server/protocol/interface/selection_range.rbs +26/-0
            sig/language_server/protocol/interface/selection_range_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/selection_range_options.rbs +19/-0
            sig/language_server/protocol/interface/selection_range_params.rbs +31/-0
            sig/language_server/protocol/interface/selection_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_client_capabilities.rbs +46/-0
            sig/language_server/protocol/interface/semantic_tokens_delta.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_delta_params.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_delta_partial_result.rbs +22/-0
            sig/language_server/protocol/interface/semantic_tokens_edit.rbs +28/-0
            sig/language_server/protocol/interface/semantic_tokens_legend.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_options.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_params.rbs +28/-0
            sig/language_server/protocol/interface/semantic_tokens_partial_result.rbs +22/-0
            sig/language_server/protocol/interface/semantic_tokens_range_params.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_registration_options.rbs +37/-0
            sig/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/server_capabilities.rbs +125/-0
            sig/language_server/protocol/interface/set_trace_params.rbs +19/-0
            sig/language_server/protocol/interface/show_document_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/show_document_params.rbs +33/-0
            sig/language_server/protocol/interface/show_document_result.rbs +24/-0
            sig/language_server/protocol/interface/show_message_params.rbs +25/-0
            sig/language_server/protocol/interface/show_message_request_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/show_message_request_params.rbs +25/-0
            sig/language_server/protocol/interface/signature_help.rbs +30/-0
            sig/language_server/protocol/interface/signature_help_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/signature_help_context.rbs +33/-0
            sig/language_server/protocol/interface/signature_help_options.rbs +28/-0
            sig/language_server/protocol/interface/signature_help_params.rbs +31/-0
            sig/language_server/protocol/interface/signature_help_registration_options.rbs +31/-0
            sig/language_server/protocol/interface/signature_information.rbs +33/-0
            sig/language_server/protocol/interface/static_registration_options.rbs +23/-0
            sig/language_server/protocol/interface/symbol_information.rbs +38/-0
            sig/language_server/protocol/interface/text_document_change_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/text_document_client_capabilities.rbs +109/-0
            sig/language_server/protocol/interface/text_document_content_change_event.rbs +29/-0
            sig/language_server/protocol/interface/text_document_edit.rbs +28/-0
            sig/language_server/protocol/interface/text_document_filter.rbs +43/-0
            sig/language_server/protocol/interface/text_document_identifier.rbs +22/-0
            sig/language_server/protocol/interface/text_document_item.rbs +32/-0
            sig/language_server/protocol/interface/text_document_position_params.rbs +26/-0
            sig/language_server/protocol/interface/text_document_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/text_document_save_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/text_document_sync_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/text_document_sync_options.rbs +31/-0
            sig/language_server/protocol/interface/text_edit.rbs +25/-0
            sig/language_server/protocol/interface/type_definition_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/type_definition_options.rbs +19/-0
            sig/language_server/protocol/interface/type_definition_params.rbs +28/-0
            sig/language_server/protocol/interface/type_definition_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/type_hierarchy_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/type_hierarchy_item.rbs +43/-0
            sig/language_server/protocol/interface/type_hierarchy_options.rbs +24/-0
            sig/language_server/protocol/interface/type_hierarchy_prepare_params.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_subtypes_params.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_supertypes_params.rbs +30/-0
            sig/language_server/protocol/interface/unchanged_document_diagnostic_report.rbs +28/-0
            sig/language_server/protocol/interface/unregistration.rbs +25/-0
            sig/language_server/protocol/interface/unregistration_params.rbs +19/-0
            sig/language_server/protocol/interface/versioned_notebook_document_identifier.rbs +27/-0
            sig/language_server/protocol/interface/versioned_text_document_identifier.rbs +25/-0
            sig/language_server/protocol/interface/will_save_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/window_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/work_done_progress_begin.rbs +31/-0
            sig/language_server/protocol/interface/work_done_progress_cancel_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_create_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_end.rbs +22/-0
            sig/language_server/protocol/interface/work_done_progress_options.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_report.rbs +28/-0
            sig/language_server/protocol/interface/workspace_client_capabilities.rbs +61/-0
            sig/language_server/protocol/interface/workspace_diagnostic_params.rbs +33/-0
            sig/language_server/protocol/interface/workspace_diagnostic_report.rbs +24/-0
            sig/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rbs +24/-0
            sig/language_server/protocol/interface/workspace_document_diagnostic_report.rbs +36/-0
            sig/language_server/protocol/interface/workspace_edit.rbs +39/-0
            sig/language_server/protocol/interface/workspace_edit_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/workspace_folder.rbs +25/-0
            sig/language_server/protocol/interface/workspace_folders_change_event.rbs +25/-0
            sig/language_server/protocol/interface/workspace_folders_initialize_params.rbs +19/-0
            sig/language_server/protocol/interface/workspace_folders_server_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/workspace_full_document_diagnostic_report.rbs +36/-0
            sig/language_server/protocol/interface/workspace_symbol.rbs +41/-0
            sig/language_server/protocol/interface/workspace_symbol_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/workspace_symbol_options.rbs +25/-0
            sig/language_server/protocol/interface/workspace_symbol_params.rbs +28/-0
            sig/language_server/protocol/interface/workspace_symbol_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rbs +33/-0
            sig/language_server/protocol/transport/io/reader.rbs +18/-0
            sig/language_server/protocol/transport/io/writer.rbs +18/-0
            sig/language_server/protocol/transport/stdio/reader.rbs +11/-0
            sig/language_server/protocol/transport/stdio/writer.rbs +11/-0
            sig/language_server/protocol/version.rbs +5/-0
      * Changed:
            lib/language_server/protocol/constant.rb +4/-0
            lib/language_server/protocol/constant/initialize_error_codes.rb +2/-0
            lib/language_server/protocol/interface.rb +32/-4
            lib/language_server/protocol/interface/annotated_text_edit.rb +12/-10
            lib/language_server/protocol/interface/apply_workspace_edit_params.rb +3/-0
            lib/language_server/protocol/interface/apply_workspace_edit_result.rb +9/-5
            lib/language_server/protocol/interface/call_hierarchy_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/call_hierarchy_incoming_call.rb +6/-1
            lib/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rb +14/-9
            lib/language_server/protocol/interface/call_hierarchy_item.rb +12/-8
            lib/language_server/protocol/interface/call_hierarchy_options.rb +5/-0
            lib/language_server/protocol/interface/call_hierarchy_outgoing_call.rb +8/-2
            lib/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rb +14/-9
            lib/language_server/protocol/interface/call_hierarchy_prepare_params.rb +5/-0
            lib/language_server/protocol/interface/call_hierarchy_registration_options.rb +8/-3
            lib/language_server/protocol/interface/cancel_params.rb +1/-1
            lib/language_server/protocol/interface/change_annotation.rb +2/-0
            lib/language_server/protocol/interface/client_capabilities.rb +10/-3
            lib/language_server/protocol/interface/code_action.rb +23/-21
            lib/language_server/protocol/interface/code_action_client_capabilities.rb +19/-3
            lib/language_server/protocol/interface/code_action_context.rb +10/-9
            lib/language_server/protocol/interface/code_action_options.rb +15/-10
            lib/language_server/protocol/interface/code_action_params.rb +21/-21
            lib/language_server/protocol/interface/code_action_registration_options.rb +18/-13
            lib/language_server/protocol/interface/code_description.rb +3/-1
            lib/language_server/protocol/interface/code_lens.rb +6/-7
            lib/language_server/protocol/interface/code_lens_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/code_lens_options.rb +10/-7
            lib/language_server/protocol/interface/code_lens_params.rb +15/-12
            lib/language_server/protocol/interface/code_lens_registration_options.rb +13/-10
            lib/language_server/protocol/interface/code_lens_workspace_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/color.rb +4/-4
            lib/language_server/protocol/interface/color_information.rb +3/-0
            lib/language_server/protocol/interface/color_presentation.rb +7/-8
            lib/language_server/protocol/interface/color_presentation_params.rb +24/-21
            lib/language_server/protocol/interface/command.rb +6/-0
            lib/language_server/protocol/interface/completion_client_capabilities.rb +20/-12
            lib/language_server/protocol/interface/completion_context.rb +3/-5
            lib/language_server/protocol/interface/completion_item.rb +45/-34
            lib/language_server/protocol/interface/completion_item_label_details.rb +6/-6
            lib/language_server/protocol/interface/completion_list.rb +5/-4
            lib/language_server/protocol/interface/completion_options.rb +24/-24
            lib/language_server/protocol/interface/completion_params.rb +16/-14
            lib/language_server/protocol/interface/completion_registration_options.rb +30/-27
            lib/language_server/protocol/interface/configuration_params.rb +3/-0
            lib/language_server/protocol/interface/create_file.rb +5/-3
            lib/language_server/protocol/interface/create_files_params.rb +4/-2
            lib/language_server/protocol/interface/declaration_client_capabilities.rb +6/-3
            lib/language_server/protocol/interface/declaration_params.rb +2/-2
            lib/language_server/protocol/interface/declaration_registration_options.rb +3/-3
            lib/language_server/protocol/interface/definition_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/definition_options.rb +3/-0
            lib/language_server/protocol/interface/definition_params.rb +5/-2
            lib/language_server/protocol/interface/definition_registration_options.rb +6/-3
            lib/language_server/protocol/interface/delete_file.rb +4/-2
            lib/language_server/protocol/interface/delete_files_params.rb +4/-2
            lib/language_server/protocol/interface/diagnostic.rb +20/-9
            lib/language_server/protocol/interface/diagnostic_client_capabilities.rb +5/-5
            lib/language_server/protocol/interface/diagnostic_options.rb +9/-7
            lib/language_server/protocol/interface/diagnostic_registration_options.rb +12/-10
            lib/language_server/protocol/interface/diagnostic_related_information.rb +3/-3
            lib/language_server/protocol/interface/diagnostic_server_cancellation_data.rb +2/-0
            lib/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rb +5/-3
            lib/language_server/protocol/interface/did_change_configuration_params.rb +3/-0
            lib/language_server/protocol/interface/did_change_notebook_document_params.rb +14/-8
            lib/language_server/protocol/interface/did_change_text_document_params.rb +12/-11
            lib/language_server/protocol/interface/did_change_watched_files_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/did_change_watched_files_params.rb +3/-0
            lib/language_server/protocol/interface/did_change_watched_files_registration_options.rb +1/-1
            lib/language_server/protocol/interface/did_change_workspace_folders_params.rb +3/-0
            lib/language_server/protocol/interface/did_close_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_close_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/did_open_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_open_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/did_save_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_save_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/document_color_client_capabilities.rb +3/-1
            lib/language_server/protocol/interface/document_color_params.rb +15/-12
            lib/language_server/protocol/interface/document_color_registration_options.rb +10/-10
            lib/language_server/protocol/interface/document_diagnostic_params.rb +22/-20
            lib/language_server/protocol/interface/document_diagnostic_report_partial_result.rb +3/-1
            lib/language_server/protocol/interface/document_filter.rb +27/-14
            lib/language_server/protocol/interface/document_formatting_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_formatting_params.rb +13/-10
            lib/language_server/protocol/interface/document_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_highlight.rb +1/-1
            lib/language_server/protocol/interface/document_highlight_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_highlight_options.rb +3/-0
            lib/language_server/protocol/interface/document_highlight_params.rb +5/-2
            lib/language_server/protocol/interface/document_highlight_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_link.rb +7/-6
            lib/language_server/protocol/interface/document_link_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/document_link_options.rb +10/-7
            lib/language_server/protocol/interface/document_link_params.rb +15/-12
            lib/language_server/protocol/interface/document_link_registration_options.rb +13/-10
            lib/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_params.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_range_formatting_client_capabilities.rb +4/-1
            lib/language_server/protocol/interface/document_range_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_range_formatting_params.rb +13/-10
            lib/language_server/protocol/interface/document_range_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_symbol.rb +14/-12
            lib/language_server/protocol/interface/document_symbol_client_capabilities.rb +8/-1
            lib/language_server/protocol/interface/document_symbol_options.rb +12/-7
            lib/language_server/protocol/interface/document_symbol_params.rb +15/-12
            lib/language_server/protocol/interface/document_symbol_registration_options.rb +15/-10
            lib/language_server/protocol/interface/execute_command_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/execute_command_options.rb +10/-7
            lib/language_server/protocol/interface/execute_command_params.rb +13/-10
            lib/language_server/protocol/interface/execute_command_registration_options.rb +8/-8
            lib/language_server/protocol/interface/execution_summary.rb +1/-1
            lib/language_server/protocol/interface/file_create.rb +2/-0
            lib/language_server/protocol/interface/file_delete.rb +2/-0
            lib/language_server/protocol/interface/file_event.rb +3/-3
            lib/language_server/protocol/interface/file_operation_filter.rb +4/-2
            lib/language_server/protocol/interface/file_operation_pattern.rb +6/-8
            lib/language_server/protocol/interface/file_operation_pattern_options.rb +2/-0
            lib/language_server/protocol/interface/file_operation_registration_options.rb +2/-0
            lib/language_server/protocol/interface/file_rename.rb +2/-0
            lib/language_server/protocol/interface/file_system_watcher.rb +4/-3
            lib/language_server/protocol/interface/folding_range.rb +18/-22
            lib/language_server/protocol/interface/folding_range_client_capabilities.rb +6/-2
            lib/language_server/protocol/interface/folding_range_params.rb +15/-12
            lib/language_server/protocol/interface/folding_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/formatting_options.rb +7/-1
            lib/language_server/protocol/interface/full_document_diagnostic_report.rb +3/-1
            lib/language_server/protocol/interface/hover.rb +2/-2
            lib/language_server/protocol/interface/hover_client_capabilities.rb +2/-3
            lib/language_server/protocol/interface/hover_options.rb +3/-0
            lib/language_server/protocol/interface/hover_params.rb +3/-0
            lib/language_server/protocol/interface/hover_registration_options.rb +6/-3
            lib/language_server/protocol/interface/implementation_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/implementation_params.rb +2/-2
            lib/language_server/protocol/interface/implementation_registration_options.rb +3/-3
            lib/language_server/protocol/interface/initialize_error.rb +4/-0
            lib/language_server/protocol/interface/initialize_params.rb +36/-24
            lib/language_server/protocol/interface/initialize_result.rb +5/-0
            lib/language_server/protocol/interface/inlay_hint.rb +2/-6
            lib/language_server/protocol/interface/inlay_hint_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/inlay_hint_label_part.rb +2/-0
            lib/language_server/protocol/interface/inlay_hint_options.rb +9/-7
            lib/language_server/protocol/interface/inlay_hint_params.rb +13/-11
            lib/language_server/protocol/interface/inlay_hint_registration_options.rb +12/-10
            lib/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/inline_value_client_capabilities.rb +3/-2
            lib/language_server/protocol/interface/inline_value_context.rb +5/-3
            lib/language_server/protocol/interface/inline_value_evaluatable_expression.rb +4/-6
            lib/language_server/protocol/interface/inline_value_options.rb +2/-0
            lib/language_server/protocol/interface/inline_value_params.rb +12/-10
            lib/language_server/protocol/interface/inline_value_registration_options.rb +5/-3
            lib/language_server/protocol/interface/inline_value_text.rb +2/-0
            lib/language_server/protocol/interface/inline_value_variable_lookup.rb +4/-6
            lib/language_server/protocol/interface/inline_value_workspace_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/insert_replace_edit.rb +2/-0
            lib/language_server/protocol/interface/linked_editing_range_client_capabilities.rb +7/-3
            lib/language_server/protocol/interface/linked_editing_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/linked_editing_ranges.rb +10/-6
            lib/language_server/protocol/interface/location.rb +5/-1
            lib/language_server/protocol/interface/location_link.rb +12/-10
            lib/language_server/protocol/interface/log_message_params.rb +4/-1
            lib/language_server/protocol/interface/log_trace_params.rb +0/-7
            lib/language_server/protocol/interface/markup_content.rb +16/-18
            lib/language_server/protocol/interface/moniker.rb +2/-0
            lib/language_server/protocol/interface/moniker_client_capabilities.rb +8/-4
            lib/language_server/protocol/interface/moniker_params.rb +2/-2
            lib/language_server/protocol/interface/moniker_registration_options.rb +3/-3
            lib/language_server/protocol/interface/notebook_cell.rb +6/-2
            lib/language_server/protocol/interface/notebook_cell_array_change.rb +5/-3
            lib/language_server/protocol/interface/notebook_cell_text_document_filter.rb +2/-0
            lib/language_server/protocol/interface/notebook_document.rb +7/-3
            lib/language_server/protocol/interface/notebook_document_change_event.rb +5/-1
            lib/language_server/protocol/interface/notebook_document_client_capabilities.rb +4/-0
            lib/language_server/protocol/interface/notebook_document_filter.rb +5/-26
            lib/language_server/protocol/interface/notebook_document_identifier.rb +4/-2
            lib/language_server/protocol/interface/notebook_document_sync_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/notebook_document_sync_options.rb +4/-2
            lib/language_server/protocol/interface/notebook_document_sync_registration_options.rb +3/-1
            lib/language_server/protocol/interface/optional_versioned_text_document_identifier.rb +17/-18
            lib/language_server/protocol/interface/parameter_information.rb +6/-8
            lib/language_server/protocol/interface/partial_result_params.rb +2/-2
            lib/language_server/protocol/interface/position.rb +40/-6
            lib/language_server/protocol/interface/previous_result_id.rb +4/-2
            lib/language_server/protocol/interface/progress_params.rb +1/-1
            lib/language_server/protocol/interface/publish_diagnostics_client_capabilities.rb +11/-0
            lib/language_server/protocol/interface/publish_diagnostics_params.rb +8/-4
            lib/language_server/protocol/interface/range.rb +13/-0
            lib/language_server/protocol/interface/reference_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/reference_context.rb +4/-0
            lib/language_server/protocol/interface/reference_options.rb +3/-0
            lib/language_server/protocol/interface/reference_params.rb +12/-9
            lib/language_server/protocol/interface/reference_registration_options.rb +6/-3
            lib/language_server/protocol/interface/registration.rb +1/-1
            lib/language_server/protocol/interface/regular_expressions_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/related_full_document_diagnostic_report.rb +19/-15
            lib/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rb +19/-15
            lib/language_server/protocol/interface/relative_pattern.rb +4/-2
            lib/language_server/protocol/interface/rename_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/rename_file.rb +5/-3
            lib/language_server/protocol/interface/rename_files_params.rb +6/-4
            lib/language_server/protocol/interface/rename_options.rb +12/-7
            lib/language_server/protocol/interface/rename_params.rb +16/-13
            lib/language_server/protocol/interface/rename_registration_options.rb +15/-10
            lib/language_server/protocol/interface/save_options.rb +3/-0
            lib/language_server/protocol/interface/selection_range.rb +6/-3
            lib/language_server/protocol/interface/selection_range_client_capabilities.rb +3/-4
            lib/language_server/protocol/interface/selection_range_params.rb +23/-20
            lib/language_server/protocol/interface/selection_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/semantic_tokens.rb +4/-1
            lib/language_server/protocol/interface/semantic_tokens_client_capabilities.rb +14/-8
            lib/language_server/protocol/interface/semantic_tokens_delta.rb +4/-2
            lib/language_server/protocol/interface/semantic_tokens_delta_params.rb +24/-21
            lib/language_server/protocol/interface/semantic_tokens_delta_partial_result.rb +3/-0
            lib/language_server/protocol/interface/semantic_tokens_edit.rb +6/-3
            lib/language_server/protocol/interface/semantic_tokens_legend.rb +3/-0
            lib/language_server/protocol/interface/semantic_tokens_options.rb +11/-8
            lib/language_server/protocol/interface/semantic_tokens_params.rb +15/-12
            lib/language_server/protocol/interface/semantic_tokens_partial_result.rb +4/-1
            lib/language_server/protocol/interface/semantic_tokens_range_params.rb +23/-20
            lib/language_server/protocol/interface/semantic_tokens_registration_options.rb +14/-11
            lib/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rb +4/-1
            lib/language_server/protocol/interface/server_capabilities.rb +59/-36
            lib/language_server/protocol/interface/set_trace_params.rb +1/-4
            lib/language_server/protocol/interface/show_document_client_capabilities.rb +4/-2
            lib/language_server/protocol/interface/show_document_params.rb +6/-4
            lib/language_server/protocol/interface/show_document_result.rb +3/-1
            lib/language_server/protocol/interface/show_message_params.rb +4/-1
            lib/language_server/protocol/interface/show_message_request_params.rb +1/-1
            lib/language_server/protocol/interface/signature_help.rb +5/-6
            lib/language_server/protocol/interface/signature_help_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/signature_help_context.rb +8/-9
            lib/language_server/protocol/interface/signature_help_options.rb +15/-12
            lib/language_server/protocol/interface/signature_help_params.rb +16/-12
            lib/language_server/protocol/interface/signature_help_registration_options.rb +18/-15
            lib/language_server/protocol/interface/signature_information.rb +3/-1
            lib/language_server/protocol/interface/static_registration_options.rb +2/-1
            lib/language_server/protocol/interface/symbol_information.rb +32/-28
            lib/language_server/protocol/interface/text_document_change_registration_options.rb +12/-13
            lib/language_server/protocol/interface/text_document_client_capabilities.rb +48/-19
            lib/language_server/protocol/interface/text_document_content_change_event.rb +4/-2
            lib/language_server/protocol/interface/text_document_edit.rb +10/-1
            lib/language_server/protocol/interface/text_document_identifier.rb +5/-2
            lib/language_server/protocol/interface/text_document_item.rb +7/-3
            lib/language_server/protocol/interface/text_document_position_params.rb +4/-0
            lib/language_server/protocol/interface/text_document_registration_options.rb +3/-3
            lib/language_server/protocol/interface/text_document_save_registration_options.rb +6/-3
            lib/language_server/protocol/interface/text_document_sync_options.rb +10/-14
            lib/language_server/protocol/interface/text_edit.rb +3/-0
            lib/language_server/protocol/interface/type_definition_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/type_definition_params.rb +2/-2
            lib/language_server/protocol/interface/type_definition_registration_options.rb +3/-3
            lib/language_server/protocol/interface/type_hierarchy_item.rb +6/-3
            lib/language_server/protocol/interface/type_hierarchy_options.rb +5/-0
            lib/language_server/protocol/interface/type_hierarchy_prepare_params.rb +5/-0
            lib/language_server/protocol/interface/type_hierarchy_registration_options.rb +8/-3
            lib/language_server/protocol/interface/type_hierarchy_subtypes_params.rb +14/-9
            lib/language_server/protocol/interface/type_hierarchy_supertypes_params.rb +14/-9
            lib/language_server/protocol/interface/unchanged_document_diagnostic_report.rb +3/-1
            lib/language_server/protocol/interface/unregistration.rb +2/-2
            lib/language_server/protocol/interface/versioned_notebook_document_identifier.rb +5/-3
            lib/language_server/protocol/interface/versioned_text_document_identifier.rb +13/-13
            lib/language_server/protocol/interface/will_save_text_document_params.rb +1/-1
            lib/language_server/protocol/interface/work_done_progress_begin.rb +4/-4
            lib/language_server/protocol/interface/work_done_progress_report.rb +4/-5
            lib/language_server/protocol/interface/workspace_diagnostic_params.rb +22/-20
            lib/language_server/protocol/interface/workspace_diagnostic_report.rb +2/-0
            lib/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rb +2/-0
            lib/language_server/protocol/interface/workspace_edit.rb +28/-17
            lib/language_server/protocol/interface/workspace_edit_client_capabilities.rb +10/-1
            lib/language_server/protocol/interface/workspace_folder.rb +4/-1
            lib/language_server/protocol/interface/workspace_folders_server_capabilities.rb +1/-1
            lib/language_server/protocol/interface/workspace_full_document_diagnostic_report.rb +23/-21
            lib/language_server/protocol/interface/workspace_symbol.rb +33/-27
            lib/language_server/protocol/interface/workspace_symbol_client_capabilities.rb +10/-4
            lib/language_server/protocol/interface/workspace_symbol_options.rb +12/-7
            lib/language_server/protocol/interface/workspace_symbol_params.rb +14/-14
            lib/language_server/protocol/interface/workspace_symbol_registration_options.rb +12/-7
            lib/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rb +23/-21
            lib/language_server/protocol/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff language_server-protocol 3.17.0.5 3.17.0.6

Diff too large (1019209 chars)

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
        CHANGES.md
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/CHANGES.md	2026-08-10 02:35:37.548390243 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/CHANGES.md	2026-08-10 02:35:37.742391109 +0000
                @@ -4,0 +5,16 @@
                +### 2026-07-31 (2.21.2)
                +
                +* Fix a use-after-free bug in `JSON::ResumableParser`. [GHSA-9hj4-r449-hfvc].
                +
                +### 2026-07-13 (2.21.1)
                +
                +* Fix a compilation issue on Window and Microsoft Visual C++.
                +
                +### 2026-07-12 (2.21.0)
                +
                +* `JSON.generate` now accept a `sort_keys` option, which takes either a boolean or a block.
                +* Added `#empty?` and `#partial_value?` methods on `JSON::ResumableParser`.
                +* Numerous correctness and performance fixes for `JSON::ResumableParser`.
                +* Avoid triggering Ruby's `float out of range` warning when parsing out of range numbers.
                +* Declare C types with Ruby 4.1 `RUBY_TYPED_THREAD_SAFE_FREE`.
                +
        README.md
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/README.md	2026-08-10 02:35:37.548390243 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/README.md	2026-08-10 02:35:37.743391113 +0000
                @@ -88 +88 @@
                -JSON.generate(Position.new(1, 2)) # => Position not allowed in JSON (JSON::GeneratorError)
                +JSON.generate(Position.new(1, 2), strict: true) # => Position not allowed in JSON (JSON::GeneratorError)
                @@ -120 +120 @@
                -coder = JSON::Combining.new do |object, is_object_key|
                +coder = JSON::Coder.new do |object, is_object_key|
                @@ -123,2 +123,2 @@
                -    if !string.valid_encoding? || string.encoding != Encoding::UTF_8
                -      Base64.encode64(string)
                +    if !object.valid_encoding? || object.encoding != Encoding::UTF_8
                +      Base64.encode64(object)
                @@ -126 +126 @@
                -      string
                +      object
        ext/json/ext/generator/generator.c
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/ext/json/ext/generator/generator.c	2026-08-10 02:35:37.549390248 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/ext/json/ext/generator/generator.c	2026-08-10 02:35:37.744391118 +0000
                @@ -36,0 +37 @@
                +    VALUE sort_keys;
                @@ -39 +40 @@
                -static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8;
                +static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8, default_sort_keys_proc;
                @@ -43 +44 @@
                -             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json;
                +             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json, sym_sort_keys;
                @@ -711,0 +713 @@
                +    rb_gc_mark_movable(state->sort_keys);
                @@ -722,0 +725 @@
                +    state->sort_keys = rb_gc_location(state->sort_keys);
                @@ -742 +745 @@
                -    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -771,0 +775 @@
                +    RB_OBJ_WRITTEN(vstate, Qundef, state->sort_keys);
                @@ -1052,0 +1057,5 @@
                +    if (RB_UNLIKELY(data->state->sort_keys)) {
                +        obj = rb_proc_call_with_block(data->state->sort_keys, 1, &obj, Qnil);
                +        Check_Type(obj, T_HASH);
                +    }
                +
                @@ -1378,0 +1388 @@
                +    RB_OBJ_WRITTEN(obj, Qundef, objState->sort_keys);
                @@ -1724,0 +1735,49 @@
                +static VALUE cState_set_default_sort_keys_proc(VALUE self, VALUE proc)
                +{
                +    if (!rb_obj_is_proc(proc)) {
                +        rb_raise(rb_eTypeError, "sort_key_proc must be a Proc");
                +    }
                +    return default_sort_keys_proc = proc;
                +}
                +
                +static VALUE normalize_sort_keys(VALUE value)
                +{
                +    if (rb_obj_is_proc(value)) {
                +        return value;
                +    } else if (value == Qtrue) {
                +        return default_sort_keys_proc;
                +    } else if (RTEST(value)) {
                +        rb_raise(rb_eTypeError, "The `sort_keys` argument must be a boolean or a Proc");
                +    } else {
                +        return Qfalse;
                +    }
                +}
                +
                +/*
                + * call-seq: sort_keys
                + *
                + * Get the value of sort_keys.
                + */
                +static VALUE cState_sort_keys_p(VALUE self)
                +{
                +    GET_STATE(self);
                +    return state->sort_keys;
                +}
                +
                +/*
                + * call-seq: sort_keys=(value)
                + *
                + * value is a boolean or a proc. If the value is the boolean true, object keys
                + * will be sorted lexicographically in ascending order.
                + *
                + * If the value is a proc, it receives the entire Hash and must return a Hash
                + * with its pairs in the desired order, allowing for arbitrary sorting.
                + */
                +static VALUE cState_sort_keys_set(VALUE self, VALUE value)
                +{
                +    rb_check_frozen(self);
                +    GET_STATE(self);
                +    RB_OBJ_WRITE(self, &state->sort_keys, normalize_sort_keys(value));
                +    return Qnil;
                +}
                +
                @@ -1834,0 +1894,3 @@
                +    else if (key == sym_sort_keys)             {
                +        state_write_value(data, &state->sort_keys, normalize_sort_keys(val));
                +    }
                @@ -1911,0 +1974,2 @@
                +    rb_global_variable(&default_sort_keys_proc);
                +
                @@ -1920,0 +1985,2 @@
                +    rb_define_singleton_method(cState, "default_sort_keys_proc=", cState_set_default_sort_keys_proc, 1);
                +
                @@ -1959,0 +2026,2 @@
                +    rb_define_method(cState, "sort_keys", cState_sort_keys_p, 0);
                +    rb_define_method(cState, "sort_keys=", cState_sort_keys_set, 1);
                @@ -1988,0 +2057 @@
                +    sym_sort_keys = ID2SYM(rb_intern("sort_keys"));
        ext/json/ext/json.h
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/ext/json/ext/json.h	2026-08-10 02:35:37.550390252 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/ext/json/ext/json.h	2026-08-10 02:35:37.744391118 +0000
                @@ -33,0 +34,4 @@
                +#ifndef RUBY_TYPED_THREAD_SAFE_FREE
                +#define RUBY_TYPED_THREAD_SAFE_FREE RUBY_TYPED_FREE_IMMEDIATELY
                +#endif
                +
        ext/json/ext/parser/extconf.rb
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/ext/json/ext/parser/extconf.rb	2026-08-10 02:35:37.550390252 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/ext/json/ext/parser/extconf.rb	2026-08-10 02:35:37.745391122 +0000
                @@ -18,16 +17,0 @@
                -def have_builtin_func(name, check_expr, opt = "", &b)
                -  checking_for checking_message(name.funcall_style, nil, opt) do
                -    if try_compile(<<SRC, opt, &b)
                -int foo;
                -int main() { #{check_expr}; return 0; }
                -SRC
                -      $defs.push(format("-DHAVE_BUILTIN_%s", name.tr_cpp))
                -      true
                -    else
                -      false
                -    end
                -  end
                -end
                -
                -have_builtin_func("__builtin_clzll", "__builtin_clzll(0)")
                -
                @@ -47,0 +32,6 @@
                +
                +# Disable function outlining on clang to prevent some of the repeated instructions
                +# in json_eat_whitespace being outlined into function calls.
                +# Note: This verifies '-mno-outline' is accepted as a valid compiler flag
                +# and will not pass it if unsupported.
                +append_cflags("-mno-outline")
        ext/json/ext/parser/parser.c
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/ext/json/ext/parser/parser.c	2026-08-10 02:35:37.551390257 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/ext/json/ext/parser/parser.c	2026-08-10 02:35:37.746391127 +0000
                @@ -8 +8,4 @@
                -static ID i_new, i_try_convert, i_uminus, i_encode, i_at_line, i_at_column;
                +static ID i_new, i_try_convert, i_encode, i_at_line, i_at_column;
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                +static ID i_uminus;
                +#endif
                @@ -317 +320 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -514 +517 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                @@ -588,0 +592,2 @@
                +    JSON_ASSERT(!state->parser);
                +    JSON_ASSERT(state->cursor);
                @@ -621,4 +626,8 @@
                -    long line, column;
                -    cursor_position(state, &line, &column);
                -
                -    VALUE warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    VALUE warning;
                +    if (state->parser) { // line and columns can't be accurate in resumable
                +        warning = rb_utf8_str_new_cstr(message);
                +    } else {
                +        long line, column;
                +        cursor_position(state, &line, &column);
                +        warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    }
                @@ -768 +777 @@
                -json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config)
                +json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config, const char *resume_pos)
                @@ -774,0 +784,5 @@
                +    // An incomplete comment suspends a resumable parse by rewinding the cursor
                +    // and throwing. Callers that already consumed a token not yet committed to
                +    // the frame stack pass resume_pos so the rewind re-reads that token too.
                +    // Non-resumable error positions keep pointing at the comment either way.
                +    const char *rewind_pos = (state->parser && resume_pos) ? resume_pos : start;
                @@ -779,2 +793,9 @@
                -            state->cursor = memchr(state->cursor, '\n', state->end - state->cursor);
                -            if (!state->cursor) {
                +            const char *newline = memchr(state->cursor, '\n', state->end - state->cursor);
                +            if (!newline) {
                +                // state->parser marks resumable mode, where the buffer end is only a
                +                // chunk boundary: the terminating newline may still arrive, so leave
                +                // the comment unterminated instead of consuming to end as a one-shot
                +                // parse would.
                +                if (state->parser) {
                +                    raise_eos_error_at("unterminated comment, expected end of line", state, rewind_pos);
                +                }
                @@ -783 +804 @@
                -                state->cursor++;
                +                state->cursor = newline + 1;
                @@ -793 +814 @@
                -                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, start);
                +                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, rewind_pos);
                @@ -805 +826 @@
                -            raise_parse_error_at("unexpected token %s", state, start, eos(state));
                +            raise_parse_error_at("unexpected token %s", state, eos(state) ? rewind_pos : start, eos(state));
                @@ -816 +837 @@
                -json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +json_eat_whitespace_resume_at(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments, const char *resume_pos)
                @@ -851 +872 @@
                -                json_eat_comments(state, config);
                +                json_eat_comments(state, config, resume_pos);
                @@ -859,0 +881,6 @@
                +ALWAYS_INLINE(static) void
                +json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +{
                +    json_eat_whitespace_resume_at(state, config, include_comments, NULL);
                +}
                +
                @@ -1132,0 +1160,7 @@
                +        // If the value is so small that it definitely underflows to 0.0, return early
                +        // to avoid triggering a "Float out of range" warning from rb_cstr_to_dbl.
                +        // When mantissa_digits + exponent < -324, value < 10^(-324) < DBL_TRUE_MIN/2,
                +        // so it rounds to 0 in IEEE 754 round-to-nearest.
                +        if (RB_UNLIKELY(mantissa_digits + exponent < -324)) {
                +            return rb_float_new(negative ? -0.0 : 0.0);
                +        }
                @@ -1432 +1466 @@
                -static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start)
                +static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start, bool resumable)
                @@ -1488,0 +1523,10 @@
                +    // A number touching the end of the buffer may still grow in a later chunk,
                +    // so the caller will rewind and wait. Decoding it now would build a value
                +    // -- for a long run of digits, an expensive bignum -- only to discard it,
                +    // and repeating that on every resumed chunk is quadratic in the number's
                +    // length. The digit scan above already advanced the cursor, which is all
                +    // the caller needs to detect the incomplete number.
                +    if (RB_UNLIKELY(resumable && eos(state))) {
                +        return Qundef;
                +    }
                +
                @@ -1565,0 +1610,7 @@
                +        // A trailing comma lands us here expecting an element but finding the
                +        // closing bracket; hand off to ARRAY_COMMA to close. An empty array
                +        // closes inline at '[', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && frame->type == JSON_FRAME_ARRAY && peek(state) == ']') {
                +            goto JSON_PHASE_ARRAY_COMMA;
                +        }
                +
                @@ -1606 +1657 @@
                -                value = json_parse_number(state, config, true, value_start);
                +                value = json_parse_number(state, config, true, value_start, resumable);
                @@ -1629 +1680 @@
                -                value = json_parse_number(state, config, false, value_start);
                +                value = json_parse_number(state, config, false, value_start, resumable);
                @@ -1661 +1712,3 @@
                -                json_eat_whitespace(state, config, true);
                +                // The '[' is consumed but its frame is only pushed below, so a
                +                // comment suspending here must resume from the bracket.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1690 +1743,2 @@
                -                json_eat_whitespace(state, config, true);
                +                // Same as '[': the frame is only pushed below.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1747,0 +1802,7 @@
                +        // A trailing comma lands us here expecting a key but finding the closing
                +        // brace; hand off to OBJECT_COMMA to close. An empty object closes inline
                +        // at '{', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && peek(state) == '}') {
                +            goto JSON_PHASE_OBJECT_COMMA;
                +        }
                +
                @@ -1810,7 +1871,4 @@
                -            if (config->allow_trailing_comma) {
                -                json_eat_whitespace(state, config, true);
                -                if (peek(state) == ']') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_ARRAY_COMMA;
                -                }
                -            }
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_VALUE once the ']' is in the buffer.
                @@ -1855,9 +1913,4 @@
                -            json_eat_whitespace(state, config, true);
                -
                -            if (config->allow_trailing_comma) {
                -                if (peek(state) == '}') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_OBJECT_COMMA;
                -                }
                -            }
                -
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_OBJECT_KEY once the '}' is in the buffer.
                @@ -2183 +2236 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -2268 +2321 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -2521,0 +2575 @@
                +        parser->state.start = parser->state.cursor = parser->state.end = 0;
                @@ -2618 +2672,6 @@
                -    // Copy the value stack as we need to mutate it.
                +    // Copy the value stack as we need to mutate it. The collapse loop folds each
                +    // open container by popping its entries and pushing the single result, so a
                +    // parent always reclaims its child's slot; head exceeds its live size by at
                +    // most one, either for the missing-value placeholder pushed below or for the
                +    // result of folding an empty innermost container. That one spare slot keeps
                +    // rvalue_stack_push from growing (reallocating) this ALLOCV buffer.
                @@ -2620,3 +2679,3 @@
                -    parser.value_stack.capa = (capa + missing_object_value);
                -    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, capa + missing_object_value);
                -    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, parser.value_stack.capa);
                +    parser.value_stack.capa = capa + 1;
                +    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, parser.value_stack.capa);
                +    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, capa);
                @@ -2715 +2774 @@
                - * call-seq: value? -> true or false
                + * call-seq: eos? -> true or false
                @@ -2725,0 +2785,35 @@
                + * call-seq: partial_value? -> true or false
                + *
                + * Returns whether a document is currently under construction: an unclosed
                + * container, a key awaiting its value, etc.
                + *
                + * It answers the same question as <tt>!partial_value.nil?</tt>, but as a
                + * cheap predicate on the parser's internal state, without materializing the
                + * partially parsed Ruby objects:
                + *   parser << '{"a":1,'
                + *   parser.parse # => false
                + *   parser.partial_value? # => true
                + *
                + * A fully parsed document whose value hasn't been retrieved yet is not under
                + * construction: #value? returns true and #partial_value? returns false.
                + */
                +static VALUE cResumableParser_partial_value_p(VALUE self)
                +{
                +    JSON_ResumableParser *parser = cResumableParser_get(self);
                +
                +    // Mirror of #value?: values on the stack while the document isn't DONE
                +    // belong to a partially built document. A container whose first key or
                +    // element hasn't been parsed yet has no frame nor value registered (the
                +    // tokenizer rewinds to the container start on EOS), so that state is
                +    // observable through the buffer (#eos?/#rest) instead, keeping this
                +    // predicate consistent with #partial_value returning nil.
                +    if (parser->value_stack.head > 0) {
                +        json_frame *frame = json_frame_stack_peek(&parser->frames);
                +        if (frame->phase != JSON_PHASE_DONE) {
                +            return Qtrue;
                +        }
                +    }
                +    return Qfalse;
                +}
                +
                +/*
                @@ -2780,0 +2875 @@
                +    rb_define_method(cResumableParser, "partial_value?", cResumableParser_partial_value_p, 0);
                @@ -2814,0 +2910 @@
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                @@ -2815,0 +2912 @@
                +#endif
        lib/json.rb
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/lib/json.rb	2026-08-10 02:35:37.553390265 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/lib/json.rb	2026-08-10 02:35:37.748391135 +0000
                @@ -124 +124,3 @@
                -# defaults to +100+; specify +false+ to disable depth checking.
                +# defaults to +100+;
                +# You can set it to +false+ to disable depth checking entirely, but that is dangerous
                +# when parsing untrusted input.
                @@ -126 +128 @@
                -# With the default, +false+:
                +# With the default, +100+:
                @@ -386,0 +389,9 @@
                +# With +false+:
                +#   obj = []
                +#   obj[0] = obj
                +#   # Raises  SystemStackError: stack level too deep
                +#   JSON.generate(obj, max_nesting: false)
                +#
                +# Setting +max_nesting+ to +false+ can lead to a stackoverflow and may leave the program
                +# in an unrecoverable state. It is discouraged.
                +#
                @@ -411 +421,0 @@
                -#   defaults to the empty \String, <tt>''</tt>;
                @@ -418,0 +429,5 @@
                +# - Option +sort_keys+ (boolean or \Proc) controls whether and how the keys of a
                +#   hash are sorted when generating the output; defaults to <tt>false</tt>.
                +#   When +true+, keys are sorted lexicographically. When a \Proc, it receives
                +#   the entire \Hash and must return a \Hash with its pairs in the desired
                +#   order, allowing for arbitrary sort orders.
        lib/json/common.rb
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/lib/json/common.rb	2026-08-10 02:35:37.555390274 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/lib/json/common.rb	2026-08-10 02:35:37.752391153 +0000
                @@ -157,0 +158,9 @@
                +
                +      # The default proc used when the +sort_keys+ generation option is +true+.
                +      # It returns a new hash with the entries sorted by their keys.
                +      sort_keys_proc = ->(hash) { hash.sort.to_h }
                +      if defined?(::Ractor) && Ractor.respond_to?(:shareable_lambda)
                +        sort_keys_proc = Ractor.shareable_lambda(&sort_keys_proc)
                +      end
                +      generator::State.default_sort_keys_proc = sort_keys_proc
                +
        lib/json/ext.rb
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/lib/json/ext.rb	2026-08-10 02:35:37.556390279 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/lib/json/ext.rb	2026-08-10 02:35:37.752391153 +0000
                @@ -43,0 +44,26 @@
                +  if defined?(ResumableParser) # Not yet available on JRuby
                +    class ResumableParser
                +      # Returns whether the parser is entirely done: no unconsumed bytes in
                +      # the buffer, no document under construction and no parsed value
                +      # awaiting retrieval.
                +      #
                +      # The main use case is detecting a truncated stream once the input is
                +      # exhausted:
                +      #
                +      #   loop do
                +      #     begin
                +      #       parser << socket.readpartial(4096)
                +      #     rescue EOFError
                +      #       break
                +      #     end
                +      #     while parser.parse
                +      #       process(parser.value)
                +      #     end
                +      #   end
                +      #   warn "stream was truncated" unless parser.empty?
                +      def empty?
                +        eos? && !partial_value? && !value?
                +      end
                +    end
                +  end
                +
        lib/json/ext/generator/state.rb
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/lib/json/ext/generator/state.rb	2026-08-10 02:35:37.556390279 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/lib/json/ext/generator/state.rb	2026-08-10 02:35:37.752391153 +0000
                @@ -56,0 +57 @@
                +            sort_keys: sort_keys
        lib/json/truffle_ruby/generator.rb
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/lib/json/truffle_ruby/generator.rb	2026-08-10 02:35:37.556390279 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/lib/json/truffle_ruby/generator.rb	2026-08-10 02:35:37.753391158 +0000
                @@ -113,0 +114,2 @@
                +        singleton_class.attr_accessor :default_sort_keys_proc # :nodoc:
                +
                @@ -166,0 +169 @@
                +          @sort_keys             = false
                @@ -201,0 +205,27 @@
                +        # Controls key sorting in the generated JSON. If set to +true+, object
                +        # keys are sorted by key lexicographically. If set to a Proc, it
                +        # receives the entire Hash and must return a Hash with its pairs in the
                +        # desired order.
                +        attr_reader :sort_keys
                +
                +        def sort_keys=(value) # :nodoc:
                +          type_error = false
                +          @sort_keys = case value
                +          when Proc
                +            value
                +          when true
                +            State.default_sort_keys_proc
                +          when nil, false
                +            false
                +          else
                +            type_error = true
                +            false
                +          end
                +
                +          if type_error
                +            raise TypeError, "The `sort_keys` argument must be a boolean or a Proc"
                +          end
                +
                +          @sort_keys
                +        end
                +
                @@ -287,0 +318 @@
                +          self.sort_keys         = opts[:sort_keys]           if opts.key?(:sort_keys)
                @@ -352 +383 @@
                -              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj)
                +              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj) and !@sort_keys
                @@ -354,0 +386,4 @@
                +            if @sort_keys
                +              obj = @sort_keys.call(obj)
                +            end
                +
        lib/json/version.rb
                --- /tmp/d20260810-674-j7mh5l/json-2.20.0/lib/json/version.rb	2026-08-10 02:35:37.557390283 +0000
                +++ /tmp/d20260810-674-j7mh5l/json-2.21.2/lib/json/version.rb	2026-08-10 02:35:37.753391158 +0000
                @@ -4 +4 @@
                -  VERSION = '2.20.0'
                +  VERSION = '2.21.2'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff json 2.20.0 2.21.2

Compared versions: ["2.20.0", "2.21.2"]
  DIFFERENT files:
    2.20.0->2.21.2:
      * Changed:
        CHANGES.md
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/CHANGES.md	2026-08-10 02:35:39.122093418 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/CHANGES.md	2026-08-10 02:35:39.133093341 +0000
                @@ -4,0 +5,16 @@
                +### 2026-07-31 (2.21.2)
                +
                +* Fix a use-after-free bug in `JSON::ResumableParser`. [GHSA-9hj4-r449-hfvc].
                +
                +### 2026-07-13 (2.21.1)
                +
                +* Fix a compilation issue on Window and Microsoft Visual C++.
                +
                +### 2026-07-12 (2.21.0)
                +
                +* `JSON.generate` now accept a `sort_keys` option, which takes either a boolean or a block.
                +* Added `#empty?` and `#partial_value?` methods on `JSON::ResumableParser`.
                +* Numerous correctness and performance fixes for `JSON::ResumableParser`.
                +* Avoid triggering Ruby's `float out of range` warning when parsing out of range numbers.
                +* Declare C types with Ruby 4.1 `RUBY_TYPED_THREAD_SAFE_FREE`.
                +
        README.md
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/README.md	2026-08-10 02:35:39.122093418 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/README.md	2026-08-10 02:35:39.134093334 +0000
                @@ -88 +88 @@
                -JSON.generate(Position.new(1, 2)) # => Position not allowed in JSON (JSON::GeneratorError)
                +JSON.generate(Position.new(1, 2), strict: true) # => Position not allowed in JSON (JSON::GeneratorError)
                @@ -120 +120 @@
                -coder = JSON::Combining.new do |object, is_object_key|
                +coder = JSON::Coder.new do |object, is_object_key|
                @@ -123,2 +123,2 @@
                -    if !string.valid_encoding? || string.encoding != Encoding::UTF_8
                -      Base64.encode64(string)
                +    if !object.valid_encoding? || object.encoding != Encoding::UTF_8
                +      Base64.encode64(object)
                @@ -126 +126 @@
                -      string
                +      object
        ext/json/ext/generator/generator.c
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/ext/json/ext/generator/generator.c	2026-08-10 02:35:39.124093404 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/ext/json/ext/generator/generator.c	2026-08-10 02:35:39.270092384 +0000
                @@ -36,0 +37 @@
                +    VALUE sort_keys;
                @@ -39 +40 @@
                -static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8;
                +static VALUE mJSON, cState, cFragment, eGeneratorError, eNestingError, Encoding_UTF_8, default_sort_keys_proc;
                @@ -43 +44 @@
                -             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json;
                +             sym_ascii_only, sym_depth, sym_buffer_initial_length, sym_script_safe, sym_escape_slash, sym_strict, sym_as_json, sym_sort_keys;
                @@ -711,0 +713 @@
                +    rb_gc_mark_movable(state->sort_keys);
                @@ -722,0 +725 @@
                +    state->sort_keys = rb_gc_location(state->sort_keys);
                @@ -742 +745 @@
                -    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -771,0 +775 @@
                +    RB_OBJ_WRITTEN(vstate, Qundef, state->sort_keys);
                @@ -1052,0 +1057,5 @@
                +    if (RB_UNLIKELY(data->state->sort_keys)) {
                +        obj = rb_proc_call_with_block(data->state->sort_keys, 1, &obj, Qnil);
                +        Check_Type(obj, T_HASH);
                +    }
                +
                @@ -1378,0 +1388 @@
                +    RB_OBJ_WRITTEN(obj, Qundef, objState->sort_keys);
                @@ -1724,0 +1735,49 @@
                +static VALUE cState_set_default_sort_keys_proc(VALUE self, VALUE proc)
                +{
                +    if (!rb_obj_is_proc(proc)) {
                +        rb_raise(rb_eTypeError, "sort_key_proc must be a Proc");
                +    }
                +    return default_sort_keys_proc = proc;
                +}
                +
                +static VALUE normalize_sort_keys(VALUE value)
                +{
                +    if (rb_obj_is_proc(value)) {
                +        return value;
                +    } else if (value == Qtrue) {
                +        return default_sort_keys_proc;
                +    } else if (RTEST(value)) {
                +        rb_raise(rb_eTypeError, "The `sort_keys` argument must be a boolean or a Proc");
                +    } else {
                +        return Qfalse;
                +    }
                +}
                +
                +/*
                + * call-seq: sort_keys
                + *
                + * Get the value of sort_keys.
                + */
                +static VALUE cState_sort_keys_p(VALUE self)
                +{
                +    GET_STATE(self);
                +    return state->sort_keys;
                +}
                +
                +/*
                + * call-seq: sort_keys=(value)
                + *
                + * value is a boolean or a proc. If the value is the boolean true, object keys
                + * will be sorted lexicographically in ascending order.
                + *
                + * If the value is a proc, it receives the entire Hash and must return a Hash
                + * with its pairs in the desired order, allowing for arbitrary sorting.
                + */
                +static VALUE cState_sort_keys_set(VALUE self, VALUE value)
                +{
                +    rb_check_frozen(self);
                +    GET_STATE(self);
                +    RB_OBJ_WRITE(self, &state->sort_keys, normalize_sort_keys(value));
                +    return Qnil;
                +}
                +
                @@ -1834,0 +1894,3 @@
                +    else if (key == sym_sort_keys)             {
                +        state_write_value(data, &state->sort_keys, normalize_sort_keys(val));
                +    }
                @@ -1911,0 +1974,2 @@
                +    rb_global_variable(&default_sort_keys_proc);
                +
                @@ -1920,0 +1985,2 @@
                +    rb_define_singleton_method(cState, "default_sort_keys_proc=", cState_set_default_sort_keys_proc, 1);
                +
                @@ -1959,0 +2026,2 @@
                +    rb_define_method(cState, "sort_keys", cState_sort_keys_p, 0);
                +    rb_define_method(cState, "sort_keys=", cState_sort_keys_set, 1);
                @@ -1988,0 +2057 @@
                +    sym_sort_keys = ID2SYM(rb_intern("sort_keys"));
        ext/json/ext/json.h
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/ext/json/ext/json.h	2026-08-10 02:35:39.124093404 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/ext/json/ext/json.h	2026-08-10 02:35:39.270092384 +0000
                @@ -33,0 +34,4 @@
                +#ifndef RUBY_TYPED_THREAD_SAFE_FREE
                +#define RUBY_TYPED_THREAD_SAFE_FREE RUBY_TYPED_FREE_IMMEDIATELY
                +#endif
                +
        ext/json/ext/parser/extconf.rb
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/ext/json/ext/parser/extconf.rb	2026-08-10 02:35:39.124093404 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/ext/json/ext/parser/extconf.rb	2026-08-10 02:35:39.270092384 +0000
                @@ -18,16 +17,0 @@
                -def have_builtin_func(name, check_expr, opt = "", &b)
                -  checking_for checking_message(name.funcall_style, nil, opt) do
                -    if try_compile(<<SRC, opt, &b)
                -int foo;
                -int main() { #{check_expr}; return 0; }
                -SRC
                -      $defs.push(format("-DHAVE_BUILTIN_%s", name.tr_cpp))
                -      true
                -    else
                -      false
                -    end
                -  end
                -end
                -
                -have_builtin_func("__builtin_clzll", "__builtin_clzll(0)")
                -
                @@ -47,0 +32,6 @@
                +
                +# Disable function outlining on clang to prevent some of the repeated instructions
                +# in json_eat_whitespace being outlined into function calls.
                +# Note: This verifies '-mno-outline' is accepted as a valid compiler flag
                +# and will not pass it if unsupported.
                +append_cflags("-mno-outline")
        ext/json/ext/parser/parser.c
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/ext/json/ext/parser/parser.c	2026-08-10 02:35:39.126093390 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/ext/json/ext/parser/parser.c	2026-08-10 02:35:39.271092377 +0000
                @@ -8 +8,4 @@
                -static ID i_new, i_try_convert, i_uminus, i_encode, i_at_line, i_at_column;
                +static ID i_new, i_try_convert, i_encode, i_at_line, i_at_column;
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                +static ID i_uminus;
                +#endif
                @@ -317 +320 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -514 +517 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE,
                @@ -588,0 +592,2 @@
                +    JSON_ASSERT(!state->parser);
                +    JSON_ASSERT(state->cursor);
                @@ -621,4 +626,8 @@
                -    long line, column;
                -    cursor_position(state, &line, &column);
                -
                -    VALUE warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    VALUE warning;
                +    if (state->parser) { // line and columns can't be accurate in resumable
                +        warning = rb_utf8_str_new_cstr(message);
                +    } else {
                +        long line, column;
                +        cursor_position(state, &line, &column);
                +        warning = rb_sprintf("%s at line %ld column %ld", message, line, column);
                +    }
                @@ -768 +777 @@
                -json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config)
                +json_eat_comments(JSON_ParserState *state, JSON_ParserConfig *config, const char *resume_pos)
                @@ -774,0 +784,5 @@
                +    // An incomplete comment suspends a resumable parse by rewinding the cursor
                +    // and throwing. Callers that already consumed a token not yet committed to
                +    // the frame stack pass resume_pos so the rewind re-reads that token too.
                +    // Non-resumable error positions keep pointing at the comment either way.
                +    const char *rewind_pos = (state->parser && resume_pos) ? resume_pos : start;
                @@ -779,2 +793,9 @@
                -            state->cursor = memchr(state->cursor, '\n', state->end - state->cursor);
                -            if (!state->cursor) {
                +            const char *newline = memchr(state->cursor, '\n', state->end - state->cursor);
                +            if (!newline) {
                +                // state->parser marks resumable mode, where the buffer end is only a
                +                // chunk boundary: the terminating newline may still arrive, so leave
                +                // the comment unterminated instead of consuming to end as a one-shot
                +                // parse would.
                +                if (state->parser) {
                +                    raise_eos_error_at("unterminated comment, expected end of line", state, rewind_pos);
                +                }
                @@ -783 +804 @@
                -                state->cursor++;
                +                state->cursor = newline + 1;
                @@ -793 +814 @@
                -                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, start);
                +                    raise_eos_error_at("unterminated comment, expected closing '*/'", state, rewind_pos);
                @@ -805 +826 @@
                -            raise_parse_error_at("unexpected token %s", state, start, eos(state));
                +            raise_parse_error_at("unexpected token %s", state, eos(state) ? rewind_pos : start, eos(state));
                @@ -816 +837 @@
                -json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +json_eat_whitespace_resume_at(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments, const char *resume_pos)
                @@ -851 +872 @@
                -                json_eat_comments(state, config);
                +                json_eat_comments(state, config, resume_pos);
                @@ -859,0 +881,6 @@
                +ALWAYS_INLINE(static) void
                +json_eat_whitespace(JSON_ParserState *state, JSON_ParserConfig *config, bool include_comments)
                +{
                +    json_eat_whitespace_resume_at(state, config, include_comments, NULL);
                +}
                +
                @@ -1132,0 +1160,7 @@
                +        // If the value is so small that it definitely underflows to 0.0, return early
                +        // to avoid triggering a "Float out of range" warning from rb_cstr_to_dbl.
                +        // When mantissa_digits + exponent < -324, value < 10^(-324) < DBL_TRUE_MIN/2,
                +        // so it rounds to 0 in IEEE 754 round-to-nearest.
                +        if (RB_UNLIKELY(mantissa_digits + exponent < -324)) {
                +            return rb_float_new(negative ? -0.0 : 0.0);
                +        }
                @@ -1432 +1466 @@
                -static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start)
                +static inline VALUE json_parse_number(JSON_ParserState *state, JSON_ParserConfig *config, bool negative, const char *start, bool resumable)
                @@ -1488,0 +1523,10 @@
                +    // A number touching the end of the buffer may still grow in a later chunk,
                +    // so the caller will rewind and wait. Decoding it now would build a value
                +    // -- for a long run of digits, an expensive bignum -- only to discard it,
                +    // and repeating that on every resumed chunk is quadratic in the number's
                +    // length. The digit scan above already advanced the cursor, which is all
                +    // the caller needs to detect the incomplete number.
                +    if (RB_UNLIKELY(resumable && eos(state))) {
                +        return Qundef;
                +    }
                +
                @@ -1565,0 +1610,7 @@
                +        // A trailing comma lands us here expecting an element but finding the
                +        // closing bracket; hand off to ARRAY_COMMA to close. An empty array
                +        // closes inline at '[', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && frame->type == JSON_FRAME_ARRAY && peek(state) == ']') {
                +            goto JSON_PHASE_ARRAY_COMMA;
                +        }
                +
                @@ -1606 +1657 @@
                -                value = json_parse_number(state, config, true, value_start);
                +                value = json_parse_number(state, config, true, value_start, resumable);
                @@ -1629 +1680 @@
                -                value = json_parse_number(state, config, false, value_start);
                +                value = json_parse_number(state, config, false, value_start, resumable);
                @@ -1661 +1712,3 @@
                -                json_eat_whitespace(state, config, true);
                +                // The '[' is consumed but its frame is only pushed below, so a
                +                // comment suspending here must resume from the bracket.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1690 +1743,2 @@
                -                json_eat_whitespace(state, config, true);
                +                // Same as '[': the frame is only pushed below.
                +                json_eat_whitespace_resume_at(state, config, true, value_start);
                @@ -1747,0 +1802,7 @@
                +        // A trailing comma lands us here expecting a key but finding the closing
                +        // brace; hand off to OBJECT_COMMA to close. An empty object closes inline
                +        // at '{', so this position is only reached after a ','.
                +        if (config->allow_trailing_comma && peek(state) == '}') {
                +            goto JSON_PHASE_OBJECT_COMMA;
                +        }
                +
                @@ -1810,7 +1871,4 @@
                -            if (config->allow_trailing_comma) {
                -                json_eat_whitespace(state, config, true);
                -                if (peek(state) == ']') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_ARRAY_COMMA;
                -                }
                -            }
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_VALUE once the ']' is in the buffer.
                @@ -1855,9 +1913,4 @@
                -            json_eat_whitespace(state, config, true);
                -
                -            if (config->allow_trailing_comma) {
                -                if (peek(state) == '}') {
                -                    // Trailing comma: stay in COMMA to close on the next iteration.
                -                    goto JSON_PHASE_OBJECT_COMMA;
                -                }
                -            }
                -
                +            // Commit the phase before eating the whitespace that follows: an
                +            // incomplete comment there would suspend the parse, and a phase not
                +            // yet advanced past the ',' would drop it on resume. A trailing comma
                +            // is recognized in JSON_PHASE_OBJECT_KEY once the '}' is in the buffer.
                @@ -2183 +2236 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_EMBEDDABLE,
                @@ -2268 +2321 @@
                -    .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE,
                +    .flags = RUBY_TYPED_THREAD_SAFE_FREE | RUBY_TYPED_EMBEDDABLE,
                @@ -2521,0 +2575 @@
                +        parser->state.start = parser->state.cursor = parser->state.end = 0;
                @@ -2618 +2672,6 @@
                -    // Copy the value stack as we need to mutate it.
                +    // Copy the value stack as we need to mutate it. The collapse loop folds each
                +    // open container by popping its entries and pushing the single result, so a
                +    // parent always reclaims its child's slot; head exceeds its live size by at
                +    // most one, either for the missing-value placeholder pushed below or for the
                +    // result of folding an empty innermost container. That one spare slot keeps
                +    // rvalue_stack_push from growing (reallocating) this ALLOCV buffer.
                @@ -2620,3 +2679,3 @@
                -    parser.value_stack.capa = (capa + missing_object_value);
                -    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, capa + missing_object_value);
                -    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, parser.value_stack.capa);
                +    parser.value_stack.capa = capa + 1;
                +    VALUE tmpbuf, *value_stack_buffer = ALLOCV_N(VALUE, tmpbuf, parser.value_stack.capa);
                +    MEMCPY(value_stack_buffer, parser.value_stack.ptr, VALUE, capa);
                @@ -2715 +2774 @@
                - * call-seq: value? -> true or false
                + * call-seq: eos? -> true or false
                @@ -2725,0 +2785,35 @@
                + * call-seq: partial_value? -> true or false
                + *
                + * Returns whether a document is currently under construction: an unclosed
                + * container, a key awaiting its value, etc.
                + *
                + * It answers the same question as <tt>!partial_value.nil?</tt>, but as a
                + * cheap predicate on the parser's internal state, without materializing the
                + * partially parsed Ruby objects:
                + *   parser << '{"a":1,'
                + *   parser.parse # => false
                + *   parser.partial_value? # => true
                + *
                + * A fully parsed document whose value hasn't been retrieved yet is not under
                + * construction: #value? returns true and #partial_value? returns false.
                + */
                +static VALUE cResumableParser_partial_value_p(VALUE self)
                +{
                +    JSON_ResumableParser *parser = cResumableParser_get(self);
                +
                +    // Mirror of #value?: values on the stack while the document isn't DONE
                +    // belong to a partially built document. A container whose first key or
                +    // element hasn't been parsed yet has no frame nor value registered (the
                +    // tokenizer rewinds to the container start on EOS), so that state is
                +    // observable through the buffer (#eos?/#rest) instead, keeping this
                +    // predicate consistent with #partial_value returning nil.
                +    if (parser->value_stack.head > 0) {
                +        json_frame *frame = json_frame_stack_peek(&parser->frames);
                +        if (frame->phase != JSON_PHASE_DONE) {
                +            return Qtrue;
                +        }
                +    }
                +    return Qfalse;
                +}
                +
                +/*
                @@ -2780,0 +2875 @@
                +    rb_define_method(cResumableParser, "partial_value?", cResumableParser_partial_value_p, 0);
                @@ -2814,0 +2910 @@
                +#ifndef HAVE_RB_STR_TO_INTERNED_STR
                @@ -2815,0 +2912 @@
                +#endif
        lib/json.rb
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/lib/json.rb	2026-08-10 02:35:39.128093376 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/lib/json.rb	2026-08-10 02:35:39.273092363 +0000
                @@ -124 +124,3 @@
                -# defaults to +100+; specify +false+ to disable depth checking.
                +# defaults to +100+;
                +# You can set it to +false+ to disable depth checking entirely, but that is dangerous
                +# when parsing untrusted input.
                @@ -126 +128 @@
                -# With the default, +false+:
                +# With the default, +100+:
                @@ -386,0 +389,9 @@
                +# With +false+:
                +#   obj = []
                +#   obj[0] = obj
                +#   # Raises  SystemStackError: stack level too deep
                +#   JSON.generate(obj, max_nesting: false)
                +#
                +# Setting +max_nesting+ to +false+ can lead to a stackoverflow and may leave the program
                +# in an unrecoverable state. It is discouraged.
                +#
                @@ -411 +421,0 @@
                -#   defaults to the empty \String, <tt>''</tt>;
                @@ -418,0 +429,5 @@
                +# - Option +sort_keys+ (boolean or \Proc) controls whether and how the keys of a
                +#   hash are sorted when generating the output; defaults to <tt>false</tt>.
                +#   When +true+, keys are sorted lexicographically. When a \Proc, it receives
                +#   the entire \Hash and must return a \Hash with its pairs in the desired
                +#   order, allowing for arbitrary sort orders.
        lib/json/common.rb
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/lib/json/common.rb	2026-08-10 02:35:39.131093355 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/lib/json/common.rb	2026-08-10 02:35:39.275092349 +0000
                @@ -157,0 +158,9 @@
                +
                +      # The default proc used when the +sort_keys+ generation option is +true+.
                +      # It returns a new hash with the entries sorted by their keys.
                +      sort_keys_proc = ->(hash) { hash.sort.to_h }
                +      if defined?(::Ractor) && Ractor.respond_to?(:shareable_lambda)
                +        sort_keys_proc = Ractor.shareable_lambda(&sort_keys_proc)
                +      end
                +      generator::State.default_sort_keys_proc = sort_keys_proc
                +
        lib/json/ext.rb
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/lib/json/ext.rb	2026-08-10 02:35:39.132093348 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/lib/json/ext.rb	2026-08-10 02:35:39.275092349 +0000
                @@ -43,0 +44,26 @@
                +  if defined?(ResumableParser) # Not yet available on JRuby
                +    class ResumableParser
                +      # Returns whether the parser is entirely done: no unconsumed bytes in
                +      # the buffer, no document under construction and no parsed value
                +      # awaiting retrieval.
                +      #
                +      # The main use case is detecting a truncated stream once the input is
                +      # exhausted:
                +      #
                +      #   loop do
                +      #     begin
                +      #       parser << socket.readpartial(4096)
                +      #     rescue EOFError
                +      #       break
                +      #     end
                +      #     while parser.parse
                +      #       process(parser.value)
                +      #     end
                +      #   end
                +      #   warn "stream was truncated" unless parser.empty?
                +      def empty?
                +        eos? && !partial_value? && !value?
                +      end
                +    end
                +  end
                +
        lib/json/ext/generator/state.rb
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/lib/json/ext/generator/state.rb	2026-08-10 02:35:39.132093348 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/lib/json/ext/generator/state.rb	2026-08-10 02:35:39.275092349 +0000
                @@ -56,0 +57 @@
                +            sort_keys: sort_keys
        lib/json/truffle_ruby/generator.rb
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/lib/json/truffle_ruby/generator.rb	2026-08-10 02:35:39.132093348 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/lib/json/truffle_ruby/generator.rb	2026-08-10 02:35:39.275092349 +0000
                @@ -113,0 +114,2 @@
                +        singleton_class.attr_accessor :default_sort_keys_proc # :nodoc:
                +
                @@ -166,0 +169 @@
                +          @sort_keys             = false
                @@ -201,0 +205,27 @@
                +        # Controls key sorting in the generated JSON. If set to +true+, object
                +        # keys are sorted by key lexicographically. If set to a Proc, it
                +        # receives the entire Hash and must return a Hash with its pairs in the
                +        # desired order.
                +        attr_reader :sort_keys
                +
                +        def sort_keys=(value) # :nodoc:
                +          type_error = false
                +          @sort_keys = case value
                +          when Proc
                +            value
                +          when true
                +            State.default_sort_keys_proc
                +          when nil, false
                +            false
                +          else
                +            type_error = true
                +            false
                +          end
                +
                +          if type_error
                +            raise TypeError, "The `sort_keys` argument must be a boolean or a Proc"
                +          end
                +
                +          @sort_keys
                +        end
                +
                @@ -287,0 +318 @@
                +          self.sort_keys         = opts[:sort_keys]           if opts.key?(:sort_keys)
                @@ -352 +383 @@
                -              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj)
                +              !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj) and !@sort_keys
                @@ -354,0 +386,4 @@
                +            if @sort_keys
                +              obj = @sort_keys.call(obj)
                +            end
                +
        lib/json/version.rb
                --- /tmp/d20260810-467-1d7sdh/json-2.20.0/lib/json/version.rb	2026-08-10 02:35:39.132093348 +0000
                +++ /tmp/d20260810-467-1d7sdh/json-2.21.2/lib/json/version.rb	2026-08-10 02:35:39.275092349 +0000
                @@ -4 +4 @@
                -  VERSION = '2.20.0'
                +  VERSION = '2.21.2'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT date:
    3.3.11.1: 2026-03-27 00:00:00 UTC
    3.3.12.0: 2026-07-16 00:00:00 UTC
  DIFFERENT metadata:
    3.3.11.1: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.11.1/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.11.1", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.11.1"}
    3.3.12.0: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.12.0/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.12.0", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.12.0"}
  DIFFERENT version:
    3.3.11.1: 3.3.11.1
    3.3.12.0: 3.3.12.0
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
            lib/parser/current.rb +1/-1
            lib/parser/version.rb +1/-1

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

gem compare parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT date:
    3.3.11.1: 2026-03-27 00:00:00 UTC
    3.3.12.0: 2026-07-16 00:00:00 UTC
  DIFFERENT metadata:
    3.3.11.1: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.11.1/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.11.1", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.11.1"}
    3.3.12.0: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.12.0/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.12.0", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.12.0"}
  DIFFERENT version:
    3.3.11.1: 3.3.11.1
    3.3.12.0: 3.3.12.0
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
            lib/parser/current.rb +1/-1
            lib/parser/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare language_server-protocol 3.17.0.5 3.17.0.6

Compared versions: ["3.17.0.5", "3.17.0.6"]
  DIFFERENT rubygems_version:
    3.17.0.5: 3.6.8
    3.17.0.6: 4.0.10
  DIFFERENT version:
    3.17.0.5: 3.17.0.5
    3.17.0.6: 3.17.0.6
  DIFFERENT files:
    3.17.0.5->3.17.0.6:
      * Added:
            lib/language_server/protocol/constant/lsp_error_codes.rb +41/-0
            lib/language_server/protocol/constant/trace_values.rb +20/-0
            lib/language_server/protocol/interface/base_symbol_information.rb +68/-0
            lib/language_server/protocol/interface/did_change_configuration_registration_options.rb +30/-0
            lib/language_server/protocol/interface/document_diagnostic_report.rb +89/-0
            lib/language_server/protocol/interface/file_operation_client_capabilities.rb +95/-0
            lib/language_server/protocol/interface/file_operation_options.rb +83/-0
            lib/language_server/protocol/interface/general_client_capabilities.rb +91/-0
            lib/language_server/protocol/interface/inline_value.rb +88/-0
            lib/language_server/protocol/interface/markdown_client_capabilities.rb +59/-0
            lib/language_server/protocol/interface/prepare_rename_result.rb +69/-0
            lib/language_server/protocol/interface/resource_operation.rb +47/-0
            lib/language_server/protocol/interface/text_document_filter.rb +69/-0
            lib/language_server/protocol/interface/type_hierarchy_client_capabilities.rb +38/-0
            lib/language_server/protocol/interface/window_client_capabilities.rb +63/-0
            lib/language_server/protocol/interface/workspace_client_capabilities.rb +176/-0
            lib/language_server/protocol/interface/workspace_document_diagnostic_report.rb +89/-0
            lib/language_server/protocol/interface/workspace_folders_initialize_params.rb +39/-0
            sig/language_server/protocol/constant/code_action_kind.rbs +85/-0
            sig/language_server/protocol/constant/code_action_trigger_kind.rbs +22/-0
            sig/language_server/protocol/constant/completion_item_kind.rbs +36/-0
            sig/language_server/protocol/constant/completion_item_tag.rbs +16/-0
            sig/language_server/protocol/constant/completion_trigger_kind.rbs +26/-0
            sig/language_server/protocol/constant/diagnostic_severity.rbs +24/-0
            sig/language_server/protocol/constant/diagnostic_tag.rbs +24/-0
            sig/language_server/protocol/constant/document_diagnostic_report_kind.rbs +21/-0
            sig/language_server/protocol/constant/document_highlight_kind.rbs +23/-0
            sig/language_server/protocol/constant/error_codes.rbs +73/-0
            sig/language_server/protocol/constant/failure_handling_kind.rbs +30/-0
            sig/language_server/protocol/constant/file_change_type.rbs +23/-0
            sig/language_server/protocol/constant/file_operation_pattern_kind.rbs +20/-0
            sig/language_server/protocol/constant/folding_range_kind.rbs +24/-0
            sig/language_server/protocol/constant/initialize_error_codes.rbs +18/-0
            sig/language_server/protocol/constant/inlay_hint_kind.rbs +19/-0
            sig/language_server/protocol/constant/insert_text_format.rbs +25/-0
            sig/language_server/protocol/constant/insert_text_mode.rbs +30/-0
            sig/language_server/protocol/constant/lsp_error_codes.rbs +41/-0
            sig/language_server/protocol/constant/markup_kind.rbs +23/-0
            sig/language_server/protocol/constant/message_type.rbs +24/-0
            sig/language_server/protocol/constant/moniker_kind.rbs +24/-0
            sig/language_server/protocol/constant/notebook_cell_kind.rbs +19/-0
            sig/language_server/protocol/constant/position_encoding_kind.rbs +32/-0
            sig/language_server/protocol/constant/prepare_support_default_behavior.rbs +13/-0
            sig/language_server/protocol/constant/resource_operation_kind.rbs +23/-0
            sig/language_server/protocol/constant/semantic_token_modifiers.rbs +18/-0
            sig/language_server/protocol/constant/semantic_token_types.rbs +35/-0
            sig/language_server/protocol/constant/signature_help_trigger_kind.rbs +24/-0
            sig/language_server/protocol/constant/symbol_kind.rbs +37/-0
            sig/language_server/protocol/constant/symbol_tag.rbs +15/-0
            sig/language_server/protocol/constant/text_document_save_reason.rbs +24/-0
            sig/language_server/protocol/constant/text_document_sync_kind.rbs +27/-0
            sig/language_server/protocol/constant/token_format.rbs +9/-0
            sig/language_server/protocol/constant/trace_values.rbs +20/-0
            sig/language_server/protocol/constant/uniqueness_level.rbs +31/-0
            sig/language_server/protocol/constant/watch_kind.rbs +20/-0
            sig/language_server/protocol/interface/annotated_text_edit.rbs +30/-0
            sig/language_server/protocol/interface/apply_workspace_edit_params.rbs +25/-0
            sig/language_server/protocol/interface/base_symbol_information.rbs +31/-0
            sig/language_server/protocol/interface/call_hierarchy_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/call_hierarchy_incoming_call.rbs +27/-0
            sig/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_item.rbs +46/-0
            sig/language_server/protocol/interface/call_hierarchy_options.rbs +24/-0
            sig/language_server/protocol/interface/call_hierarchy_outgoing_call.rbs +27/-0
            sig/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_prepare_params.rbs +30/-0
            sig/language_server/protocol/interface/call_hierarchy_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/cancel_params.rbs +19/-0
            sig/language_server/protocol/interface/change_annotation.rbs +30/-0
            sig/language_server/protocol/interface/client_capabilities.rbs +37/-0
            sig/language_server/protocol/interface/code_action.rbs +46/-0
            sig/language_server/protocol/interface/code_action_client_capabilities.rbs +40/-0
            sig/language_server/protocol/interface/code_action_context.rbs +29/-0
            sig/language_server/protocol/interface/code_action_options.rbs +28/-0
            sig/language_server/protocol/interface/code_action_params.rbs +34/-0
            sig/language_server/protocol/interface/code_action_registration_options.rbs +31/-0
            sig/language_server/protocol/interface/code_description.rbs +24/-0
            sig/language_server/protocol/interface/code_lens.rbs +32/-0
            sig/language_server/protocol/interface/code_lens_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/code_lens_options.rbs +25/-0
            sig/language_server/protocol/interface/code_lens_params.rbs +28/-0
            sig/language_server/protocol/interface/code_lens_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/code_lens_workspace_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/color.rbs +31/-0
            sig/language_server/protocol/interface/color_information.rbs +25/-0
            sig/language_server/protocol/interface/color_presentation.rbs +25/-0
            sig/language_server/protocol/interface/color_presentation_params.rbs +34/-0
            sig/language_server/protocol/interface/command.rbs +31/-0
            sig/language_server/protocol/interface/completion_client_capabilities.rbs +37/-0
            sig/language_server/protocol/interface/completion_context.rbs +25/-0
            sig/language_server/protocol/interface/completion_item.rbs +77/-0
            sig/language_server/protocol/interface/completion_item_label_details.rbs +27/-0
            sig/language_server/protocol/interface/completion_list.rbs +29/-0
            sig/language_server/protocol/interface/completion_options.rbs +34/-0
            sig/language_server/protocol/interface/completion_params.rbs +34/-0
            sig/language_server/protocol/interface/completion_registration_options.rbs +37/-0
            sig/language_server/protocol/interface/configuration_item.rbs +22/-0
            sig/language_server/protocol/interface/configuration_params.rbs +22/-0
            sig/language_server/protocol/interface/create_file.rbs +31/-0
            sig/language_server/protocol/interface/create_file_options.rbs +25/-0
            sig/language_server/protocol/interface/create_files_params.rbs +25/-0
            sig/language_server/protocol/interface/declaration_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/declaration_options.rbs +19/-0
            sig/language_server/protocol/interface/declaration_params.rbs +28/-0
            sig/language_server/protocol/interface/declaration_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/definition_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/definition_options.rbs +22/-0
            sig/language_server/protocol/interface/definition_params.rbs +31/-0
            sig/language_server/protocol/interface/definition_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/delete_file.rbs +31/-0
            sig/language_server/protocol/interface/delete_file_options.rbs +25/-0
            sig/language_server/protocol/interface/delete_files_params.rbs +25/-0
            sig/language_server/protocol/interface/diagnostic.rbs +47/-0
            sig/language_server/protocol/interface/diagnostic_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/diagnostic_options.rbs +33/-0
            sig/language_server/protocol/interface/diagnostic_registration_options.rbs +39/-0
            sig/language_server/protocol/interface/diagnostic_related_information.rbs +27/-0
            sig/language_server/protocol/interface/diagnostic_server_cancellation_data.rbs +24/-0
            sig/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/did_change_configuration_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/did_change_configuration_params.rbs +22/-0
            sig/language_server/protocol/interface/did_change_configuration_registration_options.rbs +19/-0
            sig/language_server/protocol/interface/did_change_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_change_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/did_change_watched_files_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/did_change_watched_files_params.rbs +22/-0
            sig/language_server/protocol/interface/did_change_watched_files_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/did_change_workspace_folders_params.rbs +22/-0
            sig/language_server/protocol/interface/did_close_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_close_text_document_params.rbs +22/-0
            sig/language_server/protocol/interface/did_open_notebook_document_params.rbs +27/-0
            sig/language_server/protocol/interface/did_open_text_document_params.rbs +22/-0
            sig/language_server/protocol/interface/did_save_notebook_document_params.rbs +24/-0
            sig/language_server/protocol/interface/did_save_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/document_color_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/document_color_options.rbs +19/-0
            sig/language_server/protocol/interface/document_color_params.rbs +28/-0
            sig/language_server/protocol/interface/document_color_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_diagnostic_params.rbs +36/-0
            sig/language_server/protocol/interface/document_diagnostic_report.rbs +37/-0
            sig/language_server/protocol/interface/document_diagnostic_report_partial_result.rbs +24/-0
            sig/language_server/protocol/interface/document_filter.rbs +34/-0
            sig/language_server/protocol/interface/document_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_formatting_options.rbs +22/-0
            sig/language_server/protocol/interface/document_formatting_params.rbs +28/-0
            sig/language_server/protocol/interface/document_formatting_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_highlight.rbs +27/-0
            sig/language_server/protocol/interface/document_highlight_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_highlight_options.rbs +22/-0
            sig/language_server/protocol/interface/document_highlight_params.rbs +31/-0
            sig/language_server/protocol/interface/document_highlight_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_link.rbs +32/-0
            sig/language_server/protocol/interface/document_link_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/document_link_options.rbs +25/-0
            sig/language_server/protocol/interface/document_link_params.rbs +28/-0
            sig/language_server/protocol/interface/document_link_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_on_type_formatting_options.rbs +25/-0
            sig/language_server/protocol/interface/document_on_type_formatting_params.rbs +31/-0
            sig/language_server/protocol/interface/document_on_type_formatting_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/document_range_formatting_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/document_range_formatting_options.rbs +22/-0
            sig/language_server/protocol/interface/document_range_formatting_params.rbs +31/-0
            sig/language_server/protocol/interface/document_range_formatting_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/document_symbol.rbs +46/-0
            sig/language_server/protocol/interface/document_symbol_client_capabilities.rbs +34/-0
            sig/language_server/protocol/interface/document_symbol_options.rbs +25/-0
            sig/language_server/protocol/interface/document_symbol_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/execute_command_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/execute_command_options.rbs +25/-0
            sig/language_server/protocol/interface/execute_command_params.rbs +28/-0
            sig/language_server/protocol/interface/execute_command_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/execution_summary.rbs +22/-0
            sig/language_server/protocol/interface/file_create.rbs +24/-0
            sig/language_server/protocol/interface/file_delete.rbs +24/-0
            sig/language_server/protocol/interface/file_event.rbs +25/-0
            sig/language_server/protocol/interface/file_operation_client_capabilities.rbs +45/-0
            sig/language_server/protocol/interface/file_operation_filter.rbs +28/-0
            sig/language_server/protocol/interface/file_operation_options.rbs +39/-0
            sig/language_server/protocol/interface/file_operation_pattern.rbs +31/-0
            sig/language_server/protocol/interface/file_operation_pattern_options.rbs +24/-0
            sig/language_server/protocol/interface/file_operation_registration_options.rbs +24/-0
            sig/language_server/protocol/interface/file_rename.rbs +27/-0
            sig/language_server/protocol/interface/file_system_watcher.rbs +22/-0
            sig/language_server/protocol/interface/folding_range.rbs +38/-0
            sig/language_server/protocol/interface/folding_range_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/folding_range_options.rbs +19/-0
            sig/language_server/protocol/interface/folding_range_params.rbs +28/-0
            sig/language_server/protocol/interface/folding_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/formatting_options.rbs +34/-0
            sig/language_server/protocol/interface/full_document_diagnostic_report.rbs +30/-0
            sig/language_server/protocol/interface/general_client_capabilities.rbs +33/-0
            sig/language_server/protocol/interface/hover.rbs +25/-0
            sig/language_server/protocol/interface/hover_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/hover_options.rbs +22/-0
            sig/language_server/protocol/interface/hover_params.rbs +28/-0
            sig/language_server/protocol/interface/hover_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/hover_result.rbs +19/-0
            sig/language_server/protocol/interface/implementation_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/implementation_options.rbs +19/-0
            sig/language_server/protocol/interface/implementation_params.rbs +28/-0
            sig/language_server/protocol/interface/implementation_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/initialize_error.rbs +23/-0
            sig/language_server/protocol/interface/initialize_params.rbs +46/-0
            sig/language_server/protocol/interface/initialize_result.rbs +25/-0
            sig/language_server/protocol/interface/initialized_params.rbs +16/-0
            sig/language_server/protocol/interface/inlay_hint.rbs +45/-0
            sig/language_server/protocol/interface/inlay_hint_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/inlay_hint_label_part.rbs +34/-0
            sig/language_server/protocol/interface/inlay_hint_options.rbs +27/-0
            sig/language_server/protocol/interface/inlay_hint_registration_options.rbs +33/-0
            sig/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/inline_value.rbs +40/-0
            sig/language_server/protocol/interface/inline_value_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/inline_value_context.rbs +25/-0
            sig/language_server/protocol/interface/inline_value_evaluatable_expression.rbs +29/-0
            sig/language_server/protocol/interface/inline_value_options.rbs +24/-0
            sig/language_server/protocol/interface/inline_value_params.rbs +33/-0
            sig/language_server/protocol/interface/inline_value_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/inline_value_text.rbs +27/-0
            sig/language_server/protocol/interface/inline_value_variable_lookup.rbs +32/-0
            sig/language_server/protocol/interface/inline_value_workspace_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/insert_replace_edit.rbs +30/-0
            sig/language_server/protocol/interface/linked_editing_range_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/linked_editing_range_options.rbs +19/-0
            sig/language_server/protocol/interface/linked_editing_range_params.rbs +25/-0
            sig/language_server/protocol/interface/linked_editing_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/linked_editing_ranges.rbs +27/-0
            sig/language_server/protocol/interface/location.rbs +26/-0
            sig/language_server/protocol/interface/location_link.rbs +32/-0
            sig/language_server/protocol/interface/log_message_params.rbs +25/-0
            sig/language_server/protocol/interface/markdown_client_capabilities.rbs +30/-0
            sig/language_server/protocol/interface/markup_content.rbs +46/-0
            sig/language_server/protocol/interface/message.rbs +19/-0
            sig/language_server/protocol/interface/message_action_item.rbs +19/-0
            sig/language_server/protocol/interface/moniker.rbs +33/-0
            sig/language_server/protocol/interface/moniker_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/moniker_options.rbs +19/-0
            sig/language_server/protocol/interface/moniker_params.rbs +28/-0
            sig/language_server/protocol/interface/moniker_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/notebook_cell.rbs +37/-0
            sig/language_server/protocol/interface/notebook_cell_array_change.rbs +31/-0
            sig/language_server/protocol/interface/notebook_cell_text_document_filter.rbs +28/-0
            sig/language_server/protocol/interface/notebook_document.rbs +36/-0
            sig/language_server/protocol/interface/notebook_document_change_event.rbs +27/-0
            sig/language_server/protocol/interface/notebook_document_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/notebook_document_filter.rbs +32/-0
            sig/language_server/protocol/interface/notebook_document_identifier.rbs +24/-0
            sig/language_server/protocol/interface/notebook_document_sync_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/notebook_document_sync_options.rbs +37/-0
            sig/language_server/protocol/interface/notebook_document_sync_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/notification_message.rbs +25/-0
            sig/language_server/protocol/interface/optional_versioned_text_document_identifier.rbs +25/-0
            sig/language_server/protocol/interface/parameter_information.rbs +26/-0
            sig/language_server/protocol/interface/partial_result_params.rbs +19/-0
            sig/language_server/protocol/interface/position.rbs +51/-0
            sig/language_server/protocol/interface/prepare_rename_params.rbs +25/-0
            sig/language_server/protocol/interface/prepare_rename_result.rbs +31/-0
            sig/language_server/protocol/interface/previous_result_id.rbs +27/-0
            sig/language_server/protocol/interface/progress_params.rbs +22/-0
            sig/language_server/protocol/interface/publish_diagnostics_client_capabilities.rbs +34/-0
            sig/language_server/protocol/interface/publish_diagnostics_params.rbs +28/-0
            sig/language_server/protocol/interface/range.rbs +35/-0
            sig/language_server/protocol/interface/reference_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/reference_context.rbs +23/-0
            sig/language_server/protocol/interface/reference_options.rbs +22/-0
            sig/language_server/protocol/interface/reference_params.rbs +34/-0
            sig/language_server/protocol/interface/reference_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/registration.rbs +28/-0
            sig/language_server/protocol/interface/registration_params.rbs +19/-0
            sig/language_server/protocol/interface/regular_expressions_client_capabilities.rbs +27/-0
            sig/language_server/protocol/interface/related_full_document_diagnostic_report.rbs +33/-0
            sig/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rbs +30/-0
            sig/language_server/protocol/interface/relative_pattern.rbs +29/-0
            sig/language_server/protocol/interface/rename_file.rbs +34/-0
            sig/language_server/protocol/interface/rename_file_options.rbs +25/-0
            sig/language_server/protocol/interface/rename_files_params.rbs +25/-0
            sig/language_server/protocol/interface/rename_options.rbs +25/-0
            sig/language_server/protocol/interface/rename_params.rbs +31/-0
            sig/language_server/protocol/interface/rename_registration_options.rbs +28/-0
            sig/language_server/protocol/interface/request_message.rbs +28/-0
            sig/language_server/protocol/interface/resource_operation.rbs +25/-0
            sig/language_server/protocol/interface/response_error.rbs +25/-0
            sig/language_server/protocol/interface/response_message.rbs +28/-0
            sig/language_server/protocol/interface/save_options.rbs +22/-0
            sig/language_server/protocol/interface/selection_range.rbs +26/-0
            sig/language_server/protocol/interface/selection_range_client_capabilities.rbs +19/-0
            sig/language_server/protocol/interface/selection_range_options.rbs +19/-0
            sig/language_server/protocol/interface/selection_range_params.rbs +31/-0
            sig/language_server/protocol/interface/selection_range_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_client_capabilities.rbs +46/-0
            sig/language_server/protocol/interface/semantic_tokens_delta.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_delta_params.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_delta_partial_result.rbs +22/-0
            sig/language_server/protocol/interface/semantic_tokens_edit.rbs +28/-0
            sig/language_server/protocol/interface/semantic_tokens_legend.rbs +25/-0
            sig/language_server/protocol/interface/semantic_tokens_options.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_params.rbs +28/-0
            sig/language_server/protocol/interface/semantic_tokens_partial_result.rbs +22/-0
            sig/language_server/protocol/interface/semantic_tokens_range_params.rbs +31/-0
            sig/language_server/protocol/interface/semantic_tokens_registration_options.rbs +37/-0
            sig/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/server_capabilities.rbs +125/-0
            sig/language_server/protocol/interface/set_trace_params.rbs +19/-0
            sig/language_server/protocol/interface/show_document_client_capabilities.rbs +24/-0
            sig/language_server/protocol/interface/show_document_params.rbs +33/-0
            sig/language_server/protocol/interface/show_document_result.rbs +24/-0
            sig/language_server/protocol/interface/show_message_params.rbs +25/-0
            sig/language_server/protocol/interface/show_message_request_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/show_message_request_params.rbs +25/-0
            sig/language_server/protocol/interface/signature_help.rbs +30/-0
            sig/language_server/protocol/interface/signature_help_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/signature_help_context.rbs +33/-0
            sig/language_server/protocol/interface/signature_help_options.rbs +28/-0
            sig/language_server/protocol/interface/signature_help_params.rbs +31/-0
            sig/language_server/protocol/interface/signature_help_registration_options.rbs +31/-0
            sig/language_server/protocol/interface/signature_information.rbs +33/-0
            sig/language_server/protocol/interface/static_registration_options.rbs +23/-0
            sig/language_server/protocol/interface/symbol_information.rbs +38/-0
            sig/language_server/protocol/interface/text_document_change_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/text_document_client_capabilities.rbs +109/-0
            sig/language_server/protocol/interface/text_document_content_change_event.rbs +29/-0
            sig/language_server/protocol/interface/text_document_edit.rbs +28/-0
            sig/language_server/protocol/interface/text_document_filter.rbs +43/-0
            sig/language_server/protocol/interface/text_document_identifier.rbs +22/-0
            sig/language_server/protocol/interface/text_document_item.rbs +32/-0
            sig/language_server/protocol/interface/text_document_position_params.rbs +26/-0
            sig/language_server/protocol/interface/text_document_registration_options.rbs +22/-0
            sig/language_server/protocol/interface/text_document_save_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/text_document_sync_client_capabilities.rbs +28/-0
            sig/language_server/protocol/interface/text_document_sync_options.rbs +31/-0
            sig/language_server/protocol/interface/text_edit.rbs +25/-0
            sig/language_server/protocol/interface/type_definition_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/type_definition_options.rbs +19/-0
            sig/language_server/protocol/interface/type_definition_params.rbs +28/-0
            sig/language_server/protocol/interface/type_definition_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/type_hierarchy_client_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/type_hierarchy_item.rbs +43/-0
            sig/language_server/protocol/interface/type_hierarchy_options.rbs +24/-0
            sig/language_server/protocol/interface/type_hierarchy_prepare_params.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_registration_options.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_subtypes_params.rbs +30/-0
            sig/language_server/protocol/interface/type_hierarchy_supertypes_params.rbs +30/-0
            sig/language_server/protocol/interface/unchanged_document_diagnostic_report.rbs +28/-0
            sig/language_server/protocol/interface/unregistration.rbs +25/-0
            sig/language_server/protocol/interface/unregistration_params.rbs +19/-0
            sig/language_server/protocol/interface/versioned_notebook_document_identifier.rbs +27/-0
            sig/language_server/protocol/interface/versioned_text_document_identifier.rbs +25/-0
            sig/language_server/protocol/interface/will_save_text_document_params.rbs +25/-0
            sig/language_server/protocol/interface/window_client_capabilities.rbs +25/-0
            sig/language_server/protocol/interface/work_done_progress_begin.rbs +31/-0
            sig/language_server/protocol/interface/work_done_progress_cancel_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_create_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_end.rbs +22/-0
            sig/language_server/protocol/interface/work_done_progress_options.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_params.rbs +19/-0
            sig/language_server/protocol/interface/work_done_progress_report.rbs +28/-0
            sig/language_server/protocol/interface/workspace_client_capabilities.rbs +61/-0
            sig/language_server/protocol/interface/workspace_diagnostic_params.rbs +33/-0
            sig/language_server/protocol/interface/workspace_diagnostic_report.rbs +24/-0
            sig/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rbs +24/-0
            sig/language_server/protocol/interface/workspace_document_diagnostic_report.rbs +36/-0
            sig/language_server/protocol/interface/workspace_edit.rbs +39/-0
            sig/language_server/protocol/interface/workspace_edit_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/workspace_folder.rbs +25/-0
            sig/language_server/protocol/interface/workspace_folders_change_event.rbs +25/-0
            sig/language_server/protocol/interface/workspace_folders_initialize_params.rbs +19/-0
            sig/language_server/protocol/interface/workspace_folders_server_capabilities.rbs +22/-0
            sig/language_server/protocol/interface/workspace_full_document_diagnostic_report.rbs +36/-0
            sig/language_server/protocol/interface/workspace_symbol.rbs +41/-0
            sig/language_server/protocol/interface/workspace_symbol_client_capabilities.rbs +31/-0
            sig/language_server/protocol/interface/workspace_symbol_options.rbs +25/-0
            sig/language_server/protocol/interface/workspace_symbol_params.rbs +28/-0
            sig/language_server/protocol/interface/workspace_symbol_registration_options.rbs +25/-0
            sig/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rbs +33/-0
            sig/language_server/protocol/transport/io/reader.rbs +18/-0
            sig/language_server/protocol/transport/io/writer.rbs +18/-0
            sig/language_server/protocol/transport/stdio/reader.rbs +11/-0
            sig/language_server/protocol/transport/stdio/writer.rbs +11/-0
            sig/language_server/protocol/version.rbs +5/-0
      * Changed:
            lib/language_server/protocol/constant.rb +4/-0
            lib/language_server/protocol/constant/initialize_error_codes.rb +2/-0
            lib/language_server/protocol/interface.rb +32/-4
            lib/language_server/protocol/interface/annotated_text_edit.rb +12/-10
            lib/language_server/protocol/interface/apply_workspace_edit_params.rb +3/-0
            lib/language_server/protocol/interface/apply_workspace_edit_result.rb +9/-5
            lib/language_server/protocol/interface/call_hierarchy_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/call_hierarchy_incoming_call.rb +6/-1
            lib/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rb +14/-9
            lib/language_server/protocol/interface/call_hierarchy_item.rb +12/-8
            lib/language_server/protocol/interface/call_hierarchy_options.rb +5/-0
            lib/language_server/protocol/interface/call_hierarchy_outgoing_call.rb +8/-2
            lib/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rb +14/-9
            lib/language_server/protocol/interface/call_hierarchy_prepare_params.rb +5/-0
            lib/language_server/protocol/interface/call_hierarchy_registration_options.rb +8/-3
            lib/language_server/protocol/interface/cancel_params.rb +1/-1
            lib/language_server/protocol/interface/change_annotation.rb +2/-0
            lib/language_server/protocol/interface/client_capabilities.rb +10/-3
            lib/language_server/protocol/interface/code_action.rb +23/-21
            lib/language_server/protocol/interface/code_action_client_capabilities.rb +19/-3
            lib/language_server/protocol/interface/code_action_context.rb +10/-9
            lib/language_server/protocol/interface/code_action_options.rb +15/-10
            lib/language_server/protocol/interface/code_action_params.rb +21/-21
            lib/language_server/protocol/interface/code_action_registration_options.rb +18/-13
            lib/language_server/protocol/interface/code_description.rb +3/-1
            lib/language_server/protocol/interface/code_lens.rb +6/-7
            lib/language_server/protocol/interface/code_lens_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/code_lens_options.rb +10/-7
            lib/language_server/protocol/interface/code_lens_params.rb +15/-12
            lib/language_server/protocol/interface/code_lens_registration_options.rb +13/-10
            lib/language_server/protocol/interface/code_lens_workspace_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/color.rb +4/-4
            lib/language_server/protocol/interface/color_information.rb +3/-0
            lib/language_server/protocol/interface/color_presentation.rb +7/-8
            lib/language_server/protocol/interface/color_presentation_params.rb +24/-21
            lib/language_server/protocol/interface/command.rb +6/-0
            lib/language_server/protocol/interface/completion_client_capabilities.rb +20/-12
            lib/language_server/protocol/interface/completion_context.rb +3/-5
            lib/language_server/protocol/interface/completion_item.rb +45/-34
            lib/language_server/protocol/interface/completion_item_label_details.rb +6/-6
            lib/language_server/protocol/interface/completion_list.rb +5/-4
            lib/language_server/protocol/interface/completion_options.rb +24/-24
            lib/language_server/protocol/interface/completion_params.rb +16/-14
            lib/language_server/protocol/interface/completion_registration_options.rb +30/-27
            lib/language_server/protocol/interface/configuration_params.rb +3/-0
            lib/language_server/protocol/interface/create_file.rb +5/-3
            lib/language_server/protocol/interface/create_files_params.rb +4/-2
            lib/language_server/protocol/interface/declaration_client_capabilities.rb +6/-3
            lib/language_server/protocol/interface/declaration_params.rb +2/-2
            lib/language_server/protocol/interface/declaration_registration_options.rb +3/-3
            lib/language_server/protocol/interface/definition_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/definition_options.rb +3/-0
            lib/language_server/protocol/interface/definition_params.rb +5/-2
            lib/language_server/protocol/interface/definition_registration_options.rb +6/-3
            lib/language_server/protocol/interface/delete_file.rb +4/-2
            lib/language_server/protocol/interface/delete_files_params.rb +4/-2
            lib/language_server/protocol/interface/diagnostic.rb +20/-9
            lib/language_server/protocol/interface/diagnostic_client_capabilities.rb +5/-5
            lib/language_server/protocol/interface/diagnostic_options.rb +9/-7
            lib/language_server/protocol/interface/diagnostic_registration_options.rb +12/-10
            lib/language_server/protocol/interface/diagnostic_related_information.rb +3/-3
            lib/language_server/protocol/interface/diagnostic_server_cancellation_data.rb +2/-0
            lib/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rb +5/-3
            lib/language_server/protocol/interface/did_change_configuration_params.rb +3/-0
            lib/language_server/protocol/interface/did_change_notebook_document_params.rb +14/-8
            lib/language_server/protocol/interface/did_change_text_document_params.rb +12/-11
            lib/language_server/protocol/interface/did_change_watched_files_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/did_change_watched_files_params.rb +3/-0
            lib/language_server/protocol/interface/did_change_watched_files_registration_options.rb +1/-1
            lib/language_server/protocol/interface/did_change_workspace_folders_params.rb +3/-0
            lib/language_server/protocol/interface/did_close_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_close_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/did_open_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_open_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/did_save_notebook_document_params.rb +2/-0
            lib/language_server/protocol/interface/did_save_text_document_params.rb +3/-0
            lib/language_server/protocol/interface/document_color_client_capabilities.rb +3/-1
            lib/language_server/protocol/interface/document_color_params.rb +15/-12
            lib/language_server/protocol/interface/document_color_registration_options.rb +10/-10
            lib/language_server/protocol/interface/document_diagnostic_params.rb +22/-20
            lib/language_server/protocol/interface/document_diagnostic_report_partial_result.rb +3/-1
            lib/language_server/protocol/interface/document_filter.rb +27/-14
            lib/language_server/protocol/interface/document_formatting_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_formatting_params.rb +13/-10
            lib/language_server/protocol/interface/document_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_highlight.rb +1/-1
            lib/language_server/protocol/interface/document_highlight_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_highlight_options.rb +3/-0
            lib/language_server/protocol/interface/document_highlight_params.rb +5/-2
            lib/language_server/protocol/interface/document_highlight_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_link.rb +7/-6
            lib/language_server/protocol/interface/document_link_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/document_link_options.rb +10/-7
            lib/language_server/protocol/interface/document_link_params.rb +15/-12
            lib/language_server/protocol/interface/document_link_registration_options.rb +13/-10
            lib/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_params.rb +3/-0
            lib/language_server/protocol/interface/document_on_type_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_range_formatting_client_capabilities.rb +4/-1
            lib/language_server/protocol/interface/document_range_formatting_options.rb +3/-0
            lib/language_server/protocol/interface/document_range_formatting_params.rb +13/-10
            lib/language_server/protocol/interface/document_range_formatting_registration_options.rb +6/-3
            lib/language_server/protocol/interface/document_symbol.rb +14/-12
            lib/language_server/protocol/interface/document_symbol_client_capabilities.rb +8/-1
            lib/language_server/protocol/interface/document_symbol_options.rb +12/-7
            lib/language_server/protocol/interface/document_symbol_params.rb +15/-12
            lib/language_server/protocol/interface/document_symbol_registration_options.rb +15/-10
            lib/language_server/protocol/interface/execute_command_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/execute_command_options.rb +10/-7
            lib/language_server/protocol/interface/execute_command_params.rb +13/-10
            lib/language_server/protocol/interface/execute_command_registration_options.rb +8/-8
            lib/language_server/protocol/interface/execution_summary.rb +1/-1
            lib/language_server/protocol/interface/file_create.rb +2/-0
            lib/language_server/protocol/interface/file_delete.rb +2/-0
            lib/language_server/protocol/interface/file_event.rb +3/-3
            lib/language_server/protocol/interface/file_operation_filter.rb +4/-2
            lib/language_server/protocol/interface/file_operation_pattern.rb +6/-8
            lib/language_server/protocol/interface/file_operation_pattern_options.rb +2/-0
            lib/language_server/protocol/interface/file_operation_registration_options.rb +2/-0
            lib/language_server/protocol/interface/file_rename.rb +2/-0
            lib/language_server/protocol/interface/file_system_watcher.rb +4/-3
            lib/language_server/protocol/interface/folding_range.rb +18/-22
            lib/language_server/protocol/interface/folding_range_client_capabilities.rb +6/-2
            lib/language_server/protocol/interface/folding_range_params.rb +15/-12
            lib/language_server/protocol/interface/folding_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/formatting_options.rb +7/-1
            lib/language_server/protocol/interface/full_document_diagnostic_report.rb +3/-1
            lib/language_server/protocol/interface/hover.rb +2/-2
            lib/language_server/protocol/interface/hover_client_capabilities.rb +2/-3
            lib/language_server/protocol/interface/hover_options.rb +3/-0
            lib/language_server/protocol/interface/hover_params.rb +3/-0
            lib/language_server/protocol/interface/hover_registration_options.rb +6/-3
            lib/language_server/protocol/interface/implementation_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/implementation_params.rb +2/-2
            lib/language_server/protocol/interface/implementation_registration_options.rb +3/-3
            lib/language_server/protocol/interface/initialize_error.rb +4/-0
            lib/language_server/protocol/interface/initialize_params.rb +36/-24
            lib/language_server/protocol/interface/initialize_result.rb +5/-0
            lib/language_server/protocol/interface/inlay_hint.rb +2/-6
            lib/language_server/protocol/interface/inlay_hint_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/inlay_hint_label_part.rb +2/-0
            lib/language_server/protocol/interface/inlay_hint_options.rb +9/-7
            lib/language_server/protocol/interface/inlay_hint_params.rb +13/-11
            lib/language_server/protocol/interface/inlay_hint_registration_options.rb +12/-10
            lib/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/inline_value_client_capabilities.rb +3/-2
            lib/language_server/protocol/interface/inline_value_context.rb +5/-3
            lib/language_server/protocol/interface/inline_value_evaluatable_expression.rb +4/-6
            lib/language_server/protocol/interface/inline_value_options.rb +2/-0
            lib/language_server/protocol/interface/inline_value_params.rb +12/-10
            lib/language_server/protocol/interface/inline_value_registration_options.rb +5/-3
            lib/language_server/protocol/interface/inline_value_text.rb +2/-0
            lib/language_server/protocol/interface/inline_value_variable_lookup.rb +4/-6
            lib/language_server/protocol/interface/inline_value_workspace_client_capabilities.rb +6/-4
            lib/language_server/protocol/interface/insert_replace_edit.rb +2/-0
            lib/language_server/protocol/interface/linked_editing_range_client_capabilities.rb +7/-3
            lib/language_server/protocol/interface/linked_editing_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/linked_editing_ranges.rb +10/-6
            lib/language_server/protocol/interface/location.rb +5/-1
            lib/language_server/protocol/interface/location_link.rb +12/-10
            lib/language_server/protocol/interface/log_message_params.rb +4/-1
            lib/language_server/protocol/interface/log_trace_params.rb +0/-7
            lib/language_server/protocol/interface/markup_content.rb +16/-18
            lib/language_server/protocol/interface/moniker.rb +2/-0
            lib/language_server/protocol/interface/moniker_client_capabilities.rb +8/-4
            lib/language_server/protocol/interface/moniker_params.rb +2/-2
            lib/language_server/protocol/interface/moniker_registration_options.rb +3/-3
            lib/language_server/protocol/interface/notebook_cell.rb +6/-2
            lib/language_server/protocol/interface/notebook_cell_array_change.rb +5/-3
            lib/language_server/protocol/interface/notebook_cell_text_document_filter.rb +2/-0
            lib/language_server/protocol/interface/notebook_document.rb +7/-3
            lib/language_server/protocol/interface/notebook_document_change_event.rb +5/-1
            lib/language_server/protocol/interface/notebook_document_client_capabilities.rb +4/-0
            lib/language_server/protocol/interface/notebook_document_filter.rb +5/-26
            lib/language_server/protocol/interface/notebook_document_identifier.rb +4/-2
            lib/language_server/protocol/interface/notebook_document_sync_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/notebook_document_sync_options.rb +4/-2
            lib/language_server/protocol/interface/notebook_document_sync_registration_options.rb +3/-1
            lib/language_server/protocol/interface/optional_versioned_text_document_identifier.rb +17/-18
            lib/language_server/protocol/interface/parameter_information.rb +6/-8
            lib/language_server/protocol/interface/partial_result_params.rb +2/-2
            lib/language_server/protocol/interface/position.rb +40/-6
            lib/language_server/protocol/interface/previous_result_id.rb +4/-2
            lib/language_server/protocol/interface/progress_params.rb +1/-1
            lib/language_server/protocol/interface/publish_diagnostics_client_capabilities.rb +11/-0
            lib/language_server/protocol/interface/publish_diagnostics_params.rb +8/-4
            lib/language_server/protocol/interface/range.rb +13/-0
            lib/language_server/protocol/interface/reference_client_capabilities.rb +3/-0
            lib/language_server/protocol/interface/reference_context.rb +4/-0
            lib/language_server/protocol/interface/reference_options.rb +3/-0
            lib/language_server/protocol/interface/reference_params.rb +12/-9
            lib/language_server/protocol/interface/reference_registration_options.rb +6/-3
            lib/language_server/protocol/interface/registration.rb +1/-1
            lib/language_server/protocol/interface/regular_expressions_client_capabilities.rb +2/-0
            lib/language_server/protocol/interface/related_full_document_diagnostic_report.rb +19/-15
            lib/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rb +19/-15
            lib/language_server/protocol/interface/relative_pattern.rb +4/-2
            lib/language_server/protocol/interface/rename_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/rename_file.rb +5/-3
            lib/language_server/protocol/interface/rename_files_params.rb +6/-4
            lib/language_server/protocol/interface/rename_options.rb +12/-7
            lib/language_server/protocol/interface/rename_params.rb +16/-13
            lib/language_server/protocol/interface/rename_registration_options.rb +15/-10
            lib/language_server/protocol/interface/save_options.rb +3/-0
            lib/language_server/protocol/interface/selection_range.rb +6/-3
            lib/language_server/protocol/interface/selection_range_client_capabilities.rb +3/-4
            lib/language_server/protocol/interface/selection_range_params.rb +23/-20
            lib/language_server/protocol/interface/selection_range_registration_options.rb +3/-3
            lib/language_server/protocol/interface/semantic_tokens.rb +4/-1
            lib/language_server/protocol/interface/semantic_tokens_client_capabilities.rb +14/-8
            lib/language_server/protocol/interface/semantic_tokens_delta.rb +4/-2
            lib/language_server/protocol/interface/semantic_tokens_delta_params.rb +24/-21
            lib/language_server/protocol/interface/semantic_tokens_delta_partial_result.rb +3/-0
            lib/language_server/protocol/interface/semantic_tokens_edit.rb +6/-3
            lib/language_server/protocol/interface/semantic_tokens_legend.rb +3/-0
            lib/language_server/protocol/interface/semantic_tokens_options.rb +11/-8
            lib/language_server/protocol/interface/semantic_tokens_params.rb +15/-12
            lib/language_server/protocol/interface/semantic_tokens_partial_result.rb +4/-1
            lib/language_server/protocol/interface/semantic_tokens_range_params.rb +23/-20
            lib/language_server/protocol/interface/semantic_tokens_registration_options.rb +14/-11
            lib/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rb +4/-1
            lib/language_server/protocol/interface/server_capabilities.rb +59/-36
            lib/language_server/protocol/interface/set_trace_params.rb +1/-4
            lib/language_server/protocol/interface/show_document_client_capabilities.rb +4/-2
            lib/language_server/protocol/interface/show_document_params.rb +6/-4
            lib/language_server/protocol/interface/show_document_result.rb +3/-1
            lib/language_server/protocol/interface/show_message_params.rb +4/-1
            lib/language_server/protocol/interface/show_message_request_params.rb +1/-1
            lib/language_server/protocol/interface/signature_help.rb +5/-6
            lib/language_server/protocol/interface/signature_help_client_capabilities.rb +5/-0
            lib/language_server/protocol/interface/signature_help_context.rb +8/-9
            lib/language_server/protocol/interface/signature_help_options.rb +15/-12
            lib/language_server/protocol/interface/signature_help_params.rb +16/-12
            lib/language_server/protocol/interface/signature_help_registration_options.rb +18/-15
            lib/language_server/protocol/interface/signature_information.rb +3/-1
            lib/language_server/protocol/interface/static_registration_options.rb +2/-1
            lib/language_server/protocol/interface/symbol_information.rb +32/-28
            lib/language_server/protocol/interface/text_document_change_registration_options.rb +12/-13
            lib/language_server/protocol/interface/text_document_client_capabilities.rb +48/-19
            lib/language_server/protocol/interface/text_document_content_change_event.rb +4/-2
            lib/language_server/protocol/interface/text_document_edit.rb +10/-1
            lib/language_server/protocol/interface/text_document_identifier.rb +5/-2
            lib/language_server/protocol/interface/text_document_item.rb +7/-3
            lib/language_server/protocol/interface/text_document_position_params.rb +4/-0
            lib/language_server/protocol/interface/text_document_registration_options.rb +3/-3
            lib/language_server/protocol/interface/text_document_save_registration_options.rb +6/-3
            lib/language_server/protocol/interface/text_document_sync_options.rb +10/-14
            lib/language_server/protocol/interface/text_edit.rb +3/-0
            lib/language_server/protocol/interface/type_definition_client_capabilities.rb +8/-3
            lib/language_server/protocol/interface/type_definition_params.rb +2/-2
            lib/language_server/protocol/interface/type_definition_registration_options.rb +3/-3
            lib/language_server/protocol/interface/type_hierarchy_item.rb +6/-3
            lib/language_server/protocol/interface/type_hierarchy_options.rb +5/-0
            lib/language_server/protocol/interface/type_hierarchy_prepare_params.rb +5/-0
            lib/language_server/protocol/interface/type_hierarchy_registration_options.rb +8/-3
            lib/language_server/protocol/interface/type_hierarchy_subtypes_params.rb +14/-9
            lib/language_server/protocol/interface/type_hierarchy_supertypes_params.rb +14/-9
            lib/language_server/protocol/interface/unchanged_document_diagnostic_report.rb +3/-1
            lib/language_server/protocol/interface/unregistration.rb +2/-2
            lib/language_server/protocol/interface/versioned_notebook_document_identifier.rb +5/-3
            lib/language_server/protocol/interface/versioned_text_document_identifier.rb +13/-13
            lib/language_server/protocol/interface/will_save_text_document_params.rb +1/-1
            lib/language_server/protocol/interface/work_done_progress_begin.rb +4/-4
            lib/language_server/protocol/interface/work_done_progress_report.rb +4/-5
            lib/language_server/protocol/interface/workspace_diagnostic_params.rb +22/-20
            lib/language_server/protocol/interface/workspace_diagnostic_report.rb +2/-0
            lib/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rb +2/-0
            lib/language_server/protocol/interface/workspace_edit.rb +28/-17
            lib/language_server/protocol/interface/workspace_edit_client_capabilities.rb +10/-1
            lib/language_server/protocol/interface/workspace_folder.rb +4/-1
            lib/language_server/protocol/interface/workspace_folders_server_capabilities.rb +1/-1
            lib/language_server/protocol/interface/workspace_full_document_diagnostic_report.rb +23/-21
            lib/language_server/protocol/interface/workspace_symbol.rb +33/-27
            lib/language_server/protocol/interface/workspace_symbol_client_capabilities.rb +10/-4
            lib/language_server/protocol/interface/workspace_symbol_options.rb +12/-7
            lib/language_server/protocol/interface/workspace_symbol_params.rb +14/-14
            lib/language_server/protocol/interface/workspace_symbol_registration_options.rb +12/-7
            lib/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rb +23/-21
            lib/language_server/protocol/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff language_server-protocol 3.17.0.5 3.17.0.6

Diff too large (1020338 chars)

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
        lib/parser/current.rb
                --- /tmp/d20260810-7012-2v7f38/parser-3.3.11.1/lib/parser/current.rb	2026-08-10 02:35:58.166760329 +0000
                +++ /tmp/d20260810-7012-2v7f38/parser-3.3.12.0/lib/parser/current.rb	2026-08-10 02:35:58.278760719 +0000
                @@ -114 +114 @@
                -    current_version = '3.3.11'
                +    current_version = '3.3.12'
        lib/parser/version.rb
                --- /tmp/d20260810-7012-2v7f38/parser-3.3.11.1/lib/parser/version.rb	2026-08-10 02:35:58.274760705 +0000
                +++ /tmp/d20260810-7012-2v7f38/parser-3.3.12.0/lib/parser/version.rb	2026-08-10 02:35:58.320760866 +0000
                @@ -4 +4 @@
                -  VERSION = '3.3.11.1'
                +  VERSION = '3.3.12.0'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff language_server-protocol 3.17.0.5 3.17.0.6

Diff too large (1019206 chars)

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff language_server-protocol 3.17.0.5 3.17.0.6

Diff too large (1019213 chars)

@github-actions

Copy link
Copy Markdown
Contributor

gem compare parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT date:
    3.3.11.1: 2026-03-27 00:00:00 UTC
    3.3.12.0: 2026-07-16 00:00:00 UTC
  DIFFERENT metadata:
    3.3.11.1: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.11.1/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.11.1", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.11.1"}
    3.3.12.0: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.12.0/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.12.0", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.12.0"}
  DIFFERENT version:
    3.3.11.1: 3.3.11.1
    3.3.12.0: 3.3.12.0
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
            lib/parser/current.rb +1/-1
            lib/parser/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop 1.88.0 1.89.0

Compared versions: ["1.88.0", "1.89.0"]
  DIFFERENT metadata:
    1.88.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.88.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.88/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
    1.89.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.89.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.89/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
  DIFFERENT version:
    1.88.0: 1.88.0
    1.89.0: 1.89.0
  DIFFERENT files:
    1.88.0->1.89.0:
      * Added:
            lib/rubocop/cop/bundler.rb +19/-0
            lib/rubocop/cop/gemspec.rb +22/-0
            lib/rubocop/cop/generator/registration_injector.rb +188/-0
            lib/rubocop/cop/layout.rb +114/-0
            lib/rubocop/cop/lazy_loader.rb +41/-0
            lib/rubocop/cop/lint.rb +176/-0
            lib/rubocop/cop/lint/deprecated_reference.rb +185/-0
            lib/rubocop/cop/lint/name_typo.rb +223/-0
            lib/rubocop/cop/lint/unused_private_method.rb +157/-0
            lib/rubocop/cop/metrics.rb +31/-0
            lib/rubocop/cop/migration.rb +13/-0
            lib/rubocop/cop/mixin/reparsed_equivalence.rb +171/-0
            lib/rubocop/cop/naming.rb +31/-0
            lib/rubocop/cop/security.rb +19/-0
            lib/rubocop/cop/style.rb +310/-0
      * Changed:
            config/default.yml +72/-12
            lib/rubocop.rb +17/-626
            lib/rubocop/comment_config.rb +35/-19
            lib/rubocop/config.rb +53/-0
            lib/rubocop/config_validator.rb +38/-1
            lib/rubocop/cop/badge.rb +8/-0
            lib/rubocop/cop/base.rb +19/-12
            lib/rubocop/cop/bundler/gem_comment.rb +3/-1
            lib/rubocop/cop/commissioner.rb +13/-11
            lib/rubocop/cop/corrector.rb +1/-1
            lib/rubocop/cop/correctors/alignment_corrector.rb +55/-5
            lib/rubocop/cop/correctors/each_to_for_corrector.rb +1/-1
            lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7/-1
            lib/rubocop/cop/correctors/ordered_gem_corrector.rb +8/-1
            lib/rubocop/cop/gemspec/development_dependencies.rb +1/-1
            lib/rubocop/cop/gemspec/duplicated_assignment.rb +12/-2
            lib/rubocop/cop/gemspec/require_mfa.rb +4/-1
            lib/rubocop/cop/generator.rb +4/-0
            lib/rubocop/cop/layout/block_alignment.rb +17/-0
            lib/rubocop/cop/layout/class_structure.rb +14/-4
            lib/rubocop/cop/layout/comment_indentation.rb +9/-2
            lib/rubocop/cop/layout/condition_position.rb +13/-3
            lib/rubocop/cop/layout/else_alignment.rb +1/-14
            lib/rubocop/cop/layout/empty_comment.rb +8/-10
            lib/rubocop/cop/layout/empty_line_between_defs.rb +14/-1
            lib/rubocop/cop/layout/first_array_element_indentation.rb +1/-1
            lib/rubocop/cop/layout/first_hash_element_indentation.rb +13/-14
            lib/rubocop/cop/layout/indentation_width.rb +31/-1
            lib/rubocop/cop/layout/leading_comment_space.rb +27/-0
            lib/rubocop/cop/layout/line_length.rb +95/-17
            lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18/-3
            lib/rubocop/cop/layout/redundant_line_break.rb +77/-0
            lib/rubocop/cop/layout/space_around_operators.rb +6/-2
            lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +33/-34
            lib/rubocop/cop/lint/ambiguous_assignment.rb +9/-7
            lib/rubocop/cop/lint/ambiguous_block_association.rb +71/-0
            lib/rubocop/cop/lint/assignment_in_condition.rb +13/-1
            lib/rubocop/cop/lint/constant_reassignment.rb +1/-10
            lib/rubocop/cop/lint/constant_resolution.rb +25/-0
            lib/rubocop/cop/lint/debugger.rb +13/-1
            lib/rubocop/cop/lint/duplicate_methods.rb +202/-22
            lib/rubocop/cop/lint/inherit_exception.rb +51/-5
            lib/rubocop/cop/lint/literal_as_condition.rb +5/-0
            lib/rubocop/cop/lint/literal_in_interpolation.rb +1/-1
            lib/rubocop/cop/lint/missing_super.rb +31/-1
            lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +7/-0
            lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +0/-4
            lib/rubocop/cop/lint/safe_navigation_chain.rb +7/-0
            lib/rubocop/cop/lint/to_enum_arguments.rb +44/-2
            lib/rubocop/cop/lint/to_json.rb +8/-1
            lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +32/-8
            lib/rubocop/cop/lint/unreachable_code.rb +9/-4
            lib/rubocop/cop/lint/useless_numeric_operation.rb +10/-10
            lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2/-0
            lib/rubocop/cop/lint/void.rb +19/-8
            lib/rubocop/cop/metrics/method_length.rb +1/-1
            lib/rubocop/cop/metrics/perceived_complexity.rb +38/-7
            lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1/-1
            lib/rubocop/cop/migration/department_name.rb +0/-4
            lib/rubocop/cop/mixin.rb +78/-77
            lib/rubocop/cop/mixin/allowed_methods.rb +5/-5
            lib/rubocop/cop/mixin/allowed_pattern.rb +5/-1
            lib/rubocop/cop/mixin/check_line_breakable.rb +23/-5
            lib/rubocop/cop/mixin/endless_method_rewriter.rb +13/-5
            lib/rubocop/cop/mixin/forbidden_pattern.rb +5/-1
            lib/rubocop/cop/mixin/hash_alignment_styles.rb +23/-6
            lib/rubocop/cop/mixin/hash_subset.rb +8/-0
            lib/rubocop/cop/mixin/hash_transform_method.rb +4/-0
            lib/rubocop/cop/mixin/project_index_help.rb +140/-0
            lib/rubocop/cop/mixin/statement_modifier.rb +43/-7
            lib/rubocop/cop/naming/accessor_method_name.rb +24/-0
            lib/rubocop/cop/naming/file_name.rb +4/-3
            lib/rubocop/cop/naming/inclusive_language.rb +8/-2
            lib/rubocop/cop/naming/memoized_instance_variable_name.rb +9/-0
            lib/rubocop/cop/naming/predicate_prefix.rb +33/-5
            lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +9/-3
            lib/rubocop/cop/naming/variable_number.rb +3/-1
            lib/rubocop/cop/offense.rb +10/-6
            lib/rubocop/cop/registry.rb +153/-43
            lib/rubocop/cop/security/io_methods.rb +1/-1
            lib/rubocop/cop/security/marshal_load.rb +1/-1
            lib/rubocop/cop/style/accessor_grouping.rb +11/-1
            lib/rubocop/cop/style/arguments_forwarding.rb +1/-1
            lib/rubocop/cop/style/array_intersect.rb +24/-5
            lib/rubocop/cop/style/class_and_module_children.rb +78/-18
            lib/rubocop/cop/style/collection_compact.rb +1/-1
            lib/rubocop/cop/style/conditional_assignment.rb +22/-0
            lib/rubocop/cop/style/copyright.rb +6/-1
            lib/rubocop/cop/style/data_inheritance.rb +4/-0
            lib/rubocop/cop/style/def_with_parentheses.rb +6/-2
            lib/rubocop/cop/style/dir_empty.rb +4/-0
            lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +41/-3
            lib/rubocop/cop/style/documentation.rb +47/-0
            lib/rubocop/cop/style/documentation_method.rb +5/-1
            lib/rubocop/cop/style/empty_case_condition.rb +12/-2
            lib/rubocop/cop/style/empty_class_definition.rb +8/-1
            lib/rubocop/cop/style/empty_heredoc.rb +4/-0
            lib/rubocop/cop/style/empty_literal.rb +7/-2
            lib/rubocop/cop/style/empty_string_inside_interpolation.rb +30/-20
            lib/rubocop/cop/style/endless_method.rb +0/-10
            lib/rubocop/cop/style/env_home.rb +4/-0
            lib/rubocop/cop/style/even_odd.rb +11/-1
            lib/rubocop/cop/style/exact_regexp_match.rb +8/-1
            lib/rubocop/cop/style/file_null.rb +4/-2
            lib/rubocop/cop/style/format_string.rb +13/-1
            lib/rubocop/cop/style/hash_conversion.rb +14/-6
            lib/rubocop/cop/style/hash_lookup_method.rb +2/-6
            lib/rubocop/cop/style/hash_syntax.rb +2/-0
            lib/rubocop/cop/style/identical_conditional_branches.rb +15/-4
            lib/rubocop/cop/style/if_unless_modifier.rb +11/-52
            lib/rubocop/cop/style/if_with_semicolon.rb +9/-1
            lib/rubocop/cop/style/inline_comment.rb +1/-1
            lib/rubocop/cop/style/invertible_unless_condition.rb +25/-5
            lib/rubocop/cop/style/keyword_arguments_merging.rb +4/-0
            lib/rubocop/cop/style/keyword_parameters_order.rb +7/-3
            lib/rubocop/cop/style/lambda.rb +11/-1
            lib/rubocop/cop/style/lambda_call.rb +11/-0
            lib/rubocop/cop/style/map_compact_with_conditional_block.rb +11/-0
            lib/rubocop/cop/style/map_into_array.rb +1/-1
            lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +20/-3
            lib/rubocop/cop/style/method_call_without_args_parentheses.rb +11/-5
            lib/rubocop/cop/style/method_def_parentheses.rb +5/-1
            lib/rubocop/cop/style/min_max_comparison.rb +3/-0
            lib/rubocop/cop/style/missing_respond_to_missing.rb +40/-7
            lib/rubocop/cop/style/mixin_usage.rb +1/-1
            lib/rubocop/cop/style/module_function.rb +4/-2
            lib/rubocop/cop/style/multiline_if_then.rb +7/-1
            lib/rubocop/cop/style/multiline_memoization.rb +7/-1
            lib/rubocop/cop/style/multiline_method_signature.rb +11/-4
            lib/rubocop/cop/style/multiple_comparison.rb +33/-22
            lib/rubocop/cop/style/mutable_constant.rb +5/-0
            lib/rubocop/cop/style/negative_array_index.rb +3/-1
            lib/rubocop/cop/style/nil_lambda.rb +8/-0
            lib/rubocop/cop/style/numeric_predicate.rb +1/-1
            lib/rubocop/cop/style/open_struct_use.rb +1/-1
            lib/rubocop/cop/style/option_hash.rb +1/-1
            lib/rubocop/cop/style/optional_arguments.rb +1/-0
            lib/rubocop/cop/style/parallel_assignment.rb +11/-2
            lib/rubocop/cop/style/percent_literal_delimiters.rb +2/-0
            lib/rubocop/cop/style/perl_backrefs.rb +5/-3
            lib/rubocop/cop/style/redundant_assignment.rb +11/-0
            lib/rubocop/cop/style/redundant_constant_base.rb +37/-1
            lib/rubocop/cop/style/redundant_current_directory_in_path.rb +13/-1
            lib/rubocop/cop/style/redundant_exception.rb +6/-0
            lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9/-0
            lib/rubocop/cop/style/redundant_filter_chain.rb +1/-1
            lib/rubocop/cop/style/redundant_format.rb +40/-3
            lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +6/-1
            lib/rubocop/cop/style/redundant_line_continuation.rb +80/-129
            lib/rubocop/cop/style/redundant_parentheses.rb +63/-63
            lib/rubocop/cop/style/redundant_regexp_escape.rb +8/-4
            lib/rubocop/cop/style/redundant_self.rb +9/-0
            lib/rubocop/cop/style/redundant_struct_keyword_init.rb +23/-4
            lib/rubocop/cop/style/safe_navigation.rb +10/-0
            lib/rubocop/cop/style/semicolon.rb +4/-4
            lib/rubocop/cop/style/single_line_do_end_block.rb +17/-4
            lib/rubocop/cop/style/sole_nested_conditional.rb +20/-3
            lib/rubocop/cop/style/static_class.rb +21/-0
            lib/rubocop/cop/style/string_hash_keys.rb +1/-0
            lib/rubocop/cop/style/struct_inheritance.rb +3/-1
            lib/rubocop/cop/style/ternary_parentheses.rb +11/-0
            lib/rubocop/cop/style/trailing_underscore_variable.rb +7/-8
            lib/rubocop/cop/style/trivial_accessors.rb +1/-1
            lib/rubocop/cop/team.rb +66/-7
            lib/rubocop/cop/variable_force/variable.rb +18/-6
            lib/rubocop/cops_documentation_generator.rb +1/-1
            lib/rubocop/directive_comment.rb +2/-0
            lib/rubocop/feature_loader.rb +0/-6
            lib/rubocop/lsp/routes.rb +41/-3
            lib/rubocop/lsp/runtime.rb +4/-0
            lib/rubocop/lsp/server.rb +4/-0
            lib/rubocop/lsp/stdin_runner.rb +20/-0
            lib/rubocop/pending_cops_reporter.rb +1/-6
            lib/rubocop/project_index_loader.rb +16/-0
            lib/rubocop/result_cache.rb +6/-4
            lib/rubocop/rspec/shared_contexts.rb +14/-2
            lib/rubocop/runner.rb +100/-33
            lib/rubocop/server/cache.rb +10/-5
            lib/rubocop/target_ruby.rb +1/-1
            lib/rubocop/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT date:
    3.3.11.1: 2026-03-27 00:00:00 UTC
    3.3.12.0: 2026-07-16 00:00:00 UTC
  DIFFERENT metadata:
    3.3.11.1: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.11.1/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.11.1", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.11.1"}
    3.3.12.0: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.12.0/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.12.0", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.12.0"}
  DIFFERENT version:
    3.3.11.1: 3.3.11.1
    3.3.12.0: 3.3.12.0
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
            lib/parser/current.rb +1/-1
            lib/parser/version.rb +1/-1

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

gem compare parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT date:
    3.3.11.1: 2026-03-27 00:00:00 UTC
    3.3.12.0: 2026-07-16 00:00:00 UTC
  DIFFERENT metadata:
    3.3.11.1: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.11.1/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.11.1", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.11.1"}
    3.3.12.0: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.12.0/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.12.0", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.12.0"}
  DIFFERENT version:
    3.3.11.1: 3.3.11.1
    3.3.12.0: 3.3.12.0
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
            lib/parser/current.rb +1/-1
            lib/parser/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop 1.88.0 1.89.0

Diff too large (526009 chars)

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
        lib/parser/current.rb
                --- /tmp/d20260810-7011-x621oj/parser-3.3.11.1/lib/parser/current.rb	2026-08-10 02:36:29.078353653 +0000
                +++ /tmp/d20260810-7011-x621oj/parser-3.3.12.0/lib/parser/current.rb	2026-08-10 02:36:29.160353780 +0000
                @@ -114 +114 @@
                -    current_version = '3.3.11'
                +    current_version = '3.3.12'
        lib/parser/version.rb
                --- /tmp/d20260810-7011-x621oj/parser-3.3.11.1/lib/parser/version.rb	2026-08-10 02:36:29.155353772 +0000
                +++ /tmp/d20260810-7011-x621oj/parser-3.3.12.0/lib/parser/version.rb	2026-08-10 02:36:29.284353973 +0000
                @@ -4 +4 @@
                -  VERSION = '3.3.11.1'
                +  VERSION = '3.3.12.0'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
        lib/parser/current.rb
                --- /tmp/d20260810-7211-twxpil/parser-3.3.11.1/lib/parser/current.rb	2026-08-10 02:36:37.517643677 +0000
                +++ /tmp/d20260810-7211-twxpil/parser-3.3.12.0/lib/parser/current.rb	2026-08-10 02:36:37.663644269 +0000
                @@ -114 +114 @@
                -    current_version = '3.3.11'
                +    current_version = '3.3.12'
        lib/parser/version.rb
                --- /tmp/d20260810-7211-twxpil/parser-3.3.11.1/lib/parser/version.rb	2026-08-10 02:36:37.659644253 +0000
                +++ /tmp/d20260810-7211-twxpil/parser-3.3.12.0/lib/parser/version.rb	2026-08-10 02:36:37.718644492 +0000
                @@ -4 +4 @@
                -  VERSION = '3.3.11.1'
                +  VERSION = '3.3.12.0'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
        lib/parser/current.rb
                --- /tmp/d20260810-7010-whw9c6/parser-3.3.11.1/lib/parser/current.rb	2026-08-10 02:36:39.758623256 +0000
                +++ /tmp/d20260810-7010-whw9c6/parser-3.3.12.0/lib/parser/current.rb	2026-08-10 02:36:39.888622259 +0000
                @@ -114 +114 @@
                -    current_version = '3.3.11'
                +    current_version = '3.3.12'
        lib/parser/version.rb
                --- /tmp/d20260810-7010-whw9c6/parser-3.3.11.1/lib/parser/version.rb	2026-08-10 02:36:39.884622290 +0000
                +++ /tmp/d20260810-7010-whw9c6/parser-3.3.12.0/lib/parser/version.rb	2026-08-10 02:36:39.933621914 +0000
                @@ -4 +4 @@
                -  VERSION = '3.3.11.1'
                +  VERSION = '3.3.12.0'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT version:
    1.49.1: 1.49.1
    1.50.0: 1.50.0
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
            lib/rubocop/ast/node.rb +30/-7
            lib/rubocop/ast/node/and_node.rb +2/-2
            lib/rubocop/ast/node/case_match_node.rb +1/-1
            lib/rubocop/ast/node/case_node.rb +1/-1
            lib/rubocop/ast/node/for_node.rb +1/-1
            lib/rubocop/ast/node/hash_node.rb +6/-6
            lib/rubocop/ast/node/if_node.rb +1/-1
            lib/rubocop/ast/node/mixin/descendence.rb +21/-4
            lib/rubocop/ast/node/mixin/method_dispatch_node.rb +1/-1
            lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +5/-5
            lib/rubocop/ast/node/mixin/numeric_node.rb +1/-1
            lib/rubocop/ast/node/pair_node.rb +1/-1
            lib/rubocop/ast/node/symbol_node.rb +1/-1
            lib/rubocop/ast/node/when_node.rb +1/-1
            lib/rubocop/ast/node/while_node.rb +2/-2
            lib/rubocop/ast/processed_source.rb +133/-21
            lib/rubocop/ast/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff parser 3.3.11.1 3.3.12.0

Compared versions: ["3.3.11.1", "3.3.12.0"]
  DIFFERENT files:
    3.3.11.1->3.3.12.0:
      * Changed:
        lib/parser/current.rb
                --- /tmp/d20260810-7050-jvsoim/parser-3.3.11.1/lib/parser/current.rb	2026-08-10 02:36:41.060832922 +0000
                +++ /tmp/d20260810-7050-jvsoim/parser-3.3.12.0/lib/parser/current.rb	2026-08-10 02:36:41.111833213 +0000
                @@ -114 +114 @@
                -    current_version = '3.3.11'
                +    current_version = '3.3.12'
        lib/parser/version.rb
                --- /tmp/d20260810-7050-jvsoim/parser-3.3.11.1/lib/parser/version.rb	2026-08-10 02:36:41.108833195 +0000
                +++ /tmp/d20260810-7050-jvsoim/parser-3.3.12.0/lib/parser/version.rb	2026-08-10 02:36:41.225833863 +0000
                @@ -4 +4 @@
                -  VERSION = '3.3.11.1'
                +  VERSION = '3.3.12.0'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
        lib/rubocop/ast/node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node.rb	2026-08-10 02:36:52.702945589 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node.rb	2026-08-10 02:36:52.722945656 +0000
                @@ -78,0 +79,7 @@
                +      # The node types which could have a source matching `SPECIAL_KEYWORDS`:
                +      # `__FILE__` parses as `str`, `__LINE__` as `int` and `__ENCODING__` as
                +      # `const` (or as their own node types when the builder emits them);
                +      # `str` and `sym` also cover word/symbol array elements, string parts
                +      # and hash labels spelling out one of these keywords.
                +      SPECIAL_KEYWORD_TYPES = %i[str sym int const __FILE__ __LINE__ __ENCODING__].to_set.freeze
                +      private_constant :SPECIAL_KEYWORD_TYPES
                @@ -174,0 +182,7 @@
                +        type_in?(types)
                +      end
                +
                +      # Non-splatting variant of `type?`, used by the traversal hot paths to
                +      # avoid allocating an array per visited node.
                +      # @api private
                +      def type_in?(types)
                @@ -290 +304 @@
                -      # @return [Array<Node>] the different parts of the ndde
                +      # @return [Array<Node>] the different parts of the node
                @@ -506 +520 @@
                -        SPECIAL_KEYWORDS.include?(source)
                +        SPECIAL_KEYWORD_TYPES.include?(type) && SPECIAL_KEYWORDS.include?(source)
                @@ -522 +536 @@
                -        parent&.call_type? && eql?(parent.receiver)
                +        parent&.call_type? && equal?(parent.receiver)
                @@ -526 +540,3 @@
                -        parent&.send_type? && parent.arguments.include?(self)
                +        return false unless parent&.send_type?
                +
                +        parent.arguments.any? { |argument| argument.equal?(self) }
                @@ -698,3 +714,10 @@
                -        while (current_node = last_node.parent)
                -          yield current_node if types.empty? || current_node.type?(*types)
                -          last_node = current_node
                +        if types.empty?
                +          while (current_node = last_node.parent)
                +            yield current_node
                +            last_node = current_node
                +          end
                +        else
                +          while (current_node = last_node.parent)
                +            yield current_node if current_node.type_in?(types)
                +            last_node = current_node
                +          end
        lib/rubocop/ast/node/and_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:36:52.703945592 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:36:52.723945659 +0000
                @@ -5 +5 @@
                -    # A node extension for `until` nodes. This will be used in place of a plain
                +    # A node extension for `and` nodes. This will be used in place of a plain
                @@ -7 +7 @@
                -    # to all `until` nodes within RuboCop.
                +    # to all `and` nodes within RuboCop.
        lib/rubocop/ast/node/case_match_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:36:52.705945599 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:36:52.724945663 +0000
                @@ -20 +20 @@
                -        return in_pattern_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/case_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:36:52.705945599 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:36:52.724945663 +0000
                @@ -20 +20 @@
                -        return when_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/for_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:36:52.707945605 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:36:52.726945669 +0000
                @@ -11 +11 @@
                -      # @return [String] the keyword of the `until` statement
                +      # @return [String] the keyword of the `for` statement
        lib/rubocop/ast/node/hash_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:36:52.707945605 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:36:52.726945669 +0000
                @@ -59,2 +59,2 @@
                -      def each_key(&block)
                -        return pairs.map(&:key).to_enum unless block
                +      def each_key
                +        return to_enum(__method__) unless block_given?
                @@ -62 +62 @@
                -        pairs.map(&:key).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.key }
                @@ -83,2 +83,2 @@
                -      def each_value(&block)
                -        return pairs.map(&:value).to_enum unless block
                +      def each_value
                +        return to_enum(__method__) unless block_given?
                @@ -86 +86 @@
                -        pairs.map(&:value).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.value }
        lib/rubocop/ast/node/if_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:36:52.707945605 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:36:52.726945669 +0000
                @@ -172 +172 @@
                -        return branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/mixin/descendence.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:36:52.710945616 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:36:52.729945679 +0000
                @@ -28 +28 @@
                -          yield child if types.empty? || child.type?(*types)
                +          yield child if types.empty? || child.type_in?(types)
                @@ -98 +98 @@
                -        yield self if types.empty? || type?(*types)
                +        yield self if types.empty? || type_in?(types)
                @@ -107,0 +108,17 @@
                +        if types.empty?
                +          visit_all_descendants(&block)
                +        else
                +          visit_descendants_of_types(types, &block)
                +        end
                +      end
                +
                +      def visit_all_descendants(&block)
                +        children.each do |child|
                +          next unless child.is_a?(::AST::Node)
                +
                +          yield child
                +          child.visit_all_descendants(&block)
                +        end
                +      end
                +
                +      def visit_descendants_of_types(types, &block)
                @@ -111,2 +128,2 @@
                -          yield child if types.empty? || child.type?(*types)
                -          child.visit_descendants(types, &block)
                +          yield child if child.type_in?(types)
                +          child.visit_descendants_of_types(types, &block)
        lib/rubocop/ast/node/mixin/method_dispatch_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:36:52.710945616 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:36:52.729945679 +0000
                @@ -168 +168 @@
                -        parent&.any_block_type? && eql?(parent.send_node)
                +        parent&.any_block_type? && equal?(parent.send_node)
        lib/rubocop/ast/node/mixin/method_identifier_predicates.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:36:52.710945616 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:36:52.729945679 +0000
                @@ -143 +143 @@
                -        !comparison_method? && method_name.to_s.end_with?('=')
                +        !comparison_method? && method_name.end_with?('=')
                @@ -151 +151 @@
                -          method_name.to_s.start_with?('each_')
                +          method_name.start_with?('each_')
                @@ -165 +165 @@
                -        method_name.to_s.end_with?('?')
                +        method_name.end_with?('?')
                @@ -172 +172 @@
                -        method_name.to_s.end_with?('!')
                +        method_name.end_with?('!')
                @@ -180 +180 @@
                -        method_name.to_s =~ /\A[A-Z]/
                +        method_name.match?(/\A[A-Z]/)
        lib/rubocop/ast/node/mixin/numeric_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:36:52.710945616 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:36:52.729945679 +0000
                @@ -10 +10 @@
                -      # Checks whether this is literal has a sign.
                +      # Checks whether this literal has a sign.
        lib/rubocop/ast/node/pair_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:36:52.712945622 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:36:52.731945686 +0000
                @@ -35 +35 @@
                -      # colon delimited `pair` and `:` for a hash rocket delimited `pair`.
                +      # hash rocket delimited `pair` and `:` for a colon delimited `pair`.
        lib/rubocop/ast/node/symbol_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:36:52.714945629 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:36:52.733945693 +0000
                @@ -5 +5 @@
                -    # A node extension for `sym` nodes. This will be used in  place of a
                +    # A node extension for `sym` nodes. This will be used in place of a
        lib/rubocop/ast/node/when_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:36:52.714945629 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:36:52.733945693 +0000
                @@ -18 +18 @@
                -        return conditions.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/while_node.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:36:52.714945629 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:36:52.733945693 +0000
                @@ -27 +27 @@
                -      # Checks whether the `until` node has a `do` keyword.
                +      # Checks whether the `while` node has a `do` keyword.
                @@ -29 +29 @@
                -      # @return [Boolean] whether the `until` node has a `do` keyword
                +      # @return [Boolean] whether the `while` node has a `do` keyword
        lib/rubocop/ast/processed_source.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/processed_source.rb	2026-08-10 02:36:52.719945646 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/processed_source.rb	2026-08-10 02:36:52.737945706 +0000
                @@ -27,0 +28,38 @@
                +    # Extends the prism translation parsers so that the conversion of tokens
                +    # into the `parser` gem's format is deferred until the tokens are first
                +    # accessed. Building the tokens is a significant part of the translation
                +    # cost, and not every caller needs them.
                +    # @api private
                +    module PrismLazyTokens
                +      # Same contract as `Parser::Base#tokenize`, except the tokens are
                +      # returned as a callable that performs the conversion when invoked.
                +      def tokenize_deferred(source_buffer)
                +        @source_buffer = source_buffer
                +        source = source_buffer.source
                +
                +        offset_cache = build_offset_cache(source)
                +        result = unwrap(@parser.parse_lex(source, **prism_options), offset_cache)
                +
                +        program, tokens = result.value
                +        ast = build_ast(program, offset_cache) if result.success?
                +        comments = build_comments(result.comments, offset_cache)
                +
                +        [ast, comments, deferred_tokens(source_buffer, tokens, offset_cache)]
                +      ensure
                +        @source_buffer = nil
                +      end
                +
                +      private
                +
                +      def deferred_tokens(source_buffer, tokens, offset_cache)
                +        lambda do
                +          @source_buffer = source_buffer
                +          begin
                +            build_tokens(tokens, offset_cache)
                +          ensure
                +            @source_buffer = nil
                +          end
                +        end
                +      end
                +    end
                +
                @@ -41 +79 @@
                -      attr_reader :path, :buffer, :ast, :comments, :tokens, :diagnostics,
                +      attr_reader :path, :buffer, :ast, :comments, :diagnostics,
                @@ -48,0 +87,7 @@
                +      # Subclasses of the prism translation parsers with lazily built tokens.
                +      # @api private
                +      def self.lazy_tokens_parser_class(base)
                +        @lazy_tokens_parser_classes ||= {}
                +        @lazy_tokens_parser_classes[base] ||= Class.new(base) { include PrismLazyTokens }
                +      end
                +
                @@ -57 +102 @@
                -        (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                +        source = (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                @@ -80,6 +125,6 @@
                -          last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                -          result = []
                -          all_lines.each_with_index do |line, ix|
                -            break if ix >= last_token_line && line == '__END__'
                -
                -            result << line
                +          if all_lines.include?('__END__')
                +            trim_lines_after_data_marker(all_lines)
                +          else
                +            # Don't consult the tokens (which may have to be built first) when
                +            # the source can't contain a data section.
                +            all_lines.dup
                @@ -87 +131,0 @@
                -          result
                @@ -103 +147 @@
                -        Digest::SHA1.hexdigest(@raw_source)
                +        @checksum ||= Digest::SHA1.hexdigest(@raw_source)
                @@ -175,0 +220,2 @@
                +        return nil if token.line < 2
                +
                @@ -193,0 +240,13 @@
                +      # The tokens of the source. With the prism engine the tokens are built
                +      # lazily on first access, since their conversion is costly and not
                +      # every caller needs them.
                +      def tokens
                +        @tokens ||= begin
                +          tokens = parser_tokens.map { |t| Token.from_parser_token(t) }
                +          # The parser tokens are no longer needed, and the deferred conversion
                +          # holds on to the parser instance, so release both.
                +          @parser_tokens = nil
                +          tokens
                +        end
                +      end
                +
                @@ -212,2 +271,9 @@
                -        # Use stable sort.
                -        @sorted_tokens ||= tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +        # Most sources have their tokens already in order, in which case
                +        # sorting can be skipped entirely. Callers only ever read from the
                +        # returned array, so it is safe to reuse `tokens` as is.
                +        @sorted_tokens ||= if tokens_sorted?
                +                             tokens
                +                           else
                +                             # Use stable sort.
                +                             tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +                           end
                @@ -217,0 +284,17 @@
                +      def tokens_sorted?
                +        tokens.each_cons(2).all? { |a, b| a.begin_pos <= b.begin_pos }
                +      end
                +
                +      # `__END__` only starts a data section when it isn't nested inside a
                +      # string or heredoc, which is what the last token's line disambiguates.
                +      def trim_lines_after_data_marker(all_lines)
                +        last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                +        result = []
                +        all_lines.each_with_index do |line, ix|
                +          break if ix >= last_token_line && line == '__END__'
                +
                +          result << line
                +        end
                +        result
                +      end
                +
                @@ -225,2 +308 @@
                -        buffer_name = @path || STRING_SOURCE_NAME
                -        @buffer = Parser::Source::Buffer.new(buffer_name, 1)
                +        @buffer = Parser::Source::Buffer.new(@path || STRING_SOURCE_NAME, 1)
                @@ -240 +322,12 @@
                -        @ast, @comments, @tokens = tokenize(parser)
                +        @ast, @comments, tokens = tokenize(parser)
                +        store_tokens(tokens)
                +      end
                +
                +      # The tokens may be an already converted array, or a deferred conversion
                +      # to be performed when the tokens are first accessed.
                +      def store_tokens(tokens)
                +        if tokens.is_a?(Proc)
                +          @deferred_parser_tokens = tokens
                +        else
                +          @parser_tokens = tokens
                +        end
                @@ -245 +338 @@
                -          ast, comments, tokens = parser.tokenize(@buffer)
                +          ast, comments, tokens = parse_and_lex(parser)
                @@ -254 +346,0 @@
                -        tokens.map! { |t| Token.from_parser_token(t) }
                @@ -258,0 +351,17 @@
                +      def parse_and_lex(parser)
                +        if parser.respond_to?(:tokenize_deferred)
                +          parser.tokenize_deferred(@buffer)
                +        else
                +          parser.tokenize(@buffer)
                +        end
                +      end
                +
                +      def parser_tokens
                +        if @deferred_parser_tokens
                +          @parser_tokens = @deferred_parser_tokens.call
                +          @deferred_parser_tokens = nil
                +        end
                +
                +        @parser_tokens
                +      end
                +
                @@ -342,0 +452,3 @@
                +        parser_class = self.class.lazy_tokens_parser_class(parser_class) if
                +          parser_engine == :parser_prism
                +
                @@ -381,3 +493,3 @@
                -      # The Parser gem does not support Ruby 3.5 or later.
                -      # It is also not fully compatible with Ruby 3.4 but for
                -      # now respects using parser for backwards compatibility.
                +      # Prism is used for all Ruby versions it can parse (3.3 and later);
                +      # the Parser gem does not support Ruby 3.5 or later and is not fully
                +      # compatible with Ruby 3.4.
                @@ -385 +497 @@
                -        if ruby_version >= 3.4
                +        if ruby_version >= 3.3
        lib/rubocop/ast/version.rb
                --- /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.49.1/lib/rubocop/ast/version.rb	2026-08-10 02:36:52.720945649 +0000
                +++ /tmp/d20260810-15411-gxdyfc/rubocop-ast-1.50.0/lib/rubocop/ast/version.rb	2026-08-10 02:36:52.739945713 +0000
                @@ -6 +6 @@
                -      STRING = '1.49.1'
                +      STRING = '1.50.0'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop 1.88.0 1.89.0

Compared versions: ["1.88.0", "1.89.0"]
  DIFFERENT metadata:
    1.88.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.88.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.88/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
    1.89.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.89.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.89/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
  DIFFERENT version:
    1.88.0: 1.88.0
    1.89.0: 1.89.0
  DIFFERENT files:
    1.88.0->1.89.0:
      * Added:
            lib/rubocop/cop/bundler.rb +19/-0
            lib/rubocop/cop/gemspec.rb +22/-0
            lib/rubocop/cop/generator/registration_injector.rb +188/-0
            lib/rubocop/cop/layout.rb +114/-0
            lib/rubocop/cop/lazy_loader.rb +41/-0
            lib/rubocop/cop/lint.rb +176/-0
            lib/rubocop/cop/lint/deprecated_reference.rb +185/-0
            lib/rubocop/cop/lint/name_typo.rb +223/-0
            lib/rubocop/cop/lint/unused_private_method.rb +157/-0
            lib/rubocop/cop/metrics.rb +31/-0
            lib/rubocop/cop/migration.rb +13/-0
            lib/rubocop/cop/mixin/reparsed_equivalence.rb +171/-0
            lib/rubocop/cop/naming.rb +31/-0
            lib/rubocop/cop/security.rb +19/-0
            lib/rubocop/cop/style.rb +310/-0
      * Changed:
            config/default.yml +72/-12
            lib/rubocop.rb +17/-626
            lib/rubocop/comment_config.rb +35/-19
            lib/rubocop/config.rb +53/-0
            lib/rubocop/config_validator.rb +38/-1
            lib/rubocop/cop/badge.rb +8/-0
            lib/rubocop/cop/base.rb +19/-12
            lib/rubocop/cop/bundler/gem_comment.rb +3/-1
            lib/rubocop/cop/commissioner.rb +13/-11
            lib/rubocop/cop/corrector.rb +1/-1
            lib/rubocop/cop/correctors/alignment_corrector.rb +55/-5
            lib/rubocop/cop/correctors/each_to_for_corrector.rb +1/-1
            lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7/-1
            lib/rubocop/cop/correctors/ordered_gem_corrector.rb +8/-1
            lib/rubocop/cop/gemspec/development_dependencies.rb +1/-1
            lib/rubocop/cop/gemspec/duplicated_assignment.rb +12/-2
            lib/rubocop/cop/gemspec/require_mfa.rb +4/-1
            lib/rubocop/cop/generator.rb +4/-0
            lib/rubocop/cop/layout/block_alignment.rb +17/-0
            lib/rubocop/cop/layout/class_structure.rb +14/-4
            lib/rubocop/cop/layout/comment_indentation.rb +9/-2
            lib/rubocop/cop/layout/condition_position.rb +13/-3
            lib/rubocop/cop/layout/else_alignment.rb +1/-14
            lib/rubocop/cop/layout/empty_comment.rb +8/-10
            lib/rubocop/cop/layout/empty_line_between_defs.rb +14/-1
            lib/rubocop/cop/layout/first_array_element_indentation.rb +1/-1
            lib/rubocop/cop/layout/first_hash_element_indentation.rb +13/-14
            lib/rubocop/cop/layout/indentation_width.rb +31/-1
            lib/rubocop/cop/layout/leading_comment_space.rb +27/-0
            lib/rubocop/cop/layout/line_length.rb +95/-17
            lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18/-3
            lib/rubocop/cop/layout/redundant_line_break.rb +77/-0
            lib/rubocop/cop/layout/space_around_operators.rb +6/-2
            lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +33/-34
            lib/rubocop/cop/lint/ambiguous_assignment.rb +9/-7
            lib/rubocop/cop/lint/ambiguous_block_association.rb +71/-0
            lib/rubocop/cop/lint/assignment_in_condition.rb +13/-1
            lib/rubocop/cop/lint/constant_reassignment.rb +1/-10
            lib/rubocop/cop/lint/constant_resolution.rb +25/-0
            lib/rubocop/cop/lint/debugger.rb +13/-1
            lib/rubocop/cop/lint/duplicate_methods.rb +202/-22
            lib/rubocop/cop/lint/inherit_exception.rb +51/-5
            lib/rubocop/cop/lint/literal_as_condition.rb +5/-0
            lib/rubocop/cop/lint/literal_in_interpolation.rb +1/-1
            lib/rubocop/cop/lint/missing_super.rb +31/-1
            lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +7/-0
            lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +0/-4
            lib/rubocop/cop/lint/safe_navigation_chain.rb +7/-0
            lib/rubocop/cop/lint/to_enum_arguments.rb +44/-2
            lib/rubocop/cop/lint/to_json.rb +8/-1
            lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +32/-8
            lib/rubocop/cop/lint/unreachable_code.rb +9/-4
            lib/rubocop/cop/lint/useless_numeric_operation.rb +10/-10
            lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2/-0
            lib/rubocop/cop/lint/void.rb +19/-8
            lib/rubocop/cop/metrics/method_length.rb +1/-1
            lib/rubocop/cop/metrics/perceived_complexity.rb +38/-7
            lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1/-1
            lib/rubocop/cop/migration/department_name.rb +0/-4
            lib/rubocop/cop/mixin.rb +78/-77
            lib/rubocop/cop/mixin/allowed_methods.rb +5/-5
            lib/rubocop/cop/mixin/allowed_pattern.rb +5/-1
            lib/rubocop/cop/mixin/check_line_breakable.rb +23/-5
            lib/rubocop/cop/mixin/endless_method_rewriter.rb +13/-5
            lib/rubocop/cop/mixin/forbidden_pattern.rb +5/-1
            lib/rubocop/cop/mixin/hash_alignment_styles.rb +23/-6
            lib/rubocop/cop/mixin/hash_subset.rb +8/-0
            lib/rubocop/cop/mixin/hash_transform_method.rb +4/-0
            lib/rubocop/cop/mixin/project_index_help.rb +140/-0
            lib/rubocop/cop/mixin/statement_modifier.rb +43/-7
            lib/rubocop/cop/naming/accessor_method_name.rb +24/-0
            lib/rubocop/cop/naming/file_name.rb +4/-3
            lib/rubocop/cop/naming/inclusive_language.rb +8/-2
            lib/rubocop/cop/naming/memoized_instance_variable_name.rb +9/-0
            lib/rubocop/cop/naming/predicate_prefix.rb +33/-5
            lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +9/-3
            lib/rubocop/cop/naming/variable_number.rb +3/-1
            lib/rubocop/cop/offense.rb +10/-6
            lib/rubocop/cop/registry.rb +153/-43
            lib/rubocop/cop/security/io_methods.rb +1/-1
            lib/rubocop/cop/security/marshal_load.rb +1/-1
            lib/rubocop/cop/style/accessor_grouping.rb +11/-1
            lib/rubocop/cop/style/arguments_forwarding.rb +1/-1
            lib/rubocop/cop/style/array_intersect.rb +24/-5
            lib/rubocop/cop/style/class_and_module_children.rb +78/-18
            lib/rubocop/cop/style/collection_compact.rb +1/-1
            lib/rubocop/cop/style/conditional_assignment.rb +22/-0
            lib/rubocop/cop/style/copyright.rb +6/-1
            lib/rubocop/cop/style/data_inheritance.rb +4/-0
            lib/rubocop/cop/style/def_with_parentheses.rb +6/-2
            lib/rubocop/cop/style/dir_empty.rb +4/-0
            lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +41/-3
            lib/rubocop/cop/style/documentation.rb +47/-0
            lib/rubocop/cop/style/documentation_method.rb +5/-1
            lib/rubocop/cop/style/empty_case_condition.rb +12/-2
            lib/rubocop/cop/style/empty_class_definition.rb +8/-1
            lib/rubocop/cop/style/empty_heredoc.rb +4/-0
            lib/rubocop/cop/style/empty_literal.rb +7/-2
            lib/rubocop/cop/style/empty_string_inside_interpolation.rb +30/-20
            lib/rubocop/cop/style/endless_method.rb +0/-10
            lib/rubocop/cop/style/env_home.rb +4/-0
            lib/rubocop/cop/style/even_odd.rb +11/-1
            lib/rubocop/cop/style/exact_regexp_match.rb +8/-1
            lib/rubocop/cop/style/file_null.rb +4/-2
            lib/rubocop/cop/style/format_string.rb +13/-1
            lib/rubocop/cop/style/hash_conversion.rb +14/-6
            lib/rubocop/cop/style/hash_lookup_method.rb +2/-6
            lib/rubocop/cop/style/hash_syntax.rb +2/-0
            lib/rubocop/cop/style/identical_conditional_branches.rb +15/-4
            lib/rubocop/cop/style/if_unless_modifier.rb +11/-52
            lib/rubocop/cop/style/if_with_semicolon.rb +9/-1
            lib/rubocop/cop/style/inline_comment.rb +1/-1
            lib/rubocop/cop/style/invertible_unless_condition.rb +25/-5
            lib/rubocop/cop/style/keyword_arguments_merging.rb +4/-0
            lib/rubocop/cop/style/keyword_parameters_order.rb +7/-3
            lib/rubocop/cop/style/lambda.rb +11/-1
            lib/rubocop/cop/style/lambda_call.rb +11/-0
            lib/rubocop/cop/style/map_compact_with_conditional_block.rb +11/-0
            lib/rubocop/cop/style/map_into_array.rb +1/-1
            lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +20/-3
            lib/rubocop/cop/style/method_call_without_args_parentheses.rb +11/-5
            lib/rubocop/cop/style/method_def_parentheses.rb +5/-1
            lib/rubocop/cop/style/min_max_comparison.rb +3/-0
            lib/rubocop/cop/style/missing_respond_to_missing.rb +40/-7
            lib/rubocop/cop/style/mixin_usage.rb +1/-1
            lib/rubocop/cop/style/module_function.rb +4/-2
            lib/rubocop/cop/style/multiline_if_then.rb +7/-1
            lib/rubocop/cop/style/multiline_memoization.rb +7/-1
            lib/rubocop/cop/style/multiline_method_signature.rb +11/-4
            lib/rubocop/cop/style/multiple_comparison.rb +33/-22
            lib/rubocop/cop/style/mutable_constant.rb +5/-0
            lib/rubocop/cop/style/negative_array_index.rb +3/-1
            lib/rubocop/cop/style/nil_lambda.rb +8/-0
            lib/rubocop/cop/style/numeric_predicate.rb +1/-1
            lib/rubocop/cop/style/open_struct_use.rb +1/-1
            lib/rubocop/cop/style/option_hash.rb +1/-1
            lib/rubocop/cop/style/optional_arguments.rb +1/-0
            lib/rubocop/cop/style/parallel_assignment.rb +11/-2
            lib/rubocop/cop/style/percent_literal_delimiters.rb +2/-0
            lib/rubocop/cop/style/perl_backrefs.rb +5/-3
            lib/rubocop/cop/style/redundant_assignment.rb +11/-0
            lib/rubocop/cop/style/redundant_constant_base.rb +37/-1
            lib/rubocop/cop/style/redundant_current_directory_in_path.rb +13/-1
            lib/rubocop/cop/style/redundant_exception.rb +6/-0
            lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9/-0
            lib/rubocop/cop/style/redundant_filter_chain.rb +1/-1
            lib/rubocop/cop/style/redundant_format.rb +40/-3
            lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +6/-1
            lib/rubocop/cop/style/redundant_line_continuation.rb +80/-129
            lib/rubocop/cop/style/redundant_parentheses.rb +63/-63
            lib/rubocop/cop/style/redundant_regexp_escape.rb +8/-4
            lib/rubocop/cop/style/redundant_self.rb +9/-0
            lib/rubocop/cop/style/redundant_struct_keyword_init.rb +23/-4
            lib/rubocop/cop/style/safe_navigation.rb +10/-0
            lib/rubocop/cop/style/semicolon.rb +4/-4
            lib/rubocop/cop/style/single_line_do_end_block.rb +17/-4
            lib/rubocop/cop/style/sole_nested_conditional.rb +20/-3
            lib/rubocop/cop/style/static_class.rb +21/-0
            lib/rubocop/cop/style/string_hash_keys.rb +1/-0
            lib/rubocop/cop/style/struct_inheritance.rb +3/-1
            lib/rubocop/cop/style/ternary_parentheses.rb +11/-0
            lib/rubocop/cop/style/trailing_underscore_variable.rb +7/-8
            lib/rubocop/cop/style/trivial_accessors.rb +1/-1
            lib/rubocop/cop/team.rb +66/-7
            lib/rubocop/cop/variable_force/variable.rb +18/-6
            lib/rubocop/cops_documentation_generator.rb +1/-1
            lib/rubocop/directive_comment.rb +2/-0
            lib/rubocop/feature_loader.rb +0/-6
            lib/rubocop/lsp/routes.rb +41/-3
            lib/rubocop/lsp/runtime.rb +4/-0
            lib/rubocop/lsp/server.rb +4/-0
            lib/rubocop/lsp/stdin_runner.rb +20/-0
            lib/rubocop/pending_cops_reporter.rb +1/-6
            lib/rubocop/project_index_loader.rb +16/-0
            lib/rubocop/result_cache.rb +6/-4
            lib/rubocop/rspec/shared_contexts.rb +14/-2
            lib/rubocop/runner.rb +100/-33
            lib/rubocop/server/cache.rb +10/-5
            lib/rubocop/target_ruby.rb +1/-1
            lib/rubocop/version.rb +1/-1

2 similar comments
@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop 1.88.0 1.89.0

Compared versions: ["1.88.0", "1.89.0"]
  DIFFERENT metadata:
    1.88.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.88.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.88/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
    1.89.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.89.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.89/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
  DIFFERENT version:
    1.88.0: 1.88.0
    1.89.0: 1.89.0
  DIFFERENT files:
    1.88.0->1.89.0:
      * Added:
            lib/rubocop/cop/bundler.rb +19/-0
            lib/rubocop/cop/gemspec.rb +22/-0
            lib/rubocop/cop/generator/registration_injector.rb +188/-0
            lib/rubocop/cop/layout.rb +114/-0
            lib/rubocop/cop/lazy_loader.rb +41/-0
            lib/rubocop/cop/lint.rb +176/-0
            lib/rubocop/cop/lint/deprecated_reference.rb +185/-0
            lib/rubocop/cop/lint/name_typo.rb +223/-0
            lib/rubocop/cop/lint/unused_private_method.rb +157/-0
            lib/rubocop/cop/metrics.rb +31/-0
            lib/rubocop/cop/migration.rb +13/-0
            lib/rubocop/cop/mixin/reparsed_equivalence.rb +171/-0
            lib/rubocop/cop/naming.rb +31/-0
            lib/rubocop/cop/security.rb +19/-0
            lib/rubocop/cop/style.rb +310/-0
      * Changed:
            config/default.yml +72/-12
            lib/rubocop.rb +17/-626
            lib/rubocop/comment_config.rb +35/-19
            lib/rubocop/config.rb +53/-0
            lib/rubocop/config_validator.rb +38/-1
            lib/rubocop/cop/badge.rb +8/-0
            lib/rubocop/cop/base.rb +19/-12
            lib/rubocop/cop/bundler/gem_comment.rb +3/-1
            lib/rubocop/cop/commissioner.rb +13/-11
            lib/rubocop/cop/corrector.rb +1/-1
            lib/rubocop/cop/correctors/alignment_corrector.rb +55/-5
            lib/rubocop/cop/correctors/each_to_for_corrector.rb +1/-1
            lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7/-1
            lib/rubocop/cop/correctors/ordered_gem_corrector.rb +8/-1
            lib/rubocop/cop/gemspec/development_dependencies.rb +1/-1
            lib/rubocop/cop/gemspec/duplicated_assignment.rb +12/-2
            lib/rubocop/cop/gemspec/require_mfa.rb +4/-1
            lib/rubocop/cop/generator.rb +4/-0
            lib/rubocop/cop/layout/block_alignment.rb +17/-0
            lib/rubocop/cop/layout/class_structure.rb +14/-4
            lib/rubocop/cop/layout/comment_indentation.rb +9/-2
            lib/rubocop/cop/layout/condition_position.rb +13/-3
            lib/rubocop/cop/layout/else_alignment.rb +1/-14
            lib/rubocop/cop/layout/empty_comment.rb +8/-10
            lib/rubocop/cop/layout/empty_line_between_defs.rb +14/-1
            lib/rubocop/cop/layout/first_array_element_indentation.rb +1/-1
            lib/rubocop/cop/layout/first_hash_element_indentation.rb +13/-14
            lib/rubocop/cop/layout/indentation_width.rb +31/-1
            lib/rubocop/cop/layout/leading_comment_space.rb +27/-0
            lib/rubocop/cop/layout/line_length.rb +95/-17
            lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18/-3
            lib/rubocop/cop/layout/redundant_line_break.rb +77/-0
            lib/rubocop/cop/layout/space_around_operators.rb +6/-2
            lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +33/-34
            lib/rubocop/cop/lint/ambiguous_assignment.rb +9/-7
            lib/rubocop/cop/lint/ambiguous_block_association.rb +71/-0
            lib/rubocop/cop/lint/assignment_in_condition.rb +13/-1
            lib/rubocop/cop/lint/constant_reassignment.rb +1/-10
            lib/rubocop/cop/lint/constant_resolution.rb +25/-0
            lib/rubocop/cop/lint/debugger.rb +13/-1
            lib/rubocop/cop/lint/duplicate_methods.rb +202/-22
            lib/rubocop/cop/lint/inherit_exception.rb +51/-5
            lib/rubocop/cop/lint/literal_as_condition.rb +5/-0
            lib/rubocop/cop/lint/literal_in_interpolation.rb +1/-1
            lib/rubocop/cop/lint/missing_super.rb +31/-1
            lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +7/-0
            lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +0/-4
            lib/rubocop/cop/lint/safe_navigation_chain.rb +7/-0
            lib/rubocop/cop/lint/to_enum_arguments.rb +44/-2
            lib/rubocop/cop/lint/to_json.rb +8/-1
            lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +32/-8
            lib/rubocop/cop/lint/unreachable_code.rb +9/-4
            lib/rubocop/cop/lint/useless_numeric_operation.rb +10/-10
            lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2/-0
            lib/rubocop/cop/lint/void.rb +19/-8
            lib/rubocop/cop/metrics/method_length.rb +1/-1
            lib/rubocop/cop/metrics/perceived_complexity.rb +38/-7
            lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1/-1
            lib/rubocop/cop/migration/department_name.rb +0/-4
            lib/rubocop/cop/mixin.rb +78/-77
            lib/rubocop/cop/mixin/allowed_methods.rb +5/-5
            lib/rubocop/cop/mixin/allowed_pattern.rb +5/-1
            lib/rubocop/cop/mixin/check_line_breakable.rb +23/-5
            lib/rubocop/cop/mixin/endless_method_rewriter.rb +13/-5
            lib/rubocop/cop/mixin/forbidden_pattern.rb +5/-1
            lib/rubocop/cop/mixin/hash_alignment_styles.rb +23/-6
            lib/rubocop/cop/mixin/hash_subset.rb +8/-0
            lib/rubocop/cop/mixin/hash_transform_method.rb +4/-0
            lib/rubocop/cop/mixin/project_index_help.rb +140/-0
            lib/rubocop/cop/mixin/statement_modifier.rb +43/-7
            lib/rubocop/cop/naming/accessor_method_name.rb +24/-0
            lib/rubocop/cop/naming/file_name.rb +4/-3
            lib/rubocop/cop/naming/inclusive_language.rb +8/-2
            lib/rubocop/cop/naming/memoized_instance_variable_name.rb +9/-0
            lib/rubocop/cop/naming/predicate_prefix.rb +33/-5
            lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +9/-3
            lib/rubocop/cop/naming/variable_number.rb +3/-1
            lib/rubocop/cop/offense.rb +10/-6
            lib/rubocop/cop/registry.rb +153/-43
            lib/rubocop/cop/security/io_methods.rb +1/-1
            lib/rubocop/cop/security/marshal_load.rb +1/-1
            lib/rubocop/cop/style/accessor_grouping.rb +11/-1
            lib/rubocop/cop/style/arguments_forwarding.rb +1/-1
            lib/rubocop/cop/style/array_intersect.rb +24/-5
            lib/rubocop/cop/style/class_and_module_children.rb +78/-18
            lib/rubocop/cop/style/collection_compact.rb +1/-1
            lib/rubocop/cop/style/conditional_assignment.rb +22/-0
            lib/rubocop/cop/style/copyright.rb +6/-1
            lib/rubocop/cop/style/data_inheritance.rb +4/-0
            lib/rubocop/cop/style/def_with_parentheses.rb +6/-2
            lib/rubocop/cop/style/dir_empty.rb +4/-0
            lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +41/-3
            lib/rubocop/cop/style/documentation.rb +47/-0
            lib/rubocop/cop/style/documentation_method.rb +5/-1
            lib/rubocop/cop/style/empty_case_condition.rb +12/-2
            lib/rubocop/cop/style/empty_class_definition.rb +8/-1
            lib/rubocop/cop/style/empty_heredoc.rb +4/-0
            lib/rubocop/cop/style/empty_literal.rb +7/-2
            lib/rubocop/cop/style/empty_string_inside_interpolation.rb +30/-20
            lib/rubocop/cop/style/endless_method.rb +0/-10
            lib/rubocop/cop/style/env_home.rb +4/-0
            lib/rubocop/cop/style/even_odd.rb +11/-1
            lib/rubocop/cop/style/exact_regexp_match.rb +8/-1
            lib/rubocop/cop/style/file_null.rb +4/-2
            lib/rubocop/cop/style/format_string.rb +13/-1
            lib/rubocop/cop/style/hash_conversion.rb +14/-6
            lib/rubocop/cop/style/hash_lookup_method.rb +2/-6
            lib/rubocop/cop/style/hash_syntax.rb +2/-0
            lib/rubocop/cop/style/identical_conditional_branches.rb +15/-4
            lib/rubocop/cop/style/if_unless_modifier.rb +11/-52
            lib/rubocop/cop/style/if_with_semicolon.rb +9/-1
            lib/rubocop/cop/style/inline_comment.rb +1/-1
            lib/rubocop/cop/style/invertible_unless_condition.rb +25/-5
            lib/rubocop/cop/style/keyword_arguments_merging.rb +4/-0
            lib/rubocop/cop/style/keyword_parameters_order.rb +7/-3
            lib/rubocop/cop/style/lambda.rb +11/-1
            lib/rubocop/cop/style/lambda_call.rb +11/-0
            lib/rubocop/cop/style/map_compact_with_conditional_block.rb +11/-0
            lib/rubocop/cop/style/map_into_array.rb +1/-1
            lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +20/-3
            lib/rubocop/cop/style/method_call_without_args_parentheses.rb +11/-5
            lib/rubocop/cop/style/method_def_parentheses.rb +5/-1
            lib/rubocop/cop/style/min_max_comparison.rb +3/-0
            lib/rubocop/cop/style/missing_respond_to_missing.rb +40/-7
            lib/rubocop/cop/style/mixin_usage.rb +1/-1
            lib/rubocop/cop/style/module_function.rb +4/-2
            lib/rubocop/cop/style/multiline_if_then.rb +7/-1
            lib/rubocop/cop/style/multiline_memoization.rb +7/-1
            lib/rubocop/cop/style/multiline_method_signature.rb +11/-4
            lib/rubocop/cop/style/multiple_comparison.rb +33/-22
            lib/rubocop/cop/style/mutable_constant.rb +5/-0
            lib/rubocop/cop/style/negative_array_index.rb +3/-1
            lib/rubocop/cop/style/nil_lambda.rb +8/-0
            lib/rubocop/cop/style/numeric_predicate.rb +1/-1
            lib/rubocop/cop/style/open_struct_use.rb +1/-1
            lib/rubocop/cop/style/option_hash.rb +1/-1
            lib/rubocop/cop/style/optional_arguments.rb +1/-0
            lib/rubocop/cop/style/parallel_assignment.rb +11/-2
            lib/rubocop/cop/style/percent_literal_delimiters.rb +2/-0
            lib/rubocop/cop/style/perl_backrefs.rb +5/-3
            lib/rubocop/cop/style/redundant_assignment.rb +11/-0
            lib/rubocop/cop/style/redundant_constant_base.rb +37/-1
            lib/rubocop/cop/style/redundant_current_directory_in_path.rb +13/-1
            lib/rubocop/cop/style/redundant_exception.rb +6/-0
            lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9/-0
            lib/rubocop/cop/style/redundant_filter_chain.rb +1/-1
            lib/rubocop/cop/style/redundant_format.rb +40/-3
            lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +6/-1
            lib/rubocop/cop/style/redundant_line_continuation.rb +80/-129
            lib/rubocop/cop/style/redundant_parentheses.rb +63/-63
            lib/rubocop/cop/style/redundant_regexp_escape.rb +8/-4
            lib/rubocop/cop/style/redundant_self.rb +9/-0
            lib/rubocop/cop/style/redundant_struct_keyword_init.rb +23/-4
            lib/rubocop/cop/style/safe_navigation.rb +10/-0
            lib/rubocop/cop/style/semicolon.rb +4/-4
            lib/rubocop/cop/style/single_line_do_end_block.rb +17/-4
            lib/rubocop/cop/style/sole_nested_conditional.rb +20/-3
            lib/rubocop/cop/style/static_class.rb +21/-0
            lib/rubocop/cop/style/string_hash_keys.rb +1/-0
            lib/rubocop/cop/style/struct_inheritance.rb +3/-1
            lib/rubocop/cop/style/ternary_parentheses.rb +11/-0
            lib/rubocop/cop/style/trailing_underscore_variable.rb +7/-8
            lib/rubocop/cop/style/trivial_accessors.rb +1/-1
            lib/rubocop/cop/team.rb +66/-7
            lib/rubocop/cop/variable_force/variable.rb +18/-6
            lib/rubocop/cops_documentation_generator.rb +1/-1
            lib/rubocop/directive_comment.rb +2/-0
            lib/rubocop/feature_loader.rb +0/-6
            lib/rubocop/lsp/routes.rb +41/-3
            lib/rubocop/lsp/runtime.rb +4/-0
            lib/rubocop/lsp/server.rb +4/-0
            lib/rubocop/lsp/stdin_runner.rb +20/-0
            lib/rubocop/pending_cops_reporter.rb +1/-6
            lib/rubocop/project_index_loader.rb +16/-0
            lib/rubocop/result_cache.rb +6/-4
            lib/rubocop/rspec/shared_contexts.rb +14/-2
            lib/rubocop/runner.rb +100/-33
            lib/rubocop/server/cache.rb +10/-5
            lib/rubocop/target_ruby.rb +1/-1
            lib/rubocop/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop 1.88.0 1.89.0

Compared versions: ["1.88.0", "1.89.0"]
  DIFFERENT metadata:
    1.88.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.88.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.88/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
    1.89.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.89.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.89/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
  DIFFERENT version:
    1.88.0: 1.88.0
    1.89.0: 1.89.0
  DIFFERENT files:
    1.88.0->1.89.0:
      * Added:
            lib/rubocop/cop/bundler.rb +19/-0
            lib/rubocop/cop/gemspec.rb +22/-0
            lib/rubocop/cop/generator/registration_injector.rb +188/-0
            lib/rubocop/cop/layout.rb +114/-0
            lib/rubocop/cop/lazy_loader.rb +41/-0
            lib/rubocop/cop/lint.rb +176/-0
            lib/rubocop/cop/lint/deprecated_reference.rb +185/-0
            lib/rubocop/cop/lint/name_typo.rb +223/-0
            lib/rubocop/cop/lint/unused_private_method.rb +157/-0
            lib/rubocop/cop/metrics.rb +31/-0
            lib/rubocop/cop/migration.rb +13/-0
            lib/rubocop/cop/mixin/reparsed_equivalence.rb +171/-0
            lib/rubocop/cop/naming.rb +31/-0
            lib/rubocop/cop/security.rb +19/-0
            lib/rubocop/cop/style.rb +310/-0
      * Changed:
            config/default.yml +72/-12
            lib/rubocop.rb +17/-626
            lib/rubocop/comment_config.rb +35/-19
            lib/rubocop/config.rb +53/-0
            lib/rubocop/config_validator.rb +38/-1
            lib/rubocop/cop/badge.rb +8/-0
            lib/rubocop/cop/base.rb +19/-12
            lib/rubocop/cop/bundler/gem_comment.rb +3/-1
            lib/rubocop/cop/commissioner.rb +13/-11
            lib/rubocop/cop/corrector.rb +1/-1
            lib/rubocop/cop/correctors/alignment_corrector.rb +55/-5
            lib/rubocop/cop/correctors/each_to_for_corrector.rb +1/-1
            lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7/-1
            lib/rubocop/cop/correctors/ordered_gem_corrector.rb +8/-1
            lib/rubocop/cop/gemspec/development_dependencies.rb +1/-1
            lib/rubocop/cop/gemspec/duplicated_assignment.rb +12/-2
            lib/rubocop/cop/gemspec/require_mfa.rb +4/-1
            lib/rubocop/cop/generator.rb +4/-0
            lib/rubocop/cop/layout/block_alignment.rb +17/-0
            lib/rubocop/cop/layout/class_structure.rb +14/-4
            lib/rubocop/cop/layout/comment_indentation.rb +9/-2
            lib/rubocop/cop/layout/condition_position.rb +13/-3
            lib/rubocop/cop/layout/else_alignment.rb +1/-14
            lib/rubocop/cop/layout/empty_comment.rb +8/-10
            lib/rubocop/cop/layout/empty_line_between_defs.rb +14/-1
            lib/rubocop/cop/layout/first_array_element_indentation.rb +1/-1
            lib/rubocop/cop/layout/first_hash_element_indentation.rb +13/-14
            lib/rubocop/cop/layout/indentation_width.rb +31/-1
            lib/rubocop/cop/layout/leading_comment_space.rb +27/-0
            lib/rubocop/cop/layout/line_length.rb +95/-17
            lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18/-3
            lib/rubocop/cop/layout/redundant_line_break.rb +77/-0
            lib/rubocop/cop/layout/space_around_operators.rb +6/-2
            lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +33/-34
            lib/rubocop/cop/lint/ambiguous_assignment.rb +9/-7
            lib/rubocop/cop/lint/ambiguous_block_association.rb +71/-0
            lib/rubocop/cop/lint/assignment_in_condition.rb +13/-1
            lib/rubocop/cop/lint/constant_reassignment.rb +1/-10
            lib/rubocop/cop/lint/constant_resolution.rb +25/-0
            lib/rubocop/cop/lint/debugger.rb +13/-1
            lib/rubocop/cop/lint/duplicate_methods.rb +202/-22
            lib/rubocop/cop/lint/inherit_exception.rb +51/-5
            lib/rubocop/cop/lint/literal_as_condition.rb +5/-0
            lib/rubocop/cop/lint/literal_in_interpolation.rb +1/-1
            lib/rubocop/cop/lint/missing_super.rb +31/-1
            lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +7/-0
            lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +0/-4
            lib/rubocop/cop/lint/safe_navigation_chain.rb +7/-0
            lib/rubocop/cop/lint/to_enum_arguments.rb +44/-2
            lib/rubocop/cop/lint/to_json.rb +8/-1
            lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +32/-8
            lib/rubocop/cop/lint/unreachable_code.rb +9/-4
            lib/rubocop/cop/lint/useless_numeric_operation.rb +10/-10
            lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2/-0
            lib/rubocop/cop/lint/void.rb +19/-8
            lib/rubocop/cop/metrics/method_length.rb +1/-1
            lib/rubocop/cop/metrics/perceived_complexity.rb +38/-7
            lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1/-1
            lib/rubocop/cop/migration/department_name.rb +0/-4
            lib/rubocop/cop/mixin.rb +78/-77
            lib/rubocop/cop/mixin/allowed_methods.rb +5/-5
            lib/rubocop/cop/mixin/allowed_pattern.rb +5/-1
            lib/rubocop/cop/mixin/check_line_breakable.rb +23/-5
            lib/rubocop/cop/mixin/endless_method_rewriter.rb +13/-5
            lib/rubocop/cop/mixin/forbidden_pattern.rb +5/-1
            lib/rubocop/cop/mixin/hash_alignment_styles.rb +23/-6
            lib/rubocop/cop/mixin/hash_subset.rb +8/-0
            lib/rubocop/cop/mixin/hash_transform_method.rb +4/-0
            lib/rubocop/cop/mixin/project_index_help.rb +140/-0
            lib/rubocop/cop/mixin/statement_modifier.rb +43/-7
            lib/rubocop/cop/naming/accessor_method_name.rb +24/-0
            lib/rubocop/cop/naming/file_name.rb +4/-3
            lib/rubocop/cop/naming/inclusive_language.rb +8/-2
            lib/rubocop/cop/naming/memoized_instance_variable_name.rb +9/-0
            lib/rubocop/cop/naming/predicate_prefix.rb +33/-5
            lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +9/-3
            lib/rubocop/cop/naming/variable_number.rb +3/-1
            lib/rubocop/cop/offense.rb +10/-6
            lib/rubocop/cop/registry.rb +153/-43
            lib/rubocop/cop/security/io_methods.rb +1/-1
            lib/rubocop/cop/security/marshal_load.rb +1/-1
            lib/rubocop/cop/style/accessor_grouping.rb +11/-1
            lib/rubocop/cop/style/arguments_forwarding.rb +1/-1
            lib/rubocop/cop/style/array_intersect.rb +24/-5
            lib/rubocop/cop/style/class_and_module_children.rb +78/-18
            lib/rubocop/cop/style/collection_compact.rb +1/-1
            lib/rubocop/cop/style/conditional_assignment.rb +22/-0
            lib/rubocop/cop/style/copyright.rb +6/-1
            lib/rubocop/cop/style/data_inheritance.rb +4/-0
            lib/rubocop/cop/style/def_with_parentheses.rb +6/-2
            lib/rubocop/cop/style/dir_empty.rb +4/-0
            lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +41/-3
            lib/rubocop/cop/style/documentation.rb +47/-0
            lib/rubocop/cop/style/documentation_method.rb +5/-1
            lib/rubocop/cop/style/empty_case_condition.rb +12/-2
            lib/rubocop/cop/style/empty_class_definition.rb +8/-1
            lib/rubocop/cop/style/empty_heredoc.rb +4/-0
            lib/rubocop/cop/style/empty_literal.rb +7/-2
            lib/rubocop/cop/style/empty_string_inside_interpolation.rb +30/-20
            lib/rubocop/cop/style/endless_method.rb +0/-10
            lib/rubocop/cop/style/env_home.rb +4/-0
            lib/rubocop/cop/style/even_odd.rb +11/-1
            lib/rubocop/cop/style/exact_regexp_match.rb +8/-1
            lib/rubocop/cop/style/file_null.rb +4/-2
            lib/rubocop/cop/style/format_string.rb +13/-1
            lib/rubocop/cop/style/hash_conversion.rb +14/-6
            lib/rubocop/cop/style/hash_lookup_method.rb +2/-6
            lib/rubocop/cop/style/hash_syntax.rb +2/-0
            lib/rubocop/cop/style/identical_conditional_branches.rb +15/-4
            lib/rubocop/cop/style/if_unless_modifier.rb +11/-52
            lib/rubocop/cop/style/if_with_semicolon.rb +9/-1
            lib/rubocop/cop/style/inline_comment.rb +1/-1
            lib/rubocop/cop/style/invertible_unless_condition.rb +25/-5
            lib/rubocop/cop/style/keyword_arguments_merging.rb +4/-0
            lib/rubocop/cop/style/keyword_parameters_order.rb +7/-3
            lib/rubocop/cop/style/lambda.rb +11/-1
            lib/rubocop/cop/style/lambda_call.rb +11/-0
            lib/rubocop/cop/style/map_compact_with_conditional_block.rb +11/-0
            lib/rubocop/cop/style/map_into_array.rb +1/-1
            lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +20/-3
            lib/rubocop/cop/style/method_call_without_args_parentheses.rb +11/-5
            lib/rubocop/cop/style/method_def_parentheses.rb +5/-1
            lib/rubocop/cop/style/min_max_comparison.rb +3/-0
            lib/rubocop/cop/style/missing_respond_to_missing.rb +40/-7
            lib/rubocop/cop/style/mixin_usage.rb +1/-1
            lib/rubocop/cop/style/module_function.rb +4/-2
            lib/rubocop/cop/style/multiline_if_then.rb +7/-1
            lib/rubocop/cop/style/multiline_memoization.rb +7/-1
            lib/rubocop/cop/style/multiline_method_signature.rb +11/-4
            lib/rubocop/cop/style/multiple_comparison.rb +33/-22
            lib/rubocop/cop/style/mutable_constant.rb +5/-0
            lib/rubocop/cop/style/negative_array_index.rb +3/-1
            lib/rubocop/cop/style/nil_lambda.rb +8/-0
            lib/rubocop/cop/style/numeric_predicate.rb +1/-1
            lib/rubocop/cop/style/open_struct_use.rb +1/-1
            lib/rubocop/cop/style/option_hash.rb +1/-1
            lib/rubocop/cop/style/optional_arguments.rb +1/-0
            lib/rubocop/cop/style/parallel_assignment.rb +11/-2
            lib/rubocop/cop/style/percent_literal_delimiters.rb +2/-0
            lib/rubocop/cop/style/perl_backrefs.rb +5/-3
            lib/rubocop/cop/style/redundant_assignment.rb +11/-0
            lib/rubocop/cop/style/redundant_constant_base.rb +37/-1
            lib/rubocop/cop/style/redundant_current_directory_in_path.rb +13/-1
            lib/rubocop/cop/style/redundant_exception.rb +6/-0
            lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9/-0
            lib/rubocop/cop/style/redundant_filter_chain.rb +1/-1
            lib/rubocop/cop/style/redundant_format.rb +40/-3
            lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +6/-1
            lib/rubocop/cop/style/redundant_line_continuation.rb +80/-129
            lib/rubocop/cop/style/redundant_parentheses.rb +63/-63
            lib/rubocop/cop/style/redundant_regexp_escape.rb +8/-4
            lib/rubocop/cop/style/redundant_self.rb +9/-0
            lib/rubocop/cop/style/redundant_struct_keyword_init.rb +23/-4
            lib/rubocop/cop/style/safe_navigation.rb +10/-0
            lib/rubocop/cop/style/semicolon.rb +4/-4
            lib/rubocop/cop/style/single_line_do_end_block.rb +17/-4
            lib/rubocop/cop/style/sole_nested_conditional.rb +20/-3
            lib/rubocop/cop/style/static_class.rb +21/-0
            lib/rubocop/cop/style/string_hash_keys.rb +1/-0
            lib/rubocop/cop/style/struct_inheritance.rb +3/-1
            lib/rubocop/cop/style/ternary_parentheses.rb +11/-0
            lib/rubocop/cop/style/trailing_underscore_variable.rb +7/-8
            lib/rubocop/cop/style/trivial_accessors.rb +1/-1
            lib/rubocop/cop/team.rb +66/-7
            lib/rubocop/cop/variable_force/variable.rb +18/-6
            lib/rubocop/cops_documentation_generator.rb +1/-1
            lib/rubocop/directive_comment.rb +2/-0
            lib/rubocop/feature_loader.rb +0/-6
            lib/rubocop/lsp/routes.rb +41/-3
            lib/rubocop/lsp/runtime.rb +4/-0
            lib/rubocop/lsp/server.rb +4/-0
            lib/rubocop/lsp/stdin_runner.rb +20/-0
            lib/rubocop/pending_cops_reporter.rb +1/-6
            lib/rubocop/project_index_loader.rb +16/-0
            lib/rubocop/result_cache.rb +6/-4
            lib/rubocop/rspec/shared_contexts.rb +14/-2
            lib/rubocop/runner.rb +100/-33
            lib/rubocop/server/cache.rb +10/-5
            lib/rubocop/target_ruby.rb +1/-1
            lib/rubocop/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop 1.88.0 1.89.0

Diff too large (526010 chars)

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop 1.88.0 1.89.0

Diff too large (526010 chars)

@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop 1.88.0 1.89.0

Compared versions: ["1.88.0", "1.89.0"]
  DIFFERENT metadata:
    1.88.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.88.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.88/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
    1.89.0: {"homepage_uri" => "https://rubocop.org/", "changelog_uri" => "https://github.com/rubocop/rubocop/releases/tag/v1.89.0", "source_code_uri" => "https://github.com/rubocop/rubocop/", "documentation_uri" => "https://docs.rubocop.org/rubocop/1.89/", "bug_tracker_uri" => "https://github.com/rubocop/rubocop/issues", "rubygems_mfa_required" => "true"}
  DIFFERENT version:
    1.88.0: 1.88.0
    1.89.0: 1.89.0
  DIFFERENT files:
    1.88.0->1.89.0:
      * Added:
            lib/rubocop/cop/bundler.rb +19/-0
            lib/rubocop/cop/gemspec.rb +22/-0
            lib/rubocop/cop/generator/registration_injector.rb +188/-0
            lib/rubocop/cop/layout.rb +114/-0
            lib/rubocop/cop/lazy_loader.rb +41/-0
            lib/rubocop/cop/lint.rb +176/-0
            lib/rubocop/cop/lint/deprecated_reference.rb +185/-0
            lib/rubocop/cop/lint/name_typo.rb +223/-0
            lib/rubocop/cop/lint/unused_private_method.rb +157/-0
            lib/rubocop/cop/metrics.rb +31/-0
            lib/rubocop/cop/migration.rb +13/-0
            lib/rubocop/cop/mixin/reparsed_equivalence.rb +171/-0
            lib/rubocop/cop/naming.rb +31/-0
            lib/rubocop/cop/security.rb +19/-0
            lib/rubocop/cop/style.rb +310/-0
      * Changed:
            config/default.yml +72/-12
            lib/rubocop.rb +17/-626
            lib/rubocop/comment_config.rb +35/-19
            lib/rubocop/config.rb +53/-0
            lib/rubocop/config_validator.rb +38/-1
            lib/rubocop/cop/badge.rb +8/-0
            lib/rubocop/cop/base.rb +19/-12
            lib/rubocop/cop/bundler/gem_comment.rb +3/-1
            lib/rubocop/cop/commissioner.rb +13/-11
            lib/rubocop/cop/corrector.rb +1/-1
            lib/rubocop/cop/correctors/alignment_corrector.rb +55/-5
            lib/rubocop/cop/correctors/each_to_for_corrector.rb +1/-1
            lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7/-1
            lib/rubocop/cop/correctors/ordered_gem_corrector.rb +8/-1
            lib/rubocop/cop/gemspec/development_dependencies.rb +1/-1
            lib/rubocop/cop/gemspec/duplicated_assignment.rb +12/-2
            lib/rubocop/cop/gemspec/require_mfa.rb +4/-1
            lib/rubocop/cop/generator.rb +4/-0
            lib/rubocop/cop/layout/block_alignment.rb +17/-0
            lib/rubocop/cop/layout/class_structure.rb +14/-4
            lib/rubocop/cop/layout/comment_indentation.rb +9/-2
            lib/rubocop/cop/layout/condition_position.rb +13/-3
            lib/rubocop/cop/layout/else_alignment.rb +1/-14
            lib/rubocop/cop/layout/empty_comment.rb +8/-10
            lib/rubocop/cop/layout/empty_line_between_defs.rb +14/-1
            lib/rubocop/cop/layout/first_array_element_indentation.rb +1/-1
            lib/rubocop/cop/layout/first_hash_element_indentation.rb +13/-14
            lib/rubocop/cop/layout/indentation_width.rb +31/-1
            lib/rubocop/cop/layout/leading_comment_space.rb +27/-0
            lib/rubocop/cop/layout/line_length.rb +95/-17
            lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18/-3
            lib/rubocop/cop/layout/redundant_line_break.rb +77/-0
            lib/rubocop/cop/layout/space_around_operators.rb +6/-2
            lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +33/-34
            lib/rubocop/cop/lint/ambiguous_assignment.rb +9/-7
            lib/rubocop/cop/lint/ambiguous_block_association.rb +71/-0
            lib/rubocop/cop/lint/assignment_in_condition.rb +13/-1
            lib/rubocop/cop/lint/constant_reassignment.rb +1/-10
            lib/rubocop/cop/lint/constant_resolution.rb +25/-0
            lib/rubocop/cop/lint/debugger.rb +13/-1
            lib/rubocop/cop/lint/duplicate_methods.rb +202/-22
            lib/rubocop/cop/lint/inherit_exception.rb +51/-5
            lib/rubocop/cop/lint/literal_as_condition.rb +5/-0
            lib/rubocop/cop/lint/literal_in_interpolation.rb +1/-1
            lib/rubocop/cop/lint/missing_super.rb +31/-1
            lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +7/-0
            lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +0/-4
            lib/rubocop/cop/lint/safe_navigation_chain.rb +7/-0
            lib/rubocop/cop/lint/to_enum_arguments.rb +44/-2
            lib/rubocop/cop/lint/to_json.rb +8/-1
            lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +32/-8
            lib/rubocop/cop/lint/unreachable_code.rb +9/-4
            lib/rubocop/cop/lint/useless_numeric_operation.rb +10/-10
            lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2/-0
            lib/rubocop/cop/lint/void.rb +19/-8
            lib/rubocop/cop/metrics/method_length.rb +1/-1
            lib/rubocop/cop/metrics/perceived_complexity.rb +38/-7
            lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1/-1
            lib/rubocop/cop/migration/department_name.rb +0/-4
            lib/rubocop/cop/mixin.rb +78/-77
            lib/rubocop/cop/mixin/allowed_methods.rb +5/-5
            lib/rubocop/cop/mixin/allowed_pattern.rb +5/-1
            lib/rubocop/cop/mixin/check_line_breakable.rb +23/-5
            lib/rubocop/cop/mixin/endless_method_rewriter.rb +13/-5
            lib/rubocop/cop/mixin/forbidden_pattern.rb +5/-1
            lib/rubocop/cop/mixin/hash_alignment_styles.rb +23/-6
            lib/rubocop/cop/mixin/hash_subset.rb +8/-0
            lib/rubocop/cop/mixin/hash_transform_method.rb +4/-0
            lib/rubocop/cop/mixin/project_index_help.rb +140/-0
            lib/rubocop/cop/mixin/statement_modifier.rb +43/-7
            lib/rubocop/cop/naming/accessor_method_name.rb +24/-0
            lib/rubocop/cop/naming/file_name.rb +4/-3
            lib/rubocop/cop/naming/inclusive_language.rb +8/-2
            lib/rubocop/cop/naming/memoized_instance_variable_name.rb +9/-0
            lib/rubocop/cop/naming/predicate_prefix.rb +33/-5
            lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +9/-3
            lib/rubocop/cop/naming/variable_number.rb +3/-1
            lib/rubocop/cop/offense.rb +10/-6
            lib/rubocop/cop/registry.rb +153/-43
            lib/rubocop/cop/security/io_methods.rb +1/-1
            lib/rubocop/cop/security/marshal_load.rb +1/-1
            lib/rubocop/cop/style/accessor_grouping.rb +11/-1
            lib/rubocop/cop/style/arguments_forwarding.rb +1/-1
            lib/rubocop/cop/style/array_intersect.rb +24/-5
            lib/rubocop/cop/style/class_and_module_children.rb +78/-18
            lib/rubocop/cop/style/collection_compact.rb +1/-1
            lib/rubocop/cop/style/conditional_assignment.rb +22/-0
            lib/rubocop/cop/style/copyright.rb +6/-1
            lib/rubocop/cop/style/data_inheritance.rb +4/-0
            lib/rubocop/cop/style/def_with_parentheses.rb +6/-2
            lib/rubocop/cop/style/dir_empty.rb +4/-0
            lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +41/-3
            lib/rubocop/cop/style/documentation.rb +47/-0
            lib/rubocop/cop/style/documentation_method.rb +5/-1
            lib/rubocop/cop/style/empty_case_condition.rb +12/-2
            lib/rubocop/cop/style/empty_class_definition.rb +8/-1
            lib/rubocop/cop/style/empty_heredoc.rb +4/-0
            lib/rubocop/cop/style/empty_literal.rb +7/-2
            lib/rubocop/cop/style/empty_string_inside_interpolation.rb +30/-20
            lib/rubocop/cop/style/endless_method.rb +0/-10
            lib/rubocop/cop/style/env_home.rb +4/-0
            lib/rubocop/cop/style/even_odd.rb +11/-1
            lib/rubocop/cop/style/exact_regexp_match.rb +8/-1
            lib/rubocop/cop/style/file_null.rb +4/-2
            lib/rubocop/cop/style/format_string.rb +13/-1
            lib/rubocop/cop/style/hash_conversion.rb +14/-6
            lib/rubocop/cop/style/hash_lookup_method.rb +2/-6
            lib/rubocop/cop/style/hash_syntax.rb +2/-0
            lib/rubocop/cop/style/identical_conditional_branches.rb +15/-4
            lib/rubocop/cop/style/if_unless_modifier.rb +11/-52
            lib/rubocop/cop/style/if_with_semicolon.rb +9/-1
            lib/rubocop/cop/style/inline_comment.rb +1/-1
            lib/rubocop/cop/style/invertible_unless_condition.rb +25/-5
            lib/rubocop/cop/style/keyword_arguments_merging.rb +4/-0
            lib/rubocop/cop/style/keyword_parameters_order.rb +7/-3
            lib/rubocop/cop/style/lambda.rb +11/-1
            lib/rubocop/cop/style/lambda_call.rb +11/-0
            lib/rubocop/cop/style/map_compact_with_conditional_block.rb +11/-0
            lib/rubocop/cop/style/map_into_array.rb +1/-1
            lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +20/-3
            lib/rubocop/cop/style/method_call_without_args_parentheses.rb +11/-5
            lib/rubocop/cop/style/method_def_parentheses.rb +5/-1
            lib/rubocop/cop/style/min_max_comparison.rb +3/-0
            lib/rubocop/cop/style/missing_respond_to_missing.rb +40/-7
            lib/rubocop/cop/style/mixin_usage.rb +1/-1
            lib/rubocop/cop/style/module_function.rb +4/-2
            lib/rubocop/cop/style/multiline_if_then.rb +7/-1
            lib/rubocop/cop/style/multiline_memoization.rb +7/-1
            lib/rubocop/cop/style/multiline_method_signature.rb +11/-4
            lib/rubocop/cop/style/multiple_comparison.rb +33/-22
            lib/rubocop/cop/style/mutable_constant.rb +5/-0
            lib/rubocop/cop/style/negative_array_index.rb +3/-1
            lib/rubocop/cop/style/nil_lambda.rb +8/-0
            lib/rubocop/cop/style/numeric_predicate.rb +1/-1
            lib/rubocop/cop/style/open_struct_use.rb +1/-1
            lib/rubocop/cop/style/option_hash.rb +1/-1
            lib/rubocop/cop/style/optional_arguments.rb +1/-0
            lib/rubocop/cop/style/parallel_assignment.rb +11/-2
            lib/rubocop/cop/style/percent_literal_delimiters.rb +2/-0
            lib/rubocop/cop/style/perl_backrefs.rb +5/-3
            lib/rubocop/cop/style/redundant_assignment.rb +11/-0
            lib/rubocop/cop/style/redundant_constant_base.rb +37/-1
            lib/rubocop/cop/style/redundant_current_directory_in_path.rb +13/-1
            lib/rubocop/cop/style/redundant_exception.rb +6/-0
            lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9/-0
            lib/rubocop/cop/style/redundant_filter_chain.rb +1/-1
            lib/rubocop/cop/style/redundant_format.rb +40/-3
            lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +6/-1
            lib/rubocop/cop/style/redundant_line_continuation.rb +80/-129
            lib/rubocop/cop/style/redundant_parentheses.rb +63/-63
            lib/rubocop/cop/style/redundant_regexp_escape.rb +8/-4
            lib/rubocop/cop/style/redundant_self.rb +9/-0
            lib/rubocop/cop/style/redundant_struct_keyword_init.rb +23/-4
            lib/rubocop/cop/style/safe_navigation.rb +10/-0
            lib/rubocop/cop/style/semicolon.rb +4/-4
            lib/rubocop/cop/style/single_line_do_end_block.rb +17/-4
            lib/rubocop/cop/style/sole_nested_conditional.rb +20/-3
            lib/rubocop/cop/style/static_class.rb +21/-0
            lib/rubocop/cop/style/string_hash_keys.rb +1/-0
            lib/rubocop/cop/style/struct_inheritance.rb +3/-1
            lib/rubocop/cop/style/ternary_parentheses.rb +11/-0
            lib/rubocop/cop/style/trailing_underscore_variable.rb +7/-8
            lib/rubocop/cop/style/trivial_accessors.rb +1/-1
            lib/rubocop/cop/team.rb +66/-7
            lib/rubocop/cop/variable_force/variable.rb +18/-6
            lib/rubocop/cops_documentation_generator.rb +1/-1
            lib/rubocop/directive_comment.rb +2/-0
            lib/rubocop/feature_loader.rb +0/-6
            lib/rubocop/lsp/routes.rb +41/-3
            lib/rubocop/lsp/runtime.rb +4/-0
            lib/rubocop/lsp/server.rb +4/-0
            lib/rubocop/lsp/stdin_runner.rb +20/-0
            lib/rubocop/pending_cops_reporter.rb +1/-6
            lib/rubocop/project_index_loader.rb +16/-0
            lib/rubocop/result_cache.rb +6/-4
            lib/rubocop/rspec/shared_contexts.rb +14/-2
            lib/rubocop/runner.rb +100/-33
            lib/rubocop/server/cache.rb +10/-5
            lib/rubocop/target_ruby.rb +1/-1
            lib/rubocop/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT version:
    1.49.1: 1.49.1
    1.50.0: 1.50.0
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
            lib/rubocop/ast/node.rb +30/-7
            lib/rubocop/ast/node/and_node.rb +2/-2
            lib/rubocop/ast/node/case_match_node.rb +1/-1
            lib/rubocop/ast/node/case_node.rb +1/-1
            lib/rubocop/ast/node/for_node.rb +1/-1
            lib/rubocop/ast/node/hash_node.rb +6/-6
            lib/rubocop/ast/node/if_node.rb +1/-1
            lib/rubocop/ast/node/mixin/descendence.rb +21/-4
            lib/rubocop/ast/node/mixin/method_dispatch_node.rb +1/-1
            lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +5/-5
            lib/rubocop/ast/node/mixin/numeric_node.rb +1/-1
            lib/rubocop/ast/node/pair_node.rb +1/-1
            lib/rubocop/ast/node/symbol_node.rb +1/-1
            lib/rubocop/ast/node/when_node.rb +1/-1
            lib/rubocop/ast/node/while_node.rb +2/-2
            lib/rubocop/ast/processed_source.rb +133/-21
            lib/rubocop/ast/version.rb +1/-1

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT version:
    1.49.1: 1.49.1
    1.50.0: 1.50.0
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
            lib/rubocop/ast/node.rb +30/-7
            lib/rubocop/ast/node/and_node.rb +2/-2
            lib/rubocop/ast/node/case_match_node.rb +1/-1
            lib/rubocop/ast/node/case_node.rb +1/-1
            lib/rubocop/ast/node/for_node.rb +1/-1
            lib/rubocop/ast/node/hash_node.rb +6/-6
            lib/rubocop/ast/node/if_node.rb +1/-1
            lib/rubocop/ast/node/mixin/descendence.rb +21/-4
            lib/rubocop/ast/node/mixin/method_dispatch_node.rb +1/-1
            lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +5/-5
            lib/rubocop/ast/node/mixin/numeric_node.rb +1/-1
            lib/rubocop/ast/node/pair_node.rb +1/-1
            lib/rubocop/ast/node/symbol_node.rb +1/-1
            lib/rubocop/ast/node/when_node.rb +1/-1
            lib/rubocop/ast/node/while_node.rb +2/-2
            lib/rubocop/ast/processed_source.rb +133/-21
            lib/rubocop/ast/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop 1.88.0 1.89.0

Diff too large (526009 chars)

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
        lib/rubocop/ast/node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node.rb	2026-08-10 02:37:39.565925701 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node.rb	2026-08-10 02:37:39.588925803 +0000
                @@ -78,0 +79,7 @@
                +      # The node types which could have a source matching `SPECIAL_KEYWORDS`:
                +      # `__FILE__` parses as `str`, `__LINE__` as `int` and `__ENCODING__` as
                +      # `const` (or as their own node types when the builder emits them);
                +      # `str` and `sym` also cover word/symbol array elements, string parts
                +      # and hash labels spelling out one of these keywords.
                +      SPECIAL_KEYWORD_TYPES = %i[str sym int const __FILE__ __LINE__ __ENCODING__].to_set.freeze
                +      private_constant :SPECIAL_KEYWORD_TYPES
                @@ -174,0 +182,7 @@
                +        type_in?(types)
                +      end
                +
                +      # Non-splatting variant of `type?`, used by the traversal hot paths to
                +      # avoid allocating an array per visited node.
                +      # @api private
                +      def type_in?(types)
                @@ -290 +304 @@
                -      # @return [Array<Node>] the different parts of the ndde
                +      # @return [Array<Node>] the different parts of the node
                @@ -506 +520 @@
                -        SPECIAL_KEYWORDS.include?(source)
                +        SPECIAL_KEYWORD_TYPES.include?(type) && SPECIAL_KEYWORDS.include?(source)
                @@ -522 +536 @@
                -        parent&.call_type? && eql?(parent.receiver)
                +        parent&.call_type? && equal?(parent.receiver)
                @@ -526 +540,3 @@
                -        parent&.send_type? && parent.arguments.include?(self)
                +        return false unless parent&.send_type?
                +
                +        parent.arguments.any? { |argument| argument.equal?(self) }
                @@ -698,3 +714,10 @@
                -        while (current_node = last_node.parent)
                -          yield current_node if types.empty? || current_node.type?(*types)
                -          last_node = current_node
                +        if types.empty?
                +          while (current_node = last_node.parent)
                +            yield current_node
                +            last_node = current_node
                +          end
                +        else
                +          while (current_node = last_node.parent)
                +            yield current_node if current_node.type_in?(types)
                +            last_node = current_node
                +          end
        lib/rubocop/ast/node/and_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:37:39.566925706 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:37:39.589925807 +0000
                @@ -5 +5 @@
                -    # A node extension for `until` nodes. This will be used in place of a plain
                +    # A node extension for `and` nodes. This will be used in place of a plain
                @@ -7 +7 @@
                -    # to all `until` nodes within RuboCop.
                +    # to all `and` nodes within RuboCop.
        lib/rubocop/ast/node/case_match_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:37:39.568925715 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:37:39.590925811 +0000
                @@ -20 +20 @@
                -        return in_pattern_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/case_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:37:39.568925715 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:37:39.590925811 +0000
                @@ -20 +20 @@
                -        return when_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/for_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:37:39.570925723 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:37:39.592925820 +0000
                @@ -11 +11 @@
                -      # @return [String] the keyword of the `until` statement
                +      # @return [String] the keyword of the `for` statement
        lib/rubocop/ast/node/hash_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:37:39.571925728 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:37:39.592925820 +0000
                @@ -59,2 +59,2 @@
                -      def each_key(&block)
                -        return pairs.map(&:key).to_enum unless block
                +      def each_key
                +        return to_enum(__method__) unless block_given?
                @@ -62 +62 @@
                -        pairs.map(&:key).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.key }
                @@ -83,2 +83,2 @@
                -      def each_value(&block)
                -        return pairs.map(&:value).to_enum unless block
                +      def each_value
                +        return to_enum(__method__) unless block_given?
                @@ -86 +86 @@
                -        pairs.map(&:value).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.value }
        lib/rubocop/ast/node/if_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:37:39.571925728 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:37:39.592925820 +0000
                @@ -172 +172 @@
                -        return branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/mixin/descendence.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:37:39.574925741 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:37:39.595925833 +0000
                @@ -28 +28 @@
                -          yield child if types.empty? || child.type?(*types)
                +          yield child if types.empty? || child.type_in?(types)
                @@ -98 +98 @@
                -        yield self if types.empty? || type?(*types)
                +        yield self if types.empty? || type_in?(types)
                @@ -107,0 +108,17 @@
                +        if types.empty?
                +          visit_all_descendants(&block)
                +        else
                +          visit_descendants_of_types(types, &block)
                +        end
                +      end
                +
                +      def visit_all_descendants(&block)
                +        children.each do |child|
                +          next unless child.is_a?(::AST::Node)
                +
                +          yield child
                +          child.visit_all_descendants(&block)
                +        end
                +      end
                +
                +      def visit_descendants_of_types(types, &block)
                @@ -111,2 +128,2 @@
                -          yield child if types.empty? || child.type?(*types)
                -          child.visit_descendants(types, &block)
                +          yield child if child.type_in?(types)
                +          child.visit_descendants_of_types(types, &block)
        lib/rubocop/ast/node/mixin/method_dispatch_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:37:39.574925741 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:37:39.595925833 +0000
                @@ -168 +168 @@
                -        parent&.any_block_type? && eql?(parent.send_node)
                +        parent&.any_block_type? && equal?(parent.send_node)
        lib/rubocop/ast/node/mixin/method_identifier_predicates.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:37:39.574925741 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:37:39.595925833 +0000
                @@ -143 +143 @@
                -        !comparison_method? && method_name.to_s.end_with?('=')
                +        !comparison_method? && method_name.end_with?('=')
                @@ -151 +151 @@
                -          method_name.to_s.start_with?('each_')
                +          method_name.start_with?('each_')
                @@ -165 +165 @@
                -        method_name.to_s.end_with?('?')
                +        method_name.end_with?('?')
                @@ -172 +172 @@
                -        method_name.to_s.end_with?('!')
                +        method_name.end_with?('!')
                @@ -180 +180 @@
                -        method_name.to_s =~ /\A[A-Z]/
                +        method_name.match?(/\A[A-Z]/)
        lib/rubocop/ast/node/mixin/numeric_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:37:39.575925745 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:37:39.596925838 +0000
                @@ -10 +10 @@
                -      # Checks whether this is literal has a sign.
                +      # Checks whether this literal has a sign.
        lib/rubocop/ast/node/pair_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:37:39.576925750 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:37:39.597925842 +0000
                @@ -35 +35 @@
                -      # colon delimited `pair` and `:` for a hash rocket delimited `pair`.
                +      # hash rocket delimited `pair` and `:` for a colon delimited `pair`.
        lib/rubocop/ast/node/symbol_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:37:39.579925763 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:37:39.599925851 +0000
                @@ -5 +5 @@
                -    # A node extension for `sym` nodes. This will be used in  place of a
                +    # A node extension for `sym` nodes. This will be used in place of a
        lib/rubocop/ast/node/when_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:37:39.580925767 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:37:39.600925855 +0000
                @@ -18 +18 @@
                -        return conditions.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/while_node.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:37:39.580925767 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:37:39.600925855 +0000
                @@ -27 +27 @@
                -      # Checks whether the `until` node has a `do` keyword.
                +      # Checks whether the `while` node has a `do` keyword.
                @@ -29 +29 @@
                -      # @return [Boolean] whether the `until` node has a `do` keyword
                +      # @return [Boolean] whether the `while` node has a `do` keyword
        lib/rubocop/ast/processed_source.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/processed_source.rb	2026-08-10 02:37:39.584925785 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/processed_source.rb	2026-08-10 02:37:39.605925877 +0000
                @@ -27,0 +28,38 @@
                +    # Extends the prism translation parsers so that the conversion of tokens
                +    # into the `parser` gem's format is deferred until the tokens are first
                +    # accessed. Building the tokens is a significant part of the translation
                +    # cost, and not every caller needs them.
                +    # @api private
                +    module PrismLazyTokens
                +      # Same contract as `Parser::Base#tokenize`, except the tokens are
                +      # returned as a callable that performs the conversion when invoked.
                +      def tokenize_deferred(source_buffer)
                +        @source_buffer = source_buffer
                +        source = source_buffer.source
                +
                +        offset_cache = build_offset_cache(source)
                +        result = unwrap(@parser.parse_lex(source, **prism_options), offset_cache)
                +
                +        program, tokens = result.value
                +        ast = build_ast(program, offset_cache) if result.success?
                +        comments = build_comments(result.comments, offset_cache)
                +
                +        [ast, comments, deferred_tokens(source_buffer, tokens, offset_cache)]
                +      ensure
                +        @source_buffer = nil
                +      end
                +
                +      private
                +
                +      def deferred_tokens(source_buffer, tokens, offset_cache)
                +        lambda do
                +          @source_buffer = source_buffer
                +          begin
                +            build_tokens(tokens, offset_cache)
                +          ensure
                +            @source_buffer = nil
                +          end
                +        end
                +      end
                +    end
                +
                @@ -41 +79 @@
                -      attr_reader :path, :buffer, :ast, :comments, :tokens, :diagnostics,
                +      attr_reader :path, :buffer, :ast, :comments, :diagnostics,
                @@ -48,0 +87,7 @@
                +      # Subclasses of the prism translation parsers with lazily built tokens.
                +      # @api private
                +      def self.lazy_tokens_parser_class(base)
                +        @lazy_tokens_parser_classes ||= {}
                +        @lazy_tokens_parser_classes[base] ||= Class.new(base) { include PrismLazyTokens }
                +      end
                +
                @@ -57 +102 @@
                -        (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                +        source = (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                @@ -80,6 +125,6 @@
                -          last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                -          result = []
                -          all_lines.each_with_index do |line, ix|
                -            break if ix >= last_token_line && line == '__END__'
                -
                -            result << line
                +          if all_lines.include?('__END__')
                +            trim_lines_after_data_marker(all_lines)
                +          else
                +            # Don't consult the tokens (which may have to be built first) when
                +            # the source can't contain a data section.
                +            all_lines.dup
                @@ -87 +131,0 @@
                -          result
                @@ -103 +147 @@
                -        Digest::SHA1.hexdigest(@raw_source)
                +        @checksum ||= Digest::SHA1.hexdigest(@raw_source)
                @@ -175,0 +220,2 @@
                +        return nil if token.line < 2
                +
                @@ -193,0 +240,13 @@
                +      # The tokens of the source. With the prism engine the tokens are built
                +      # lazily on first access, since their conversion is costly and not
                +      # every caller needs them.
                +      def tokens
                +        @tokens ||= begin
                +          tokens = parser_tokens.map { |t| Token.from_parser_token(t) }
                +          # The parser tokens are no longer needed, and the deferred conversion
                +          # holds on to the parser instance, so release both.
                +          @parser_tokens = nil
                +          tokens
                +        end
                +      end
                +
                @@ -212,2 +271,9 @@
                -        # Use stable sort.
                -        @sorted_tokens ||= tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +        # Most sources have their tokens already in order, in which case
                +        # sorting can be skipped entirely. Callers only ever read from the
                +        # returned array, so it is safe to reuse `tokens` as is.
                +        @sorted_tokens ||= if tokens_sorted?
                +                             tokens
                +                           else
                +                             # Use stable sort.
                +                             tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +                           end
                @@ -217,0 +284,17 @@
                +      def tokens_sorted?
                +        tokens.each_cons(2).all? { |a, b| a.begin_pos <= b.begin_pos }
                +      end
                +
                +      # `__END__` only starts a data section when it isn't nested inside a
                +      # string or heredoc, which is what the last token's line disambiguates.
                +      def trim_lines_after_data_marker(all_lines)
                +        last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                +        result = []
                +        all_lines.each_with_index do |line, ix|
                +          break if ix >= last_token_line && line == '__END__'
                +
                +          result << line
                +        end
                +        result
                +      end
                +
                @@ -225,2 +308 @@
                -        buffer_name = @path || STRING_SOURCE_NAME
                -        @buffer = Parser::Source::Buffer.new(buffer_name, 1)
                +        @buffer = Parser::Source::Buffer.new(@path || STRING_SOURCE_NAME, 1)
                @@ -240 +322,12 @@
                -        @ast, @comments, @tokens = tokenize(parser)
                +        @ast, @comments, tokens = tokenize(parser)
                +        store_tokens(tokens)
                +      end
                +
                +      # The tokens may be an already converted array, or a deferred conversion
                +      # to be performed when the tokens are first accessed.
                +      def store_tokens(tokens)
                +        if tokens.is_a?(Proc)
                +          @deferred_parser_tokens = tokens
                +        else
                +          @parser_tokens = tokens
                +        end
                @@ -245 +338 @@
                -          ast, comments, tokens = parser.tokenize(@buffer)
                +          ast, comments, tokens = parse_and_lex(parser)
                @@ -254 +346,0 @@
                -        tokens.map! { |t| Token.from_parser_token(t) }
                @@ -258,0 +351,17 @@
                +      def parse_and_lex(parser)
                +        if parser.respond_to?(:tokenize_deferred)
                +          parser.tokenize_deferred(@buffer)
                +        else
                +          parser.tokenize(@buffer)
                +        end
                +      end
                +
                +      def parser_tokens
                +        if @deferred_parser_tokens
                +          @parser_tokens = @deferred_parser_tokens.call
                +          @deferred_parser_tokens = nil
                +        end
                +
                +        @parser_tokens
                +      end
                +
                @@ -342,0 +452,3 @@
                +        parser_class = self.class.lazy_tokens_parser_class(parser_class) if
                +          parser_engine == :parser_prism
                +
                @@ -381,3 +493,3 @@
                -      # The Parser gem does not support Ruby 3.5 or later.
                -      # It is also not fully compatible with Ruby 3.4 but for
                -      # now respects using parser for backwards compatibility.
                +      # Prism is used for all Ruby versions it can parse (3.3 and later);
                +      # the Parser gem does not support Ruby 3.5 or later and is not fully
                +      # compatible with Ruby 3.4.
                @@ -385 +497 @@
                -        if ruby_version >= 3.4
                +        if ruby_version >= 3.3
        lib/rubocop/ast/version.rb
                --- /tmp/d20260810-15618-awf7a6/rubocop-ast-1.49.1/lib/rubocop/ast/version.rb	2026-08-10 02:37:39.585925789 +0000
                +++ /tmp/d20260810-15618-awf7a6/rubocop-ast-1.50.0/lib/rubocop/ast/version.rb	2026-08-10 02:37:39.606925882 +0000
                @@ -6 +6 @@
                -      STRING = '1.49.1'
                +      STRING = '1.50.0'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT version:
    1.49.1: 1.49.1
    1.50.0: 1.50.0
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
            lib/rubocop/ast/node.rb +30/-7
            lib/rubocop/ast/node/and_node.rb +2/-2
            lib/rubocop/ast/node/case_match_node.rb +1/-1
            lib/rubocop/ast/node/case_node.rb +1/-1
            lib/rubocop/ast/node/for_node.rb +1/-1
            lib/rubocop/ast/node/hash_node.rb +6/-6
            lib/rubocop/ast/node/if_node.rb +1/-1
            lib/rubocop/ast/node/mixin/descendence.rb +21/-4
            lib/rubocop/ast/node/mixin/method_dispatch_node.rb +1/-1
            lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +5/-5
            lib/rubocop/ast/node/mixin/numeric_node.rb +1/-1
            lib/rubocop/ast/node/pair_node.rb +1/-1
            lib/rubocop/ast/node/symbol_node.rb +1/-1
            lib/rubocop/ast/node/when_node.rb +1/-1
            lib/rubocop/ast/node/while_node.rb +2/-2
            lib/rubocop/ast/processed_source.rb +133/-21
            lib/rubocop/ast/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
        lib/rubocop/ast/node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node.rb	2026-08-10 02:38:04.270972173 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node.rb	2026-08-10 02:38:04.285972054 +0000
                @@ -78,0 +79,7 @@
                +      # The node types which could have a source matching `SPECIAL_KEYWORDS`:
                +      # `__FILE__` parses as `str`, `__LINE__` as `int` and `__ENCODING__` as
                +      # `const` (or as their own node types when the builder emits them);
                +      # `str` and `sym` also cover word/symbol array elements, string parts
                +      # and hash labels spelling out one of these keywords.
                +      SPECIAL_KEYWORD_TYPES = %i[str sym int const __FILE__ __LINE__ __ENCODING__].to_set.freeze
                +      private_constant :SPECIAL_KEYWORD_TYPES
                @@ -174,0 +182,7 @@
                +        type_in?(types)
                +      end
                +
                +      # Non-splatting variant of `type?`, used by the traversal hot paths to
                +      # avoid allocating an array per visited node.
                +      # @api private
                +      def type_in?(types)
                @@ -290 +304 @@
                -      # @return [Array<Node>] the different parts of the ndde
                +      # @return [Array<Node>] the different parts of the node
                @@ -506 +520 @@
                -        SPECIAL_KEYWORDS.include?(source)
                +        SPECIAL_KEYWORD_TYPES.include?(type) && SPECIAL_KEYWORDS.include?(source)
                @@ -522 +536 @@
                -        parent&.call_type? && eql?(parent.receiver)
                +        parent&.call_type? && equal?(parent.receiver)
                @@ -526 +540,3 @@
                -        parent&.send_type? && parent.arguments.include?(self)
                +        return false unless parent&.send_type?
                +
                +        parent.arguments.any? { |argument| argument.equal?(self) }
                @@ -698,3 +714,10 @@
                -        while (current_node = last_node.parent)
                -          yield current_node if types.empty? || current_node.type?(*types)
                -          last_node = current_node
                +        if types.empty?
                +          while (current_node = last_node.parent)
                +            yield current_node
                +            last_node = current_node
                +          end
                +        else
                +          while (current_node = last_node.parent)
                +            yield current_node if current_node.type_in?(types)
                +            last_node = current_node
                +          end
        lib/rubocop/ast/node/and_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:38:04.270972173 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:38:04.285972054 +0000
                @@ -5 +5 @@
                -    # A node extension for `until` nodes. This will be used in place of a plain
                +    # A node extension for `and` nodes. This will be used in place of a plain
                @@ -7 +7 @@
                -    # to all `until` nodes within RuboCop.
                +    # to all `and` nodes within RuboCop.
        lib/rubocop/ast/node/case_match_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:38:04.271972165 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:38:04.287972038 +0000
                @@ -20 +20 @@
                -        return in_pattern_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/case_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:38:04.271972165 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:38:04.287972038 +0000
                @@ -20 +20 @@
                -        return when_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/for_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:38:04.273972149 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:38:04.290972015 +0000
                @@ -11 +11 @@
                -      # @return [String] the keyword of the `until` statement
                +      # @return [String] the keyword of the `for` statement
        lib/rubocop/ast/node/hash_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:38:04.274972141 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:38:04.290972015 +0000
                @@ -59,2 +59,2 @@
                -      def each_key(&block)
                -        return pairs.map(&:key).to_enum unless block
                +      def each_key
                +        return to_enum(__method__) unless block_given?
                @@ -62 +62 @@
                -        pairs.map(&:key).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.key }
                @@ -83,2 +83,2 @@
                -      def each_value(&block)
                -        return pairs.map(&:value).to_enum unless block
                +      def each_value
                +        return to_enum(__method__) unless block_given?
                @@ -86 +86 @@
                -        pairs.map(&:value).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.value }
        lib/rubocop/ast/node/if_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:38:04.274972141 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:38:04.290972015 +0000
                @@ -172 +172 @@
                -        return branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/mixin/descendence.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:38:04.275972134 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:38:04.294971983 +0000
                @@ -28 +28 @@
                -          yield child if types.empty? || child.type?(*types)
                +          yield child if types.empty? || child.type_in?(types)
                @@ -98 +98 @@
                -        yield self if types.empty? || type?(*types)
                +        yield self if types.empty? || type_in?(types)
                @@ -107,0 +108,17 @@
                +        if types.empty?
                +          visit_all_descendants(&block)
                +        else
                +          visit_descendants_of_types(types, &block)
                +        end
                +      end
                +
                +      def visit_all_descendants(&block)
                +        children.each do |child|
                +          next unless child.is_a?(::AST::Node)
                +
                +          yield child
                +          child.visit_all_descendants(&block)
                +        end
                +      end
                +
                +      def visit_descendants_of_types(types, &block)
                @@ -111,2 +128,2 @@
                -          yield child if types.empty? || child.type?(*types)
                -          child.visit_descendants(types, &block)
                +          yield child if child.type_in?(types)
                +          child.visit_descendants_of_types(types, &block)
        lib/rubocop/ast/node/mixin/method_dispatch_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:38:04.275972134 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:38:04.294971983 +0000
                @@ -168 +168 @@
                -        parent&.any_block_type? && eql?(parent.send_node)
                +        parent&.any_block_type? && equal?(parent.send_node)
        lib/rubocop/ast/node/mixin/method_identifier_predicates.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:38:04.275972134 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:38:04.294971983 +0000
                @@ -143 +143 @@
                -        !comparison_method? && method_name.to_s.end_with?('=')
                +        !comparison_method? && method_name.end_with?('=')
                @@ -151 +151 @@
                -          method_name.to_s.start_with?('each_')
                +          method_name.start_with?('each_')
                @@ -165 +165 @@
                -        method_name.to_s.end_with?('?')
                +        method_name.end_with?('?')
                @@ -172 +172 @@
                -        method_name.to_s.end_with?('!')
                +        method_name.end_with?('!')
                @@ -180 +180 @@
                -        method_name.to_s =~ /\A[A-Z]/
                +        method_name.match?(/\A[A-Z]/)
        lib/rubocop/ast/node/mixin/numeric_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:38:04.276972126 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:38:04.295971975 +0000
                @@ -10 +10 @@
                -      # Checks whether this is literal has a sign.
                +      # Checks whether this literal has a sign.
        lib/rubocop/ast/node/pair_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:38:04.276972126 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:38:04.296971967 +0000
                @@ -35 +35 @@
                -      # colon delimited `pair` and `:` for a hash rocket delimited `pair`.
                +      # hash rocket delimited `pair` and `:` for a colon delimited `pair`.
        lib/rubocop/ast/node/symbol_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:38:04.277972118 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:38:04.298971951 +0000
                @@ -5 +5 @@
                -    # A node extension for `sym` nodes. This will be used in  place of a
                +    # A node extension for `sym` nodes. This will be used in place of a
        lib/rubocop/ast/node/when_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:38:04.278972110 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:38:04.299971943 +0000
                @@ -18 +18 @@
                -        return conditions.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/while_node.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:38:04.278972110 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:38:04.299971943 +0000
                @@ -27 +27 @@
                -      # Checks whether the `until` node has a `do` keyword.
                +      # Checks whether the `while` node has a `do` keyword.
                @@ -29 +29 @@
                -      # @return [Boolean] whether the `until` node has a `do` keyword
                +      # @return [Boolean] whether the `while` node has a `do` keyword
        lib/rubocop/ast/processed_source.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/processed_source.rb	2026-08-10 02:38:04.281972086 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/processed_source.rb	2026-08-10 02:38:04.302971920 +0000
                @@ -27,0 +28,38 @@
                +    # Extends the prism translation parsers so that the conversion of tokens
                +    # into the `parser` gem's format is deferred until the tokens are first
                +    # accessed. Building the tokens is a significant part of the translation
                +    # cost, and not every caller needs them.
                +    # @api private
                +    module PrismLazyTokens
                +      # Same contract as `Parser::Base#tokenize`, except the tokens are
                +      # returned as a callable that performs the conversion when invoked.
                +      def tokenize_deferred(source_buffer)
                +        @source_buffer = source_buffer
                +        source = source_buffer.source
                +
                +        offset_cache = build_offset_cache(source)
                +        result = unwrap(@parser.parse_lex(source, **prism_options), offset_cache)
                +
                +        program, tokens = result.value
                +        ast = build_ast(program, offset_cache) if result.success?
                +        comments = build_comments(result.comments, offset_cache)
                +
                +        [ast, comments, deferred_tokens(source_buffer, tokens, offset_cache)]
                +      ensure
                +        @source_buffer = nil
                +      end
                +
                +      private
                +
                +      def deferred_tokens(source_buffer, tokens, offset_cache)
                +        lambda do
                +          @source_buffer = source_buffer
                +          begin
                +            build_tokens(tokens, offset_cache)
                +          ensure
                +            @source_buffer = nil
                +          end
                +        end
                +      end
                +    end
                +
                @@ -41 +79 @@
                -      attr_reader :path, :buffer, :ast, :comments, :tokens, :diagnostics,
                +      attr_reader :path, :buffer, :ast, :comments, :diagnostics,
                @@ -48,0 +87,7 @@
                +      # Subclasses of the prism translation parsers with lazily built tokens.
                +      # @api private
                +      def self.lazy_tokens_parser_class(base)
                +        @lazy_tokens_parser_classes ||= {}
                +        @lazy_tokens_parser_classes[base] ||= Class.new(base) { include PrismLazyTokens }
                +      end
                +
                @@ -57 +102 @@
                -        (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                +        source = (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                @@ -80,6 +125,6 @@
                -          last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                -          result = []
                -          all_lines.each_with_index do |line, ix|
                -            break if ix >= last_token_line && line == '__END__'
                -
                -            result << line
                +          if all_lines.include?('__END__')
                +            trim_lines_after_data_marker(all_lines)
                +          else
                +            # Don't consult the tokens (which may have to be built first) when
                +            # the source can't contain a data section.
                +            all_lines.dup
                @@ -87 +131,0 @@
                -          result
                @@ -103 +147 @@
                -        Digest::SHA1.hexdigest(@raw_source)
                +        @checksum ||= Digest::SHA1.hexdigest(@raw_source)
                @@ -175,0 +220,2 @@
                +        return nil if token.line < 2
                +
                @@ -193,0 +240,13 @@
                +      # The tokens of the source. With the prism engine the tokens are built
                +      # lazily on first access, since their conversion is costly and not
                +      # every caller needs them.
                +      def tokens
                +        @tokens ||= begin
                +          tokens = parser_tokens.map { |t| Token.from_parser_token(t) }
                +          # The parser tokens are no longer needed, and the deferred conversion
                +          # holds on to the parser instance, so release both.
                +          @parser_tokens = nil
                +          tokens
                +        end
                +      end
                +
                @@ -212,2 +271,9 @@
                -        # Use stable sort.
                -        @sorted_tokens ||= tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +        # Most sources have their tokens already in order, in which case
                +        # sorting can be skipped entirely. Callers only ever read from the
                +        # returned array, so it is safe to reuse `tokens` as is.
                +        @sorted_tokens ||= if tokens_sorted?
                +                             tokens
                +                           else
                +                             # Use stable sort.
                +                             tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +                           end
                @@ -217,0 +284,17 @@
                +      def tokens_sorted?
                +        tokens.each_cons(2).all? { |a, b| a.begin_pos <= b.begin_pos }
                +      end
                +
                +      # `__END__` only starts a data section when it isn't nested inside a
                +      # string or heredoc, which is what the last token's line disambiguates.
                +      def trim_lines_after_data_marker(all_lines)
                +        last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                +        result = []
                +        all_lines.each_with_index do |line, ix|
                +          break if ix >= last_token_line && line == '__END__'
                +
                +          result << line
                +        end
                +        result
                +      end
                +
                @@ -225,2 +308 @@
                -        buffer_name = @path || STRING_SOURCE_NAME
                -        @buffer = Parser::Source::Buffer.new(buffer_name, 1)
                +        @buffer = Parser::Source::Buffer.new(@path || STRING_SOURCE_NAME, 1)
                @@ -240 +322,12 @@
                -        @ast, @comments, @tokens = tokenize(parser)
                +        @ast, @comments, tokens = tokenize(parser)
                +        store_tokens(tokens)
                +      end
                +
                +      # The tokens may be an already converted array, or a deferred conversion
                +      # to be performed when the tokens are first accessed.
                +      def store_tokens(tokens)
                +        if tokens.is_a?(Proc)
                +          @deferred_parser_tokens = tokens
                +        else
                +          @parser_tokens = tokens
                +        end
                @@ -245 +338 @@
                -          ast, comments, tokens = parser.tokenize(@buffer)
                +          ast, comments, tokens = parse_and_lex(parser)
                @@ -254 +346,0 @@
                -        tokens.map! { |t| Token.from_parser_token(t) }
                @@ -258,0 +351,17 @@
                +      def parse_and_lex(parser)
                +        if parser.respond_to?(:tokenize_deferred)
                +          parser.tokenize_deferred(@buffer)
                +        else
                +          parser.tokenize(@buffer)
                +        end
                +      end
                +
                +      def parser_tokens
                +        if @deferred_parser_tokens
                +          @parser_tokens = @deferred_parser_tokens.call
                +          @deferred_parser_tokens = nil
                +        end
                +
                +        @parser_tokens
                +      end
                +
                @@ -342,0 +452,3 @@
                +        parser_class = self.class.lazy_tokens_parser_class(parser_class) if
                +          parser_engine == :parser_prism
                +
                @@ -381,3 +493,3 @@
                -      # The Parser gem does not support Ruby 3.5 or later.
                -      # It is also not fully compatible with Ruby 3.4 but for
                -      # now respects using parser for backwards compatibility.
                +      # Prism is used for all Ruby versions it can parse (3.3 and later);
                +      # the Parser gem does not support Ruby 3.5 or later and is not fully
                +      # compatible with Ruby 3.4.
                @@ -385 +497 @@
                -        if ruby_version >= 3.4
                +        if ruby_version >= 3.3
        lib/rubocop/ast/version.rb
                --- /tmp/d20260810-15439-phgvy1/rubocop-ast-1.49.1/lib/rubocop/ast/version.rb	2026-08-10 02:38:04.282972078 +0000
                +++ /tmp/d20260810-15439-phgvy1/rubocop-ast-1.50.0/lib/rubocop/ast/version.rb	2026-08-10 02:38:04.303971912 +0000
                @@ -6 +6 @@
                -      STRING = '1.49.1'
                +      STRING = '1.50.0'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop 1.88.0 1.89.0

Diff too large (526008 chars)

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
        lib/rubocop/ast/node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node.rb	2026-08-10 02:38:07.815536625 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node.rb	2026-08-10 02:38:07.846536651 +0000
                @@ -78,0 +79,7 @@
                +      # The node types which could have a source matching `SPECIAL_KEYWORDS`:
                +      # `__FILE__` parses as `str`, `__LINE__` as `int` and `__ENCODING__` as
                +      # `const` (or as their own node types when the builder emits them);
                +      # `str` and `sym` also cover word/symbol array elements, string parts
                +      # and hash labels spelling out one of these keywords.
                +      SPECIAL_KEYWORD_TYPES = %i[str sym int const __FILE__ __LINE__ __ENCODING__].to_set.freeze
                +      private_constant :SPECIAL_KEYWORD_TYPES
                @@ -174,0 +182,7 @@
                +        type_in?(types)
                +      end
                +
                +      # Non-splatting variant of `type?`, used by the traversal hot paths to
                +      # avoid allocating an array per visited node.
                +      # @api private
                +      def type_in?(types)
                @@ -290 +304 @@
                -      # @return [Array<Node>] the different parts of the ndde
                +      # @return [Array<Node>] the different parts of the node
                @@ -506 +520 @@
                -        SPECIAL_KEYWORDS.include?(source)
                +        SPECIAL_KEYWORD_TYPES.include?(type) && SPECIAL_KEYWORDS.include?(source)
                @@ -522 +536 @@
                -        parent&.call_type? && eql?(parent.receiver)
                +        parent&.call_type? && equal?(parent.receiver)
                @@ -526 +540,3 @@
                -        parent&.send_type? && parent.arguments.include?(self)
                +        return false unless parent&.send_type?
                +
                +        parent.arguments.any? { |argument| argument.equal?(self) }
                @@ -698,3 +714,10 @@
                -        while (current_node = last_node.parent)
                -          yield current_node if types.empty? || current_node.type?(*types)
                -          last_node = current_node
                +        if types.empty?
                +          while (current_node = last_node.parent)
                +            yield current_node
                +            last_node = current_node
                +          end
                +        else
                +          while (current_node = last_node.parent)
                +            yield current_node if current_node.type_in?(types)
                +            last_node = current_node
                +          end
        lib/rubocop/ast/node/and_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:38:07.816536626 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:38:07.847536652 +0000
                @@ -5 +5 @@
                -    # A node extension for `until` nodes. This will be used in place of a plain
                +    # A node extension for `and` nodes. This will be used in place of a plain
                @@ -7 +7 @@
                -    # to all `until` nodes within RuboCop.
                +    # to all `and` nodes within RuboCop.
        lib/rubocop/ast/node/case_match_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:38:07.818536627 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:38:07.849536654 +0000
                @@ -20 +20 @@
                -        return in_pattern_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/case_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:38:07.818536627 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:38:07.849536654 +0000
                @@ -20 +20 @@
                -        return when_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/for_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:38:07.821536630 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:38:07.852536656 +0000
                @@ -11 +11 @@
                -      # @return [String] the keyword of the `until` statement
                +      # @return [String] the keyword of the `for` statement
        lib/rubocop/ast/node/hash_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:38:07.822536631 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:38:07.852536656 +0000
                @@ -59,2 +59,2 @@
                -      def each_key(&block)
                -        return pairs.map(&:key).to_enum unless block
                +      def each_key
                +        return to_enum(__method__) unless block_given?
                @@ -62 +62 @@
                -        pairs.map(&:key).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.key }
                @@ -83,2 +83,2 @@
                -      def each_value(&block)
                -        return pairs.map(&:value).to_enum unless block
                +      def each_value
                +        return to_enum(__method__) unless block_given?
                @@ -86 +86 @@
                -        pairs.map(&:value).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.value }
        lib/rubocop/ast/node/if_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:38:07.822536631 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:38:07.852536656 +0000
                @@ -172 +172 @@
                -        return branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/mixin/descendence.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:38:07.826536634 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:38:07.856536660 +0000
                @@ -28 +28 @@
                -          yield child if types.empty? || child.type?(*types)
                +          yield child if types.empty? || child.type_in?(types)
                @@ -98 +98 @@
                -        yield self if types.empty? || type?(*types)
                +        yield self if types.empty? || type_in?(types)
                @@ -107,0 +108,17 @@
                +        if types.empty?
                +          visit_all_descendants(&block)
                +        else
                +          visit_descendants_of_types(types, &block)
                +        end
                +      end
                +
                +      def visit_all_descendants(&block)
                +        children.each do |child|
                +          next unless child.is_a?(::AST::Node)
                +
                +          yield child
                +          child.visit_all_descendants(&block)
                +        end
                +      end
                +
                +      def visit_descendants_of_types(types, &block)
                @@ -111,2 +128,2 @@
                -          yield child if types.empty? || child.type?(*types)
                -          child.visit_descendants(types, &block)
                +          yield child if child.type_in?(types)
                +          child.visit_descendants_of_types(types, &block)
        lib/rubocop/ast/node/mixin/method_dispatch_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:38:07.827536635 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:38:07.857536661 +0000
                @@ -168 +168 @@
                -        parent&.any_block_type? && eql?(parent.send_node)
                +        parent&.any_block_type? && equal?(parent.send_node)
        lib/rubocop/ast/node/mixin/method_identifier_predicates.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:38:07.827536635 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:38:07.857536661 +0000
                @@ -143 +143 @@
                -        !comparison_method? && method_name.to_s.end_with?('=')
                +        !comparison_method? && method_name.end_with?('=')
                @@ -151 +151 @@
                -          method_name.to_s.start_with?('each_')
                +          method_name.start_with?('each_')
                @@ -165 +165 @@
                -        method_name.to_s.end_with?('?')
                +        method_name.end_with?('?')
                @@ -172 +172 @@
                -        method_name.to_s.end_with?('!')
                +        method_name.end_with?('!')
                @@ -180 +180 @@
                -        method_name.to_s =~ /\A[A-Z]/
                +        method_name.match?(/\A[A-Z]/)
        lib/rubocop/ast/node/mixin/numeric_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:38:07.828536636 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:38:07.858536662 +0000
                @@ -10 +10 @@
                -      # Checks whether this is literal has a sign.
                +      # Checks whether this literal has a sign.
        lib/rubocop/ast/node/pair_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:38:07.830536637 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:38:07.860536663 +0000
                @@ -35 +35 @@
                -      # colon delimited `pair` and `:` for a hash rocket delimited `pair`.
                +      # hash rocket delimited `pair` and `:` for a colon delimited `pair`.
        lib/rubocop/ast/node/symbol_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:38:07.833536640 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:38:07.864536667 +0000
                @@ -5 +5 @@
                -    # A node extension for `sym` nodes. This will be used in  place of a
                +    # A node extension for `sym` nodes. This will be used in place of a
        lib/rubocop/ast/node/when_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:38:07.834536641 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:38:07.864536667 +0000
                @@ -18 +18 @@
                -        return conditions.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/while_node.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:38:07.834536641 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:38:07.865536667 +0000
                @@ -27 +27 @@
                -      # Checks whether the `until` node has a `do` keyword.
                +      # Checks whether the `while` node has a `do` keyword.
                @@ -29 +29 @@
                -      # @return [Boolean] whether the `until` node has a `do` keyword
                +      # @return [Boolean] whether the `while` node has a `do` keyword
        lib/rubocop/ast/processed_source.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/processed_source.rb	2026-08-10 02:38:07.842536648 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/processed_source.rb	2026-08-10 02:38:07.871536673 +0000
                @@ -27,0 +28,38 @@
                +    # Extends the prism translation parsers so that the conversion of tokens
                +    # into the `parser` gem's format is deferred until the tokens are first
                +    # accessed. Building the tokens is a significant part of the translation
                +    # cost, and not every caller needs them.
                +    # @api private
                +    module PrismLazyTokens
                +      # Same contract as `Parser::Base#tokenize`, except the tokens are
                +      # returned as a callable that performs the conversion when invoked.
                +      def tokenize_deferred(source_buffer)
                +        @source_buffer = source_buffer
                +        source = source_buffer.source
                +
                +        offset_cache = build_offset_cache(source)
                +        result = unwrap(@parser.parse_lex(source, **prism_options), offset_cache)
                +
                +        program, tokens = result.value
                +        ast = build_ast(program, offset_cache) if result.success?
                +        comments = build_comments(result.comments, offset_cache)
                +
                +        [ast, comments, deferred_tokens(source_buffer, tokens, offset_cache)]
                +      ensure
                +        @source_buffer = nil
                +      end
                +
                +      private
                +
                +      def deferred_tokens(source_buffer, tokens, offset_cache)
                +        lambda do
                +          @source_buffer = source_buffer
                +          begin
                +            build_tokens(tokens, offset_cache)
                +          ensure
                +            @source_buffer = nil
                +          end
                +        end
                +      end
                +    end
                +
                @@ -41 +79 @@
                -      attr_reader :path, :buffer, :ast, :comments, :tokens, :diagnostics,
                +      attr_reader :path, :buffer, :ast, :comments, :diagnostics,
                @@ -48,0 +87,7 @@
                +      # Subclasses of the prism translation parsers with lazily built tokens.
                +      # @api private
                +      def self.lazy_tokens_parser_class(base)
                +        @lazy_tokens_parser_classes ||= {}
                +        @lazy_tokens_parser_classes[base] ||= Class.new(base) { include PrismLazyTokens }
                +      end
                +
                @@ -57 +102 @@
                -        (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                +        source = (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                @@ -80,6 +125,6 @@
                -          last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                -          result = []
                -          all_lines.each_with_index do |line, ix|
                -            break if ix >= last_token_line && line == '__END__'
                -
                -            result << line
                +          if all_lines.include?('__END__')
                +            trim_lines_after_data_marker(all_lines)
                +          else
                +            # Don't consult the tokens (which may have to be built first) when
                +            # the source can't contain a data section.
                +            all_lines.dup
                @@ -87 +131,0 @@
                -          result
                @@ -103 +147 @@
                -        Digest::SHA1.hexdigest(@raw_source)
                +        @checksum ||= Digest::SHA1.hexdigest(@raw_source)
                @@ -175,0 +220,2 @@
                +        return nil if token.line < 2
                +
                @@ -193,0 +240,13 @@
                +      # The tokens of the source. With the prism engine the tokens are built
                +      # lazily on first access, since their conversion is costly and not
                +      # every caller needs them.
                +      def tokens
                +        @tokens ||= begin
                +          tokens = parser_tokens.map { |t| Token.from_parser_token(t) }
                +          # The parser tokens are no longer needed, and the deferred conversion
                +          # holds on to the parser instance, so release both.
                +          @parser_tokens = nil
                +          tokens
                +        end
                +      end
                +
                @@ -212,2 +271,9 @@
                -        # Use stable sort.
                -        @sorted_tokens ||= tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +        # Most sources have their tokens already in order, in which case
                +        # sorting can be skipped entirely. Callers only ever read from the
                +        # returned array, so it is safe to reuse `tokens` as is.
                +        @sorted_tokens ||= if tokens_sorted?
                +                             tokens
                +                           else
                +                             # Use stable sort.
                +                             tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +                           end
                @@ -217,0 +284,17 @@
                +      def tokens_sorted?
                +        tokens.each_cons(2).all? { |a, b| a.begin_pos <= b.begin_pos }
                +      end
                +
                +      # `__END__` only starts a data section when it isn't nested inside a
                +      # string or heredoc, which is what the last token's line disambiguates.
                +      def trim_lines_after_data_marker(all_lines)
                +        last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                +        result = []
                +        all_lines.each_with_index do |line, ix|
                +          break if ix >= last_token_line && line == '__END__'
                +
                +          result << line
                +        end
                +        result
                +      end
                +
                @@ -225,2 +308 @@
                -        buffer_name = @path || STRING_SOURCE_NAME
                -        @buffer = Parser::Source::Buffer.new(buffer_name, 1)
                +        @buffer = Parser::Source::Buffer.new(@path || STRING_SOURCE_NAME, 1)
                @@ -240 +322,12 @@
                -        @ast, @comments, @tokens = tokenize(parser)
                +        @ast, @comments, tokens = tokenize(parser)
                +        store_tokens(tokens)
                +      end
                +
                +      # The tokens may be an already converted array, or a deferred conversion
                +      # to be performed when the tokens are first accessed.
                +      def store_tokens(tokens)
                +        if tokens.is_a?(Proc)
                +          @deferred_parser_tokens = tokens
                +        else
                +          @parser_tokens = tokens
                +        end
                @@ -245 +338 @@
                -          ast, comments, tokens = parser.tokenize(@buffer)
                +          ast, comments, tokens = parse_and_lex(parser)
                @@ -254 +346,0 @@
                -        tokens.map! { |t| Token.from_parser_token(t) }
                @@ -258,0 +351,17 @@
                +      def parse_and_lex(parser)
                +        if parser.respond_to?(:tokenize_deferred)
                +          parser.tokenize_deferred(@buffer)
                +        else
                +          parser.tokenize(@buffer)
                +        end
                +      end
                +
                +      def parser_tokens
                +        if @deferred_parser_tokens
                +          @parser_tokens = @deferred_parser_tokens.call
                +          @deferred_parser_tokens = nil
                +        end
                +
                +        @parser_tokens
                +      end
                +
                @@ -342,0 +452,3 @@
                +        parser_class = self.class.lazy_tokens_parser_class(parser_class) if
                +          parser_engine == :parser_prism
                +
                @@ -381,3 +493,3 @@
                -      # The Parser gem does not support Ruby 3.5 or later.
                -      # It is also not fully compatible with Ruby 3.4 but for
                -      # now respects using parser for backwards compatibility.
                +      # Prism is used for all Ruby versions it can parse (3.3 and later);
                +      # the Parser gem does not support Ruby 3.5 or later and is not fully
                +      # compatible with Ruby 3.4.
                @@ -385 +497 @@
                -        if ruby_version >= 3.4
                +        if ruby_version >= 3.3
        lib/rubocop/ast/version.rb
                --- /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.49.1/lib/rubocop/ast/version.rb	2026-08-10 02:38:07.843536649 +0000
                +++ /tmp/d20260810-15446-o1tvwe/rubocop-ast-1.50.0/lib/rubocop/ast/version.rb	2026-08-10 02:38:07.873536674 +0000
                @@ -6 +6 @@
                -      STRING = '1.49.1'
                +      STRING = '1.50.0'

@github-actions

Copy link
Copy Markdown
Contributor

gem compare rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT version:
    1.49.1: 1.49.1
    1.50.0: 1.50.0
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
            lib/rubocop/ast/node.rb +30/-7
            lib/rubocop/ast/node/and_node.rb +2/-2
            lib/rubocop/ast/node/case_match_node.rb +1/-1
            lib/rubocop/ast/node/case_node.rb +1/-1
            lib/rubocop/ast/node/for_node.rb +1/-1
            lib/rubocop/ast/node/hash_node.rb +6/-6
            lib/rubocop/ast/node/if_node.rb +1/-1
            lib/rubocop/ast/node/mixin/descendence.rb +21/-4
            lib/rubocop/ast/node/mixin/method_dispatch_node.rb +1/-1
            lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +5/-5
            lib/rubocop/ast/node/mixin/numeric_node.rb +1/-1
            lib/rubocop/ast/node/pair_node.rb +1/-1
            lib/rubocop/ast/node/symbol_node.rb +1/-1
            lib/rubocop/ast/node/when_node.rb +1/-1
            lib/rubocop/ast/node/while_node.rb +2/-2
            lib/rubocop/ast/processed_source.rb +133/-21
            lib/rubocop/ast/version.rb +1/-1

@github-actions

Copy link
Copy Markdown
Contributor

gem compare --diff rubocop-ast 1.49.1 1.50.0

Compared versions: ["1.49.1", "1.50.0"]
  DIFFERENT files:
    1.49.1->1.50.0:
      * Changed:
        lib/rubocop/ast/node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node.rb	2026-08-10 02:38:35.616491690 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node.rb	2026-08-10 02:38:35.633491788 +0000
                @@ -78,0 +79,7 @@
                +      # The node types which could have a source matching `SPECIAL_KEYWORDS`:
                +      # `__FILE__` parses as `str`, `__LINE__` as `int` and `__ENCODING__` as
                +      # `const` (or as their own node types when the builder emits them);
                +      # `str` and `sym` also cover word/symbol array elements, string parts
                +      # and hash labels spelling out one of these keywords.
                +      SPECIAL_KEYWORD_TYPES = %i[str sym int const __FILE__ __LINE__ __ENCODING__].to_set.freeze
                +      private_constant :SPECIAL_KEYWORD_TYPES
                @@ -174,0 +182,7 @@
                +        type_in?(types)
                +      end
                +
                +      # Non-splatting variant of `type?`, used by the traversal hot paths to
                +      # avoid allocating an array per visited node.
                +      # @api private
                +      def type_in?(types)
                @@ -290 +304 @@
                -      # @return [Array<Node>] the different parts of the ndde
                +      # @return [Array<Node>] the different parts of the node
                @@ -506 +520 @@
                -        SPECIAL_KEYWORDS.include?(source)
                +        SPECIAL_KEYWORD_TYPES.include?(type) && SPECIAL_KEYWORDS.include?(source)
                @@ -522 +536 @@
                -        parent&.call_type? && eql?(parent.receiver)
                +        parent&.call_type? && equal?(parent.receiver)
                @@ -526 +540,3 @@
                -        parent&.send_type? && parent.arguments.include?(self)
                +        return false unless parent&.send_type?
                +
                +        parent.arguments.any? { |argument| argument.equal?(self) }
                @@ -698,3 +714,10 @@
                -        while (current_node = last_node.parent)
                -          yield current_node if types.empty? || current_node.type?(*types)
                -          last_node = current_node
                +        if types.empty?
                +          while (current_node = last_node.parent)
                +            yield current_node
                +            last_node = current_node
                +          end
                +        else
                +          while (current_node = last_node.parent)
                +            yield current_node if current_node.type_in?(types)
                +            last_node = current_node
                +          end
        lib/rubocop/ast/node/and_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:38:35.617491695 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/and_node.rb	2026-08-10 02:38:35.633491788 +0000
                @@ -5 +5 @@
                -    # A node extension for `until` nodes. This will be used in place of a plain
                +    # A node extension for `and` nodes. This will be used in place of a plain
                @@ -7 +7 @@
                -    # to all `until` nodes within RuboCop.
                +    # to all `and` nodes within RuboCop.
        lib/rubocop/ast/node/case_match_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:38:35.618491701 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_match_node.rb	2026-08-10 02:38:35.635491799 +0000
                @@ -20 +20 @@
                -        return in_pattern_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/case_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:38:35.618491701 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/case_node.rb	2026-08-10 02:38:35.635491799 +0000
                @@ -20 +20 @@
                -        return when_branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/for_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:38:35.619491707 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/for_node.rb	2026-08-10 02:38:35.637491811 +0000
                @@ -11 +11 @@
                -      # @return [String] the keyword of the `until` statement
                +      # @return [String] the keyword of the `for` statement
        lib/rubocop/ast/node/hash_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:38:35.620491713 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/hash_node.rb	2026-08-10 02:38:35.637491811 +0000
                @@ -59,2 +59,2 @@
                -      def each_key(&block)
                -        return pairs.map(&:key).to_enum unless block
                +      def each_key
                +        return to_enum(__method__) unless block_given?
                @@ -62 +62 @@
                -        pairs.map(&:key).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.key }
                @@ -83,2 +83,2 @@
                -      def each_value(&block)
                -        return pairs.map(&:value).to_enum unless block
                +      def each_value
                +        return to_enum(__method__) unless block_given?
                @@ -86 +86 @@
                -        pairs.map(&:value).each(&block)
                +        each_child_node(:pair) { |pair| yield pair.value }
        lib/rubocop/ast/node/if_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:38:35.620491713 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/if_node.rb	2026-08-10 02:38:35.637491811 +0000
                @@ -172 +172 @@
                -        return branches.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/mixin/descendence.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:38:35.621491718 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/descendence.rb	2026-08-10 02:38:35.640491828 +0000
                @@ -28 +28 @@
                -          yield child if types.empty? || child.type?(*types)
                +          yield child if types.empty? || child.type_in?(types)
                @@ -98 +98 @@
                -        yield self if types.empty? || type?(*types)
                +        yield self if types.empty? || type_in?(types)
                @@ -107,0 +108,17 @@
                +        if types.empty?
                +          visit_all_descendants(&block)
                +        else
                +          visit_descendants_of_types(types, &block)
                +        end
                +      end
                +
                +      def visit_all_descendants(&block)
                +        children.each do |child|
                +          next unless child.is_a?(::AST::Node)
                +
                +          yield child
                +          child.visit_all_descendants(&block)
                +        end
                +      end
                +
                +      def visit_descendants_of_types(types, &block)
                @@ -111,2 +128,2 @@
                -          yield child if types.empty? || child.type?(*types)
                -          child.visit_descendants(types, &block)
                +          yield child if child.type_in?(types)
                +          child.visit_descendants_of_types(types, &block)
        lib/rubocop/ast/node/mixin/method_dispatch_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:38:35.621491718 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_dispatch_node.rb	2026-08-10 02:38:35.640491828 +0000
                @@ -168 +168 @@
                -        parent&.any_block_type? && eql?(parent.send_node)
                +        parent&.any_block_type? && equal?(parent.send_node)
        lib/rubocop/ast/node/mixin/method_identifier_predicates.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:38:35.622491724 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb	2026-08-10 02:38:35.640491828 +0000
                @@ -143 +143 @@
                -        !comparison_method? && method_name.to_s.end_with?('=')
                +        !comparison_method? && method_name.end_with?('=')
                @@ -151 +151 @@
                -          method_name.to_s.start_with?('each_')
                +          method_name.start_with?('each_')
                @@ -165 +165 @@
                -        method_name.to_s.end_with?('?')
                +        method_name.end_with?('?')
                @@ -172 +172 @@
                -        method_name.to_s.end_with?('!')
                +        method_name.end_with?('!')
                @@ -180 +180 @@
                -        method_name.to_s =~ /\A[A-Z]/
                +        method_name.match?(/\A[A-Z]/)
        lib/rubocop/ast/node/mixin/numeric_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:38:35.622491724 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/mixin/numeric_node.rb	2026-08-10 02:38:35.641491834 +0000
                @@ -10 +10 @@
                -      # Checks whether this is literal has a sign.
                +      # Checks whether this literal has a sign.
        lib/rubocop/ast/node/pair_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:38:35.623491730 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/pair_node.rb	2026-08-10 02:38:35.642491839 +0000
                @@ -35 +35 @@
                -      # colon delimited `pair` and `:` for a hash rocket delimited `pair`.
                +      # hash rocket delimited `pair` and `:` for a colon delimited `pair`.
        lib/rubocop/ast/node/symbol_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:38:35.624491736 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/symbol_node.rb	2026-08-10 02:38:35.644491851 +0000
                @@ -5 +5 @@
                -    # A node extension for `sym` nodes. This will be used in  place of a
                +    # A node extension for `sym` nodes. This will be used in place of a
        lib/rubocop/ast/node/when_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:38:35.624491736 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/when_node.rb	2026-08-10 02:38:35.644491851 +0000
                @@ -18 +18 @@
                -        return conditions.to_enum(__method__) unless block
                +        return to_enum(__method__) unless block
        lib/rubocop/ast/node/while_node.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:38:35.624491736 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/node/while_node.rb	2026-08-10 02:38:35.645491857 +0000
                @@ -27 +27 @@
                -      # Checks whether the `until` node has a `do` keyword.
                +      # Checks whether the `while` node has a `do` keyword.
                @@ -29 +29 @@
                -      # @return [Boolean] whether the `until` node has a `do` keyword
                +      # @return [Boolean] whether the `while` node has a `do` keyword
        lib/rubocop/ast/processed_source.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/processed_source.rb	2026-08-10 02:38:35.629491765 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/processed_source.rb	2026-08-10 02:38:35.654491909 +0000
                @@ -27,0 +28,38 @@
                +    # Extends the prism translation parsers so that the conversion of tokens
                +    # into the `parser` gem's format is deferred until the tokens are first
                +    # accessed. Building the tokens is a significant part of the translation
                +    # cost, and not every caller needs them.
                +    # @api private
                +    module PrismLazyTokens
                +      # Same contract as `Parser::Base#tokenize`, except the tokens are
                +      # returned as a callable that performs the conversion when invoked.
                +      def tokenize_deferred(source_buffer)
                +        @source_buffer = source_buffer
                +        source = source_buffer.source
                +
                +        offset_cache = build_offset_cache(source)
                +        result = unwrap(@parser.parse_lex(source, **prism_options), offset_cache)
                +
                +        program, tokens = result.value
                +        ast = build_ast(program, offset_cache) if result.success?
                +        comments = build_comments(result.comments, offset_cache)
                +
                +        [ast, comments, deferred_tokens(source_buffer, tokens, offset_cache)]
                +      ensure
                +        @source_buffer = nil
                +      end
                +
                +      private
                +
                +      def deferred_tokens(source_buffer, tokens, offset_cache)
                +        lambda do
                +          @source_buffer = source_buffer
                +          begin
                +            build_tokens(tokens, offset_cache)
                +          ensure
                +            @source_buffer = nil
                +          end
                +        end
                +      end
                +    end
                +
                @@ -41 +79 @@
                -      attr_reader :path, :buffer, :ast, :comments, :tokens, :diagnostics,
                +      attr_reader :path, :buffer, :ast, :comments, :diagnostics,
                @@ -48,0 +87,7 @@
                +      # Subclasses of the prism translation parsers with lazily built tokens.
                +      # @api private
                +      def self.lazy_tokens_parser_class(base)
                +        @lazy_tokens_parser_classes ||= {}
                +        @lazy_tokens_parser_classes[base] ||= Class.new(base) { include PrismLazyTokens }
                +      end
                +
                @@ -57 +102 @@
                -        (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                +        source = (+source).force_encoding(Encoding::UTF_8) unless source.encoding == Encoding::UTF_8
                @@ -80,6 +125,6 @@
                -          last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                -          result = []
                -          all_lines.each_with_index do |line, ix|
                -            break if ix >= last_token_line && line == '__END__'
                -
                -            result << line
                +          if all_lines.include?('__END__')
                +            trim_lines_after_data_marker(all_lines)
                +          else
                +            # Don't consult the tokens (which may have to be built first) when
                +            # the source can't contain a data section.
                +            all_lines.dup
                @@ -87 +131,0 @@
                -          result
                @@ -103 +147 @@
                -        Digest::SHA1.hexdigest(@raw_source)
                +        @checksum ||= Digest::SHA1.hexdigest(@raw_source)
                @@ -175,0 +220,2 @@
                +        return nil if token.line < 2
                +
                @@ -193,0 +240,13 @@
                +      # The tokens of the source. With the prism engine the tokens are built
                +      # lazily on first access, since their conversion is costly and not
                +      # every caller needs them.
                +      def tokens
                +        @tokens ||= begin
                +          tokens = parser_tokens.map { |t| Token.from_parser_token(t) }
                +          # The parser tokens are no longer needed, and the deferred conversion
                +          # holds on to the parser instance, so release both.
                +          @parser_tokens = nil
                +          tokens
                +        end
                +      end
                +
                @@ -212,2 +271,9 @@
                -        # Use stable sort.
                -        @sorted_tokens ||= tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +        # Most sources have their tokens already in order, in which case
                +        # sorting can be skipped entirely. Callers only ever read from the
                +        # returned array, so it is safe to reuse `tokens` as is.
                +        @sorted_tokens ||= if tokens_sorted?
                +                             tokens
                +                           else
                +                             # Use stable sort.
                +                             tokens.sort_by.with_index { |token, i| [token.begin_pos, i] }
                +                           end
                @@ -217,0 +284,17 @@
                +      def tokens_sorted?
                +        tokens.each_cons(2).all? { |a, b| a.begin_pos <= b.begin_pos }
                +      end
                +
                +      # `__END__` only starts a data section when it isn't nested inside a
                +      # string or heredoc, which is what the last token's line disambiguates.
                +      def trim_lines_after_data_marker(all_lines)
                +        last_token_line = tokens.any? ? tokens.last.line : all_lines.size
                +        result = []
                +        all_lines.each_with_index do |line, ix|
                +          break if ix >= last_token_line && line == '__END__'
                +
                +          result << line
                +        end
                +        result
                +      end
                +
                @@ -225,2 +308 @@
                -        buffer_name = @path || STRING_SOURCE_NAME
                -        @buffer = Parser::Source::Buffer.new(buffer_name, 1)
                +        @buffer = Parser::Source::Buffer.new(@path || STRING_SOURCE_NAME, 1)
                @@ -240 +322,12 @@
                -        @ast, @comments, @tokens = tokenize(parser)
                +        @ast, @comments, tokens = tokenize(parser)
                +        store_tokens(tokens)
                +      end
                +
                +      # The tokens may be an already converted array, or a deferred conversion
                +      # to be performed when the tokens are first accessed.
                +      def store_tokens(tokens)
                +        if tokens.is_a?(Proc)
                +          @deferred_parser_tokens = tokens
                +        else
                +          @parser_tokens = tokens
                +        end
                @@ -245 +338 @@
                -          ast, comments, tokens = parser.tokenize(@buffer)
                +          ast, comments, tokens = parse_and_lex(parser)
                @@ -254 +346,0 @@
                -        tokens.map! { |t| Token.from_parser_token(t) }
                @@ -258,0 +351,17 @@
                +      def parse_and_lex(parser)
                +        if parser.respond_to?(:tokenize_deferred)
                +          parser.tokenize_deferred(@buffer)
                +        else
                +          parser.tokenize(@buffer)
                +        end
                +      end
                +
                +      def parser_tokens
                +        if @deferred_parser_tokens
                +          @parser_tokens = @deferred_parser_tokens.call
                +          @deferred_parser_tokens = nil
                +        end
                +
                +        @parser_tokens
                +      end
                +
                @@ -342,0 +452,3 @@
                +        parser_class = self.class.lazy_tokens_parser_class(parser_class) if
                +          parser_engine == :parser_prism
                +
                @@ -381,3 +493,3 @@
                -      # The Parser gem does not support Ruby 3.5 or later.
                -      # It is also not fully compatible with Ruby 3.4 but for
                -      # now respects using parser for backwards compatibility.
                +      # Prism is used for all Ruby versions it can parse (3.3 and later);
                +      # the Parser gem does not support Ruby 3.5 or later and is not fully
                +      # compatible with Ruby 3.4.
                @@ -385 +497 @@
                -        if ruby_version >= 3.4
                +        if ruby_version >= 3.3
        lib/rubocop/ast/version.rb
                --- /tmp/d20260810-15498-hdnidz/rubocop-ast-1.49.1/lib/rubocop/ast/version.rb	2026-08-10 02:38:35.630491770 +0000
                +++ /tmp/d20260810-15498-hdnidz/rubocop-ast-1.50.0/lib/rubocop/ast/version.rb	2026-08-10 02:38:35.655491915 +0000
                @@ -6 +6 @@
                -      STRING = '1.49.1'
                +      STRING = '1.50.0'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies ruby Pull requests that update Ruby code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants