rbs 3.9.4 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.dockerignore +37 -0
  5. data/.gitattributes +1 -0
  6. data/.github/dependabot.yml +16 -14
  7. data/.github/workflows/bundle-update.yml +63 -0
  8. data/.github/workflows/c-check.yml +66 -0
  9. data/.github/workflows/changelog.yml +121 -0
  10. data/.github/workflows/comments.yml +6 -4
  11. data/.github/workflows/dependabot.yml +2 -2
  12. data/.github/workflows/jruby.yml +74 -0
  13. data/.github/workflows/release-gems.yml +234 -0
  14. data/.github/workflows/ruby.yml +86 -32
  15. data/.github/workflows/rust.yml +186 -0
  16. data/.github/workflows/truffleruby.yml +54 -0
  17. data/.github/workflows/typecheck.yml +6 -3
  18. data/.github/workflows/wasm.yml +55 -0
  19. data/.github/workflows/windows.yml +10 -4
  20. data/.gitignore +16 -0
  21. data/.rubocop.yml +1 -2
  22. data/CHANGELOG.md +502 -0
  23. data/Dockerfile.jruby +53 -0
  24. data/README.md +42 -5
  25. data/Rakefile +892 -111
  26. data/Steepfile +11 -0
  27. data/config.yml +665 -62
  28. data/core/array.rbs +541 -398
  29. data/core/basic_object.rbs +9 -8
  30. data/core/binding.rbs +0 -2
  31. data/core/builtin.rbs +9 -8
  32. data/core/class.rbs +11 -8
  33. data/core/comparable.rbs +55 -34
  34. data/core/complex.rbs +104 -78
  35. data/core/dir.rbs +61 -49
  36. data/core/encoding.rbs +12 -15
  37. data/core/enumerable.rbs +297 -196
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +5 -5
  40. data/core/enumerator.rbs +91 -28
  41. data/core/errno.rbs +11 -2
  42. data/core/errors.rbs +58 -29
  43. data/core/exception.rbs +13 -13
  44. data/core/fiber.rbs +74 -54
  45. data/core/file.rbs +260 -1151
  46. data/core/file_constants.rbs +463 -0
  47. data/core/file_stat.rbs +534 -0
  48. data/core/file_test.rbs +3 -3
  49. data/core/float.rbs +257 -116
  50. data/core/gc.rbs +425 -281
  51. data/core/hash.rbs +1151 -829
  52. data/core/integer.rbs +156 -195
  53. data/core/io/buffer.rbs +53 -42
  54. data/core/io/wait.rbs +13 -35
  55. data/core/io.rbs +222 -155
  56. data/core/kernel.rbs +239 -163
  57. data/core/marshal.rbs +4 -4
  58. data/core/match_data.rbs +16 -14
  59. data/core/math.rbs +107 -66
  60. data/core/method.rbs +69 -33
  61. data/core/module.rbs +302 -150
  62. data/core/nil_class.rbs +7 -6
  63. data/core/numeric.rbs +77 -63
  64. data/core/object.rbs +9 -11
  65. data/core/object_space/weak_key_map.rbs +7 -7
  66. data/core/object_space.rbs +30 -23
  67. data/core/pathname.rbs +1312 -0
  68. data/core/proc.rbs +95 -58
  69. data/core/process.rbs +222 -202
  70. data/core/ractor.rbs +364 -518
  71. data/core/random.rbs +21 -3
  72. data/core/range.rbs +181 -79
  73. data/core/rational.rbs +60 -89
  74. data/core/rbs/ops.rbs +154 -0
  75. data/core/rbs/unnamed/argf.rbs +63 -56
  76. data/core/rbs/unnamed/env_class.rbs +19 -14
  77. data/core/rbs/unnamed/main_class.rbs +123 -0
  78. data/core/rbs/unnamed/random.rbs +11 -118
  79. data/core/regexp.rbs +258 -214
  80. data/core/ruby.rbs +53 -0
  81. data/core/ruby_vm.rbs +78 -34
  82. data/core/rubygems/config_file.rbs +5 -5
  83. data/core/rubygems/errors.rbs +6 -70
  84. data/core/rubygems/requirement.rbs +5 -15
  85. data/core/rubygems/rubygems.rbs +18 -81
  86. data/core/rubygems/specification.rbs +8 -0
  87. data/core/rubygems/version.rbs +2 -163
  88. data/core/set.rbs +493 -363
  89. data/core/signal.rbs +26 -16
  90. data/core/string.rbs +3234 -1285
  91. data/core/struct.rbs +43 -42
  92. data/core/symbol.rbs +41 -34
  93. data/core/thread.rbs +139 -83
  94. data/core/time.rbs +81 -50
  95. data/core/trace_point.rbs +41 -35
  96. data/core/true_class.rbs +2 -2
  97. data/core/unbound_method.rbs +24 -16
  98. data/core/warning.rbs +7 -7
  99. data/docs/CONTRIBUTING.md +3 -2
  100. data/docs/aliases.md +79 -0
  101. data/docs/collection.md +3 -3
  102. data/docs/config.md +171 -0
  103. data/docs/encoding.md +56 -0
  104. data/docs/gem.md +0 -1
  105. data/docs/inline.md +634 -0
  106. data/docs/rbs_by_example.md +20 -20
  107. data/docs/release.md +303 -0
  108. data/docs/rust.md +96 -0
  109. data/docs/sigs.md +3 -3
  110. data/docs/stdlib.md +8 -0
  111. data/docs/syntax.md +60 -18
  112. data/docs/type_fingerprint.md +21 -0
  113. data/docs/wasm_serialization.md +80 -0
  114. data/exe/rbs +1 -1
  115. data/ext/rbs_extension/ast_translation.c +1870 -0
  116. data/ext/rbs_extension/ast_translation.h +41 -0
  117. data/ext/rbs_extension/class_constants.c +189 -0
  118. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +24 -1
  119. data/ext/rbs_extension/compat.h +10 -0
  120. data/ext/rbs_extension/extconf.rb +26 -1
  121. data/ext/rbs_extension/legacy_location.c +299 -0
  122. data/ext/rbs_extension/legacy_location.h +82 -0
  123. data/ext/rbs_extension/main.c +639 -23
  124. data/ext/rbs_extension/rbs_extension.h +6 -21
  125. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  126. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  127. data/include/rbs/ast.h +1055 -0
  128. data/include/rbs/defines.h +104 -0
  129. data/include/rbs/lexer.h +208 -0
  130. data/include/rbs/location.h +40 -0
  131. data/include/rbs/parser.h +187 -0
  132. data/include/rbs/serialize.h +39 -0
  133. data/include/rbs/string.h +47 -0
  134. data/include/rbs/util/rbs_allocator.h +59 -0
  135. data/include/rbs/util/rbs_assert.h +20 -0
  136. data/include/rbs/util/rbs_buffer.h +83 -0
  137. data/include/rbs/util/rbs_constant_pool.h +6 -70
  138. data/include/rbs/util/rbs_encoding.h +282 -0
  139. data/include/rbs/util/rbs_unescape.h +24 -0
  140. data/include/rbs.h +9 -2
  141. data/lib/rbs/annotate/formatter.rb +3 -13
  142. data/lib/rbs/annotate/rdoc_annotator.rb +30 -32
  143. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  144. data/lib/rbs/ast/annotation.rb +1 -1
  145. data/lib/rbs/ast/comment.rb +1 -1
  146. data/lib/rbs/ast/declarations.rb +11 -11
  147. data/lib/rbs/ast/members.rb +14 -14
  148. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  149. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  150. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  151. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  152. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  153. data/lib/rbs/ast/ruby/members.rb +762 -0
  154. data/lib/rbs/ast/type_param.rb +25 -5
  155. data/lib/rbs/buffer.rb +142 -20
  156. data/lib/rbs/cli/diff.rb +16 -15
  157. data/lib/rbs/cli/validate.rb +63 -126
  158. data/lib/rbs/cli.rb +59 -29
  159. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  160. data/lib/rbs/collection/sources/git.rb +7 -0
  161. data/lib/rbs/definition.rb +6 -1
  162. data/lib/rbs/definition_builder/ancestor_builder.rb +129 -70
  163. data/lib/rbs/definition_builder/method_builder.rb +74 -33
  164. data/lib/rbs/definition_builder.rb +181 -21
  165. data/lib/rbs/diff.rb +7 -1
  166. data/lib/rbs/environment/class_entry.rb +81 -0
  167. data/lib/rbs/environment/module_entry.rb +91 -0
  168. data/lib/rbs/environment.rb +410 -215
  169. data/lib/rbs/environment_loader.rb +2 -8
  170. data/lib/rbs/errors.rb +31 -21
  171. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  172. data/lib/rbs/inline_parser.rb +568 -0
  173. data/lib/rbs/location_aux.rb +36 -4
  174. data/lib/rbs/locator.rb +5 -1
  175. data/lib/rbs/method_type.rb +5 -3
  176. data/lib/rbs/namespace.rb +47 -18
  177. data/lib/rbs/parser_aux.rb +37 -7
  178. data/lib/rbs/prototype/helpers.rb +24 -0
  179. data/lib/rbs/prototype/rb.rb +3 -28
  180. data/lib/rbs/prototype/rbi.rb +196 -45
  181. data/lib/rbs/prototype/runtime/value_object_generator.rb +0 -1
  182. data/lib/rbs/prototype/runtime.rb +13 -3
  183. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  184. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  185. data/lib/rbs/rewriter.rb +70 -0
  186. data/lib/rbs/source.rb +99 -0
  187. data/lib/rbs/subtractor.rb +7 -4
  188. data/lib/rbs/test/type_check.rb +25 -3
  189. data/lib/rbs/type_name.rb +34 -21
  190. data/lib/rbs/types.rb +135 -81
  191. data/lib/rbs/unit_test/convertibles.rb +1 -0
  192. data/lib/rbs/unit_test/type_assertions.rb +47 -11
  193. data/lib/rbs/validator.rb +2 -2
  194. data/lib/rbs/version.rb +1 -1
  195. data/lib/rbs/wasm/deserializer.rb +213 -0
  196. data/lib/rbs/wasm/location.rb +61 -0
  197. data/lib/rbs/wasm/parser.rb +174 -0
  198. data/lib/rbs/wasm/runtime.rb +211 -0
  199. data/lib/rbs/wasm/serialization_schema.rb +111 -0
  200. data/lib/rbs.rb +25 -2
  201. data/lib/rbs_jars.rb +39 -0
  202. data/lib/rdoc/discover.rb +1 -1
  203. data/lib/rdoc_plugin/parser.rb +8 -3
  204. data/rbs.gemspec +34 -6
  205. data/schema/function.json +12 -1
  206. data/schema/typeParam.json +17 -1
  207. data/sig/ancestor_builder.rbs +1 -1
  208. data/sig/annotate/formatter.rbs +2 -2
  209. data/sig/annotate/rdoc_annotater.rbs +13 -10
  210. data/sig/ast/ruby/annotations.rbs +470 -0
  211. data/sig/ast/ruby/comment_block.rbs +127 -0
  212. data/sig/ast/ruby/declarations.rbs +158 -0
  213. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  214. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  215. data/sig/ast/ruby/members.rbs +198 -0
  216. data/sig/buffer.rbs +81 -5
  217. data/sig/cli/diff.rbs +5 -11
  218. data/sig/cli/validate.rbs +12 -8
  219. data/sig/cli.rbs +18 -18
  220. data/sig/collection/config/lockfile_generator.rbs +2 -0
  221. data/sig/definition.rbs +6 -0
  222. data/sig/definition_builder.rbs +3 -1
  223. data/sig/environment/class_entry.rbs +56 -0
  224. data/sig/environment/module_entry.rbs +65 -0
  225. data/sig/environment.rbs +94 -87
  226. data/sig/errors.rbs +26 -20
  227. data/sig/inline_parser/comment_association.rbs +71 -0
  228. data/sig/inline_parser.rbs +126 -0
  229. data/sig/location.rbs +32 -7
  230. data/sig/locator.rbs +0 -2
  231. data/sig/manifest.yaml +0 -2
  232. data/sig/method_builder.rbs +9 -4
  233. data/sig/namespace.rbs +20 -5
  234. data/sig/parser.rbs +79 -15
  235. data/sig/prototype/helpers.rbs +2 -0
  236. data/sig/prototype/rbi.rbs +33 -4
  237. data/sig/resolver/type_name_resolver.rbs +36 -10
  238. data/sig/rewriter.rbs +45 -0
  239. data/sig/source.rbs +48 -0
  240. data/sig/type_param.rbs +13 -8
  241. data/sig/typename.rbs +15 -5
  242. data/sig/types.rbs +21 -9
  243. data/sig/unit_test/spy.rbs +0 -8
  244. data/sig/unit_test/type_assertions.rbs +17 -2
  245. data/sig/wasm/deserializer.rbs +66 -0
  246. data/sig/wasm/serialization_schema.rbs +13 -0
  247. data/src/ast.c +1644 -0
  248. data/src/lexer.c +3223 -0
  249. data/src/lexer.re +187 -0
  250. data/src/lexstate.c +222 -0
  251. data/src/location.c +31 -0
  252. data/src/parser.c +4318 -0
  253. data/src/serialize.c +965 -0
  254. data/src/string.c +41 -0
  255. data/src/util/rbs_allocator.c +171 -0
  256. data/src/util/rbs_assert.c +19 -0
  257. data/src/util/rbs_buffer.c +54 -0
  258. data/src/util/rbs_constant_pool.c +18 -92
  259. data/src/util/rbs_encoding.c +21454 -0
  260. data/src/util/rbs_unescape.c +167 -0
  261. data/stdlib/abbrev/0/array.rbs +1 -1
  262. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  263. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  264. data/stdlib/cgi/0/core.rbs +9 -393
  265. data/stdlib/cgi/0/manifest.yaml +1 -0
  266. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  267. data/stdlib/coverage/0/coverage.rbs +7 -4
  268. data/stdlib/csv/0/csv.rbs +5 -5
  269. data/stdlib/date/0/date.rbs +92 -79
  270. data/stdlib/date/0/date_time.rbs +25 -24
  271. data/stdlib/delegate/0/delegator.rbs +11 -7
  272. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  273. data/stdlib/digest/0/digest.rbs +117 -1
  274. data/stdlib/erb/0/erb.rbs +754 -353
  275. data/stdlib/etc/0/etc.rbs +73 -54
  276. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  277. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  278. data/stdlib/io-console/0/io-console.rbs +2 -2
  279. data/stdlib/ipaddr/0/ipaddr.rbs +0 -5
  280. data/stdlib/json/0/json.rbs +232 -185
  281. data/stdlib/monitor/0/monitor.rbs +9 -9
  282. data/stdlib/net-http/0/net-http.rbs +162 -134
  283. data/stdlib/objspace/0/objspace.rbs +17 -34
  284. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  285. data/stdlib/open3/0/open3.rbs +469 -10
  286. data/stdlib/openssl/0/openssl.rbs +521 -397
  287. data/stdlib/optparse/0/optparse.rbs +26 -17
  288. data/stdlib/pathname/0/pathname.rbs +11 -1381
  289. data/stdlib/pp/0/pp.rbs +9 -8
  290. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  291. data/stdlib/pstore/0/pstore.rbs +35 -30
  292. data/stdlib/psych/0/psych.rbs +65 -12
  293. data/stdlib/psych/0/store.rbs +2 -4
  294. data/stdlib/pty/0/pty.rbs +9 -6
  295. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  296. data/stdlib/rdoc/0/code_object.rbs +4 -3
  297. data/stdlib/rdoc/0/comment.rbs +2 -0
  298. data/stdlib/rdoc/0/options.rbs +76 -0
  299. data/stdlib/rdoc/0/parser.rbs +1 -1
  300. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  301. data/stdlib/rdoc/0/store.rbs +2 -2
  302. data/stdlib/resolv/0/resolv.rbs +26 -69
  303. data/stdlib/ripper/0/ripper.rbs +25 -19
  304. data/stdlib/securerandom/0/manifest.yaml +2 -0
  305. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  306. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  307. data/stdlib/singleton/0/singleton.rbs +6 -0
  308. data/stdlib/socket/0/addrinfo.rbs +9 -9
  309. data/stdlib/socket/0/basic_socket.rbs +3 -3
  310. data/stdlib/socket/0/ip_socket.rbs +10 -8
  311. data/stdlib/socket/0/socket.rbs +23 -10
  312. data/stdlib/socket/0/tcp_server.rbs +1 -1
  313. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  314. data/stdlib/socket/0/udp_socket.rbs +1 -1
  315. data/stdlib/socket/0/unix_server.rbs +1 -1
  316. data/stdlib/stringio/0/stringio.rbs +1211 -96
  317. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  318. data/stdlib/tempfile/0/manifest.yaml +3 -0
  319. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  320. data/stdlib/time/0/time.rbs +8 -6
  321. data/stdlib/timeout/0/timeout.rbs +58 -7
  322. data/stdlib/tsort/0/cyclic.rbs +4 -1
  323. data/stdlib/tsort/0/interfaces.rbs +8 -8
  324. data/stdlib/tsort/0/tsort.rbs +16 -15
  325. data/stdlib/uri/0/common.rbs +42 -20
  326. data/stdlib/uri/0/file.rbs +3 -3
  327. data/stdlib/uri/0/generic.rbs +21 -18
  328. data/stdlib/uri/0/http.rbs +2 -2
  329. data/stdlib/uri/0/ldap.rbs +2 -2
  330. data/stdlib/uri/0/mailto.rbs +3 -3
  331. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  332. data/stdlib/zlib/0/deflate.rbs +4 -3
  333. data/stdlib/zlib/0/gzip_file.rbs +1 -1
  334. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  335. data/stdlib/zlib/0/gzip_writer.rbs +16 -13
  336. data/stdlib/zlib/0/inflate.rbs +1 -1
  337. data/stdlib/zlib/0/need_dict.rbs +1 -1
  338. data/wasm/README.md +109 -0
  339. data/wasm/rbs_wasm.c +479 -0
  340. metadata +133 -19
  341. data/ext/rbs_extension/lexer.c +0 -2728
  342. data/ext/rbs_extension/lexer.h +0 -179
  343. data/ext/rbs_extension/lexer.re +0 -147
  344. data/ext/rbs_extension/lexstate.c +0 -175
  345. data/ext/rbs_extension/location.c +0 -325
  346. data/ext/rbs_extension/location.h +0 -85
  347. data/ext/rbs_extension/parser.c +0 -2982
  348. data/ext/rbs_extension/parser.h +0 -18
  349. data/ext/rbs_extension/parserstate.c +0 -411
  350. data/ext/rbs_extension/parserstate.h +0 -163
  351. data/ext/rbs_extension/unescape.c +0 -32
  352. data/include/rbs/ruby_objs.h +0 -72
  353. data/src/constants.c +0 -153
  354. data/src/ruby_objs.c +0 -799
@@ -0,0 +1,55 @@
1
+ name: WebAssembly
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ paths:
9
+ - ".github/workflows/wasm.yml"
10
+ - "Rakefile"
11
+ - "include/**"
12
+ - "src/**"
13
+ - "wasm/**"
14
+ # `merge_group` has no `paths` filter, so this runs on every queue entry.
15
+ merge_group: {}
16
+
17
+ permissions:
18
+ contents: read
19
+
20
+ env:
21
+ # Pinned so the smoke test is reproducible. Bump together when upgrading.
22
+ WASI_SDK_VERSION: "33"
23
+ WASI_SDK_RELEASE: "33.0"
24
+ WASMTIME_VERSION: "v47.0.2"
25
+
26
+ jobs:
27
+ build:
28
+ name: wasm:check
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
32
+ - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
33
+ - name: Set up Ruby
34
+ uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0
35
+ with:
36
+ ruby-version: ruby
37
+ bundler: none
38
+ - name: Update rubygems & bundler
39
+ run: gem update --system
40
+ - name: Install gems
41
+ run: |
42
+ bundle config set --local without libs:profilers
43
+ bundle install --jobs 4 --retry 3
44
+ - name: Install the WASI SDK
45
+ run: |
46
+ url="https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VERSION}/wasi-sdk-${WASI_SDK_RELEASE}-x86_64-linux.tar.gz"
47
+ mkdir -p "$HOME/wasi-sdk"
48
+ curl -sSL "$url" | tar xz --strip-components=1 -C "$HOME/wasi-sdk"
49
+ echo "WASI_SDK_PATH=$HOME/wasi-sdk" >> "$GITHUB_ENV"
50
+ - name: Install wasmtime
51
+ uses: bytecodealliance/actions/wasmtime/setup@9152e710e9f7182e4c29ad218e4f335a7b203613 # v1.1.3
52
+ with:
53
+ version: ${{ env.WASMTIME_VERSION }}
54
+ - name: Build and smoke-test the WebAssembly module
55
+ run: bundle exec rake wasm:check
@@ -7,17 +7,20 @@ on:
7
7
  pull_request: {}
8
8
  merge_group: {}
9
9
 
10
+ permissions:
11
+ contents: read
12
+
10
13
  jobs:
11
14
  compile:
12
15
  runs-on: "windows-latest"
13
16
  strategy:
14
17
  fail-fast: false
15
18
  matrix:
16
- ruby: ['3.2', '3.3', ucrt, mswin]
19
+ ruby: ['4.0', ucrt, mswin]
17
20
  steps:
18
- - uses: actions/checkout@v4
21
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
19
22
  - name: load ruby
20
- uses: ruby/setup-ruby@v1
23
+ uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0
21
24
  with:
22
25
  ruby-version: ${{ matrix.ruby }}
23
26
 
@@ -33,8 +36,11 @@ jobs:
33
36
 
34
37
  res = URI.parse("https://stdgems.org/bundled_gems.json").read
35
38
  bundled_gems = JSON.parse(res)["gems"].map{_1["gem"]}
36
- system "gem uninstall --force #{bundled_gems.join(" ")}", exception: true
39
+ system "gem uninstall #{bundled_gems.join(" ")} --force", exception: true
37
40
  '
41
+ - name: Ignore Gemfile.lock's BUNDLED WITH on dev Ruby
42
+ if: ${{ matrix.ruby == 'ucrt' || matrix.ruby == 'mswin' }}
43
+ run: bundle config set --local version system
38
44
  - name: bundle install
39
45
  run: |
40
46
  bundle config set without profilers libs
data/.gitignore CHANGED
@@ -21,3 +21,19 @@ lib/**/*.dll
21
21
  doc/
22
22
 
23
23
  **/*.gem
24
+
25
+ # For clangd's editor integration
26
+ ext/rbs_extension/compile_commands.json
27
+ ext/rbs_extension/.cache
28
+
29
+ # Rust crate vendored RBS source (managed by rake rust:rbs:sync or rust:rbs:symlink)
30
+ rust/ruby-rbs-sys/vendor/rbs/
31
+ rust/ruby-rbs/vendor/rbs/
32
+
33
+ # Compiled WebAssembly module (built by rake wasm:build)
34
+ wasm/*.wasm
35
+
36
+ # JRuby runtime artifact (built by rake wasm:jruby_setup, bundled in the -java
37
+ # gem). The require_jar file lib/rbs_jars.rb is committed; the Chicory/ASM jars
38
+ # themselves live in ~/.m2 (jar-dependencies), not here.
39
+ lib/rbs/wasm/*.wasm
data/.rubocop.yml CHANGED
@@ -1,9 +1,8 @@
1
- require:
1
+ plugins:
2
2
  - rubocop-rubycw
3
3
  - rubocop-on-rbs
4
4
 
5
5
  AllCops:
6
- TargetRubyVersion: 3.1
7
6
  DisabledByDefault: true
8
7
  Exclude:
9
8
  - 'vendor/bundle/**/*'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,507 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 4.2.0 (2026-08-23)
4
+
5
+ RBS 4.2 accepts non-ASCII characters in identifiers. Method names, instance variable names and parameter names can be written in any script, and other names may contain non-ASCII characters as long as they start with an ASCII letter, which is what tells a constant from a method name.
6
+
7
+ ```rbs
8
+ class Greeter
9
+ @挨拶: String
10
+
11
+ def こんにちは: () -> String
12
+ end
13
+ ```
14
+
15
+ The parser and the AST support Ruby-style `...` forwarding parameters in method types, but the layers built on top of the parser do not yet. The syntax is disabled by default in 4.2 and is not enabled by the public `RBS::Parser` API, so it cannot be used in regular RBS signatures yet.
16
+
17
+ Ruby 3.2 reached EOL on 2026-04-01, and this release requires Ruby 3.3 or later. Applications on 3.2 stay on the 4.1 line.
18
+
19
+ ### Signature updates
20
+
21
+ **Updated classes/modules/methods:** `ERB`, `ERB::DefMethod`, `IO`, `Monitor`, `MonitorMixin::ConditionVariable`, `Singleton`, `StringIO`, `Zlib::GzipFile`, `Zlib::GzipWriter`
22
+
23
+ * Replace deterministic `untyped` return types with concrete types ([#2966](https://github.com/ruby/rbs/pull/2966))
24
+ * Declare Singleton::SingletonInstanceMethods ([#3037](https://github.com/ruby/rbs/pull/3037))
25
+
26
+ ### Language updates
27
+
28
+ * Gate forwarding parameter syntax behind parser option ([#3087](https://github.com/ruby/rbs/pull/3087))
29
+ * Support non-ASCII identifiers ([#3082](https://github.com/ruby/rbs/pull/3082))
30
+ * Support forwarding parameters in method types ([#3042](https://github.com/ruby/rbs/pull/3042))
31
+
32
+ ### Library changes
33
+
34
+ * Drop runtime support for Ruby 3.2 ([#3095](https://github.com/ruby/rbs/pull/3095))
35
+ * Stop the lexer reading past the end of a byte_range ([#3040](https://github.com/ruby/rbs/pull/3040))
36
+ * Exclude CR from comment tokens to fix an off-by-one Location#end_line on CRLF files ([#3069](https://github.com/ruby/rbs/pull/3069))
37
+ * Handle the NULL parser in the WebAssembly shim ([#3085](https://github.com/ruby/rbs/pull/3085))
38
+ * Reject a byte position the lexer cannot start on ([#3083](https://github.com/ruby/rbs/pull/3083))
39
+ * Don't use Clang nullability qualifiers in strict ISO C mode ([#3074](https://github.com/ruby/rbs/pull/3074))
40
+ * Avoid eagerly inspecting call traces in type assertions ([#3073](https://github.com/ruby/rbs/pull/3073))
41
+ * Fix TypeParam.rename to substitute variables in bounds and default types ([#3068](https://github.com/ruby/rbs/pull/3068))
42
+ * Extract per-declaration type param alignment into entry-level align_params ([#3070](https://github.com/ruby/rbs/pull/3070))
43
+ * Align type params across declarations in module-self types and superclass validation ([#3067](https://github.com/ruby/rbs/pull/3067))
44
+ * Build the wasm module with -DNDEBUG ([#3066](https://github.com/ruby/rbs/pull/3066))
45
+ * Rename NODISCARD macro to RBS_NODISCARD ([#3065](https://github.com/ruby/rbs/pull/3065))
46
+
47
+ ### Miscellaneous
48
+
49
+ * Omit forwarding parameter tests on JRuby ([#3092](https://github.com/ruby/rbs/pull/3092))
50
+ * Skip JSON 2-only tests with JSON 3 ([#3084](https://github.com/ruby/rbs/pull/3084))
51
+ * Pin GitHub Actions to commit hashes ([#3020](https://github.com/ruby/rbs/pull/3020))
52
+
53
+ ## 4.1.3 (2026-08-10)
54
+
55
+ ### Miscellaneous
56
+
57
+ * Don't use Clang nullability qualifiers in strict ISO C mode ([#3074](https://github.com/ruby/rbs/pull/3074), Backported in [#3075](https://github.com/ruby/rbs/pull/3075))
58
+ * Avoid eagerly inspecting call traces in type assertions ([#3073](https://github.com/ruby/rbs/pull/3073), Backported in [#3076](https://github.com/ruby/rbs/pull/3076))
59
+
60
+ ## 4.1.2 (2026-08-03)
61
+
62
+ ### Miscellaneous
63
+
64
+ * Keep GC disabled during GC_test#test_stress_and_stress= ([#3061](https://github.com/ruby/rbs/pull/3061))
65
+ * Fix GC_test#test_enable leaving GC disabled for the rest of the suite ([#3059](https://github.com/ruby/rbs/pull/3059))
66
+
67
+ ## 4.1.1 (2026-07-30)
68
+
69
+ ### Library changes
70
+
71
+ * Include the trailing `?` in a keyword key's symbol location ([#3043](https://github.com/ruby/rbs/pull/3043))
72
+ * Mark `type_name` as optional on the alias annotations ([#3039](https://github.com/ruby/rbs/pull/3039))
73
+
74
+ ### Miscellaneous
75
+
76
+ * Fix template drift for ext/rbs_extension/ast_translation.c ([#3038](https://github.com/ruby/rbs/pull/3038))
77
+
78
+ ## 4.1.0 (2026-07-27)
79
+
80
+ 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.
81
+
82
+ 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.
83
+
84
+ 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.
85
+
86
+ `RBS::Prototype::Runtime`, the RDoc plugin parser, and the top-level `float` type alias are deprecated in this release.
87
+
88
+ ### Signature updates
89
+
90
+ **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`
91
+
92
+ * Remove stale Float constants and add a constant drift test ([#2994](https://github.com/ruby/rbs/pull/2994))
93
+ * Update RDoc comments with Ruby 4.0.6 ([#3035](https://github.com/ruby/rbs/pull/3035))
94
+ * Add a dependency on tempfile. ([#3025](https://github.com/ruby/rbs/pull/3025))
95
+ * Support `%a{implicitly-returns-nil}` on `MatchData#[]` ([#2990](https://github.com/ruby/rbs/pull/2990))
96
+ * Update `Array` ([#2987](https://github.com/ruby/rbs/pull/2987))
97
+ * Allow nil output buffers for reader methods ([#3002](https://github.com/ruby/rbs/pull/3002))
98
+ * Add stdlib signature tests for #2967 ([#2989](https://github.com/ruby/rbs/pull/2989))
99
+ * Update `Integer`, phase 1 ([#2995](https://github.com/ruby/rbs/pull/2995))
100
+ * Add RBS::Ops ([#2934](https://github.com/ruby/rbs/pull/2934))
101
+ * Update Module ([#2933](https://github.com/ruby/rbs/pull/2933))
102
+ * Correct core/stdlib signatures to match Ruby 4.0 ([#2967](https://github.com/ruby/rbs/pull/2967))
103
+ * Revert Digest::Class method changes ([#2980](https://github.com/ruby/rbs/pull/2980))
104
+ * Add stdlib tests for updated StringScanner signatures ([#2968](https://github.com/ruby/rbs/pull/2968))
105
+ * Update `StringScanner` signatures to match strscan 3.1.6 ([#2959](https://github.com/ruby/rbs/pull/2959))
106
+ * Remove StringScanner methods absent from the latest Ruby release ([#2961](https://github.com/ruby/rbs/pull/2961))
107
+ * Fix `Resolv#initialize` signature: array of resolvers + `use_ipv6:` ([#2960](https://github.com/ruby/rbs/pull/2960))
108
+ * [Hash] Update Hash's signatures and tests to be correct ([#2694](https://github.com/ruby/rbs/pull/2694))
109
+ * update rbs signatures to be more consistent with generics ([#2867](https://github.com/ruby/rbs/pull/2867))
110
+ * Use top-level `path` in fileutils.rbs to suppress deprecation warning ([#2949](https://github.com/ruby/rbs/pull/2949))
111
+ * Update File::Constants and File::Stat ([#2942](https://github.com/ruby/rbs/pull/2942))
112
+ * Add signature for `RubyVM::InstructionSequence.of` ([#2916](https://github.com/ruby/rbs/pull/2916))
113
+ * fix OpenSSL#session_new_cb signature ([#2924](https://github.com/ruby/rbs/pull/2924))
114
+ * [Class] update class.rbs ([#2898](https://github.com/ruby/rbs/pull/2898))
115
+ * Deprecate top-level float ([#2695](https://github.com/ruby/rbs/pull/2695))
116
+ * [Kernel] Updated querying methods ([#2685](https://github.com/ruby/rbs/pull/2685))
117
+
118
+ ### Library changes
119
+
120
+ * Convert character offset to byte offset in parse_inline_*_annotation ([#2945](https://github.com/ruby/rbs/pull/2945))
121
+ * Guard against underflow when sysconf(_SC_PAGESIZE) returns 0 ([#3031](https://github.com/ruby/rbs/pull/3031))
122
+ * Report invalid UTF-8 byte in a comment as a parsing error ([#2983](https://github.com/ruby/rbs/pull/2983))
123
+ * Fetch Chicory/ASM jars from Maven instead of bundling in gem ([#3019](https://github.com/ruby/rbs/pull/3019))
124
+ * Add write barrier protection to RBS Location objects ([#3022](https://github.com/ruby/rbs/pull/3022))
125
+ * Rename parameter in rbs_intern_type_name for clarity ([#3023](https://github.com/ruby/rbs/pull/3023))
126
+ * Deprecate RDoc plugin parser ([#3016](https://github.com/ruby/rbs/pull/3016))
127
+ * Run the test suite on JRuby (JRuby support, step 4) ([#3008](https://github.com/ruby/rbs/pull/3008))
128
+ * Run the RBS parser on JRuby via WebAssembly (JRuby support, step 3) ([#3000](https://github.com/ruby/rbs/pull/3000))
129
+ * Add binary serialization of the parsed AST (JRuby support, step 2) ([#2999](https://github.com/ruby/rbs/pull/2999))
130
+ * Build the RBS parser as a WebAssembly module (JRuby support, step 1) ([#2998](https://github.com/ruby/rbs/pull/2998))
131
+ * Reject reversed position ranges in parser/lexer entrypoints ([#2974](https://github.com/ruby/rbs/pull/2974))
132
+ * Fix lexer infinite loop / abort on invalid UTF-8 byte ([#2973](https://github.com/ruby/rbs/pull/2973))
133
+ * Flyweight TypeName / Namespace cached in a shared trie ([#2957](https://github.com/ruby/rbs/pull/2957))
134
+ * Reduce Hash allocation per `Node` creation ([#2946](https://github.com/ruby/rbs/pull/2946))
135
+ * Tidy `ast_translation.c` ([#2947](https://github.com/ruby/rbs/pull/2947))
136
+ * Auto-generate rbs_ast_ruby_annotations_t union from config.yml ([#2939](https://github.com/ruby/rbs/pull/2939))
137
+ * Speed up RBS::InlineParser on large sources with non-ASCII characters ([#2950](https://github.com/ruby/rbs/pull/2950))
138
+ * Support `def self.method_name` singleton method in inline parser ([#2935](https://github.com/ruby/rbs/pull/2935))
139
+ * This is not prism ([#2951](https://github.com/ruby/rbs/pull/2951))
140
+ * Add RBS::Rewriter and use it in rbs annotate ([#2927](https://github.com/ruby/rbs/pull/2927))
141
+ * Add nullability annotations to AST pointer types ([#2922](https://github.com/ruby/rbs/pull/2922))
142
+ * Support `module-self` inline annotation ([#2921](https://github.com/ruby/rbs/pull/2921))
143
+ * Inline instance variable annotation in module declaration ([#2919](https://github.com/ruby/rbs/pull/2919))
144
+
145
+ #### rbs prototype
146
+
147
+ * Fix nested declarations in rbs prototype rbi ([#3029](https://github.com/ruby/rbs/pull/3029))
148
+ * Deprecate prototype runtime ([#2956](https://github.com/ruby/rbs/pull/2956))
149
+
150
+ #### rbs collection
151
+
152
+ * Clean up partial clone before falling back to full clone ([#2978](https://github.com/ruby/rbs/pull/2978))
153
+ * Suppress spurious warning for non-gem stdlib libraries ([#2929](https://github.com/ruby/rbs/pull/2929))
154
+
155
+ ### Miscellaneous
156
+
157
+ * Fix Lint/DuplicateMethods in StringIO_test.rb ([#3010](https://github.com/ruby/rbs/pull/3010))
158
+ * Compressed files must be opened in binary mode ([#2981](https://github.com/ruby/rbs/pull/2981))
159
+ * Fix flaky DirSingletonTest GC failures in test_fchdir and test_for_fd ([#3004](https://github.com/ruby/rbs/pull/3004))
160
+ * Add TruffleRuby CI job ([#2996](https://github.com/ruby/rbs/pull/2996))
161
+ * Update the target Ruby version notes to the latest release ([#2962](https://github.com/ruby/rbs/pull/2962))
162
+ * Update docs/inline.md to match current inline parser behavior ([#2953](https://github.com/ruby/rbs/pull/2953))
163
+ * ci: skip Gemfile.lock BUNDLED WITH on ruby-head ([#2952](https://github.com/ruby/rbs/pull/2952))
164
+ * Remove `logger` from sig dependencies ([#2904](https://github.com/ruby/rbs/pull/2904))
165
+
166
+ ## 4.0.3 (2026-06-18)
167
+
168
+ ### Miscellaneous
169
+
170
+ * Fix Ruby CI failure with compressed `Zlib::GzipReader` test fixtures. ([#3005](https://github.com/ruby/rbs/pull/3005))
171
+ * Fix flaky `DirSingletonTest#test_fchdir` and `DirSingletonTest#test_for_fd` under aggressive GC. ([#3005](https://github.com/ruby/rbs/pull/3005))
172
+ * Fix Ruby head CI failure caused by the lockfile-pinned Bundler version. ([#3005](https://github.com/ruby/rbs/pull/3005))
173
+
174
+ ## 4.0.2 (2026-03-25)
175
+
176
+ ### Library changes
177
+
178
+ #### rbs collection
179
+
180
+ * Fix: pathname not written to lockfile. ([#2889](https://github.com/ruby/rbs/pull/2889))
181
+
182
+ ### Miscellaneous
183
+
184
+ * Fix test failure on Windows in `ruby/ruby` ([#2900](https://github.com/ruby/rbs/pull/2900))
185
+ * Fix test for Ruby 4.1 ([#2899](https://github.com/ruby/rbs/pull/2899))
186
+
187
+ ## 4.0.1 (2026-03-23)
188
+
189
+ This is a minor release to fix Ruby CI failure, which was caused by symlinks included in the `rust` directory.
190
+
191
+ ### Library changes
192
+
193
+ * Fix `() -> (void)` being rejected as SyntaxError ([#2884](https://github.com/ruby/rbs/pull/2884))
194
+
195
+ ### Miscellaneous
196
+
197
+ * Drop crates ([#2887](https://github.com/ruby/rbs/pull/2887))
198
+ * Add newline at eof ([#2885](https://github.com/ruby/rbs/pull/2885))
199
+
200
+ ## 4.0.0 (2026-03-16)
201
+
202
+ RBS 4.0 ships with experimental RBS inline syntax support, allowing you to write type annotations directly in Ruby source files. See [docs/inline.md](docs/inline.md) for the syntax details.
203
+
204
+ ```ruby
205
+ class Calculator
206
+ # @rbs (Integer, Integer) -> Integer
207
+ def add(a, b) = a + b
208
+ end
209
+ ```
210
+
211
+ Note: RBS inline is still experimental and may change in future releases.
212
+
213
+ This release also introduces two language changes: type argument support for singleton types (`singleton(T)[S]`) mainly for Sorbet integration, and generic type parameter lower bounds (`T < S`).
214
+
215
+ ### Signature updates
216
+
217
+ **Updated classes/modules/methods:** `Addrinfo`, `Array`, `BasicObject`, `BigDecimal`, `Binding`, `CGI`, `Comparable`, `Complex`, `Digest::SHA2`, `Encoding::Converter`, `Enumerable`, `Enumerator`, `Enumerator::ArithmeticSequence`, `Enumerator::Lazy`, `Fiber`, `File`, `FileUtils`, `Float`, `Hash`, `IO`, `IO::TimeoutError`, `Integer`, `JSON`, `Kernel`, `Kconv`, `Math`, `Method`, `Minitest`, `Module`, `Numeric`, `ObjectSpace`, `Open3`, `OpenURI`, `OptionParser`, `PStore`, `Pathname`, `Proc`, `Process::Status`, `Psych`, `Ractor`, `Random`, `Random::Formatter`, `Range`, `Rational`, `RBS::Unnamed::TopLevelSelfClass`, `Ripper::Lexer::Elem`, `Ruby`, `RubyVM`, `SecureRandom`, `Set`, `Socket`, `String`, `StringScanner`, `TCPSocket`, `Thread`, `URI`, `URI::Generic`, `Zlib::GzipReader`, `Zlib::GzipWriter`
218
+
219
+ * Remove deprecated types ([#2880](https://github.com/ruby/rbs/pull/2880))
220
+ * Add type `RBS::Unnamed::TopLevelSelfClass` to core ([#2362](https://github.com/ruby/rbs/pull/2362))
221
+ * Graduate bundled gems from Ruby v4.0 ([#2852](https://github.com/ruby/rbs/pull/2852))
222
+ * stdlib: Add missing Psych methods and exception classes ([#2850](https://github.com/ruby/rbs/pull/2850))
223
+ * Add variants with positional argument to `Hash#transform_keys` ([#2848](https://github.com/ruby/rbs/pull/2848))
224
+ * add extra kwarg options for File#initialize and derivatives ([#2798](https://github.com/ruby/rbs/pull/2798))
225
+ * pstore: fixes types, treat it as a collection ([#2806](https://github.com/ruby/rbs/pull/2806))
226
+ * Add signatures for `{Module,Proc}#ruby2_keywords` ([#2805](https://github.com/ruby/rbs/pull/2805))
227
+ * Make Zlib::GzipWriter.new level and strategy parameters optional ([#2810](https://github.com/ruby/rbs/pull/2810))
228
+ * URI.(s) does string coercion ([#2825](https://github.com/ruby/rbs/pull/2825))
229
+ * Fix String#append_as_bytes to accept Integer ([#2817](https://github.com/ruby/rbs/pull/2817))
230
+ * [Comparable] Add in Comparable::_CompareToZero ([#2697](https://github.com/ruby/rbs/pull/2697))
231
+ * [Kernel] Add Kernel.trace_var and Kernel.untrace_var ([#2682](https://github.com/ruby/rbs/pull/2682))
232
+ * Add signature for `Module#method_undefined` ([#2804](https://github.com/ruby/rbs/pull/2804))
233
+ * Fix Zlib::GzipWriter signatures ([#2803](https://github.com/ruby/rbs/pull/2803))
234
+ * GzipWriter#initialize only takes 1 required positional arg ([#2799](https://github.com/ruby/rbs/pull/2799))
235
+ * Fix accessibility of method in Module ([#2802](https://github.com/ruby/rbs/pull/2802))
236
+ * Graduate kconv ([#2794](https://github.com/ruby/rbs/pull/2794))
237
+ * Fix test related to pathname ([#2789](https://github.com/ruby/rbs/pull/2789))
238
+ * Split pathname to core and stdlib ([#2777](https://github.com/ruby/rbs/pull/2777))
239
+ * [Kernel] Narrow `caller_locations` ([#2745](https://github.com/ruby/rbs/pull/2745))
240
+ * Ruby 4.1 changed `source_location` type ([#2784](https://github.com/ruby/rbs/pull/2784))
241
+ * Remove ObjectSpace.count_nodes ([#2779](https://github.com/ruby/rbs/pull/2779))
242
+ * Support selector for `String#strip` family. ([#2775](https://github.com/ruby/rbs/pull/2775))
243
+ * Add `Ruby`, `Array#find`, and `Array#rfind` ([#2767](https://github.com/ruby/rbs/pull/2767))
244
+ * Update minitest ([#2761](https://github.com/ruby/rbs/pull/2761))
245
+ * Support BigDecimal v4 ([#2758](https://github.com/ruby/rbs/pull/2758))
246
+ * Update rdoc and comments ([#2733](https://github.com/ruby/rbs/pull/2733))
247
+ * Update cgi and cgi/escape type definitions ([#2728](https://github.com/ruby/rbs/pull/2728))
248
+ * Update RBS files for Ruby 4 ([#2731](https://github.com/ruby/rbs/pull/2731))
249
+ * Update existing docs ([#2724](https://github.com/ruby/rbs/pull/2724))
250
+ * Remove reference to `JSON.deep_const_get` ([#2701](https://github.com/ruby/rbs/pull/2701))
251
+ * Remove deprecated methods in `JSON` ([#2366](https://github.com/ruby/rbs/pull/2366))
252
+ * Update FileUtils to v1.8.0 ([#2700](https://github.com/ruby/rbs/pull/2700))
253
+ * Avoid overloading where arguments are identical ([#2559](https://github.com/ruby/rbs/pull/2559))
254
+ * Move Pathname to core from stdlib ([#2705](https://github.com/ruby/rbs/pull/2705))
255
+ * Remove undocumented `#nonzero?` ([#2543](https://github.com/ruby/rbs/pull/2543))
256
+ * Add signature for `OptionParser#raise_unknown` ([#2735](https://github.com/ruby/rbs/pull/2735))
257
+ * Add signature for `Open3.popen2` ([#2734](https://github.com/ruby/rbs/pull/2734))
258
+ * Add RFC2396_PARSER to URI module ([#2727](https://github.com/ruby/rbs/pull/2727))
259
+ * Add signature for `Open3.capture3` ([#2714](https://github.com/ruby/rbs/pull/2714))
260
+ * Remove sig for IO#{ready?,nread} ([#2710](https://github.com/ruby/rbs/pull/2710))
261
+ * Accept `nil` state parameter in `to_json` type signatures ([#2691](https://github.com/ruby/rbs/pull/2691))
262
+ * Add type of `Open3.popen3` ([#2699](https://github.com/ruby/rbs/pull/2699))
263
+ * `unsetenv_others` and `close_others` only allows bool. ([#2698](https://github.com/ruby/rbs/pull/2698))
264
+ * Add deprecated annotation to `attr` with bool args ([#2693](https://github.com/ruby/rbs/pull/2693))
265
+ * Update open3 ([#2692](https://github.com/ruby/rbs/pull/2692))
266
+ * Add signature for `SecureRandom.bytes` ([#2690](https://github.com/ruby/rbs/pull/2690))
267
+ * Set %a{deprecated} to deprecated core methods ([#2664](https://github.com/ruby/rbs/pull/2664))
268
+ * Migrate usages of ::_ToPath to use ::path instead ([#2677](https://github.com/ruby/rbs/pull/2677))
269
+ * Add missing signatures for `Random::Formatter` ([#2680](https://github.com/ruby/rbs/pull/2680))
270
+ * Split `Random::Formatter` to core and stdlib ([#2661](https://github.com/ruby/rbs/pull/2661))
271
+ * Skip test cases of developing methods for Pathname ([#2648](https://github.com/ruby/rbs/pull/2648))
272
+ * Add signature `Random.seed` ([#2649](https://github.com/ruby/rbs/pull/2649))
273
+ * Update `string.rbs` to avoid deprecation warning in Steep ([#2655](https://github.com/ruby/rbs/pull/2655))
274
+ * Add sig `IO#pread` and `IO#pwrite` ([#2647](https://github.com/ruby/rbs/pull/2647))
275
+ * Refine signature of `Numeric#step` and add type of `Enumerator::ArithmeticSequence` ([#2600](https://github.com/ruby/rbs/pull/2600))
276
+ * Remove undocumented override methods ([#2622](https://github.com/ruby/rbs/pull/2622))
277
+ * Add docs ([#2625](https://github.com/ruby/rbs/pull/2625))
278
+ * Remove undocumented methods for `imaginary` ([#2620](https://github.com/ruby/rbs/pull/2620))
279
+ * Update securerandom ([#2619](https://github.com/ruby/rbs/pull/2619))
280
+ * Drop undocumented `#eql?` ([#2618](https://github.com/ruby/rbs/pull/2618))
281
+ * Just use `Numeric#+@` and return self ([#2597](https://github.com/ruby/rbs/pull/2597))
282
+ * Drop undocumented `#dup` ([#2598](https://github.com/ruby/rbs/pull/2598))
283
+ * Add signature for `Digest::SHA2` ([#2573](https://github.com/ruby/rbs/pull/2573))
284
+ * Add signatures for `OpenURI` ([#2574](https://github.com/ruby/rbs/pull/2574))
285
+ * Add signature for `IO::TimeoutError` ([#2571](https://github.com/ruby/rbs/pull/2571))
286
+ * Add signatures for `Set` ([#2570](https://github.com/ruby/rbs/pull/2570))
287
+ * Add signature for `Enumerator#+` ([#2567](https://github.com/ruby/rbs/pull/2567))
288
+ * Add signature for `Enumerator::Lazy#eager` ([#2568](https://github.com/ruby/rbs/pull/2568))
289
+ * Add signature for `Fiber#blocking` ([#2566](https://github.com/ruby/rbs/pull/2566))
290
+ * Support BasicObject to avoid NoMethodError for `RBS::Test::TypeCheck` ([#2565](https://github.com/ruby/rbs/pull/2565))
291
+ * Add documentation for `Range#{minmax,count,to_a,entries}` ([#2562](https://github.com/ruby/rbs/pull/2562))
292
+ * Delegate to `Enumerable` from `Range#{min,max}` ([#2540](https://github.com/ruby/rbs/pull/2540))
293
+ * Add URI::Generic#+ ([#2535](https://github.com/ruby/rbs/pull/2535))
294
+ * Make IO.binread, IO.binwrite, IO.read and IO.write accept _ToPath ([#2378](https://github.com/ruby/rbs/pull/2378))
295
+ * Support pattern argument for Enumerable#{all,any,none,one}? ([#2368](https://github.com/ruby/rbs/pull/2368))
296
+ * fixing sig for addrinfo ([#2464](https://github.com/ruby/rbs/pull/2464))
297
+
298
+ ### Language updates
299
+
300
+ * Add type arguments support to singleton types ([#2502](https://github.com/ruby/rbs/pull/2502))
301
+ * Move the note about lower bound ([#2517](https://github.com/ruby/rbs/pull/2517))
302
+ * Add support for lower bounds in type parameters ([#2490](https://github.com/ruby/rbs/pull/2490))
303
+
304
+ ### Library changes
305
+
306
+ * Add `#type_fingerprint` methods ([#2879](https://github.com/ruby/rbs/pull/2879))
307
+ * `top` for membership predicates of collection types ([#2878](https://github.com/ruby/rbs/pull/2878))
308
+ * Add block parameter (`&block`) type declaration ([#2875](https://github.com/ruby/rbs/pull/2875))
309
+ * Add splat (`*a`) and double-splat (`**a`) parameter support ([#2873](https://github.com/ruby/rbs/pull/2873))
310
+ * Add parameter type inline annotation ([#2443](https://github.com/ruby/rbs/pull/2443))
311
+ * Reduce compile warnings ([#2871](https://github.com/ruby/rbs/pull/2871))
312
+ * Specify input range by byte offsets ([#2863](https://github.com/ruby/rbs/pull/2863))
313
+ * add `extern "C"` wrapping to `rbs.h` when using C++ ([#2855](https://github.com/ruby/rbs/pull/2855))
314
+ * Automatically inherits super method type if unannotated ([#2858](https://github.com/ruby/rbs/pull/2858))
315
+ * Add `...` syntax to method type inline annotation syntax ([#2856](https://github.com/ruby/rbs/pull/2856))
316
+ * Fix for string reference corruption issue ([#2836](https://github.com/ruby/rbs/pull/2836))
317
+ * Use unreleased steep for `rake typecheck_test` ([#2842](https://github.com/ruby/rbs/pull/2842))
318
+ * Fix breaking references after GC.compact ([#2822](https://github.com/ruby/rbs/pull/2822))
319
+ * Fix special methods accessibility. ([#2546](https://github.com/ruby/rbs/pull/2546))
320
+ * Fix allocation alignment ([#2788](https://github.com/ruby/rbs/pull/2788))
321
+ * Skip `set` and `pathname` from `manifest.yaml` ([#2773](https://github.com/ruby/rbs/pull/2773))
322
+ * Fix C++ compiler warnings ([#2755](https://github.com/ruby/rbs/pull/2755))
323
+ * Better encoding ([#2675](https://github.com/ruby/rbs/pull/2675))
324
+ * Move `require_eof` handling to C API ([#2678](https://github.com/ruby/rbs/pull/2678))
325
+ * Delete debug print ([#2753](https://github.com/ruby/rbs/pull/2753))
326
+ * Make assertions macro ([#2729](https://github.com/ruby/rbs/pull/2729))
327
+ * Remove deprecated method `Kernel#Namespace`. Also remove `Kernel#TypeName`. ([#2480](https://github.com/ruby/rbs/pull/2480))
328
+ * Update rdoc to 6.13.1 ([#2355](https://github.com/ruby/rbs/pull/2355))
329
+ * Allow `self` for inline `@rbs @ivar: self` ([#2633](https://github.com/ruby/rbs/pull/2633))
330
+ * Normalize modules during type name resolution ([#2670](https://github.com/ruby/rbs/pull/2670))
331
+ * Only load extconf_compile_commands_json when compiling through Rake ([#2498](https://github.com/ruby/rbs/pull/2498))
332
+ * Use `malloc` based allocator ([#2666](https://github.com/ruby/rbs/pull/2666))
333
+ * Add another parser benchmark script ([#2668](https://github.com/ruby/rbs/pull/2668))
334
+ * Reuse empty array and hash ([#2667](https://github.com/ruby/rbs/pull/2667))
335
+ * Faster lexical analyzer ([#2665](https://github.com/ruby/rbs/pull/2665))
336
+ * Introduce `type_fingerprint` ([#2644](https://github.com/ruby/rbs/pull/2644))
337
+ * Add module-class alias declaration ([#2636](https://github.com/ruby/rbs/pull/2636))
338
+ * Inline constant declaration ([#2635](https://github.com/ruby/rbs/pull/2635))
339
+ * `self` type is rejected depending on the context ([#2627](https://github.com/ruby/rbs/pull/2627))
340
+ * Add instance variable declaration annotation ([#2632](https://github.com/ruby/rbs/pull/2632))
341
+ * Module-self allow void once ([#2626](https://github.com/ruby/rbs/pull/2626))
342
+ * Support inheritance in Inline RBS declaration ([#2630](https://github.com/ruby/rbs/pull/2630))
343
+ * Inline attribute/method definitions have comments ([#2624](https://github.com/ruby/rbs/pull/2624))
344
+ * Inline RBS declaration for attributes (`attr_***`) ([#2623](https://github.com/ruby/rbs/pull/2623))
345
+ * Fix bad scaling in `rbs_comment_t` tokens ([#2578](https://github.com/ruby/rbs/pull/2578))
346
+ * Update parser so that `void` type is rejected depending on the context ([#2590](https://github.com/ruby/rbs/pull/2590))
347
+ * Implement mixin in inline RBS declarations ([#2614](https://github.com/ruby/rbs/pull/2614))
348
+ * Validate type args given to non-generic ancestor ([#2615](https://github.com/ruby/rbs/pull/2615))
349
+ * Add name locations to AST ([#2595](https://github.com/ruby/rbs/pull/2595))
350
+ * Move `exit` calls to `exe/rbs` ([#2591](https://github.com/ruby/rbs/pull/2591))
351
+ * Fix locator ([#2588](https://github.com/ruby/rbs/pull/2588))
352
+ * Introduce standalone C parser for RBS with arena allocation ([#2398](https://github.com/ruby/rbs/pull/2398))
353
+ * Fix subtraction of civar ([#2369](https://github.com/ruby/rbs/pull/2369))
354
+ * Buffer with empty string ([#2551](https://github.com/ruby/rbs/pull/2551))
355
+ * Fix unavailable MAP_ANONYMOUS ([#2470](https://github.com/ruby/rbs/pull/2470))
356
+ * Inline minor fix ([#2514](https://github.com/ruby/rbs/pull/2514))
357
+ * Enable `-Wc++-compat` ([#2463](https://github.com/ruby/rbs/pull/2463))
358
+ * Expose a method to parse type parameters ([#2457](https://github.com/ruby/rbs/pull/2457))
359
+ * Expose and fix `Block#location` ([#2456](https://github.com/ruby/rbs/pull/2456))
360
+ * Restore RBS::Environment#declarations for backwards-compatibility ([#2393](https://github.com/ruby/rbs/pull/2393))
361
+ * Implement `@rbs return: T` annotation ([#2406](https://github.com/ruby/rbs/pull/2406))
362
+ * Add `@rbs skip` annotation ([#2405](https://github.com/ruby/rbs/pull/2405))
363
+ * Inline annotations ([#2403](https://github.com/ruby/rbs/pull/2403))
364
+ * Inline `def` support ([#2392](https://github.com/ruby/rbs/pull/2392))
365
+ * Suppress to GCC warning with multi-line comment ([#2383](https://github.com/ruby/rbs/pull/2383))
366
+ * Add inline class/module declaration ([#2390](https://github.com/ruby/rbs/pull/2390))
367
+ * Add `RBS::Source::RBS` ([#2380](https://github.com/ruby/rbs/pull/2380))
368
+
369
+ #### rbs prototype
370
+
371
+ * [prototype runtime] Find redefined methods ([#2542](https://github.com/ruby/rbs/pull/2542))
372
+
373
+ #### rbs collection
374
+
375
+ ### Miscellaneous
376
+
377
+ * bundle update (2026-01-20) ([#2818](https://github.com/ruby/rbs/pull/2818))
378
+ * Ruby 4.0.1 ([#2823](https://github.com/ruby/rbs/pull/2823))
379
+ * [rbs/test] Check type arguments size ([#2809](https://github.com/ruby/rbs/pull/2809))
380
+ * Add tsort to testing dependencies ([#2795](https://github.com/ruby/rbs/pull/2795))
381
+ * Update ruby to 4.0 ([#2776](https://github.com/ruby/rbs/pull/2776))
382
+ * Ruby 4.0.0 preview3 ([#2764](https://github.com/ruby/rbs/pull/2764))
383
+ * Remove test code for bundled gems ([#2760](https://github.com/ruby/rbs/pull/2760))
384
+ * Fix `nil` size `Enumerator` test ([#2749](https://github.com/ruby/rbs/pull/2749))
385
+ * Fix tests for rbs_skip_tests in ruby repo ([#2725](https://github.com/ruby/rbs/pull/2725))
386
+ * Update rdoc to v6.16 ([#2721](https://github.com/ruby/rbs/pull/2721))
387
+ * Run CI with "4.0.0-preview2" ([#2718](https://github.com/ruby/rbs/pull/2718))
388
+ * Minor typo fix ([#2676](https://github.com/ruby/rbs/pull/2676))
389
+ * Add -j option to make ([#2658](https://github.com/ruby/rbs/pull/2658))
390
+ * Allows the use of a path list as RBS_SKIP_TESTS ([#2612](https://github.com/ruby/rbs/pull/2612))
391
+ * Fix clang-format ([#2589](https://github.com/ruby/rbs/pull/2589))
392
+ * Restrict the execution of the valgrind task to when the C code has been modified. ([#2552](https://github.com/ruby/rbs/pull/2552))
393
+ * Set force_ruby_platform for bundler when head ([#2555](https://github.com/ruby/rbs/pull/2555))
394
+ * More skip paths with valgrind ([#2557](https://github.com/ruby/rbs/pull/2557))
395
+ * Run the `Encoding::Converter` test ([#2550](https://github.com/ruby/rbs/pull/2550))
396
+ * Fix CI ([#2527](https://github.com/ruby/rbs/pull/2527))
397
+ * Replace reference with official documentation ([#2453](https://github.com/ruby/rbs/pull/2453))
398
+ * Add clangd integration for improved C extension development ([#2481](https://github.com/ruby/rbs/pull/2481))
399
+ * Setup clang format for C code ([#2437](https://github.com/ruby/rbs/pull/2437))
400
+ * Add `super` calls in `setup` ([#2484](https://github.com/ruby/rbs/pull/2484))
401
+ * Suppress warnings during testing ([#2370](https://github.com/ruby/rbs/pull/2370))
402
+ * Update rubocop-on-rbs and use plugins ([#2345](https://github.com/ruby/rbs/pull/2345))
403
+ * Fix error at Ruby CI ([#2445](https://github.com/ruby/rbs/pull/2445))
404
+ * Use `erb` instead of `set` for load path testing ([#2439](https://github.com/ruby/rbs/pull/2439))
405
+ * Skip loading ruby_memcheck ([#2349](https://github.com/ruby/rbs/pull/2349))
406
+ * Forcibly uninstall gems even if there is a dependency problem. ([#2346](https://github.com/ruby/rbs/pull/2346))
407
+
408
+ ## 3.10.4 (2026-03-25)
409
+
410
+ ### Library changes
411
+
412
+ #### rbs collection
413
+
414
+ * [Backport] [3.10] Fix: pathname not written to lockfile. ([#2896](https://github.com/ruby/rbs/pull/2896))
415
+
416
+ ## 3.10.3 (2026-01-30)
417
+
418
+ This is a minor fix around the dependency to `tsort`.
419
+
420
+ ## Pull Requests
421
+
422
+ * Merge pull request #2601 from ima1zumi/add-tsort-dep ([#2834](https://github.com/ruby/rbs/pull/2834))
423
+
424
+ ## 3.10.2 (2026-01-07)
425
+
426
+ This is a minor fix on arena allocator alignment.
427
+
428
+ ### Pull Requests
429
+
430
+ * Merge pull request #2788 from ruby/fix-alloc-alignment ([#2790](https://github.com/ruby/rbs/pull/2790))
431
+
432
+ ## 3.10.1 (2026-01-07)
433
+
434
+ This is a follow-up release for Ruby 4.0.0 with documentation update based on Ruby 4.0.0, and bugfixes related to set/pathname library loading.
435
+
436
+ ### Pull Requests
437
+
438
+ * Merge pull request #2777 from ksss/pathname-ext ([#2786](https://github.com/ruby/rbs/pull/2786))
439
+ * Ruby 4.0.0 backports ([#2785](https://github.com/ruby/rbs/pull/2785))
440
+ * [Backport] Fix subtraction of civar ([#2783](https://github.com/ruby/rbs/pull/2783))
441
+ * [Backport] Update ruby to 4.0 ([#2778](https://github.com/ruby/rbs/pull/2778))
442
+
443
+ ## 3.10.0 (2025-12-23)
444
+
445
+ RBS 3.10.0 ships with a pure C parser implementation, signature updates for Ruby 4.0, and various bug fixes.
446
+
447
+ ### Pure C parser implementation
448
+
449
+ The new parser implementation was announced at [RubyKaigi 2025](https://rubykaigi.org/2025/presentations/amomchilov.html) and is finally shipped as a RubyGem!
450
+
451
+ The new parser is faster than the one in 3.9 and is portable — it is independent of the Ruby runtime and is used to implement Sorbet’s RBS support.
452
+
453
+ ### Type definition of bundled gems
454
+
455
+ The type definitions of `cgi` have been moved to [gem_rbs_collection](https://github.com/ruby/gem_rbs_collection/tree/main/gems/cgi), as it has been migrated to a bundled gem in Ruby 4.0
456
+
457
+ `cgi-escape` has been added to `stdlib`. You may need to declare a dependency on `cgi-escape` in your `manifest.yaml`, add `-r cgi-escape` to your command line, or update your type checker configuration.
458
+
459
+ ```yaml
460
+ dependencies:
461
+ - name: cgi-escape
462
+ ```
463
+
464
+ The type definitions for `pathname` have also been moved from `stdlib` to `core`, as it is now implemented as part of the core library.
465
+
466
+ ### Pull Requests
467
+
468
+ * [Backport] Support rdoc v7 ([#2770](https://github.com/ruby/rbs/pull/2770))
469
+ * [Backport] Check tuple type length ([#2766](https://github.com/ruby/rbs/pull/2766))
470
+ * Backport update to 4.0.0-preview3 ([#2768](https://github.com/ruby/rbs/pull/2768))
471
+ * [Backport] Remove test code for bundled gems ([#2762](https://github.com/ruby/rbs/pull/2762))
472
+ * Merge pull request #2761 from ruby/update-minitest ([#2763](https://github.com/ruby/rbs/pull/2763))
473
+ * [Backport] Support BigDecimal v4 ([#2759](https://github.com/ruby/rbs/pull/2759))
474
+ * Parser/lexer backports ([#2756](https://github.com/ruby/rbs/pull/2756))
475
+ * Merge pull request #2753 from ruby/delete-printf ([#2754](https://github.com/ruby/rbs/pull/2754))
476
+ * Backports ([#2751](https://github.com/ruby/rbs/pull/2751))
477
+ * Merge pull request #2728 from ruby/cgi ([#2747](https://github.com/ruby/rbs/pull/2747))
478
+ * Merge pull request #2729 from ruby/rbs-assert ([#2748](https://github.com/ruby/rbs/pull/2748))
479
+ * Merge pull request #2749 from ruby/fix-test ([#2750](https://github.com/ruby/rbs/pull/2750))
480
+ * Backport RBS file updates ([#2742](https://github.com/ruby/rbs/pull/2742))
481
+ * Backport JSON PRs ([#2740](https://github.com/ruby/rbs/pull/2740))
482
+ * Merge pull request #2718 from ruby/ruby-4 ([#2741](https://github.com/ruby/rbs/pull/2741))
483
+ * [Backport] Move Pathname to core from stdlib ([#2730](https://github.com/ruby/rbs/pull/2730))
484
+ * Backport rdoc 6.16 ([#2722](https://github.com/ruby/rbs/pull/2722))
485
+ * Backport rdoc support ([#2719](https://github.com/ruby/rbs/pull/2719))
486
+ * Backport "Remove sig for IO#{ready?,nread}" ([#2720](https://github.com/ruby/rbs/pull/2720))
487
+ * Backport more pure C parsers ([#2679](https://github.com/ruby/rbs/pull/2679))
488
+ * Backport module name normalization ([#2673](https://github.com/ruby/rbs/pull/2673))
489
+ * Backport pure-C parser ([#2671](https://github.com/ruby/rbs/pull/2671))
490
+ * Fix test failure ([#2672](https://github.com/ruby/rbs/pull/2672))
491
+
492
+ ## 3.9.5 (2025-09-08)
493
+
494
+ ### Signature updates
495
+
496
+ * Merge pull request #2655 from ruby/silence-string-deprecation ([#2656](https://github.com/ruby/rbs/pull/2656))
497
+
498
+ ### Miscellaneous
499
+
500
+ * Allows the use of a path list as RBS_SKIP_TESTS ([#2641](https://github.com/ruby/rbs/pull/2641))
501
+ * Suppress to GCC warning with multi-line comment ([#2646](https://github.com/ruby/rbs/pull/2646))
502
+ * Backport to 3.9 ([#2487](https://github.com/ruby/rbs/pull/2487))
503
+ * Use erb instead of set for load path testing ([#2468](https://github.com/ruby/rbs/pull/2468))
504
+
3
505
  ## 3.9.4 (2025-05-15)
4
506
 
5
507
  ### Miscellaneous