rbs 3.10.4 → 4.0.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 (267) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +7 -5
  5. data/.github/workflows/comments.yml +2 -2
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +16 -26
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +1 -1
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +2 -2
  12. data/.vscode/extensions.json +5 -0
  13. data/.vscode/settings.json +19 -0
  14. data/CHANGELOG.md +202 -2
  15. data/Rakefile +9 -23
  16. data/Steepfile +2 -0
  17. data/config.yml +457 -13
  18. data/core/array.rbs +218 -188
  19. data/core/basic_object.rbs +9 -8
  20. data/core/binding.rbs +0 -2
  21. data/core/builtin.rbs +2 -2
  22. data/core/class.rbs +6 -5
  23. data/core/comparable.rbs +45 -31
  24. data/core/complex.rbs +66 -55
  25. data/core/dir.rbs +57 -45
  26. data/core/encoding.rbs +6 -6
  27. data/core/enumerable.rbs +105 -91
  28. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  29. data/core/enumerator.rbs +24 -3
  30. data/core/errno.rbs +3 -2
  31. data/core/errors.rbs +31 -29
  32. data/core/exception.rbs +12 -12
  33. data/core/fiber.rbs +47 -36
  34. data/core/file.rbs +242 -169
  35. data/core/file_test.rbs +2 -2
  36. data/core/float.rbs +42 -68
  37. data/core/gc.rbs +78 -70
  38. data/core/hash.rbs +70 -60
  39. data/core/integer.rbs +32 -75
  40. data/core/io/buffer.rbs +36 -36
  41. data/core/io/wait.rbs +7 -7
  42. data/core/io.rbs +192 -146
  43. data/core/kernel.rbs +198 -147
  44. data/core/marshal.rbs +3 -3
  45. data/core/match_data.rbs +14 -12
  46. data/core/math.rbs +69 -67
  47. data/core/method.rbs +6 -8
  48. data/core/module.rbs +148 -88
  49. data/core/nil_class.rbs +4 -3
  50. data/core/numeric.rbs +53 -50
  51. data/core/object.rbs +6 -8
  52. data/core/object_space.rbs +11 -10
  53. data/core/pathname.rbs +131 -81
  54. data/core/proc.rbs +65 -34
  55. data/core/process.rbs +221 -201
  56. data/core/ractor.rbs +15 -11
  57. data/core/random.rbs +21 -3
  58. data/core/range.rbs +152 -49
  59. data/core/rational.rbs +5 -56
  60. data/core/rbs/unnamed/argf.rbs +58 -51
  61. data/core/rbs/unnamed/env_class.rbs +18 -13
  62. data/core/rbs/unnamed/main_class.rbs +123 -0
  63. data/core/rbs/unnamed/random.rbs +7 -116
  64. data/core/regexp.rbs +236 -197
  65. data/core/ruby.rbs +1 -1
  66. data/core/ruby_vm.rbs +32 -30
  67. data/core/rubygems/config_file.rbs +5 -5
  68. data/core/rubygems/errors.rbs +1 -1
  69. data/core/rubygems/requirement.rbs +5 -5
  70. data/core/rubygems/rubygems.rbs +5 -3
  71. data/core/set.rbs +17 -16
  72. data/core/signal.rbs +2 -2
  73. data/core/string.rbs +318 -298
  74. data/core/struct.rbs +26 -25
  75. data/core/symbol.rbs +25 -24
  76. data/core/thread.rbs +40 -41
  77. data/core/time.rbs +47 -42
  78. data/core/trace_point.rbs +34 -31
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +10 -10
  81. data/core/warning.rbs +7 -7
  82. data/docs/collection.md +1 -1
  83. data/docs/config.md +171 -0
  84. data/docs/inline.md +576 -0
  85. data/docs/syntax.md +46 -16
  86. data/docs/type_fingerprint.md +21 -0
  87. data/exe/rbs +1 -1
  88. data/ext/rbs_extension/ast_translation.c +595 -98
  89. data/ext/rbs_extension/class_constants.c +30 -0
  90. data/ext/rbs_extension/class_constants.h +15 -0
  91. data/ext/rbs_extension/legacy_location.c +30 -53
  92. data/ext/rbs_extension/legacy_location.h +37 -0
  93. data/ext/rbs_extension/main.c +125 -24
  94. data/include/rbs/ast.h +485 -150
  95. data/include/rbs/lexer.h +11 -4
  96. data/include/rbs/location.h +25 -44
  97. data/include/rbs/parser.h +20 -2
  98. data/include/rbs/util/rbs_constant_pool.h +0 -3
  99. data/include/rbs.h +8 -0
  100. data/lib/rbs/ast/annotation.rb +1 -1
  101. data/lib/rbs/ast/comment.rb +1 -1
  102. data/lib/rbs/ast/declarations.rb +10 -10
  103. data/lib/rbs/ast/members.rb +14 -14
  104. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  105. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  106. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  107. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  108. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  109. data/lib/rbs/ast/ruby/members.rb +723 -0
  110. data/lib/rbs/ast/type_param.rb +24 -4
  111. data/lib/rbs/buffer.rb +105 -20
  112. data/lib/rbs/cli/diff.rb +16 -15
  113. data/lib/rbs/cli/validate.rb +62 -125
  114. data/lib/rbs/cli.rb +55 -23
  115. data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
  116. data/lib/rbs/collection/sources/git.rb +1 -0
  117. data/lib/rbs/collection.rb +0 -1
  118. data/lib/rbs/definition.rb +6 -1
  119. data/lib/rbs/definition_builder/ancestor_builder.rb +119 -63
  120. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  121. data/lib/rbs/definition_builder.rb +177 -20
  122. data/lib/rbs/diff.rb +7 -1
  123. data/lib/rbs/environment/class_entry.rb +69 -0
  124. data/lib/rbs/environment/module_entry.rb +66 -0
  125. data/lib/rbs/environment.rb +338 -155
  126. data/lib/rbs/environment_loader.rb +2 -2
  127. data/lib/rbs/errors.rb +30 -20
  128. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  129. data/lib/rbs/inline_parser.rb +542 -0
  130. data/lib/rbs/location_aux.rb +36 -4
  131. data/lib/rbs/locator.rb +5 -1
  132. data/lib/rbs/method_type.rb +5 -3
  133. data/lib/rbs/namespace.rb +0 -7
  134. data/lib/rbs/parser_aux.rb +31 -8
  135. data/lib/rbs/prototype/helpers.rb +57 -0
  136. data/lib/rbs/prototype/rb.rb +3 -28
  137. data/lib/rbs/prototype/rbi.rb +3 -20
  138. data/lib/rbs/prototype/runtime.rb +10 -2
  139. data/lib/rbs/resolver/type_name_resolver.rb +0 -8
  140. data/lib/rbs/source.rb +99 -0
  141. data/lib/rbs/subtractor.rb +4 -3
  142. data/lib/rbs/test/type_check.rb +5 -2
  143. data/lib/rbs/type_name.rb +1 -8
  144. data/lib/rbs/types.rb +88 -78
  145. data/lib/rbs/unit_test/convertibles.rb +1 -0
  146. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  147. data/lib/rbs/validator.rb +2 -2
  148. data/lib/rbs/version.rb +1 -1
  149. data/lib/rbs.rb +12 -1
  150. data/rbs.gemspec +3 -2
  151. data/rust/.gitignore +1 -0
  152. data/rust/Cargo.lock +378 -0
  153. data/rust/Cargo.toml +7 -0
  154. data/rust/ruby-rbs/Cargo.toml +22 -0
  155. data/rust/ruby-rbs/build.rs +764 -0
  156. data/rust/ruby-rbs/examples/locations.rs +60 -0
  157. data/rust/ruby-rbs/src/lib.rs +1 -0
  158. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  159. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  160. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  161. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  162. data/rust/ruby-rbs-sys/build.rs +204 -0
  163. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  164. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  165. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  166. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  167. data/schema/typeParam.json +17 -1
  168. data/sig/ancestor_builder.rbs +1 -1
  169. data/sig/ast/ruby/annotations.rbs +421 -0
  170. data/sig/ast/ruby/comment_block.rbs +127 -0
  171. data/sig/ast/ruby/declarations.rbs +158 -0
  172. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  173. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  174. data/sig/ast/ruby/members.rbs +178 -0
  175. data/sig/buffer.rbs +63 -5
  176. data/sig/cli/diff.rbs +5 -11
  177. data/sig/cli/validate.rbs +12 -8
  178. data/sig/cli.rbs +18 -18
  179. data/sig/definition.rbs +6 -0
  180. data/sig/definition_builder.rbs +3 -1
  181. data/sig/environment/class_entry.rbs +50 -0
  182. data/sig/environment/module_entry.rbs +50 -0
  183. data/sig/environment.rbs +37 -81
  184. data/sig/errors.rbs +26 -20
  185. data/sig/inline_parser/comment_association.rbs +71 -0
  186. data/sig/inline_parser.rbs +124 -0
  187. data/sig/location.rbs +32 -7
  188. data/sig/locator.rbs +0 -2
  189. data/sig/method_builder.rbs +9 -4
  190. data/sig/namespace.rbs +0 -5
  191. data/sig/parser.rbs +47 -13
  192. data/sig/prototype/helpers.rbs +2 -0
  193. data/sig/resolver/type_name_resolver.rbs +0 -3
  194. data/sig/source.rbs +48 -0
  195. data/sig/type_param.rbs +13 -8
  196. data/sig/typename.rbs +0 -5
  197. data/sig/types.rbs +6 -7
  198. data/sig/unit_test/spy.rbs +0 -8
  199. data/sig/unit_test/type_assertions.rbs +11 -0
  200. data/src/ast.c +491 -143
  201. data/src/lexer.c +1552 -1314
  202. data/src/lexer.re +7 -0
  203. data/src/lexstate.c +8 -1
  204. data/src/location.c +8 -48
  205. data/src/parser.c +1107 -409
  206. data/src/util/rbs_constant_pool.c +0 -4
  207. data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
  208. data/stdlib/cgi-escape/0/escape.rbs +4 -4
  209. data/stdlib/coverage/0/coverage.rbs +4 -3
  210. data/stdlib/date/0/date.rbs +33 -28
  211. data/stdlib/date/0/date_time.rbs +24 -23
  212. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  213. data/stdlib/digest/0/digest.rbs +110 -0
  214. data/stdlib/erb/0/erb.rbs +64 -53
  215. data/stdlib/etc/0/etc.rbs +55 -50
  216. data/stdlib/fileutils/0/fileutils.rbs +140 -126
  217. data/stdlib/forwardable/0/forwardable.rbs +10 -10
  218. data/stdlib/io-console/0/io-console.rbs +2 -2
  219. data/stdlib/json/0/json.rbs +158 -131
  220. data/stdlib/monitor/0/monitor.rbs +3 -3
  221. data/stdlib/net-http/0/net-http.rbs +159 -134
  222. data/stdlib/objspace/0/objspace.rbs +8 -30
  223. data/stdlib/open-uri/0/open-uri.rbs +8 -8
  224. data/stdlib/open3/0/open3.rbs +469 -10
  225. data/stdlib/openssl/0/openssl.rbs +144 -129
  226. data/stdlib/optparse/0/optparse.rbs +23 -14
  227. data/stdlib/pathname/0/pathname.rbs +2 -2
  228. data/stdlib/pp/0/pp.rbs +9 -8
  229. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  230. data/stdlib/pstore/0/pstore.rbs +35 -30
  231. data/stdlib/psych/0/psych.rbs +62 -9
  232. data/stdlib/psych/0/store.rbs +2 -4
  233. data/stdlib/pty/0/pty.rbs +9 -6
  234. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  235. data/stdlib/rdoc/0/code_object.rbs +2 -1
  236. data/stdlib/rdoc/0/parser.rbs +1 -1
  237. data/stdlib/rdoc/0/store.rbs +1 -1
  238. data/stdlib/ripper/0/ripper.rbs +20 -17
  239. data/stdlib/securerandom/0/manifest.yaml +2 -0
  240. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  241. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  242. data/stdlib/socket/0/addrinfo.rbs +9 -9
  243. data/stdlib/socket/0/basic_socket.rbs +3 -3
  244. data/stdlib/socket/0/ip_socket.rbs +10 -8
  245. data/stdlib/socket/0/socket.rbs +10 -9
  246. data/stdlib/socket/0/tcp_server.rbs +1 -1
  247. data/stdlib/socket/0/tcp_socket.rbs +1 -1
  248. data/stdlib/socket/0/udp_socket.rbs +1 -1
  249. data/stdlib/socket/0/unix_server.rbs +1 -1
  250. data/stdlib/stringio/0/stringio.rbs +55 -54
  251. data/stdlib/strscan/0/string_scanner.rbs +46 -44
  252. data/stdlib/tempfile/0/tempfile.rbs +24 -20
  253. data/stdlib/time/0/time.rbs +7 -5
  254. data/stdlib/tsort/0/tsort.rbs +7 -6
  255. data/stdlib/uri/0/common.rbs +31 -18
  256. data/stdlib/uri/0/file.rbs +2 -2
  257. data/stdlib/uri/0/generic.rbs +9 -2
  258. data/stdlib/uri/0/http.rbs +2 -2
  259. data/stdlib/uri/0/ldap.rbs +2 -2
  260. data/stdlib/uri/0/mailto.rbs +3 -3
  261. data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
  262. data/stdlib/zlib/0/deflate.rbs +4 -3
  263. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  264. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  265. data/stdlib/zlib/0/inflate.rbs +1 -1
  266. data/stdlib/zlib/0/need_dict.rbs +1 -1
  267. metadata +66 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 625eb3f7213f91b7ded108fcb35f84120cdf30f269dd2db324ca88da0b82f79a
4
- data.tar.gz: 5efcce6237bd7e9135916d67c32746f72e319fa0c6ae2abeeda6173cf9f4786f
3
+ metadata.gz: 690d197a18a87b38b5346aa388ce159c6309062882bfe0042f081a0c6c145f32
4
+ data.tar.gz: 8302d00f402a1997f0ad749e684da8a7717115a0d51d60b9aa006a5988345df5
5
5
  SHA512:
6
- metadata.gz: 895df7b19ee64fcf71291cd06e5487c3e87e30fbdaae13b0ba970dba0c3544d8bedbeef08775e46efe224a0d923393520f9efd0b0b8144dd4bf73230114eb6b7
7
- data.tar.gz: d533dfbc071c697297670af31c3d28482f9db46948b3f94404b7797552e981922b82d7ca34da5501c49f0501d51d079706e4c1b0f660ce248babc70dcec5215b
6
+ metadata.gz: aa8baf772365041ba474bbbd1c5ac55ae09bffc31fe57ae307e1778fdd115afbf9c2b940e59019e40026e76afdd77a30321229e46d88a953f9a7c90a7bf1c383
7
+ data.tar.gz: a701db27b244f861abcf394ff0ab57e54ad064697df540e564e4fda4b1242e9316f5453e2a14bb7548e8b063df39c0775bf76d13f7b8fde833c2c7e4e9758b65
@@ -1,20 +1,20 @@
1
1
  version: 2
2
2
  updates:
3
- - package-ecosystem: bundler
4
- directory: "/"
5
- schedule:
6
- interval: daily
7
- open-pull-requests-limit: 3
8
- allow:
9
- - dependency-type: all
3
+ # - package-ecosystem: bundler
4
+ # directory: "/"
5
+ # schedule:
6
+ # interval: daily
7
+ # open-pull-requests-limit: 3
8
+ # allow:
9
+ # - dependency-type: all
10
10
 
11
- - package-ecosystem: bundler
12
- directory: "/steep"
13
- schedule:
14
- interval: daily
15
- open-pull-requests-limit: 3
16
- allow:
17
- - dependency-type: all
11
+ # - package-ecosystem: bundler
12
+ # directory: "/steep"
13
+ # schedule:
14
+ # interval: daily
15
+ # open-pull-requests-limit: 3
16
+ # allow:
17
+ # - dependency-type: all
18
18
 
19
19
  - package-ecosystem: 'github-actions'
20
20
  directory: '/'
@@ -0,0 +1,60 @@
1
+ name: Scheduled Bundle Update PR
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '0 0 * * 2'
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ bundle-update:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - name: Checkout repository
14
+ uses: actions/checkout@v6
15
+
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: '4.0'
20
+
21
+ - name: Set up git
22
+ run: |
23
+ git config --global user.name "github-actions[bot]"
24
+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
25
+
26
+ - name: Switch branch
27
+ run: |
28
+ git switch -c bundle-update-$(date +'%Y%m%d')-$(uuidgen | cut -c1-8)
29
+
30
+ - name: Install bundler
31
+ run: gem install bundler
32
+
33
+ - name: Run bundle update
34
+ run: |
35
+ bundle lock --update
36
+ bundle lock --update --gemfile=steep/Gemfile
37
+ git add Gemfile.lock steep/Gemfile.lock
38
+
39
+ if git diff --cached --exit-code; then
40
+ echo "No changes to commit, exiting."
41
+ exit 0
42
+ fi
43
+
44
+ git commit -m "bundle update"
45
+ echo "has_update=true" >> $GITHUB_ENV
46
+
47
+ - name: Push branch
48
+ if: env.has_update == 'true'
49
+ run: git push origin HEAD
50
+
51
+ - name: Create Pull Request
52
+ if: env.has_update == 'true'
53
+ env:
54
+ GH_TOKEN: ${{ secrets.DEPENDABOT_MERGE_GH_TOKEN }}
55
+ run: |
56
+ gh pr create \
57
+ --title "bundle update ($(date +'%Y-%m-%d'))" \
58
+ --body "Automated weekly bundle update" \
59
+ --head "$(git rev-parse --abbrev-ref HEAD)" \
60
+ --base "${{ github.event.repository.default_branch }}"
@@ -2,6 +2,8 @@ name: C Code Generation and Formatting Check
2
2
 
3
3
  on:
4
4
  push:
5
+ branches:
6
+ - master
5
7
  pull_request: {}
6
8
  merge_group: {}
7
9
 
@@ -9,7 +11,7 @@ jobs:
9
11
  format-check:
10
12
  runs-on: ubuntu-latest
11
13
  steps:
12
- - uses: actions/checkout@v4
14
+ - uses: actions/checkout@v6
13
15
  - uses: ruby/setup-ruby@v1
14
16
  with:
15
17
  ruby-version: "4.0"
@@ -36,10 +38,10 @@ jobs:
36
38
  curl -L https://github.com/skvadrik/re2c/archive/refs/tags/4.3.tar.gz > re2c-4.3.tar.gz
37
39
  tar xf re2c-4.3.tar.gz
38
40
  cd re2c-4.3
39
- autoreconf -i -W all
40
- ./configure
41
- make -j"$(nproc)" -l"$(nproc)"
42
- sudo make install
41
+ cmake --preset=linux-gcc-release-ootree-skeleton-fast
42
+ cmake --build --preset=linux-gcc-release-ootree-skeleton-fast --parallel="$(nproc)"
43
+ sudo ln -sf "$(pwd)"/.build/linux-gcc-release-ootree-skeleton-fast/re2c /usr/local/bin/re2c
44
+ re2c --version
43
45
  - name: Update rubygems & bundler
44
46
  run: |
45
47
  ruby -v
@@ -13,10 +13,10 @@ jobs:
13
13
  # env:
14
14
  # RUBY_COMMIT: v4.0.0-preview2
15
15
  steps:
16
- - uses: actions/checkout@v4
16
+ - uses: actions/checkout@v6
17
17
  - uses: ruby/setup-ruby@v1
18
18
  with:
19
- ruby-version: "4.0.0"
19
+ ruby-version: "4.0.1"
20
20
  bundler: none
21
21
  - name: Install dependencies
22
22
  run: |
@@ -14,10 +14,10 @@ jobs:
14
14
  if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' }}
15
15
  steps:
16
16
  - name: Dependabot metadata
17
- uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 # v2.3.0
17
+ uses: dependabot/fetch-metadata@21025c705c08248db411dc16f3619e6b5f9ea21a # v2.5.0
18
18
  id: metadata
19
19
  - name: Checkout repository
20
- uses: actions/checkout@v4
20
+ uses: actions/checkout@v6
21
21
  with:
22
22
  fetch-depth: 0
23
23
  - name: Abort if blocker files are changed
@@ -32,10 +32,12 @@ jobs:
32
32
  job: rubocop validate test_doc build test_generate_stdlib raap
33
33
  - ruby: "4.0"
34
34
  job: typecheck_test
35
+ - ruby: asan-release
36
+ job: test
35
37
  env:
36
38
  RANDOMIZE_STDLIB_TEST_ORDER: "true"
37
39
  steps:
38
- - uses: actions/checkout@v4
40
+ - uses: actions/checkout@v6
39
41
  - uses: ruby/setup-ruby@v1
40
42
  with:
41
43
  ruby-version: ${{ matrix.ruby }}
@@ -57,6 +59,10 @@ jobs:
57
59
  echo "NO_MINITEST=true" >> $GITHUB_ENV
58
60
  bundle config set --local without 'minitest'
59
61
  if: ${{ contains(matrix.ruby, 'head') }}
62
+ - name: bundle config set force_ruby_platform true if head
63
+ if: ${{ contains(matrix.ruby, 'head') }}
64
+ run: |
65
+ bundle config set force_ruby_platform true
60
66
  - name: Skip installing type checkers
61
67
  if: ${{ ! contains(matrix.job, 'typecheck_test') }}
62
68
  run: |
@@ -64,33 +70,13 @@ jobs:
64
70
  - name: bin/setup
65
71
  run: |
66
72
  bin/setup
73
+ - name: Configure ASAN options
74
+ if: ${{ contains(matrix.ruby, 'asan') }}
75
+ run: |
76
+ echo "ASAN_OPTIONS=abort_on_error=1" >> $GITHUB_ENV
67
77
  - name: Run test
68
78
  run: |
69
79
  bundle exec rake ${{ matrix.job }}
70
- valgrind:
71
- runs-on: ubuntu-latest
72
- steps:
73
- - uses: actions/checkout@v2
74
- - uses: ruby/setup-ruby@v1
75
- with:
76
- ruby-version: "3.4"
77
- bundler-cache: none
78
- - name: Set working directory as safe
79
- run: git config --global --add safe.directory $(pwd)
80
- - name: Install dependencies
81
- run: |
82
- sudo apt-get update
83
- sudo apt-get install -y libdb-dev curl autoconf automake m4 libtool python3 valgrind
84
- - name: Update rubygems & bundler
85
- run: |
86
- ruby -v
87
- gem update --system
88
- - name: bin/setup
89
- run: |
90
- bin/setup
91
- - run: bundle exec rake test:valgrind
92
- env:
93
- RUBY_FREE_AT_EXIT: 1
94
80
  C99_compile:
95
81
  runs-on: macos-latest
96
82
  strategy:
@@ -98,7 +84,7 @@ jobs:
98
84
  matrix:
99
85
  ruby: ['4.0', head]
100
86
  steps:
101
- - uses: actions/checkout@v4
87
+ - uses: actions/checkout@v6
102
88
  - name: Install dependencies
103
89
  run: |
104
90
  brew install ruby-build
@@ -116,6 +102,10 @@ jobs:
116
102
  run: gem install erb
117
103
  - name: clang version
118
104
  run: clang --version
105
+ - name: bundle config set force_ruby_platform true if head
106
+ if: ${{ contains(matrix.ruby, 'head') }}
107
+ run: |
108
+ bundle config set force_ruby_platform true
119
109
  - name: bin/setup
120
110
  run: |
121
111
  bin/setup
@@ -0,0 +1,95 @@
1
+ name: Rust
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ paths:
9
+ - ".github/workflows/rust.yml"
10
+ - "rust/**"
11
+ - "include/**"
12
+ - "src/**"
13
+
14
+ env:
15
+ RUSTFLAGS: "-D warnings"
16
+
17
+ jobs:
18
+ test:
19
+ name: cargo:test
20
+ runs-on: ${{ matrix.os }}
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ os: [ubuntu-latest, macos-latest, windows-latest]
25
+ steps:
26
+ - uses: actions/checkout@v6
27
+ - name: Install Rust tools
28
+ run: |
29
+ rustup update --no-self-update stable
30
+ rustup default stable
31
+ - uses: actions/cache@v5
32
+ with:
33
+ path: |
34
+ ~/.cargo/registry
35
+ ~/.cargo/git
36
+ rust/target
37
+ key: ${{ runner.os }}-cargo-${{ hashFiles('rust/Cargo.lock') }}
38
+ restore-keys: |
39
+ ${{ runner.os }}-cargo-
40
+ - name: Run tests
41
+ run: |
42
+ cd rust
43
+ cargo test --verbose
44
+
45
+ publish-dry-run:
46
+ name: cargo:publish-dry-run
47
+ runs-on: ubuntu-latest
48
+ continue-on-error: true
49
+ steps:
50
+ - uses: actions/checkout@v6
51
+ - name: Install Rust tools
52
+ run: |
53
+ rustup update --no-self-update stable
54
+ rustup default stable
55
+ - uses: actions/cache@v5
56
+ with:
57
+ path: |
58
+ ~/.cargo/registry
59
+ ~/.cargo/git
60
+ rust/target
61
+ key: ${{ runner.os }}-cargo-${{ hashFiles('rust/Cargo.lock') }}
62
+ restore-keys: |
63
+ ${{ runner.os }}-cargo-
64
+ - name: Test publish crates
65
+ run: |
66
+ cd rust
67
+ cargo publish --dry-run
68
+
69
+ lint:
70
+ name: cargo:lint
71
+ runs-on: ubuntu-latest
72
+ steps:
73
+ - uses: actions/checkout@v6
74
+ - name: Install Rust tools
75
+ run: |
76
+ rustup update --no-self-update stable
77
+ rustup default stable
78
+ rustup component add --toolchain stable clippy rustfmt
79
+ - uses: actions/cache@v5
80
+ with:
81
+ path: |
82
+ ~/.cargo/registry
83
+ ~/.cargo/git
84
+ rust/target
85
+ key: ${{ runner.os }}-cargo-${{ hashFiles('rust/Cargo.lock') }}
86
+ restore-keys: |
87
+ ${{ runner.os }}-cargo-
88
+ - name: Check formatting
89
+ run: |
90
+ cd rust
91
+ cargo fmt --check
92
+ - name: Run clippy
93
+ run: |
94
+ cd rust
95
+ cargo clippy
@@ -13,7 +13,7 @@ jobs:
13
13
  strategy:
14
14
  fail-fast: false
15
15
  steps:
16
- - uses: actions/checkout@v4
16
+ - uses: actions/checkout@v6
17
17
  - uses: ruby/setup-ruby@v1
18
18
  with:
19
19
  ruby-version: "3.4"
@@ -15,7 +15,7 @@ jobs:
15
15
  matrix:
16
16
  ruby: ['3.4', ucrt, mswin]
17
17
  steps:
18
- - uses: actions/checkout@v4
18
+ - uses: actions/checkout@v6
19
19
  - name: load ruby
20
20
  uses: ruby/setup-ruby@v1
21
21
  with:
@@ -33,7 +33,7 @@ jobs:
33
33
 
34
34
  res = URI.parse("https://stdgems.org/bundled_gems.json").read
35
35
  bundled_gems = JSON.parse(res)["gems"].map{_1["gem"]}
36
- system "gem uninstall --force #{bundled_gems.join(" ")}", exception: true
36
+ system "gem uninstall #{bundled_gems.join(" ")} --force", exception: true
37
37
  '
38
38
  - name: bundle install
39
39
  run: |
data/.rubocop.yml CHANGED
@@ -1,9 +1,9 @@
1
- require:
1
+ plugins:
2
2
  - rubocop-rubycw
3
3
  - rubocop-on-rbs
4
4
 
5
5
  AllCops:
6
- TargetRubyVersion: 3.1
6
+ TargetRubyVersion: 3.4
7
7
  DisabledByDefault: true
8
8
  Exclude:
9
9
  - 'vendor/bundle/**/*'
@@ -0,0 +1,5 @@
1
+ {
2
+ "recommendations": [
3
+ "llvm-vs-code-extensions.vscode-clangd"
4
+ ]
5
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "clangd.onConfigChanged": "restart",
3
+ "[c]": {
4
+ "editor.formatOnSave": true,
5
+ "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
6
+ },
7
+ "[cpp]": {
8
+ "editor.formatOnSave": true,
9
+ "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
10
+ },
11
+ "[h]": {
12
+ "editor.formatOnSave": true,
13
+ "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
14
+ },
15
+ "[hpp]": {
16
+ "editor.formatOnSave": true,
17
+ "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
18
+ }
19
+ }
data/CHANGELOG.md CHANGED
@@ -1,12 +1,212 @@
1
1
  # CHANGELOG
2
2
 
3
- ## 3.10.4 (2026-03-25)
3
+ ## 4.0.0 (2026-03-16)
4
+
5
+ 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.
6
+
7
+ ```ruby
8
+ class Calculator
9
+ # @rbs (Integer, Integer) -> Integer
10
+ def add(a, b) = a + b
11
+ end
12
+ ```
13
+
14
+ Note: RBS inline is still experimental and may change in future releases.
15
+
16
+ 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`).
17
+
18
+ ### Signature updates
19
+
20
+ **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`
21
+
22
+ * Remove deprecated types ([#2880](https://github.com/ruby/rbs/pull/2880))
23
+ * Add type `RBS::Unnamed::TopLevelSelfClass` to core ([#2362](https://github.com/ruby/rbs/pull/2362))
24
+ * Graduate bundled gems from Ruby v4.0 ([#2852](https://github.com/ruby/rbs/pull/2852))
25
+ * stdlib: Add missing Psych methods and exception classes ([#2850](https://github.com/ruby/rbs/pull/2850))
26
+ * Add variants with positional argument to `Hash#transform_keys` ([#2848](https://github.com/ruby/rbs/pull/2848))
27
+ * add extra kwarg options for File#initialize and derivatives ([#2798](https://github.com/ruby/rbs/pull/2798))
28
+ * pstore: fixes types, treat it as a collection ([#2806](https://github.com/ruby/rbs/pull/2806))
29
+ * Add signatures for `{Module,Proc}#ruby2_keywords` ([#2805](https://github.com/ruby/rbs/pull/2805))
30
+ * Make Zlib::GzipWriter.new level and strategy parameters optional ([#2810](https://github.com/ruby/rbs/pull/2810))
31
+ * URI.(s) does string coercion ([#2825](https://github.com/ruby/rbs/pull/2825))
32
+ * Fix String#append_as_bytes to accept Integer ([#2817](https://github.com/ruby/rbs/pull/2817))
33
+ * [Comparable] Add in Comparable::_CompareToZero ([#2697](https://github.com/ruby/rbs/pull/2697))
34
+ * [Kernel] Add Kernel.trace_var and Kernel.untrace_var ([#2682](https://github.com/ruby/rbs/pull/2682))
35
+ * Add signature for `Module#method_undefined` ([#2804](https://github.com/ruby/rbs/pull/2804))
36
+ * Fix Zlib::GzipWriter signatures ([#2803](https://github.com/ruby/rbs/pull/2803))
37
+ * GzipWriter#initialize only takes 1 required positional arg ([#2799](https://github.com/ruby/rbs/pull/2799))
38
+ * Fix accessibility of method in Module ([#2802](https://github.com/ruby/rbs/pull/2802))
39
+ * Graduate kconv ([#2794](https://github.com/ruby/rbs/pull/2794))
40
+ * Fix test related to pathname ([#2789](https://github.com/ruby/rbs/pull/2789))
41
+ * Split pathname to core and stdlib ([#2777](https://github.com/ruby/rbs/pull/2777))
42
+ * [Kernel] Narrow `caller_locations` ([#2745](https://github.com/ruby/rbs/pull/2745))
43
+ * Ruby 4.1 changed `source_location` type ([#2784](https://github.com/ruby/rbs/pull/2784))
44
+ * Remove ObjectSpace.count_nodes ([#2779](https://github.com/ruby/rbs/pull/2779))
45
+ * Support selector for `String#strip` family. ([#2775](https://github.com/ruby/rbs/pull/2775))
46
+ * Add `Ruby`, `Array#find`, and `Array#rfind` ([#2767](https://github.com/ruby/rbs/pull/2767))
47
+ * Update minitest ([#2761](https://github.com/ruby/rbs/pull/2761))
48
+ * Support BigDecimal v4 ([#2758](https://github.com/ruby/rbs/pull/2758))
49
+ * Update rdoc and comments ([#2733](https://github.com/ruby/rbs/pull/2733))
50
+ * Update cgi and cgi/escape type definitions ([#2728](https://github.com/ruby/rbs/pull/2728))
51
+ * Update RBS files for Ruby 4 ([#2731](https://github.com/ruby/rbs/pull/2731))
52
+ * Update existing docs ([#2724](https://github.com/ruby/rbs/pull/2724))
53
+ * Remove reference to `JSON.deep_const_get` ([#2701](https://github.com/ruby/rbs/pull/2701))
54
+ * Remove deprecated methods in `JSON` ([#2366](https://github.com/ruby/rbs/pull/2366))
55
+ * Update FileUtils to v1.8.0 ([#2700](https://github.com/ruby/rbs/pull/2700))
56
+ * Avoid overloading where arguments are identical ([#2559](https://github.com/ruby/rbs/pull/2559))
57
+ * Move Pathname to core from stdlib ([#2705](https://github.com/ruby/rbs/pull/2705))
58
+ * Remove undocumented `#nonzero?` ([#2543](https://github.com/ruby/rbs/pull/2543))
59
+ * Add signature for `OptionParser#raise_unknown` ([#2735](https://github.com/ruby/rbs/pull/2735))
60
+ * Add signature for `Open3.popen2` ([#2734](https://github.com/ruby/rbs/pull/2734))
61
+ * Add RFC2396_PARSER to URI module ([#2727](https://github.com/ruby/rbs/pull/2727))
62
+ * Add signature for `Open3.capture3` ([#2714](https://github.com/ruby/rbs/pull/2714))
63
+ * Remove sig for IO#{ready?,nread} ([#2710](https://github.com/ruby/rbs/pull/2710))
64
+ * Accept `nil` state parameter in `to_json` type signatures ([#2691](https://github.com/ruby/rbs/pull/2691))
65
+ * Add type of `Open3.popen3` ([#2699](https://github.com/ruby/rbs/pull/2699))
66
+ * `unsetenv_others` and `close_others` only allows bool. ([#2698](https://github.com/ruby/rbs/pull/2698))
67
+ * Add deprecated annotation to `attr` with bool args ([#2693](https://github.com/ruby/rbs/pull/2693))
68
+ * Update open3 ([#2692](https://github.com/ruby/rbs/pull/2692))
69
+ * Add signature for `SecureRandom.bytes` ([#2690](https://github.com/ruby/rbs/pull/2690))
70
+ * Set %a{deprecated} to deprecated core methods ([#2664](https://github.com/ruby/rbs/pull/2664))
71
+ * Migrate usages of ::_ToPath to use ::path instead ([#2677](https://github.com/ruby/rbs/pull/2677))
72
+ * Add missing signatures for `Random::Formatter` ([#2680](https://github.com/ruby/rbs/pull/2680))
73
+ * Split `Random::Formatter` to core and stdlib ([#2661](https://github.com/ruby/rbs/pull/2661))
74
+ * Skip test cases of developing methods for Pathname ([#2648](https://github.com/ruby/rbs/pull/2648))
75
+ * Add signature `Random.seed` ([#2649](https://github.com/ruby/rbs/pull/2649))
76
+ * Update `string.rbs` to avoid deprecation warning in Steep ([#2655](https://github.com/ruby/rbs/pull/2655))
77
+ * Add sig `IO#pread` and `IO#pwrite` ([#2647](https://github.com/ruby/rbs/pull/2647))
78
+ * Refine signature of `Numeric#step` and add type of `Enumerator::ArithmeticSequence` ([#2600](https://github.com/ruby/rbs/pull/2600))
79
+ * Remove undocumented override methods ([#2622](https://github.com/ruby/rbs/pull/2622))
80
+ * Add docs ([#2625](https://github.com/ruby/rbs/pull/2625))
81
+ * Remove undocumented methods for `imaginary` ([#2620](https://github.com/ruby/rbs/pull/2620))
82
+ * Update securerandom ([#2619](https://github.com/ruby/rbs/pull/2619))
83
+ * Drop undocumented `#eql?` ([#2618](https://github.com/ruby/rbs/pull/2618))
84
+ * Just use `Numeric#+@` and return self ([#2597](https://github.com/ruby/rbs/pull/2597))
85
+ * Drop undocumented `#dup` ([#2598](https://github.com/ruby/rbs/pull/2598))
86
+ * Add signature for `Digest::SHA2` ([#2573](https://github.com/ruby/rbs/pull/2573))
87
+ * Add signatures for `OpenURI` ([#2574](https://github.com/ruby/rbs/pull/2574))
88
+ * Add signature for `IO::TimeoutError` ([#2571](https://github.com/ruby/rbs/pull/2571))
89
+ * Add signatures for `Set` ([#2570](https://github.com/ruby/rbs/pull/2570))
90
+ * Add signature for `Enumerator#+` ([#2567](https://github.com/ruby/rbs/pull/2567))
91
+ * Add signature for `Enumerator::Lazy#eager` ([#2568](https://github.com/ruby/rbs/pull/2568))
92
+ * Add signature for `Fiber#blocking` ([#2566](https://github.com/ruby/rbs/pull/2566))
93
+ * Support BasicObject to avoid NoMethodError for `RBS::Test::TypeCheck` ([#2565](https://github.com/ruby/rbs/pull/2565))
94
+ * Add documentation for `Range#{minmax,count,to_a,entries}` ([#2562](https://github.com/ruby/rbs/pull/2562))
95
+ * Delegate to `Enumerable` from `Range#{min,max}` ([#2540](https://github.com/ruby/rbs/pull/2540))
96
+ * Add URI::Generic#+ ([#2535](https://github.com/ruby/rbs/pull/2535))
97
+ * Make IO.binread, IO.binwrite, IO.read and IO.write accept _ToPath ([#2378](https://github.com/ruby/rbs/pull/2378))
98
+ * Support pattern argument for Enumerable#{all,any,none,one}? ([#2368](https://github.com/ruby/rbs/pull/2368))
99
+ * fixing sig for addrinfo ([#2464](https://github.com/ruby/rbs/pull/2464))
100
+
101
+ ### Language updates
102
+
103
+ * Add type arguments support to singleton types ([#2502](https://github.com/ruby/rbs/pull/2502))
104
+ * Move the note about lower bound ([#2517](https://github.com/ruby/rbs/pull/2517))
105
+ * Add support for lower bounds in type parameters ([#2490](https://github.com/ruby/rbs/pull/2490))
4
106
 
5
107
  ### Library changes
6
108
 
109
+ * Add `#type_fingerprint` methods ([#2879](https://github.com/ruby/rbs/pull/2879))
110
+ * `top` for membership predicates of collection types ([#2878](https://github.com/ruby/rbs/pull/2878))
111
+ * Add block parameter (`&block`) type declaration ([#2875](https://github.com/ruby/rbs/pull/2875))
112
+ * Add splat (`*a`) and double-splat (`**a`) parameter support ([#2873](https://github.com/ruby/rbs/pull/2873))
113
+ * Add parameter type inline annotation ([#2443](https://github.com/ruby/rbs/pull/2443))
114
+ * Reduce compile warnings ([#2871](https://github.com/ruby/rbs/pull/2871))
115
+ * Specify input range by byte offsets ([#2863](https://github.com/ruby/rbs/pull/2863))
116
+ * add `extern "C"` wrapping to `rbs.h` when using C++ ([#2855](https://github.com/ruby/rbs/pull/2855))
117
+ * Automatically inherits super method type if unannotated ([#2858](https://github.com/ruby/rbs/pull/2858))
118
+ * Add `...` syntax to method type inline annotation syntax ([#2856](https://github.com/ruby/rbs/pull/2856))
119
+ * Fix for string reference corruption issue ([#2836](https://github.com/ruby/rbs/pull/2836))
120
+ * Use unreleased steep for `rake typecheck_test` ([#2842](https://github.com/ruby/rbs/pull/2842))
121
+ * Fix breaking references after GC.compact ([#2822](https://github.com/ruby/rbs/pull/2822))
122
+ * Fix special methods accessibility. ([#2546](https://github.com/ruby/rbs/pull/2546))
123
+ * Fix allocation alignment ([#2788](https://github.com/ruby/rbs/pull/2788))
124
+ * Skip `set` and `pathname` from `manifest.yaml` ([#2773](https://github.com/ruby/rbs/pull/2773))
125
+ * Fix C++ compiler warnings ([#2755](https://github.com/ruby/rbs/pull/2755))
126
+ * Better encoding ([#2675](https://github.com/ruby/rbs/pull/2675))
127
+ * Move `require_eof` handling to C API ([#2678](https://github.com/ruby/rbs/pull/2678))
128
+ * Delete debug print ([#2753](https://github.com/ruby/rbs/pull/2753))
129
+ * Make assertions macro ([#2729](https://github.com/ruby/rbs/pull/2729))
130
+ * Remove deprecated method `Kernel#Namespace`. Also remove `Kernel#TypeName`. ([#2480](https://github.com/ruby/rbs/pull/2480))
131
+ * Update rdoc to 6.13.1 ([#2355](https://github.com/ruby/rbs/pull/2355))
132
+ * Allow `self` for inline `@rbs @ivar: self` ([#2633](https://github.com/ruby/rbs/pull/2633))
133
+ * Normalize modules during type name resolution ([#2670](https://github.com/ruby/rbs/pull/2670))
134
+ * Only load extconf_compile_commands_json when compiling through Rake ([#2498](https://github.com/ruby/rbs/pull/2498))
135
+ * Use `malloc` based allocator ([#2666](https://github.com/ruby/rbs/pull/2666))
136
+ * Add another parser benchmark script ([#2668](https://github.com/ruby/rbs/pull/2668))
137
+ * Reuse empty array and hash ([#2667](https://github.com/ruby/rbs/pull/2667))
138
+ * Faster lexical analyzer ([#2665](https://github.com/ruby/rbs/pull/2665))
139
+ * Introduce `type_fingerprint` ([#2644](https://github.com/ruby/rbs/pull/2644))
140
+ * Add module-class alias declaration ([#2636](https://github.com/ruby/rbs/pull/2636))
141
+ * Inline constant declaration ([#2635](https://github.com/ruby/rbs/pull/2635))
142
+ * `self` type is rejected depending on the context ([#2627](https://github.com/ruby/rbs/pull/2627))
143
+ * Add instance variable declaration annotation ([#2632](https://github.com/ruby/rbs/pull/2632))
144
+ * Module-self allow void once ([#2626](https://github.com/ruby/rbs/pull/2626))
145
+ * Support inheritance in Inline RBS declaration ([#2630](https://github.com/ruby/rbs/pull/2630))
146
+ * Inline attribute/method definitions have comments ([#2624](https://github.com/ruby/rbs/pull/2624))
147
+ * Inline RBS declaration for attributes (`attr_***`) ([#2623](https://github.com/ruby/rbs/pull/2623))
148
+ * Fix bad scaling in `rbs_comment_t` tokens ([#2578](https://github.com/ruby/rbs/pull/2578))
149
+ * Update parser so that `void` type is rejected depending on the context ([#2590](https://github.com/ruby/rbs/pull/2590))
150
+ * Implement mixin in inline RBS declarations ([#2614](https://github.com/ruby/rbs/pull/2614))
151
+ * Validate type args given to non-generic ancestor ([#2615](https://github.com/ruby/rbs/pull/2615))
152
+ * Add name locations to AST ([#2595](https://github.com/ruby/rbs/pull/2595))
153
+ * Move `exit` calls to `exe/rbs` ([#2591](https://github.com/ruby/rbs/pull/2591))
154
+ * Fix locator ([#2588](https://github.com/ruby/rbs/pull/2588))
155
+ * Introduce standalone C parser for RBS with arena allocation ([#2398](https://github.com/ruby/rbs/pull/2398))
156
+ * Fix subtraction of civar ([#2369](https://github.com/ruby/rbs/pull/2369))
157
+ * Buffer with empty string ([#2551](https://github.com/ruby/rbs/pull/2551))
158
+ * Fix unavailable MAP_ANONYMOUS ([#2470](https://github.com/ruby/rbs/pull/2470))
159
+ * Inline minor fix ([#2514](https://github.com/ruby/rbs/pull/2514))
160
+ * Enable `-Wc++-compat` ([#2463](https://github.com/ruby/rbs/pull/2463))
161
+ * Expose a method to parse type parameters ([#2457](https://github.com/ruby/rbs/pull/2457))
162
+ * Expose and fix `Block#location` ([#2456](https://github.com/ruby/rbs/pull/2456))
163
+ * Restore RBS::Environment#declarations for backwards-compatibility ([#2393](https://github.com/ruby/rbs/pull/2393))
164
+ * Implement `@rbs return: T` annotation ([#2406](https://github.com/ruby/rbs/pull/2406))
165
+ * Add `@rbs skip` annotation ([#2405](https://github.com/ruby/rbs/pull/2405))
166
+ * Inline annotations ([#2403](https://github.com/ruby/rbs/pull/2403))
167
+ * Inline `def` support ([#2392](https://github.com/ruby/rbs/pull/2392))
168
+ * Suppress to GCC warning with multi-line comment ([#2383](https://github.com/ruby/rbs/pull/2383))
169
+ * Add inline class/module declaration ([#2390](https://github.com/ruby/rbs/pull/2390))
170
+ * Add `RBS::Source::RBS` ([#2380](https://github.com/ruby/rbs/pull/2380))
171
+
172
+ #### rbs prototype
173
+
174
+ * [prototype runtime] Find redefined methods ([#2542](https://github.com/ruby/rbs/pull/2542))
175
+
7
176
  #### rbs collection
8
177
 
9
- * [Backport] [3.10] Fix: pathname not written to lockfile. ([#2896](https://github.com/ruby/rbs/pull/2896))
178
+ ### Miscellaneous
179
+
180
+ * bundle update (2026-01-20) ([#2818](https://github.com/ruby/rbs/pull/2818))
181
+ * Ruby 4.0.1 ([#2823](https://github.com/ruby/rbs/pull/2823))
182
+ * [rbs/test] Check type arguments size ([#2809](https://github.com/ruby/rbs/pull/2809))
183
+ * Add tsort to testing dependencies ([#2795](https://github.com/ruby/rbs/pull/2795))
184
+ * Update ruby to 4.0 ([#2776](https://github.com/ruby/rbs/pull/2776))
185
+ * Ruby 4.0.0 preview3 ([#2764](https://github.com/ruby/rbs/pull/2764))
186
+ * Remove test code for bundled gems ([#2760](https://github.com/ruby/rbs/pull/2760))
187
+ * Fix `nil` size `Enumerator` test ([#2749](https://github.com/ruby/rbs/pull/2749))
188
+ * Fix tests for rbs_skip_tests in ruby repo ([#2725](https://github.com/ruby/rbs/pull/2725))
189
+ * Update rdoc to v6.16 ([#2721](https://github.com/ruby/rbs/pull/2721))
190
+ * Run CI with "4.0.0-preview2" ([#2718](https://github.com/ruby/rbs/pull/2718))
191
+ * Minor typo fix ([#2676](https://github.com/ruby/rbs/pull/2676))
192
+ * Add -j option to make ([#2658](https://github.com/ruby/rbs/pull/2658))
193
+ * Allows the use of a path list as RBS_SKIP_TESTS ([#2612](https://github.com/ruby/rbs/pull/2612))
194
+ * Fix clang-format ([#2589](https://github.com/ruby/rbs/pull/2589))
195
+ * Restrict the execution of the valgrind task to when the C code has been modified. ([#2552](https://github.com/ruby/rbs/pull/2552))
196
+ * Set force_ruby_platform for bundler when head ([#2555](https://github.com/ruby/rbs/pull/2555))
197
+ * More skip paths with valgrind ([#2557](https://github.com/ruby/rbs/pull/2557))
198
+ * Run the `Encoding::Converter` test ([#2550](https://github.com/ruby/rbs/pull/2550))
199
+ * Fix CI ([#2527](https://github.com/ruby/rbs/pull/2527))
200
+ * Replace reference with official documentation ([#2453](https://github.com/ruby/rbs/pull/2453))
201
+ * Add clangd integration for improved C extension development ([#2481](https://github.com/ruby/rbs/pull/2481))
202
+ * Setup clang format for C code ([#2437](https://github.com/ruby/rbs/pull/2437))
203
+ * Add `super` calls in `setup` ([#2484](https://github.com/ruby/rbs/pull/2484))
204
+ * Suppress warnings during testing ([#2370](https://github.com/ruby/rbs/pull/2370))
205
+ * Update rubocop-on-rbs and use plugins ([#2345](https://github.com/ruby/rbs/pull/2345))
206
+ * Fix error at Ruby CI ([#2445](https://github.com/ruby/rbs/pull/2445))
207
+ * Use `erb` instead of `set` for load path testing ([#2439](https://github.com/ruby/rbs/pull/2439))
208
+ * Skip loading ruby_memcheck ([#2349](https://github.com/ruby/rbs/pull/2349))
209
+ * Forcibly uninstall gems even if there is a dependency problem. ([#2346](https://github.com/ruby/rbs/pull/2346))
10
210
 
11
211
  ## 3.10.3 (2026-01-30)
12
212