github ruby/rbs v4.1.0
4.1.0

4 hours ago

Release note

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} on MatchData#[] (#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 StringScanner signatures to match strscan 3.1.6 (#2959)
  • Remove StringScanner methods absent from the latest Ruby release (#2961)
  • Fix Resolv#initialize signature: 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 path in 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 Node creation (#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_name singleton 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-self inline annotation (#2921)
  • Inline instance variable annotation in module declaration (#2919)

rbs prototype

  • Fix nested declarations in rbs prototype rbi (#3029)
  • Deprecate prototype runtime (#2956)

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 logger from sig dependencies (#2904)

Don't miss a new rbs release

NewReleases is sending notifications on new releases.