rbs 4.0.0.dev.4 → 4.1.0.pre.2

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 (306) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +1 -0
  3. data/.github/dependabot.yml +16 -14
  4. data/.github/workflows/bundle-update.yml +63 -0
  5. data/.github/workflows/c-check.yml +21 -11
  6. data/.github/workflows/comments.yml +5 -3
  7. data/.github/workflows/dependabot.yml +2 -2
  8. data/.github/workflows/jruby.yml +67 -0
  9. data/.github/workflows/milestone.yml +83 -0
  10. data/.github/workflows/ruby.yml +63 -24
  11. data/.github/workflows/rust.yml +184 -0
  12. data/.github/workflows/truffleruby.yml +54 -0
  13. data/.github/workflows/typecheck.yml +5 -2
  14. data/.github/workflows/wasm.yml +53 -0
  15. data/.github/workflows/windows.yml +8 -2
  16. data/.gitignore +11 -0
  17. data/.rubocop.yml +1 -1
  18. data/CHANGELOG.md +357 -0
  19. data/README.md +4 -4
  20. data/Rakefile +365 -33
  21. data/Steepfile +8 -0
  22. data/config.yml +450 -24
  23. data/core/array.rbs +443 -363
  24. data/core/basic_object.rbs +9 -8
  25. data/core/binding.rbs +0 -2
  26. data/core/builtin.rbs +9 -8
  27. data/core/class.rbs +11 -8
  28. data/core/comparable.rbs +55 -34
  29. data/core/complex.rbs +104 -78
  30. data/core/dir.rbs +61 -49
  31. data/core/encoding.rbs +12 -15
  32. data/core/enumerable.rbs +288 -196
  33. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  34. data/core/enumerator/product.rbs +5 -5
  35. data/core/enumerator.rbs +91 -28
  36. data/core/errno.rbs +11 -2
  37. data/core/errors.rbs +58 -29
  38. data/core/exception.rbs +13 -13
  39. data/core/fiber.rbs +74 -54
  40. data/core/file.rbs +260 -1151
  41. data/core/file_constants.rbs +463 -0
  42. data/core/file_stat.rbs +534 -0
  43. data/core/file_test.rbs +3 -3
  44. data/core/float.rbs +257 -92
  45. data/core/gc.rbs +425 -281
  46. data/core/hash.rbs +1151 -829
  47. data/core/integer.rbs +156 -195
  48. data/core/io/buffer.rbs +53 -42
  49. data/core/io/wait.rbs +13 -35
  50. data/core/io.rbs +216 -150
  51. data/core/kernel.rbs +239 -163
  52. data/core/marshal.rbs +4 -4
  53. data/core/match_data.rbs +15 -13
  54. data/core/math.rbs +107 -66
  55. data/core/method.rbs +69 -33
  56. data/core/module.rbs +302 -150
  57. data/core/nil_class.rbs +7 -6
  58. data/core/numeric.rbs +77 -63
  59. data/core/object.rbs +9 -11
  60. data/core/object_space/weak_key_map.rbs +7 -7
  61. data/core/object_space.rbs +30 -23
  62. data/core/pathname.rbs +1322 -0
  63. data/core/proc.rbs +95 -58
  64. data/core/process.rbs +222 -202
  65. data/core/ractor.rbs +371 -515
  66. data/core/random.rbs +21 -3
  67. data/core/range.rbs +181 -79
  68. data/core/rational.rbs +60 -89
  69. data/core/rbs/ops.rbs +154 -0
  70. data/core/rbs/unnamed/argf.rbs +63 -56
  71. data/core/rbs/unnamed/env_class.rbs +19 -14
  72. data/core/rbs/unnamed/main_class.rbs +123 -0
  73. data/core/rbs/unnamed/random.rbs +11 -118
  74. data/core/regexp.rbs +258 -214
  75. data/core/ruby.rbs +53 -0
  76. data/core/ruby_vm.rbs +78 -34
  77. data/core/rubygems/config_file.rbs +5 -5
  78. data/core/rubygems/errors.rbs +4 -71
  79. data/core/rubygems/requirement.rbs +5 -5
  80. data/core/rubygems/rubygems.rbs +16 -82
  81. data/core/rubygems/version.rbs +2 -3
  82. data/core/set.rbs +493 -363
  83. data/core/signal.rbs +26 -16
  84. data/core/string.rbs +3234 -1285
  85. data/core/struct.rbs +43 -42
  86. data/core/symbol.rbs +41 -34
  87. data/core/thread.rbs +141 -73
  88. data/core/time.rbs +81 -50
  89. data/core/trace_point.rbs +41 -35
  90. data/core/true_class.rbs +2 -2
  91. data/core/unbound_method.rbs +24 -16
  92. data/core/warning.rbs +7 -7
  93. data/docs/CONTRIBUTING.md +2 -1
  94. data/docs/aliases.md +79 -0
  95. data/docs/collection.md +3 -3
  96. data/docs/config.md +171 -0
  97. data/docs/encoding.md +56 -0
  98. data/docs/gem.md +0 -1
  99. data/docs/inline.md +634 -0
  100. data/docs/rbs_by_example.md +20 -20
  101. data/docs/rust.md +96 -0
  102. data/docs/sigs.md +3 -3
  103. data/docs/syntax.md +48 -18
  104. data/docs/type_fingerprint.md +21 -0
  105. data/docs/wasm_serialization.md +80 -0
  106. data/exe/rbs +1 -1
  107. data/ext/rbs_extension/ast_translation.c +1441 -671
  108. data/ext/rbs_extension/ast_translation.h +7 -0
  109. data/ext/rbs_extension/class_constants.c +18 -2
  110. data/ext/rbs_extension/class_constants.h +9 -0
  111. data/ext/rbs_extension/extconf.rb +6 -1
  112. data/ext/rbs_extension/legacy_location.c +33 -56
  113. data/ext/rbs_extension/legacy_location.h +37 -0
  114. data/ext/rbs_extension/main.c +183 -39
  115. data/include/rbs/ast.h +597 -297
  116. data/include/rbs/defines.h +40 -0
  117. data/include/rbs/lexer.h +31 -11
  118. data/include/rbs/location.h +25 -44
  119. data/include/rbs/parser.h +6 -6
  120. data/include/rbs/serialize.h +39 -0
  121. data/include/rbs/string.h +0 -2
  122. data/include/rbs/util/rbs_allocator.h +34 -13
  123. data/include/rbs/util/rbs_assert.h +12 -1
  124. data/include/rbs/util/rbs_constant_pool.h +0 -3
  125. data/include/rbs/util/rbs_encoding.h +2 -0
  126. data/include/rbs/util/rbs_unescape.h +2 -1
  127. data/include/rbs.h +8 -0
  128. data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
  129. data/lib/rbs/ast/annotation.rb +1 -1
  130. data/lib/rbs/ast/comment.rb +1 -1
  131. data/lib/rbs/ast/declarations.rb +10 -10
  132. data/lib/rbs/ast/members.rb +14 -14
  133. data/lib/rbs/ast/ruby/annotations.rb +335 -3
  134. data/lib/rbs/ast/ruby/comment_block.rb +30 -4
  135. data/lib/rbs/ast/ruby/declarations.rb +209 -4
  136. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  137. data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
  138. data/lib/rbs/ast/ruby/members.rb +571 -22
  139. data/lib/rbs/ast/type_param.rb +24 -4
  140. data/lib/rbs/buffer.rb +66 -24
  141. data/lib/rbs/cli/diff.rb +16 -15
  142. data/lib/rbs/cli/validate.rb +38 -106
  143. data/lib/rbs/cli.rb +55 -24
  144. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  145. data/lib/rbs/collection/sources/git.rb +7 -0
  146. data/lib/rbs/definition.rb +1 -1
  147. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  148. data/lib/rbs/definition_builder/method_builder.rb +32 -6
  149. data/lib/rbs/definition_builder.rb +147 -25
  150. data/lib/rbs/diff.rb +7 -1
  151. data/lib/rbs/environment.rb +235 -75
  152. data/lib/rbs/environment_loader.rb +0 -6
  153. data/lib/rbs/errors.rb +27 -18
  154. data/lib/rbs/inline_parser.rb +377 -15
  155. data/lib/rbs/location_aux.rb +1 -1
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +47 -11
  159. data/lib/rbs/parser_aux.rb +20 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -0
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  166. data/lib/rbs/rewriter.rb +70 -0
  167. data/lib/rbs/subtractor.rb +3 -1
  168. data/lib/rbs/test/type_check.rb +25 -3
  169. data/lib/rbs/type_name.rb +34 -14
  170. data/lib/rbs/types.rb +88 -78
  171. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  172. data/lib/rbs/validator.rb +2 -2
  173. data/lib/rbs/version.rb +1 -1
  174. data/lib/rbs/wasm/deserializer.rb +213 -0
  175. data/lib/rbs/wasm/location.rb +61 -0
  176. data/lib/rbs/wasm/parser.rb +137 -0
  177. data/lib/rbs/wasm/runtime.rb +217 -0
  178. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  179. data/lib/rbs.rb +13 -2
  180. data/lib/rdoc/discover.rb +1 -1
  181. data/lib/rdoc_plugin/parser.rb +1 -1
  182. data/rbs.gemspec +24 -6
  183. data/schema/typeParam.json +17 -1
  184. data/sig/annotate/rdoc_annotater.rbs +12 -9
  185. data/sig/ast/ruby/annotations.rbs +364 -4
  186. data/sig/ast/ruby/comment_block.rbs +8 -0
  187. data/sig/ast/ruby/declarations.rbs +102 -4
  188. data/sig/ast/ruby/members.rbs +128 -2
  189. data/sig/buffer.rbs +19 -1
  190. data/sig/cli/diff.rbs +5 -11
  191. data/sig/cli/validate.rbs +12 -8
  192. data/sig/cli.rbs +18 -18
  193. data/sig/collection/config/lockfile_generator.rbs +2 -0
  194. data/sig/definition.rbs +6 -1
  195. data/sig/definition_builder.rbs +2 -0
  196. data/sig/environment.rbs +70 -12
  197. data/sig/errors.rbs +13 -14
  198. data/sig/inline_parser.rbs +41 -2
  199. data/sig/locator.rbs +0 -2
  200. data/sig/manifest.yaml +0 -2
  201. data/sig/method_builder.rbs +3 -1
  202. data/sig/namespace.rbs +20 -0
  203. data/sig/parser.rbs +41 -13
  204. data/sig/prototype/helpers.rbs +2 -0
  205. data/sig/resolver/type_name_resolver.rbs +36 -10
  206. data/sig/rewriter.rbs +45 -0
  207. data/sig/source.rbs +3 -3
  208. data/sig/type_param.rbs +13 -8
  209. data/sig/typename.rbs +15 -0
  210. data/sig/types.rbs +6 -7
  211. data/sig/unit_test/spy.rbs +0 -8
  212. data/sig/unit_test/type_assertions.rbs +15 -0
  213. data/sig/wasm/deserializer.rbs +66 -0
  214. data/sig/wasm/serialization_schema.rbs +13 -0
  215. data/src/ast.c +443 -162
  216. data/src/lexer.c +1415 -1313
  217. data/src/lexer.re +4 -0
  218. data/src/lexstate.c +63 -37
  219. data/src/location.c +7 -47
  220. data/src/parser.c +1032 -521
  221. data/src/serialize.c +958 -0
  222. data/src/string.c +0 -48
  223. data/src/util/rbs_allocator.c +89 -74
  224. data/src/util/rbs_assert.c +1 -1
  225. data/src/util/rbs_buffer.c +2 -2
  226. data/src/util/rbs_constant_pool.c +10 -14
  227. data/src/util/rbs_encoding.c +4 -8
  228. data/src/util/rbs_unescape.c +56 -20
  229. data/stdlib/abbrev/0/array.rbs +1 -1
  230. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  231. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  232. data/stdlib/cgi/0/core.rbs +9 -393
  233. data/stdlib/cgi/0/manifest.yaml +1 -0
  234. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  235. data/stdlib/coverage/0/coverage.rbs +7 -4
  236. data/stdlib/csv/0/csv.rbs +5 -5
  237. data/stdlib/date/0/date.rbs +92 -79
  238. data/stdlib/date/0/date_time.rbs +25 -24
  239. data/stdlib/delegate/0/delegator.rbs +10 -7
  240. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  241. data/stdlib/digest/0/digest.rbs +111 -1
  242. data/stdlib/erb/0/erb.rbs +748 -347
  243. data/stdlib/etc/0/etc.rbs +73 -54
  244. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  245. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  246. data/stdlib/io-console/0/io-console.rbs +2 -2
  247. data/stdlib/json/0/json.rbs +223 -142
  248. data/stdlib/monitor/0/monitor.rbs +3 -3
  249. data/stdlib/net-http/0/net-http.rbs +162 -134
  250. data/stdlib/objspace/0/objspace.rbs +17 -34
  251. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  252. data/stdlib/open3/0/open3.rbs +469 -10
  253. data/stdlib/openssl/0/openssl.rbs +482 -364
  254. data/stdlib/optparse/0/optparse.rbs +26 -17
  255. data/stdlib/pathname/0/pathname.rbs +11 -1381
  256. data/stdlib/pp/0/pp.rbs +9 -8
  257. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  258. data/stdlib/pstore/0/pstore.rbs +35 -30
  259. data/stdlib/psych/0/psych.rbs +65 -12
  260. data/stdlib/psych/0/store.rbs +2 -4
  261. data/stdlib/pty/0/pty.rbs +9 -6
  262. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  263. data/stdlib/rdoc/0/code_object.rbs +2 -1
  264. data/stdlib/rdoc/0/parser.rbs +1 -1
  265. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  266. data/stdlib/rdoc/0/store.rbs +1 -1
  267. data/stdlib/resolv/0/resolv.rbs +26 -69
  268. data/stdlib/ripper/0/ripper.rbs +22 -19
  269. data/stdlib/securerandom/0/manifest.yaml +2 -0
  270. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  271. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  272. data/stdlib/singleton/0/singleton.rbs +3 -0
  273. data/stdlib/socket/0/addrinfo.rbs +7 -7
  274. data/stdlib/socket/0/basic_socket.rbs +3 -3
  275. data/stdlib/socket/0/ip_socket.rbs +10 -8
  276. data/stdlib/socket/0/socket.rbs +23 -10
  277. data/stdlib/socket/0/tcp_server.rbs +1 -1
  278. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  279. data/stdlib/socket/0/udp_socket.rbs +1 -1
  280. data/stdlib/socket/0/unix_server.rbs +1 -1
  281. data/stdlib/stringio/0/stringio.rbs +1209 -95
  282. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  283. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  284. data/stdlib/time/0/time.rbs +8 -6
  285. data/stdlib/timeout/0/timeout.rbs +63 -7
  286. data/stdlib/tsort/0/cyclic.rbs +4 -1
  287. data/stdlib/tsort/0/interfaces.rbs +8 -8
  288. data/stdlib/tsort/0/tsort.rbs +16 -15
  289. data/stdlib/uri/0/common.rbs +42 -20
  290. data/stdlib/uri/0/file.rbs +3 -3
  291. data/stdlib/uri/0/generic.rbs +26 -18
  292. data/stdlib/uri/0/http.rbs +2 -2
  293. data/stdlib/uri/0/ldap.rbs +2 -2
  294. data/stdlib/uri/0/mailto.rbs +3 -3
  295. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  296. data/stdlib/zlib/0/deflate.rbs +4 -3
  297. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  298. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  299. data/stdlib/zlib/0/inflate.rbs +1 -1
  300. data/stdlib/zlib/0/need_dict.rbs +1 -1
  301. data/stdlib/zlib/0/zstream.rbs +1 -0
  302. data/wasm/README.md +59 -0
  303. data/wasm/rbs_wasm.c +411 -0
  304. metadata +56 -8
  305. data/.vscode/extensions.json +0 -5
  306. data/.vscode/settings.json +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d6c17a1d8371e7d529d224fcf5654f338e078e576275c214754573bb852a3f1
4
- data.tar.gz: 181a52dc722b34752019e38fcbf1b7b001cbdc3fd0ff3ceadeeefeb2813a5a5d
3
+ metadata.gz: 125952c7d052ff2adaa683375a5e5079c4019f43ea9bc86546a4efd9eed2ed0e
4
+ data.tar.gz: 8df793a9e6419ec7d4d137fec60811e0eadc68e8ebe6359a149cad43deb26f6e
5
5
  SHA512:
6
- metadata.gz: bee9898c24cd2cfe577fd693a60daa364c0769f815f684170e123fa7f2dc7932799fbf9b99aba19e83a17d373c8eedf5007e3934338b1ecd052a85c2f7ad986b
7
- data.tar.gz: 5cd52e73fbbd3680d049a3c116da321d6e98825121216d33cd365737bd5405e1bb32dd3f3d33842a7a5db7ca9442c27a107682430cbafbce78dbfc0dc24be06e
6
+ metadata.gz: 254fc00d7c4bf3910796b4af6b573cf0be978b68a1db193a703a90e44e18df53b7399611d8acd40bff853e2c21fffd83468815fa24f71bdb36255b5cf164907a
7
+ data.tar.gz: 0b4bf3195dede912a3eee97ea770e9c99b907eea6e7e28b5492818ee64d6128dc9d0262bab70d127c2e946a3f7f77536fa4a3fa884ea576f746231abcbfd9458
data/.clang-format CHANGED
@@ -51,6 +51,7 @@ ConstructorInitializerAllOnOneLineOrOnePerLine: false
51
51
  Cpp11BracedListStyle: false
52
52
  ReflowComments: false
53
53
  SortIncludes: Never
54
+ InsertNewlineAtEOF: true
54
55
 
55
56
  # Spaces
56
57
  SpaceAfterCStyleCast: true
@@ -1,22 +1,24 @@
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: '/'
21
21
  schedule:
22
22
  interval: 'weekly'
23
+ labels:
24
+ - 'no-milestone'
@@ -0,0 +1,63 @@
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 }}" \
61
+ --label "no-milestone"
62
+
63
+ gh pr merge --auto --merge "$(git rev-parse --abbrev-ref HEAD)"
@@ -2,17 +2,22 @@ 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
 
10
+ permissions:
11
+ contents: read
12
+
8
13
  jobs:
9
14
  format-check:
10
15
  runs-on: ubuntu-latest
11
16
  steps:
12
- - uses: actions/checkout@v4
17
+ - uses: actions/checkout@v6
13
18
  - uses: ruby/setup-ruby@v1
14
19
  with:
15
- ruby-version: "3.4"
20
+ ruby-version: "4.0"
16
21
  bundler-cache: none
17
22
  - name: Set working directory as safe
18
23
  run: git config --global --add safe.directory $(pwd)
@@ -23,24 +28,29 @@ jobs:
23
28
  - name: Install clang-format from LLVM
24
29
  run: |
25
30
  wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
26
- sudo apt-add-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy main"
31
+ sudo apt-add-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main"
27
32
  sudo apt-get update
28
- sudo apt-get install -y clang-format
33
+ sudo apt-get install -y clang-format-20
34
+ sudo ln -sf /usr/bin/clang-format-20 /usr/local/bin/clang-format
29
35
  clang-format --version
36
+ - name: Count processors
37
+ run: nproc
30
38
  - name: Install Re2c
31
39
  run: |
32
40
  cd /tmp
33
- curl -L https://github.com/skvadrik/re2c/archive/refs/tags/3.1.tar.gz > re2c-3.1.tar.gz
34
- tar xf re2c-3.1.tar.gz
35
- cd re2c-3.1
36
- autoreconf -i -W all
37
- ./configure
38
- make
39
- sudo make install
41
+ curl -L https://github.com/skvadrik/re2c/archive/refs/tags/4.3.tar.gz > re2c-4.3.tar.gz
42
+ tar xf re2c-4.3.tar.gz
43
+ cd re2c-4.3
44
+ cmake --preset=linux-gcc-release-ootree-skeleton-fast
45
+ cmake --build --preset=linux-gcc-release-ootree-skeleton-fast --parallel="$(nproc)"
46
+ sudo ln -sf "$(pwd)"/.build/linux-gcc-release-ootree-skeleton-fast/re2c /usr/local/bin/re2c
47
+ re2c --version
40
48
  - name: Update rubygems & bundler
41
49
  run: |
42
50
  ruby -v
43
51
  gem update --system
52
+ - name: install erb
53
+ run: gem install erb
44
54
  - name: bin/setup
45
55
  run: |
46
56
  bin/setup
@@ -11,12 +11,12 @@ jobs:
11
11
  comments:
12
12
  runs-on: "ubuntu-latest"
13
13
  # env:
14
- # RUBY_COMMIT: 1b0c46daed9186b82ab4fef1a4ab225afe582ee6
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: "3.4.1"
19
+ ruby-version: "4.0.1"
20
20
  bundler: none
21
21
  - name: Install dependencies
22
22
  run: |
@@ -26,6 +26,8 @@ jobs:
26
26
  run: |
27
27
  ruby -v
28
28
  gem update --system
29
+ - name: install erb
30
+ run: gem install erb
29
31
  - name: bin/setup
30
32
  run: |
31
33
  bin/setup
@@ -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@08eff52bf64351f401fb50d4972fa95b9f2c2d1b # v2.4.0
17
+ uses: dependabot/fetch-metadata@25dd0e34f4fe68f24cc83900b1fe3fe149efef98 # v3.1.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
@@ -0,0 +1,67 @@
1
+ name: JRuby
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ paths:
9
+ - ".github/workflows/jruby.yml"
10
+ - "include/**"
11
+ - "src/**"
12
+ - "wasm/**"
13
+ - "lib/**"
14
+ - "sig/**"
15
+ - "core/**"
16
+ - "stdlib/**"
17
+ - "test/**"
18
+ - "Rakefile"
19
+ - "rbs.gemspec"
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ env:
25
+ # Keep in sync with .github/workflows/wasm.yml.
26
+ WASI_SDK_VERSION: "33"
27
+ WASI_SDK_RELEASE: "33.0"
28
+
29
+ jobs:
30
+ test:
31
+ name: jruby
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: actions/checkout@v6
35
+ - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
36
+
37
+ # Build the .wasm and fetch the Chicory jars with CRuby + the WASI SDK,
38
+ # then run RBS itself on JRuby against those artifacts.
39
+ - name: Set up Ruby (to assemble the WebAssembly runtime)
40
+ uses: ruby/setup-ruby@v1
41
+ with:
42
+ ruby-version: ruby
43
+ bundler: none
44
+ - name: Update rubygems & bundler
45
+ run: gem update --system
46
+ - name: Install gems
47
+ run: |
48
+ bundle config set --local without libs:profilers
49
+ bundle install --jobs 4 --retry 3
50
+ - name: Install the WASI SDK
51
+ run: |
52
+ url="https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VERSION}/wasi-sdk-${WASI_SDK_RELEASE}-x86_64-linux.tar.gz"
53
+ mkdir -p "$HOME/wasi-sdk"
54
+ curl -sSL "$url" | tar xz --strip-components=1 -C "$HOME/wasi-sdk"
55
+ echo "WASI_SDK_PATH=$HOME/wasi-sdk" >> "$GITHUB_ENV"
56
+ - name: Assemble the JRuby runtime (rbs_parser.wasm + Chicory jars)
57
+ run: bundle exec rake wasm:jruby_setup
58
+
59
+ - name: Set up JRuby
60
+ uses: ruby/setup-ruby@v1
61
+ with:
62
+ ruby-version: jruby
63
+ bundler: none
64
+ - name: Install runtime and test gems
65
+ run: gem install prism rake rake-compiler test-unit rdoc rspec minitest json-schema pry --no-document
66
+ - name: Run the test suite on JRuby
67
+ run: jruby -S rake test
@@ -0,0 +1,83 @@
1
+ name: Check milestone
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, edited, labeled, unlabeled, milestoned, demilestoned, synchronize]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ check:
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - uses: actions/checkout@v6
16
+
17
+ - name: Extract RBS::Version
18
+ id: version
19
+ run: |
20
+ # Extract version string from lib/rbs/version.rb
21
+ version=$(ruby -e 'load "lib/rbs/version.rb"; print RBS::VERSION')
22
+ echo "version=$version" >> "$GITHUB_OUTPUT"
23
+
24
+ # Parse major.minor.patch
25
+ IFS='.' read -r major minor patch _rest <<< "$version"
26
+ echo "major=$major" >> "$GITHUB_OUTPUT"
27
+ echo "minor=$minor" >> "$GITHUB_OUTPUT"
28
+ echo "patch=$patch" >> "$GITHUB_OUTPUT"
29
+
30
+ echo "RBS::VERSION = $version (major=$major, minor=$minor, patch=$patch)"
31
+
32
+ - name: Check milestone
33
+ uses: actions/github-script@v9
34
+ with:
35
+ script: |
36
+ const pr = context.payload.pull_request;
37
+ const milestone = pr.milestone;
38
+ const labels = pr.labels.map(l => l.name);
39
+
40
+ const version = '${{ steps.version.outputs.version }}';
41
+ const major = '${{ steps.version.outputs.major }}';
42
+ const minor = '${{ steps.version.outputs.minor }}';
43
+ const patch = parseInt('${{ steps.version.outputs.patch }}', 10);
44
+
45
+ if (!milestone) {
46
+ if (labels.includes('no-milestone')) {
47
+ core.info('No milestone set, but no-milestone label is present — OK');
48
+ return;
49
+ }
50
+ core.setFailed(
51
+ 'No milestone set. Add a milestone or add the "no-milestone" label.'
52
+ );
53
+ return;
54
+ }
55
+
56
+ if (labels.includes('no-milestone')) {
57
+ core.setFailed(
58
+ 'Milestone is set but "no-milestone" label is present. Remove the label or the milestone.'
59
+ );
60
+ return;
61
+ }
62
+
63
+ const milestoneName = milestone.title;
64
+ core.info(`Milestone: "${milestoneName}", RBS::VERSION: ${version}`);
65
+
66
+ // Expected milestone based on version:
67
+ // patch == 0 → "RBS major.minor" (e.g. "RBS 4.0")
68
+ // patch >= 1 → "RBS major.minor.x" (e.g. "RBS 4.0.x")
69
+ let expectedMilestone;
70
+ if (patch === 0) {
71
+ expectedMilestone = `RBS ${major}.${minor}`;
72
+ } else {
73
+ expectedMilestone = `RBS ${major}.${minor}.x`;
74
+ }
75
+
76
+ if (milestoneName !== expectedMilestone) {
77
+ core.setFailed(
78
+ `Milestone "${milestoneName}" does not match RBS::VERSION ${version}. ` +
79
+ `Expected milestone: "${expectedMilestone}"`
80
+ );
81
+ } else {
82
+ core.info(`Milestone "${milestoneName}" matches RBS::VERSION ${version}`);
83
+ }
@@ -7,35 +7,40 @@ on:
7
7
  pull_request: {}
8
8
  merge_group: {}
9
9
 
10
+ permissions:
11
+ contents: read
12
+
10
13
  jobs:
11
14
  test:
12
15
  runs-on: "ubuntu-latest"
13
16
  strategy:
14
17
  fail-fast: false
15
18
  matrix:
16
- ruby: ['3.1', '3.2', '3.3', '3.4', head]
19
+ ruby: ['3.2', '3.3', '3.4', '4.0', head]
17
20
  rubyopt: [""]
18
21
  job:
19
22
  - test
20
23
  include:
21
24
  - ruby: head
22
25
  job: stdlib_test rubocop
23
- - ruby: "3.4"
26
+ - ruby: "4.0"
24
27
  job: stdlib_test
25
- - ruby: "3.4"
28
+ - ruby: "4.0"
26
29
  job: test
27
30
  rubyopt: "--enable-frozen-string-literal"
28
- - ruby: "3.4"
31
+ - ruby: "4.0"
29
32
  job: stdlib_test
30
33
  rubyopt: "--enable-frozen-string-literal"
31
- - ruby: "3.4"
34
+ - ruby: "4.0"
32
35
  job: rubocop validate test_doc build test_generate_stdlib raap
33
- - ruby: "3.4"
36
+ - ruby: "4.0"
34
37
  job: typecheck_test
38
+ - ruby: asan-release
39
+ job: test
35
40
  env:
36
41
  RANDOMIZE_STDLIB_TEST_ORDER: "true"
37
42
  steps:
38
- - uses: actions/checkout@v4
43
+ - uses: actions/checkout@v6
39
44
  - uses: ruby/setup-ruby@v1
40
45
  with:
41
46
  ruby-version: ${{ matrix.ruby }}
@@ -50,11 +55,20 @@ jobs:
50
55
  run: |
51
56
  ruby -v
52
57
  gem update --system
58
+ - name: install erb
59
+ run: gem install erb
53
60
  - name: bundle config set with
54
61
  run: |
55
62
  echo "NO_MINITEST=true" >> $GITHUB_ENV
56
63
  bundle config set --local without 'minitest'
57
64
  if: ${{ contains(matrix.ruby, 'head') }}
65
+ - name: bundle config set force_ruby_platform true if head
66
+ if: ${{ contains(matrix.ruby, 'head') }}
67
+ run: |
68
+ bundle config set force_ruby_platform true
69
+ - name: Ignore Gemfile.lock's BUNDLED WITH on ruby-head
70
+ if: ${{ contains(matrix.ruby, 'head') }}
71
+ run: bundle config set --local version system
58
72
  - name: Skip installing type checkers
59
73
  if: ${{ ! contains(matrix.job, 'typecheck_test') }}
60
74
  run: |
@@ -62,41 +76,58 @@ jobs:
62
76
  - name: bin/setup
63
77
  run: |
64
78
  bin/setup
79
+ - name: Configure ASAN options
80
+ if: ${{ contains(matrix.ruby, 'asan') }}
81
+ run: |
82
+ echo "ASAN_OPTIONS=abort_on_error=1" >> $GITHUB_ENV
65
83
  - name: Run test
66
84
  run: |
67
85
  bundle exec rake ${{ matrix.job }}
68
- valgrind:
69
- runs-on: ubuntu-latest
86
+ C99_compile:
87
+ runs-on: macos-latest
88
+ strategy:
89
+ fail-fast: false
90
+ matrix:
91
+ ruby: ['4.0', head]
70
92
  steps:
71
- - uses: actions/checkout@v4
93
+ - uses: actions/checkout@v6
94
+ - name: Install dependencies
95
+ run: |
96
+ brew install ruby-build
72
97
  - uses: ruby/setup-ruby@v1
73
98
  with:
74
- ruby-version: "3.4"
75
- bundler-cache: none
99
+ ruby-version: ${{ matrix.ruby }}
100
+ bundler: none
76
101
  - name: Set working directory as safe
77
102
  run: git config --global --add safe.directory $(pwd)
78
- - name: Install dependencies
79
- run: |
80
- sudo apt-get update
81
- sudo apt-get install -y libdb-dev curl autoconf automake m4 libtool python3 valgrind
82
103
  - name: Update rubygems & bundler
83
104
  run: |
84
105
  ruby -v
85
106
  gem update --system
107
+ - name: install erb
108
+ run: gem install erb
109
+ - name: clang version
110
+ run: clang --version
111
+ - name: bundle config set force_ruby_platform true if head
112
+ if: ${{ contains(matrix.ruby, 'head') }}
113
+ run: |
114
+ bundle config set force_ruby_platform true
115
+ - name: Ignore Gemfile.lock's BUNDLED WITH on ruby-head
116
+ if: ${{ contains(matrix.ruby, 'head') }}
117
+ run: bundle config set --local version system
86
118
  - name: bin/setup
87
119
  run: |
88
120
  bin/setup
89
- - run: bundle exec rake test:valgrind
90
- env:
91
- RUBY_FREE_AT_EXIT: 1
92
- C99_compile:
121
+ - run: bundle exec rake clean compile_c99
122
+
123
+ clang_compile:
93
124
  runs-on: macos-latest
94
125
  strategy:
95
126
  fail-fast: false
96
127
  matrix:
97
- ruby: ['3.4', head]
128
+ ruby: ['4.0', head]
98
129
  steps:
99
- - uses: actions/checkout@v4
130
+ - uses: actions/checkout@v6
100
131
  - name: Install dependencies
101
132
  run: |
102
133
  brew install ruby-build
@@ -110,10 +141,18 @@ jobs:
110
141
  run: |
111
142
  ruby -v
112
143
  gem update --system
144
+ - name: install erb
145
+ run: gem install erb
113
146
  - name: clang version
114
147
  run: clang --version
148
+ - name: bundle config set force_ruby_platform true if head
149
+ if: ${{ contains(matrix.ruby, 'head') }}
150
+ run: |
151
+ bundle config set force_ruby_platform true
152
+ - name: Ignore Gemfile.lock's BUNDLED WITH on ruby-head
153
+ if: ${{ contains(matrix.ruby, 'head') }}
154
+ run: bundle config set --local version system
115
155
  - name: bin/setup
116
156
  run: |
117
157
  bin/setup
118
- - run: bundle exec rake clean compile_c99
119
-
158
+ - run: bundle exec rake clean compile