rbs 3.9.4 → 4.1.1

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 (348) 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/.github/dependabot.yml +16 -14
  6. data/.github/workflows/bundle-update.yml +63 -0
  7. data/.github/workflows/c-check.yml +66 -0
  8. data/.github/workflows/comments.yml +5 -3
  9. data/.github/workflows/dependabot.yml +2 -2
  10. data/.github/workflows/jruby.yml +79 -0
  11. data/.github/workflows/release-gems.yml +164 -0
  12. data/.github/workflows/ruby.yml +84 -30
  13. data/.github/workflows/rust.yml +186 -0
  14. data/.github/workflows/truffleruby.yml +54 -0
  15. data/.github/workflows/typecheck.yml +5 -2
  16. data/.github/workflows/wasm.yml +55 -0
  17. data/.github/workflows/windows.yml +9 -3
  18. data/.gitignore +16 -0
  19. data/.rubocop.yml +2 -2
  20. data/CHANGELOG.md +430 -0
  21. data/Dockerfile.jruby +53 -0
  22. data/README.md +41 -4
  23. data/Rakefile +777 -60
  24. data/Steepfile +11 -0
  25. data/config.yml +660 -62
  26. data/core/array.rbs +541 -398
  27. data/core/basic_object.rbs +9 -8
  28. data/core/binding.rbs +0 -2
  29. data/core/builtin.rbs +9 -8
  30. data/core/class.rbs +11 -8
  31. data/core/comparable.rbs +55 -34
  32. data/core/complex.rbs +104 -78
  33. data/core/dir.rbs +61 -49
  34. data/core/encoding.rbs +12 -15
  35. data/core/enumerable.rbs +297 -196
  36. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  37. data/core/enumerator/product.rbs +5 -5
  38. data/core/enumerator.rbs +91 -28
  39. data/core/errno.rbs +11 -2
  40. data/core/errors.rbs +58 -29
  41. data/core/exception.rbs +13 -13
  42. data/core/fiber.rbs +74 -54
  43. data/core/file.rbs +260 -1151
  44. data/core/file_constants.rbs +463 -0
  45. data/core/file_stat.rbs +534 -0
  46. data/core/file_test.rbs +3 -3
  47. data/core/float.rbs +257 -116
  48. data/core/gc.rbs +425 -281
  49. data/core/hash.rbs +1151 -829
  50. data/core/integer.rbs +156 -195
  51. data/core/io/buffer.rbs +53 -42
  52. data/core/io/wait.rbs +13 -35
  53. data/core/io.rbs +220 -154
  54. data/core/kernel.rbs +239 -163
  55. data/core/marshal.rbs +4 -4
  56. data/core/match_data.rbs +16 -14
  57. data/core/math.rbs +107 -66
  58. data/core/method.rbs +69 -33
  59. data/core/module.rbs +302 -150
  60. data/core/nil_class.rbs +7 -6
  61. data/core/numeric.rbs +77 -63
  62. data/core/object.rbs +9 -11
  63. data/core/object_space/weak_key_map.rbs +7 -7
  64. data/core/object_space.rbs +30 -23
  65. data/core/pathname.rbs +1312 -0
  66. data/core/proc.rbs +95 -58
  67. data/core/process.rbs +222 -202
  68. data/core/ractor.rbs +364 -518
  69. data/core/random.rbs +21 -3
  70. data/core/range.rbs +181 -79
  71. data/core/rational.rbs +60 -89
  72. data/core/rbs/ops.rbs +154 -0
  73. data/core/rbs/unnamed/argf.rbs +63 -56
  74. data/core/rbs/unnamed/env_class.rbs +19 -14
  75. data/core/rbs/unnamed/main_class.rbs +123 -0
  76. data/core/rbs/unnamed/random.rbs +11 -118
  77. data/core/regexp.rbs +258 -214
  78. data/core/ruby.rbs +53 -0
  79. data/core/ruby_vm.rbs +78 -34
  80. data/core/rubygems/config_file.rbs +5 -5
  81. data/core/rubygems/errors.rbs +6 -70
  82. data/core/rubygems/requirement.rbs +5 -15
  83. data/core/rubygems/rubygems.rbs +18 -81
  84. data/core/rubygems/specification.rbs +8 -0
  85. data/core/rubygems/version.rbs +2 -163
  86. data/core/set.rbs +493 -363
  87. data/core/signal.rbs +26 -16
  88. data/core/string.rbs +3234 -1285
  89. data/core/struct.rbs +43 -42
  90. data/core/symbol.rbs +41 -34
  91. data/core/thread.rbs +139 -83
  92. data/core/time.rbs +81 -50
  93. data/core/trace_point.rbs +41 -35
  94. data/core/true_class.rbs +2 -2
  95. data/core/unbound_method.rbs +24 -16
  96. data/core/warning.rbs +7 -7
  97. data/docs/CONTRIBUTING.md +2 -1
  98. data/docs/aliases.md +79 -0
  99. data/docs/collection.md +3 -3
  100. data/docs/config.md +171 -0
  101. data/docs/encoding.md +56 -0
  102. data/docs/gem.md +0 -1
  103. data/docs/inline.md +634 -0
  104. data/docs/rbs_by_example.md +20 -20
  105. data/docs/release.md +151 -0
  106. data/docs/rust.md +96 -0
  107. data/docs/sigs.md +3 -3
  108. data/docs/syntax.md +48 -18
  109. data/docs/type_fingerprint.md +21 -0
  110. data/docs/wasm_serialization.md +80 -0
  111. data/exe/rbs +1 -1
  112. data/ext/rbs_extension/ast_translation.c +1855 -0
  113. data/ext/rbs_extension/ast_translation.h +41 -0
  114. data/ext/rbs_extension/class_constants.c +187 -0
  115. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +23 -1
  116. data/ext/rbs_extension/compat.h +10 -0
  117. data/ext/rbs_extension/extconf.rb +26 -1
  118. data/ext/rbs_extension/legacy_location.c +299 -0
  119. data/ext/rbs_extension/legacy_location.h +82 -0
  120. data/ext/rbs_extension/main.c +603 -23
  121. data/ext/rbs_extension/rbs_extension.h +6 -21
  122. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  123. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  124. data/include/rbs/ast.h +1047 -0
  125. data/include/rbs/defines.h +99 -0
  126. data/include/rbs/lexer.h +207 -0
  127. data/include/rbs/location.h +40 -0
  128. data/include/rbs/parser.h +153 -0
  129. data/include/rbs/serialize.h +39 -0
  130. data/include/rbs/string.h +47 -0
  131. data/include/rbs/util/rbs_allocator.h +59 -0
  132. data/include/rbs/util/rbs_assert.h +20 -0
  133. data/include/rbs/util/rbs_buffer.h +83 -0
  134. data/include/rbs/util/rbs_constant_pool.h +6 -70
  135. data/include/rbs/util/rbs_encoding.h +282 -0
  136. data/include/rbs/util/rbs_unescape.h +24 -0
  137. data/include/rbs.h +9 -2
  138. data/lib/rbs/annotate/formatter.rb +3 -13
  139. data/lib/rbs/annotate/rdoc_annotator.rb +30 -32
  140. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  141. data/lib/rbs/ast/annotation.rb +1 -1
  142. data/lib/rbs/ast/comment.rb +1 -1
  143. data/lib/rbs/ast/declarations.rb +10 -10
  144. data/lib/rbs/ast/members.rb +14 -14
  145. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  146. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  147. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  148. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  149. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  150. data/lib/rbs/ast/ruby/members.rb +762 -0
  151. data/lib/rbs/ast/type_param.rb +24 -4
  152. data/lib/rbs/buffer.rb +142 -20
  153. data/lib/rbs/cli/diff.rb +16 -15
  154. data/lib/rbs/cli/validate.rb +63 -126
  155. data/lib/rbs/cli.rb +59 -29
  156. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  157. data/lib/rbs/collection/sources/git.rb +7 -0
  158. data/lib/rbs/definition.rb +6 -1
  159. data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
  160. data/lib/rbs/definition_builder/method_builder.rb +74 -33
  161. data/lib/rbs/definition_builder.rb +177 -20
  162. data/lib/rbs/diff.rb +7 -1
  163. data/lib/rbs/environment/class_entry.rb +69 -0
  164. data/lib/rbs/environment/module_entry.rb +66 -0
  165. data/lib/rbs/environment.rb +410 -215
  166. data/lib/rbs/environment_loader.rb +2 -8
  167. data/lib/rbs/errors.rb +31 -21
  168. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  169. data/lib/rbs/inline_parser.rb +568 -0
  170. data/lib/rbs/location_aux.rb +36 -4
  171. data/lib/rbs/locator.rb +5 -1
  172. data/lib/rbs/method_type.rb +5 -3
  173. data/lib/rbs/namespace.rb +47 -18
  174. data/lib/rbs/parser_aux.rb +37 -7
  175. data/lib/rbs/prototype/helpers.rb +57 -0
  176. data/lib/rbs/prototype/rb.rb +3 -28
  177. data/lib/rbs/prototype/rbi.rb +196 -45
  178. data/lib/rbs/prototype/runtime.rb +12 -2
  179. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  180. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  181. data/lib/rbs/rewriter.rb +70 -0
  182. data/lib/rbs/source.rb +99 -0
  183. data/lib/rbs/subtractor.rb +7 -4
  184. data/lib/rbs/test/type_check.rb +25 -3
  185. data/lib/rbs/type_name.rb +34 -21
  186. data/lib/rbs/types.rb +91 -79
  187. data/lib/rbs/unit_test/convertibles.rb +1 -0
  188. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  189. data/lib/rbs/validator.rb +2 -2
  190. data/lib/rbs/version.rb +1 -1
  191. data/lib/rbs/wasm/deserializer.rb +213 -0
  192. data/lib/rbs/wasm/location.rb +61 -0
  193. data/lib/rbs/wasm/parser.rb +137 -0
  194. data/lib/rbs/wasm/runtime.rb +196 -0
  195. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  196. data/lib/rbs.rb +25 -2
  197. data/lib/rbs_jars.rb +39 -0
  198. data/lib/rdoc/discover.rb +1 -1
  199. data/lib/rdoc_plugin/parser.rb +8 -3
  200. data/rbs.gemspec +37 -5
  201. data/schema/typeParam.json +17 -1
  202. data/sig/ancestor_builder.rbs +1 -1
  203. data/sig/annotate/formatter.rbs +2 -2
  204. data/sig/annotate/rdoc_annotater.rbs +13 -10
  205. data/sig/ast/ruby/annotations.rbs +470 -0
  206. data/sig/ast/ruby/comment_block.rbs +127 -0
  207. data/sig/ast/ruby/declarations.rbs +158 -0
  208. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  209. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  210. data/sig/ast/ruby/members.rbs +198 -0
  211. data/sig/buffer.rbs +81 -5
  212. data/sig/cli/diff.rbs +5 -11
  213. data/sig/cli/validate.rbs +12 -8
  214. data/sig/cli.rbs +18 -18
  215. data/sig/collection/config/lockfile_generator.rbs +2 -0
  216. data/sig/definition.rbs +6 -0
  217. data/sig/definition_builder.rbs +3 -1
  218. data/sig/environment/class_entry.rbs +50 -0
  219. data/sig/environment/module_entry.rbs +50 -0
  220. data/sig/environment.rbs +94 -87
  221. data/sig/errors.rbs +26 -20
  222. data/sig/inline_parser/comment_association.rbs +71 -0
  223. data/sig/inline_parser.rbs +126 -0
  224. data/sig/location.rbs +32 -7
  225. data/sig/locator.rbs +0 -2
  226. data/sig/manifest.yaml +0 -2
  227. data/sig/method_builder.rbs +9 -4
  228. data/sig/namespace.rbs +20 -5
  229. data/sig/parser.rbs +77 -13
  230. data/sig/prototype/helpers.rbs +2 -0
  231. data/sig/prototype/rbi.rbs +33 -4
  232. data/sig/resolver/type_name_resolver.rbs +36 -10
  233. data/sig/rewriter.rbs +45 -0
  234. data/sig/source.rbs +48 -0
  235. data/sig/type_param.rbs +13 -8
  236. data/sig/typename.rbs +15 -5
  237. data/sig/types.rbs +10 -8
  238. data/sig/unit_test/spy.rbs +0 -8
  239. data/sig/unit_test/type_assertions.rbs +15 -0
  240. data/sig/wasm/deserializer.rbs +66 -0
  241. data/sig/wasm/serialization_schema.rbs +13 -0
  242. data/src/ast.c +1628 -0
  243. data/src/lexer.c +3221 -0
  244. data/src/lexer.re +155 -0
  245. data/src/lexstate.c +221 -0
  246. data/src/location.c +31 -0
  247. data/src/parser.c +4258 -0
  248. data/src/serialize.c +958 -0
  249. data/src/string.c +41 -0
  250. data/src/util/rbs_allocator.c +171 -0
  251. data/src/util/rbs_assert.c +19 -0
  252. data/src/util/rbs_buffer.c +54 -0
  253. data/src/util/rbs_constant_pool.c +18 -92
  254. data/src/util/rbs_encoding.c +21308 -0
  255. data/src/util/rbs_unescape.c +167 -0
  256. data/stdlib/abbrev/0/array.rbs +1 -1
  257. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  258. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  259. data/stdlib/cgi/0/core.rbs +9 -393
  260. data/stdlib/cgi/0/manifest.yaml +1 -0
  261. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  262. data/stdlib/coverage/0/coverage.rbs +7 -4
  263. data/stdlib/csv/0/csv.rbs +5 -5
  264. data/stdlib/date/0/date.rbs +92 -79
  265. data/stdlib/date/0/date_time.rbs +25 -24
  266. data/stdlib/delegate/0/delegator.rbs +11 -7
  267. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  268. data/stdlib/digest/0/digest.rbs +117 -1
  269. data/stdlib/erb/0/erb.rbs +748 -347
  270. data/stdlib/etc/0/etc.rbs +73 -54
  271. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  272. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  273. data/stdlib/io-console/0/io-console.rbs +2 -2
  274. data/stdlib/ipaddr/0/ipaddr.rbs +0 -5
  275. data/stdlib/json/0/json.rbs +232 -185
  276. data/stdlib/monitor/0/monitor.rbs +5 -5
  277. data/stdlib/net-http/0/net-http.rbs +162 -134
  278. data/stdlib/objspace/0/objspace.rbs +17 -34
  279. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  280. data/stdlib/open3/0/open3.rbs +469 -10
  281. data/stdlib/openssl/0/openssl.rbs +521 -397
  282. data/stdlib/optparse/0/optparse.rbs +26 -17
  283. data/stdlib/pathname/0/pathname.rbs +11 -1381
  284. data/stdlib/pp/0/pp.rbs +9 -8
  285. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  286. data/stdlib/pstore/0/pstore.rbs +35 -30
  287. data/stdlib/psych/0/psych.rbs +65 -12
  288. data/stdlib/psych/0/store.rbs +2 -4
  289. data/stdlib/pty/0/pty.rbs +9 -6
  290. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  291. data/stdlib/rdoc/0/code_object.rbs +4 -3
  292. data/stdlib/rdoc/0/comment.rbs +2 -0
  293. data/stdlib/rdoc/0/options.rbs +76 -0
  294. data/stdlib/rdoc/0/parser.rbs +1 -1
  295. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  296. data/stdlib/rdoc/0/store.rbs +2 -2
  297. data/stdlib/resolv/0/resolv.rbs +26 -69
  298. data/stdlib/ripper/0/ripper.rbs +25 -19
  299. data/stdlib/securerandom/0/manifest.yaml +2 -0
  300. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  301. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  302. data/stdlib/singleton/0/singleton.rbs +3 -0
  303. data/stdlib/socket/0/addrinfo.rbs +9 -9
  304. data/stdlib/socket/0/basic_socket.rbs +3 -3
  305. data/stdlib/socket/0/ip_socket.rbs +10 -8
  306. data/stdlib/socket/0/socket.rbs +23 -10
  307. data/stdlib/socket/0/tcp_server.rbs +1 -1
  308. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  309. data/stdlib/socket/0/udp_socket.rbs +1 -1
  310. data/stdlib/socket/0/unix_server.rbs +1 -1
  311. data/stdlib/stringio/0/stringio.rbs +1209 -95
  312. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  313. data/stdlib/tempfile/0/manifest.yaml +3 -0
  314. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  315. data/stdlib/time/0/time.rbs +8 -6
  316. data/stdlib/timeout/0/timeout.rbs +58 -7
  317. data/stdlib/tsort/0/cyclic.rbs +4 -1
  318. data/stdlib/tsort/0/interfaces.rbs +8 -8
  319. data/stdlib/tsort/0/tsort.rbs +16 -15
  320. data/stdlib/uri/0/common.rbs +42 -20
  321. data/stdlib/uri/0/file.rbs +3 -3
  322. data/stdlib/uri/0/generic.rbs +21 -18
  323. data/stdlib/uri/0/http.rbs +2 -2
  324. data/stdlib/uri/0/ldap.rbs +2 -2
  325. data/stdlib/uri/0/mailto.rbs +3 -3
  326. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  327. data/stdlib/zlib/0/deflate.rbs +4 -3
  328. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  329. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  330. data/stdlib/zlib/0/inflate.rbs +1 -1
  331. data/stdlib/zlib/0/need_dict.rbs +1 -1
  332. data/wasm/README.md +60 -0
  333. data/wasm/rbs_wasm.c +423 -0
  334. metadata +131 -19
  335. data/ext/rbs_extension/lexer.c +0 -2728
  336. data/ext/rbs_extension/lexer.h +0 -179
  337. data/ext/rbs_extension/lexer.re +0 -147
  338. data/ext/rbs_extension/lexstate.c +0 -175
  339. data/ext/rbs_extension/location.c +0 -325
  340. data/ext/rbs_extension/location.h +0 -85
  341. data/ext/rbs_extension/parser.c +0 -2982
  342. data/ext/rbs_extension/parser.h +0 -18
  343. data/ext/rbs_extension/parserstate.c +0 -411
  344. data/ext/rbs_extension/parserstate.h +0 -163
  345. data/ext/rbs_extension/unescape.c +0 -32
  346. data/include/rbs/ruby_objs.h +0 -72
  347. data/src/constants.c +0 -153
  348. data/src/ruby_objs.c +0 -799
@@ -7,37 +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.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"
32
- job: lexer templates compile confirm_lexer confirm_templates
33
- - ruby: "3.4"
34
+ - ruby: "4.0"
34
35
  job: rubocop validate test_doc build test_generate_stdlib raap
35
- - ruby: "3.4"
36
+ - ruby: "4.0"
36
37
  job: typecheck_test
38
+ - ruby: asan-release
39
+ job: test
37
40
  env:
38
41
  RANDOMIZE_STDLIB_TEST_ORDER: "true"
39
42
  steps:
40
- - uses: actions/checkout@v4
43
+ - uses: actions/checkout@v7
41
44
  - uses: ruby/setup-ruby@v1
42
45
  with:
43
46
  ruby-version: ${{ matrix.ruby }}
@@ -48,26 +51,24 @@ jobs:
48
51
  run: |
49
52
  sudo apt-get update
50
53
  sudo apt-get install -y libdb-dev curl autoconf automake m4 libtool python3
51
- - name: Install Re2c
52
- if: ${{ contains(matrix.job, 'lexer') }}
53
- run: |
54
- cd /tmp
55
- curl -L https://github.com/skvadrik/re2c/archive/refs/tags/3.1.tar.gz > re2c-3.1.tar.gz
56
- tar xf re2c-3.1.tar.gz
57
- cd re2c-3.1
58
- autoreconf -i -W all
59
- ./configure
60
- make
61
- sudo make install
62
54
  - name: Update rubygems & bundler
63
55
  run: |
64
56
  ruby -v
65
57
  gem update --system
58
+ - name: install erb
59
+ run: gem install erb
66
60
  - name: bundle config set with
67
61
  run: |
68
62
  echo "NO_MINITEST=true" >> $GITHUB_ENV
69
63
  bundle config set --local without 'minitest'
70
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
71
72
  - name: Skip installing type checkers
72
73
  if: ${{ ! contains(matrix.job, 'typecheck_test') }}
73
74
  run: |
@@ -75,30 +76,83 @@ jobs:
75
76
  - name: bin/setup
76
77
  run: |
77
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
78
83
  - name: Run test
79
84
  run: |
80
85
  bundle exec rake ${{ matrix.job }}
81
- valgrind:
82
- 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]
83
92
  steps:
84
- - uses: actions/checkout@v2
93
+ - uses: actions/checkout@v7
94
+ - name: Install dependencies
95
+ run: |
96
+ brew install ruby-build
85
97
  - uses: ruby/setup-ruby@v1
86
98
  with:
87
- ruby-version: "3.4"
88
- bundler-cache: none
99
+ ruby-version: ${{ matrix.ruby }}
100
+ bundler: none
89
101
  - name: Set working directory as safe
90
102
  run: git config --global --add safe.directory $(pwd)
103
+ - name: Update rubygems & bundler
104
+ run: |
105
+ ruby -v
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
118
+ - name: bin/setup
119
+ run: |
120
+ bin/setup
121
+ - run: bundle exec rake clean compile_c99
122
+
123
+ clang_compile:
124
+ runs-on: macos-latest
125
+ strategy:
126
+ fail-fast: false
127
+ matrix:
128
+ ruby: ['4.0', head]
129
+ steps:
130
+ - uses: actions/checkout@v7
91
131
  - name: Install dependencies
92
132
  run: |
93
- sudo apt-get update
94
- sudo apt-get install -y libdb-dev curl autoconf automake m4 libtool python3 valgrind
133
+ brew install ruby-build
134
+ - uses: ruby/setup-ruby@v1
135
+ with:
136
+ ruby-version: ${{ matrix.ruby }}
137
+ bundler: none
138
+ - name: Set working directory as safe
139
+ run: git config --global --add safe.directory $(pwd)
95
140
  - name: Update rubygems & bundler
96
141
  run: |
97
142
  ruby -v
98
143
  gem update --system
144
+ - name: install erb
145
+ run: gem install erb
146
+ - name: clang version
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
99
155
  - name: bin/setup
100
156
  run: |
101
157
  bin/setup
102
- - run: bundle exec rake test:valgrind
103
- env:
104
- RUBY_FREE_AT_EXIT: 1
158
+ - run: bundle exec rake clean compile
@@ -0,0 +1,186 @@
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
+ # `merge_group` has no `paths` filter, so this runs on every queue entry.
12
+ merge_group: {}
13
+
14
+ env:
15
+ RUSTFLAGS: "-D warnings"
16
+
17
+ permissions:
18
+ contents: read
19
+
20
+ jobs:
21
+ test:
22
+ name: cargo:test
23
+ runs-on: ${{ matrix.os }}
24
+ strategy:
25
+ fail-fast: false
26
+ matrix:
27
+ os: [ubuntu-latest, macos-latest, windows-latest]
28
+ steps:
29
+ - uses: actions/checkout@v7
30
+ - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
31
+ - name: Set up Ruby
32
+ uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: ruby
35
+ bundler: none
36
+ - name: Update rubygems & bundler
37
+ run: gem update --system
38
+ - name: Install gems
39
+ run: |
40
+ bundle config set --local without libs:profilers
41
+ bundle install --jobs 4 --retry 3
42
+ - name: Set up vendored RBS source
43
+ run: bundle exec rake rust:rbs:sync
44
+ - name: Install Rust tools
45
+ run: |
46
+ rustup update --no-self-update stable
47
+ rustup default stable
48
+ - uses: actions/cache@v6
49
+ with:
50
+ path: |
51
+ ~/.cargo/registry
52
+ ~/.cargo/git
53
+ rust/target
54
+ key: ${{ runner.os }}-cargo-${{ hashFiles('rust/Cargo.lock') }}
55
+ restore-keys: |
56
+ ${{ runner.os }}-cargo-
57
+ - name: Run tests
58
+ run: |
59
+ cd rust
60
+ cargo test --verbose
61
+
62
+ publish-dry-run-ruby-rbs-sys:
63
+ name: rust:publish:ruby-rbs-sys
64
+ runs-on: ubuntu-latest
65
+ continue-on-error: true
66
+ steps:
67
+ - uses: actions/checkout@v7
68
+ - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
69
+ - name: Set up git identity
70
+ run: |
71
+ git config user.name "GitHub Actions"
72
+ git config user.email "actions@github.com"
73
+ - name: Set up Ruby
74
+ uses: ruby/setup-ruby@v1
75
+ with:
76
+ ruby-version: ruby
77
+ bundler: none
78
+ - name: Update rubygems & bundler
79
+ run: gem update --system
80
+ - name: Install gems
81
+ run: |
82
+ bundle config set --local without libs:profilers
83
+ bundle install --jobs 4 --retry 3
84
+ - name: Set up vendored RBS source
85
+ run: bundle exec rake rust:rbs:sync
86
+ - name: Install Rust tools
87
+ run: |
88
+ rustup update --no-self-update stable
89
+ rustup default stable
90
+ - uses: actions/cache@v6
91
+ with:
92
+ path: |
93
+ ~/.cargo/registry
94
+ ~/.cargo/git
95
+ rust/target
96
+ key: ${{ runner.os }}-cargo-${{ hashFiles('rust/Cargo.lock') }}
97
+ restore-keys: |
98
+ ${{ runner.os }}-cargo-
99
+ - name: Test publish ruby-rbs-sys
100
+ run: bundle exec rake rust:publish:ruby-rbs-sys
101
+ env:
102
+ RBS_RUST_PUBLISH_DRY_RUN: "1"
103
+
104
+ publish-dry-run-ruby-rbs:
105
+ name: rust:publish:ruby-rbs
106
+ runs-on: ubuntu-latest
107
+ continue-on-error: true
108
+ steps:
109
+ - uses: actions/checkout@v7
110
+ - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
111
+ - name: Set up git identity
112
+ run: |
113
+ git config user.name "GitHub Actions"
114
+ git config user.email "actions@github.com"
115
+ - name: Set up Ruby
116
+ uses: ruby/setup-ruby@v1
117
+ with:
118
+ ruby-version: ruby
119
+ bundler: none
120
+ - name: Update rubygems & bundler
121
+ run: gem update --system
122
+ - name: Install gems
123
+ run: |
124
+ bundle config set --local without libs:profilers
125
+ bundle install --jobs 4 --retry 3
126
+ - name: Set up vendored RBS source
127
+ run: bundle exec rake rust:rbs:sync
128
+ - name: Install Rust tools
129
+ run: |
130
+ rustup update --no-self-update stable
131
+ rustup default stable
132
+ - uses: actions/cache@v6
133
+ with:
134
+ path: |
135
+ ~/.cargo/registry
136
+ ~/.cargo/git
137
+ rust/target
138
+ key: ${{ runner.os }}-cargo-${{ hashFiles('rust/Cargo.lock') }}
139
+ restore-keys: |
140
+ ${{ runner.os }}-cargo-
141
+ - name: Test publish ruby-rbs
142
+ run: bundle exec rake rust:publish:ruby-rbs
143
+ env:
144
+ RBS_RUST_PUBLISH_DRY_RUN: "1"
145
+
146
+ lint:
147
+ name: cargo:lint
148
+ runs-on: ubuntu-latest
149
+ steps:
150
+ - uses: actions/checkout@v7
151
+ - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
152
+ - name: Set up Ruby
153
+ uses: ruby/setup-ruby@v1
154
+ with:
155
+ ruby-version: ruby
156
+ bundler: none
157
+ - name: Update rubygems & bundler
158
+ run: gem update --system
159
+ - name: Install gems
160
+ run: |
161
+ bundle config set --local without libs:profilers
162
+ bundle install --jobs 4 --retry 3
163
+ - name: Set up vendored RBS source
164
+ run: bundle exec rake rust:rbs:sync
165
+ - name: Install Rust tools
166
+ run: |
167
+ rustup update --no-self-update stable
168
+ rustup default stable
169
+ rustup component add --toolchain stable clippy rustfmt
170
+ - uses: actions/cache@v6
171
+ with:
172
+ path: |
173
+ ~/.cargo/registry
174
+ ~/.cargo/git
175
+ rust/target
176
+ key: ${{ runner.os }}-cargo-${{ hashFiles('rust/Cargo.lock') }}
177
+ restore-keys: |
178
+ ${{ runner.os }}-cargo-
179
+ - name: Check formatting
180
+ run: |
181
+ cd rust
182
+ cargo fmt --check
183
+ - name: Run clippy
184
+ run: |
185
+ cd rust
186
+ cargo clippy
@@ -0,0 +1,54 @@
1
+ name: TruffleRuby
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request: {}
8
+ merge_group: {}
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ test:
15
+ runs-on: "ubuntu-latest"
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ ruby: ['truffleruby']
20
+ job:
21
+ - test
22
+ env:
23
+ RANDOMIZE_STDLIB_TEST_ORDER: "true"
24
+ # TruffleRuby warns and falls back to US-ASCII unless the locale is UTF-8.
25
+ LANG: "en_US.UTF-8"
26
+ steps:
27
+ - uses: actions/checkout@v7
28
+ - uses: ruby/setup-ruby@v1
29
+ with:
30
+ ruby-version: ${{ matrix.ruby }}
31
+ bundler: none
32
+ - name: Set working directory as safe
33
+ run: git config --global --add safe.directory $(pwd)
34
+ - name: Install dependencies
35
+ run: |
36
+ sudo apt-get update
37
+ sudo apt-get install -y libdb-dev curl autoconf automake m4 libtool python3
38
+ - name: Update rubygems & bundler
39
+ run: |
40
+ ruby -v
41
+ gem update --system
42
+ - name: install erb
43
+ run: gem install erb
44
+ - name: bundle config
45
+ run: |
46
+ # Profilers and the typecheck tooling are not needed for the smoke test,
47
+ # and some of them do not support TruffleRuby.
48
+ bundle config set --local without 'profilers typecheck_test'
49
+ - name: bin/setup
50
+ run: |
51
+ bin/setup
52
+ - name: Run test
53
+ run: |
54
+ bundle exec rake ${{ matrix.job }}
@@ -7,16 +7,19 @@ on:
7
7
  pull_request: {}
8
8
  merge_group: {}
9
9
 
10
+ permissions:
11
+ contents: read
12
+
10
13
  jobs:
11
14
  steep:
12
15
  runs-on: "ubuntu-latest"
13
16
  strategy:
14
17
  fail-fast: false
15
18
  steps:
16
- - uses: actions/checkout@v4
19
+ - uses: actions/checkout@v7
17
20
  - uses: ruby/setup-ruby@v1
18
21
  with:
19
- ruby-version: "3.3"
22
+ ruby-version: "4.0"
20
23
  bundler: none
21
24
  - name: Set working directory as safe
22
25
  run: git config --global --add safe.directory $(pwd)
@@ -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@v7
32
+ - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
33
+ - name: Set up Ruby
34
+ uses: ruby/setup-ruby@v1
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@v1
52
+ with:
53
+ version: ${{ env.WASMTIME_VERSION }}
54
+ - name: Build and smoke-test the WebAssembly module
55
+ run: bundle exec rake wasm:check
@@ -7,15 +7,18 @@ 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@v7
19
22
  - name: load ruby
20
23
  uses: ruby/setup-ruby@v1
21
24
  with:
@@ -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,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/**/*'