RBS 4.1 ships with JRuby support. The RBS parser is written in plain C without depending on the Ruby C API, so it is compiled to WebAssembly and runs on a Wasm runtime, with the parsed AST serialized in a binary format and decoded into RBS objects. The full test suite runs on JRuby in CI.
The inline RBS syntax gets three new features: singleton method definitions (def self.), the module-self constraint, and instance variable annotations in module declarations. Note that RBS inline is still experimental and may change in future releases.
This release also introduces RBS::Rewriter, an API to edit RBS source text while preserving the surrounding content, which rbs annotate is now built on. Parsing performance is improved by interning type names in a shared trie and reducing allocations per node.
RBS::Prototype::Runtime, the RDoc plugin parser, and the top-level float type alias are deprecated in this release.
Signature updates
Updated classes/modules/methods: ARGF, Array, CSV, Class, Delegator, Digest, ERB, Enumerable, Enumerator, Enumerator::Product, Etc, File, File::Constants, File::Stat, FileUtils, Float, Gem, Hash, IO, IPAddr, Integer, JSON, Kernel, MatchData, Module, Monitor, Numeric, ObjectSpace::WeakKeyMap, OpenSSL, Pathname, RBS::Ops, Ractor, Range, Resolv, RubyVM::InstructionSequence, Set, Shellwords, String, StringIO, StringScanner, Struct, Tempfile, Thread, Timeout, TSort, URI::Generic, Zlib::GzipReader, Zlib::ZStream
- Remove stale Float constants and add a constant drift test (#2994)
- Update RDoc comments with Ruby 4.0.6 (#3035)
- Add a dependency on tempfile. (#3025)
- Support
%a{implicitly-returns-nil}onMatchData#[](#2990) - Update
Array(#2987) - Allow nil output buffers for reader methods (#3002)
- Add stdlib signature tests for #2967 (#2989)
- Update
Integer, phase 1 (#2995) - Add RBS::Ops (#2934)
- Update Module (#2933)
- Correct core/stdlib signatures to match Ruby 4.0 (#2967)
- Revert Digest::Class method changes (#2980)
- Add stdlib tests for updated StringScanner signatures (#2968)
- Update
StringScannersignatures to match strscan 3.1.6 (#2959) - Remove StringScanner methods absent from the latest Ruby release (#2961)
- Fix
Resolv#initializesignature: array of resolvers +use_ipv6:(#2960) - [Hash] Update Hash's signatures and tests to be correct (#2694)
- update rbs signatures to be more consistent with generics (#2867)
- Use top-level
pathin fileutils.rbs to suppress deprecation warning (#2949) - Update File::Constants and File::Stat (#2942)
- Add signature for
RubyVM::InstructionSequence.of(#2916) - fix OpenSSL#session_new_cb signature (#2924)
- [Class] update class.rbs (#2898)
- Deprecate top-level float (#2695)
- [Kernel] Updated querying methods (#2685)
Library changes
- Convert character offset to byte offset in parse_inline_*_annotation (#2945)
- Guard against underflow when sysconf(_SC_PAGESIZE) returns 0 (#3031)
- Report invalid UTF-8 byte in a comment as a parsing error (#2983)
- Fetch Chicory/ASM jars from Maven instead of bundling in gem (#3019)
- Add write barrier protection to RBS Location objects (#3022)
- Rename parameter in rbs_intern_type_name for clarity (#3023)
- Deprecate RDoc plugin parser (#3016)
- Run the test suite on JRuby (JRuby support, step 4) (#3008)
- Run the RBS parser on JRuby via WebAssembly (JRuby support, step 3) (#3000)
- Add binary serialization of the parsed AST (JRuby support, step 2) (#2999)
- Build the RBS parser as a WebAssembly module (JRuby support, step 1) (#2998)
- Reject reversed position ranges in parser/lexer entrypoints (#2974)
- Fix lexer infinite loop / abort on invalid UTF-8 byte (#2973)
- Flyweight TypeName / Namespace cached in a shared trie (#2957)
- Reduce Hash allocation per
Nodecreation (#2946) - Tidy
ast_translation.c(#2947) - Auto-generate rbs_ast_ruby_annotations_t union from config.yml (#2939)
- Speed up RBS::InlineParser on large sources with non-ASCII characters (#2950)
- Support
def self.method_namesingleton method in inline parser (#2935) - This is not prism (#2951)
- Add RBS::Rewriter and use it in rbs annotate (#2927)
- Add nullability annotations to AST pointer types (#2922)
- Support
module-selfinline annotation (#2921) - Inline instance variable annotation in module declaration (#2919)
rbs prototype
rbs collection
- Clean up partial clone before falling back to full clone (#2978)
- Suppress spurious warning for non-gem stdlib libraries (#2929)
Miscellaneous
- Fix Lint/DuplicateMethods in StringIO_test.rb (#3010)
- Compressed files must be opened in binary mode (#2981)
- Fix flaky DirSingletonTest GC failures in test_fchdir and test_for_fd (#3004)
- Add TruffleRuby CI job (#2996)
- Update the target Ruby version notes to the latest release (#2962)
- Update docs/inline.md to match current inline parser behavior (#2953)
- ci: skip Gemfile.lock BUNDLED WITH on ruby-head (#2952)
- Remove
loggerfrom sig dependencies (#2904)