rbs 3.9.4 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.dockerignore +37 -0
  5. data/.gitattributes +1 -0
  6. data/.github/dependabot.yml +16 -14
  7. data/.github/workflows/bundle-update.yml +63 -0
  8. data/.github/workflows/c-check.yml +66 -0
  9. data/.github/workflows/changelog.yml +121 -0
  10. data/.github/workflows/comments.yml +6 -4
  11. data/.github/workflows/dependabot.yml +2 -2
  12. data/.github/workflows/jruby.yml +74 -0
  13. data/.github/workflows/release-gems.yml +234 -0
  14. data/.github/workflows/ruby.yml +86 -32
  15. data/.github/workflows/rust.yml +186 -0
  16. data/.github/workflows/truffleruby.yml +54 -0
  17. data/.github/workflows/typecheck.yml +6 -3
  18. data/.github/workflows/wasm.yml +55 -0
  19. data/.github/workflows/windows.yml +10 -4
  20. data/.gitignore +16 -0
  21. data/.rubocop.yml +1 -2
  22. data/CHANGELOG.md +502 -0
  23. data/Dockerfile.jruby +53 -0
  24. data/README.md +42 -5
  25. data/Rakefile +892 -111
  26. data/Steepfile +11 -0
  27. data/config.yml +665 -62
  28. data/core/array.rbs +541 -398
  29. data/core/basic_object.rbs +9 -8
  30. data/core/binding.rbs +0 -2
  31. data/core/builtin.rbs +9 -8
  32. data/core/class.rbs +11 -8
  33. data/core/comparable.rbs +55 -34
  34. data/core/complex.rbs +104 -78
  35. data/core/dir.rbs +61 -49
  36. data/core/encoding.rbs +12 -15
  37. data/core/enumerable.rbs +297 -196
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +5 -5
  40. data/core/enumerator.rbs +91 -28
  41. data/core/errno.rbs +11 -2
  42. data/core/errors.rbs +58 -29
  43. data/core/exception.rbs +13 -13
  44. data/core/fiber.rbs +74 -54
  45. data/core/file.rbs +260 -1151
  46. data/core/file_constants.rbs +463 -0
  47. data/core/file_stat.rbs +534 -0
  48. data/core/file_test.rbs +3 -3
  49. data/core/float.rbs +257 -116
  50. data/core/gc.rbs +425 -281
  51. data/core/hash.rbs +1151 -829
  52. data/core/integer.rbs +156 -195
  53. data/core/io/buffer.rbs +53 -42
  54. data/core/io/wait.rbs +13 -35
  55. data/core/io.rbs +222 -155
  56. data/core/kernel.rbs +239 -163
  57. data/core/marshal.rbs +4 -4
  58. data/core/match_data.rbs +16 -14
  59. data/core/math.rbs +107 -66
  60. data/core/method.rbs +69 -33
  61. data/core/module.rbs +302 -150
  62. data/core/nil_class.rbs +7 -6
  63. data/core/numeric.rbs +77 -63
  64. data/core/object.rbs +9 -11
  65. data/core/object_space/weak_key_map.rbs +7 -7
  66. data/core/object_space.rbs +30 -23
  67. data/core/pathname.rbs +1312 -0
  68. data/core/proc.rbs +95 -58
  69. data/core/process.rbs +222 -202
  70. data/core/ractor.rbs +364 -518
  71. data/core/random.rbs +21 -3
  72. data/core/range.rbs +181 -79
  73. data/core/rational.rbs +60 -89
  74. data/core/rbs/ops.rbs +154 -0
  75. data/core/rbs/unnamed/argf.rbs +63 -56
  76. data/core/rbs/unnamed/env_class.rbs +19 -14
  77. data/core/rbs/unnamed/main_class.rbs +123 -0
  78. data/core/rbs/unnamed/random.rbs +11 -118
  79. data/core/regexp.rbs +258 -214
  80. data/core/ruby.rbs +53 -0
  81. data/core/ruby_vm.rbs +78 -34
  82. data/core/rubygems/config_file.rbs +5 -5
  83. data/core/rubygems/errors.rbs +6 -70
  84. data/core/rubygems/requirement.rbs +5 -15
  85. data/core/rubygems/rubygems.rbs +18 -81
  86. data/core/rubygems/specification.rbs +8 -0
  87. data/core/rubygems/version.rbs +2 -163
  88. data/core/set.rbs +493 -363
  89. data/core/signal.rbs +26 -16
  90. data/core/string.rbs +3234 -1285
  91. data/core/struct.rbs +43 -42
  92. data/core/symbol.rbs +41 -34
  93. data/core/thread.rbs +139 -83
  94. data/core/time.rbs +81 -50
  95. data/core/trace_point.rbs +41 -35
  96. data/core/true_class.rbs +2 -2
  97. data/core/unbound_method.rbs +24 -16
  98. data/core/warning.rbs +7 -7
  99. data/docs/CONTRIBUTING.md +3 -2
  100. data/docs/aliases.md +79 -0
  101. data/docs/collection.md +3 -3
  102. data/docs/config.md +171 -0
  103. data/docs/encoding.md +56 -0
  104. data/docs/gem.md +0 -1
  105. data/docs/inline.md +634 -0
  106. data/docs/rbs_by_example.md +20 -20
  107. data/docs/release.md +303 -0
  108. data/docs/rust.md +96 -0
  109. data/docs/sigs.md +3 -3
  110. data/docs/stdlib.md +8 -0
  111. data/docs/syntax.md +60 -18
  112. data/docs/type_fingerprint.md +21 -0
  113. data/docs/wasm_serialization.md +80 -0
  114. data/exe/rbs +1 -1
  115. data/ext/rbs_extension/ast_translation.c +1870 -0
  116. data/ext/rbs_extension/ast_translation.h +41 -0
  117. data/ext/rbs_extension/class_constants.c +189 -0
  118. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +24 -1
  119. data/ext/rbs_extension/compat.h +10 -0
  120. data/ext/rbs_extension/extconf.rb +26 -1
  121. data/ext/rbs_extension/legacy_location.c +299 -0
  122. data/ext/rbs_extension/legacy_location.h +82 -0
  123. data/ext/rbs_extension/main.c +639 -23
  124. data/ext/rbs_extension/rbs_extension.h +6 -21
  125. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  126. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  127. data/include/rbs/ast.h +1055 -0
  128. data/include/rbs/defines.h +104 -0
  129. data/include/rbs/lexer.h +208 -0
  130. data/include/rbs/location.h +40 -0
  131. data/include/rbs/parser.h +187 -0
  132. data/include/rbs/serialize.h +39 -0
  133. data/include/rbs/string.h +47 -0
  134. data/include/rbs/util/rbs_allocator.h +59 -0
  135. data/include/rbs/util/rbs_assert.h +20 -0
  136. data/include/rbs/util/rbs_buffer.h +83 -0
  137. data/include/rbs/util/rbs_constant_pool.h +6 -70
  138. data/include/rbs/util/rbs_encoding.h +282 -0
  139. data/include/rbs/util/rbs_unescape.h +24 -0
  140. data/include/rbs.h +9 -2
  141. data/lib/rbs/annotate/formatter.rb +3 -13
  142. data/lib/rbs/annotate/rdoc_annotator.rb +30 -32
  143. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  144. data/lib/rbs/ast/annotation.rb +1 -1
  145. data/lib/rbs/ast/comment.rb +1 -1
  146. data/lib/rbs/ast/declarations.rb +11 -11
  147. data/lib/rbs/ast/members.rb +14 -14
  148. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  149. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  150. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  151. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  152. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  153. data/lib/rbs/ast/ruby/members.rb +762 -0
  154. data/lib/rbs/ast/type_param.rb +25 -5
  155. data/lib/rbs/buffer.rb +142 -20
  156. data/lib/rbs/cli/diff.rb +16 -15
  157. data/lib/rbs/cli/validate.rb +63 -126
  158. data/lib/rbs/cli.rb +59 -29
  159. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  160. data/lib/rbs/collection/sources/git.rb +7 -0
  161. data/lib/rbs/definition.rb +6 -1
  162. data/lib/rbs/definition_builder/ancestor_builder.rb +129 -70
  163. data/lib/rbs/definition_builder/method_builder.rb +74 -33
  164. data/lib/rbs/definition_builder.rb +181 -21
  165. data/lib/rbs/diff.rb +7 -1
  166. data/lib/rbs/environment/class_entry.rb +81 -0
  167. data/lib/rbs/environment/module_entry.rb +91 -0
  168. data/lib/rbs/environment.rb +410 -215
  169. data/lib/rbs/environment_loader.rb +2 -8
  170. data/lib/rbs/errors.rb +31 -21
  171. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  172. data/lib/rbs/inline_parser.rb +568 -0
  173. data/lib/rbs/location_aux.rb +36 -4
  174. data/lib/rbs/locator.rb +5 -1
  175. data/lib/rbs/method_type.rb +5 -3
  176. data/lib/rbs/namespace.rb +47 -18
  177. data/lib/rbs/parser_aux.rb +37 -7
  178. data/lib/rbs/prototype/helpers.rb +24 -0
  179. data/lib/rbs/prototype/rb.rb +3 -28
  180. data/lib/rbs/prototype/rbi.rb +196 -45
  181. data/lib/rbs/prototype/runtime/value_object_generator.rb +0 -1
  182. data/lib/rbs/prototype/runtime.rb +13 -3
  183. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  184. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  185. data/lib/rbs/rewriter.rb +70 -0
  186. data/lib/rbs/source.rb +99 -0
  187. data/lib/rbs/subtractor.rb +7 -4
  188. data/lib/rbs/test/type_check.rb +25 -3
  189. data/lib/rbs/type_name.rb +34 -21
  190. data/lib/rbs/types.rb +135 -81
  191. data/lib/rbs/unit_test/convertibles.rb +1 -0
  192. data/lib/rbs/unit_test/type_assertions.rb +47 -11
  193. data/lib/rbs/validator.rb +2 -2
  194. data/lib/rbs/version.rb +1 -1
  195. data/lib/rbs/wasm/deserializer.rb +213 -0
  196. data/lib/rbs/wasm/location.rb +61 -0
  197. data/lib/rbs/wasm/parser.rb +174 -0
  198. data/lib/rbs/wasm/runtime.rb +211 -0
  199. data/lib/rbs/wasm/serialization_schema.rb +111 -0
  200. data/lib/rbs.rb +25 -2
  201. data/lib/rbs_jars.rb +39 -0
  202. data/lib/rdoc/discover.rb +1 -1
  203. data/lib/rdoc_plugin/parser.rb +8 -3
  204. data/rbs.gemspec +34 -6
  205. data/schema/function.json +12 -1
  206. data/schema/typeParam.json +17 -1
  207. data/sig/ancestor_builder.rbs +1 -1
  208. data/sig/annotate/formatter.rbs +2 -2
  209. data/sig/annotate/rdoc_annotater.rbs +13 -10
  210. data/sig/ast/ruby/annotations.rbs +470 -0
  211. data/sig/ast/ruby/comment_block.rbs +127 -0
  212. data/sig/ast/ruby/declarations.rbs +158 -0
  213. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  214. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  215. data/sig/ast/ruby/members.rbs +198 -0
  216. data/sig/buffer.rbs +81 -5
  217. data/sig/cli/diff.rbs +5 -11
  218. data/sig/cli/validate.rbs +12 -8
  219. data/sig/cli.rbs +18 -18
  220. data/sig/collection/config/lockfile_generator.rbs +2 -0
  221. data/sig/definition.rbs +6 -0
  222. data/sig/definition_builder.rbs +3 -1
  223. data/sig/environment/class_entry.rbs +56 -0
  224. data/sig/environment/module_entry.rbs +65 -0
  225. data/sig/environment.rbs +94 -87
  226. data/sig/errors.rbs +26 -20
  227. data/sig/inline_parser/comment_association.rbs +71 -0
  228. data/sig/inline_parser.rbs +126 -0
  229. data/sig/location.rbs +32 -7
  230. data/sig/locator.rbs +0 -2
  231. data/sig/manifest.yaml +0 -2
  232. data/sig/method_builder.rbs +9 -4
  233. data/sig/namespace.rbs +20 -5
  234. data/sig/parser.rbs +79 -15
  235. data/sig/prototype/helpers.rbs +2 -0
  236. data/sig/prototype/rbi.rbs +33 -4
  237. data/sig/resolver/type_name_resolver.rbs +36 -10
  238. data/sig/rewriter.rbs +45 -0
  239. data/sig/source.rbs +48 -0
  240. data/sig/type_param.rbs +13 -8
  241. data/sig/typename.rbs +15 -5
  242. data/sig/types.rbs +21 -9
  243. data/sig/unit_test/spy.rbs +0 -8
  244. data/sig/unit_test/type_assertions.rbs +17 -2
  245. data/sig/wasm/deserializer.rbs +66 -0
  246. data/sig/wasm/serialization_schema.rbs +13 -0
  247. data/src/ast.c +1644 -0
  248. data/src/lexer.c +3223 -0
  249. data/src/lexer.re +187 -0
  250. data/src/lexstate.c +222 -0
  251. data/src/location.c +31 -0
  252. data/src/parser.c +4318 -0
  253. data/src/serialize.c +965 -0
  254. data/src/string.c +41 -0
  255. data/src/util/rbs_allocator.c +171 -0
  256. data/src/util/rbs_assert.c +19 -0
  257. data/src/util/rbs_buffer.c +54 -0
  258. data/src/util/rbs_constant_pool.c +18 -92
  259. data/src/util/rbs_encoding.c +21454 -0
  260. data/src/util/rbs_unescape.c +167 -0
  261. data/stdlib/abbrev/0/array.rbs +1 -1
  262. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  263. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  264. data/stdlib/cgi/0/core.rbs +9 -393
  265. data/stdlib/cgi/0/manifest.yaml +1 -0
  266. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  267. data/stdlib/coverage/0/coverage.rbs +7 -4
  268. data/stdlib/csv/0/csv.rbs +5 -5
  269. data/stdlib/date/0/date.rbs +92 -79
  270. data/stdlib/date/0/date_time.rbs +25 -24
  271. data/stdlib/delegate/0/delegator.rbs +11 -7
  272. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  273. data/stdlib/digest/0/digest.rbs +117 -1
  274. data/stdlib/erb/0/erb.rbs +754 -353
  275. data/stdlib/etc/0/etc.rbs +73 -54
  276. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  277. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  278. data/stdlib/io-console/0/io-console.rbs +2 -2
  279. data/stdlib/ipaddr/0/ipaddr.rbs +0 -5
  280. data/stdlib/json/0/json.rbs +232 -185
  281. data/stdlib/monitor/0/monitor.rbs +9 -9
  282. data/stdlib/net-http/0/net-http.rbs +162 -134
  283. data/stdlib/objspace/0/objspace.rbs +17 -34
  284. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  285. data/stdlib/open3/0/open3.rbs +469 -10
  286. data/stdlib/openssl/0/openssl.rbs +521 -397
  287. data/stdlib/optparse/0/optparse.rbs +26 -17
  288. data/stdlib/pathname/0/pathname.rbs +11 -1381
  289. data/stdlib/pp/0/pp.rbs +9 -8
  290. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  291. data/stdlib/pstore/0/pstore.rbs +35 -30
  292. data/stdlib/psych/0/psych.rbs +65 -12
  293. data/stdlib/psych/0/store.rbs +2 -4
  294. data/stdlib/pty/0/pty.rbs +9 -6
  295. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  296. data/stdlib/rdoc/0/code_object.rbs +4 -3
  297. data/stdlib/rdoc/0/comment.rbs +2 -0
  298. data/stdlib/rdoc/0/options.rbs +76 -0
  299. data/stdlib/rdoc/0/parser.rbs +1 -1
  300. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  301. data/stdlib/rdoc/0/store.rbs +2 -2
  302. data/stdlib/resolv/0/resolv.rbs +26 -69
  303. data/stdlib/ripper/0/ripper.rbs +25 -19
  304. data/stdlib/securerandom/0/manifest.yaml +2 -0
  305. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  306. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  307. data/stdlib/singleton/0/singleton.rbs +6 -0
  308. data/stdlib/socket/0/addrinfo.rbs +9 -9
  309. data/stdlib/socket/0/basic_socket.rbs +3 -3
  310. data/stdlib/socket/0/ip_socket.rbs +10 -8
  311. data/stdlib/socket/0/socket.rbs +23 -10
  312. data/stdlib/socket/0/tcp_server.rbs +1 -1
  313. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  314. data/stdlib/socket/0/udp_socket.rbs +1 -1
  315. data/stdlib/socket/0/unix_server.rbs +1 -1
  316. data/stdlib/stringio/0/stringio.rbs +1211 -96
  317. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  318. data/stdlib/tempfile/0/manifest.yaml +3 -0
  319. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  320. data/stdlib/time/0/time.rbs +8 -6
  321. data/stdlib/timeout/0/timeout.rbs +58 -7
  322. data/stdlib/tsort/0/cyclic.rbs +4 -1
  323. data/stdlib/tsort/0/interfaces.rbs +8 -8
  324. data/stdlib/tsort/0/tsort.rbs +16 -15
  325. data/stdlib/uri/0/common.rbs +42 -20
  326. data/stdlib/uri/0/file.rbs +3 -3
  327. data/stdlib/uri/0/generic.rbs +21 -18
  328. data/stdlib/uri/0/http.rbs +2 -2
  329. data/stdlib/uri/0/ldap.rbs +2 -2
  330. data/stdlib/uri/0/mailto.rbs +3 -3
  331. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  332. data/stdlib/zlib/0/deflate.rbs +4 -3
  333. data/stdlib/zlib/0/gzip_file.rbs +1 -1
  334. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  335. data/stdlib/zlib/0/gzip_writer.rbs +16 -13
  336. data/stdlib/zlib/0/inflate.rbs +1 -1
  337. data/stdlib/zlib/0/need_dict.rbs +1 -1
  338. data/wasm/README.md +109 -0
  339. data/wasm/rbs_wasm.c +479 -0
  340. metadata +133 -19
  341. data/ext/rbs_extension/lexer.c +0 -2728
  342. data/ext/rbs_extension/lexer.h +0 -179
  343. data/ext/rbs_extension/lexer.re +0 -147
  344. data/ext/rbs_extension/lexstate.c +0 -175
  345. data/ext/rbs_extension/location.c +0 -325
  346. data/ext/rbs_extension/location.h +0 -85
  347. data/ext/rbs_extension/parser.c +0 -2982
  348. data/ext/rbs_extension/parser.h +0 -18
  349. data/ext/rbs_extension/parserstate.c +0 -411
  350. data/ext/rbs_extension/parserstate.h +0 -163
  351. data/ext/rbs_extension/unescape.c +0 -32
  352. data/include/rbs/ruby_objs.h +0 -72
  353. data/src/constants.c +0 -153
  354. data/src/ruby_objs.c +0 -799
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # This file is generated by the templates/template.rb script and should not be
4
+ # modified manually. To change the template see
5
+ # templates/lib/rbs/wasm/serialization_schema.rb.erb
6
+
7
+ module RBS
8
+ module WASM
9
+ # Describes how to decode the binary buffer produced by `rbs_serialize_node`
10
+ # (src/serialize.c) back into RBS::AST objects. RBS::WASM::Deserializer walks
11
+ # this table; the matching encoder is generated from the same config.yml, so
12
+ # the two stay in sync.
13
+ #
14
+ # SCHEMA is indexed by node tag: tag 0 is NULL and SYMBOL_TAG is the
15
+ # interned-symbol tag. Each remaining entry is one of:
16
+ #
17
+ # [:node, class_name, expose_location, loc_children, fields, resolve_type_params]
18
+ # [:bool] / [:integer] / [:string_value] / [:record_field]
19
+ # [:signature] / [:namespace] / [:type_name]
20
+ #
21
+ # where loc_children is [[name, required?], ...] and fields is
22
+ # [[name, reader], ...] with reader one of :node, :node_list, :hash, :string,
23
+ # :bool, :location_range, :location_range_list, :attr_ivar_name, or
24
+ # [:enum, [value_or_nil, ...]].
25
+ module SerializationSchema
26
+ SYMBOL_TAG = 79
27
+
28
+ SCHEMA = [
29
+ nil, # tag 0 is reserved for NULL
30
+ [:node, "RBS::AST::Annotation", true, nil, [[:string, :string]], false],
31
+ [:bool],
32
+ [:node, "RBS::AST::Comment", true, nil, [[:string, :string]], false],
33
+ [:node, "RBS::AST::Declarations::Class", true, [[:keyword, true], [:name, true], [:end, true], [:type_params, false], [:lt, false]], [[:name, :node], [:type_params, :node_list], [:super_class, :node], [:members, :node_list], [:annotations, :node_list], [:comment, :node]], true],
34
+ [:node, "RBS::AST::Declarations::Class::Super", true, [[:name, true], [:args, false]], [[:name, :node], [:args, :node_list]], false],
35
+ [:node, "RBS::AST::Declarations::ClassAlias", true, [[:keyword, true], [:new_name, true], [:eq, true], [:old_name, true]], [[:new_name, :node], [:old_name, :node], [:comment, :node], [:annotations, :node_list]], false],
36
+ [:node, "RBS::AST::Declarations::Constant", true, [[:name, true], [:colon, true]], [[:name, :node], [:type, :node], [:comment, :node], [:annotations, :node_list]], false],
37
+ [:node, "RBS::AST::Declarations::Global", true, [[:name, true], [:colon, true]], [[:name, :node], [:type, :node], [:comment, :node], [:annotations, :node_list]], false],
38
+ [:node, "RBS::AST::Declarations::Interface", true, [[:keyword, true], [:name, true], [:end, true], [:type_params, false]], [[:name, :node], [:type_params, :node_list], [:members, :node_list], [:annotations, :node_list], [:comment, :node]], true],
39
+ [:node, "RBS::AST::Declarations::Module", true, [[:keyword, true], [:name, true], [:end, true], [:type_params, false], [:colon, false], [:self_types, false]], [[:name, :node], [:type_params, :node_list], [:self_types, :node_list], [:members, :node_list], [:annotations, :node_list], [:comment, :node]], true],
40
+ [:node, "RBS::AST::Declarations::Module::Self", true, [[:name, true], [:args, false]], [[:name, :node], [:args, :node_list]], false],
41
+ [:node, "RBS::AST::Declarations::ModuleAlias", true, [[:keyword, true], [:new_name, true], [:eq, true], [:old_name, true]], [[:new_name, :node], [:old_name, :node], [:comment, :node], [:annotations, :node_list]], false],
42
+ [:node, "RBS::AST::Declarations::TypeAlias", true, [[:keyword, true], [:name, true], [:eq, true], [:type_params, false]], [[:name, :node], [:type_params, :node_list], [:type, :node], [:annotations, :node_list], [:comment, :node]], true],
43
+ [:node, "RBS::AST::Directives::Use", true, [[:keyword, true]], [[:clauses, :node_list]], false],
44
+ [:node, "RBS::AST::Directives::Use::SingleClause", true, [[:type_name, true], [:keyword, false], [:new_name, false]], [[:type_name, :node], [:new_name, :node]], false],
45
+ [:node, "RBS::AST::Directives::Use::WildcardClause", true, [[:namespace, true], [:star, true]], [[:namespace, :node]], false],
46
+ [:integer],
47
+ [:node, "RBS::AST::Members::Alias", true, [[:keyword, true], [:new_name, true], [:old_name, true], [:new_kind, false], [:old_kind, false]], [[:new_name, :node], [:old_name, :node], [:kind, [:enum, [:instance, :singleton]]], [:annotations, :node_list], [:comment, :node]], false],
48
+ [:node, "RBS::AST::Members::AttrAccessor", true, [[:keyword, true], [:name, true], [:colon, true], [:kind, false], [:ivar, false], [:ivar_name, false], [:visibility, false]], [[:name, :node], [:type, :node], [:ivar_name, :attr_ivar_name], [:kind, [:enum, [:instance, :singleton]]], [:annotations, :node_list], [:comment, :node], [:visibility, [:enum, [nil, :public, :private]]]], false],
49
+ [:node, "RBS::AST::Members::AttrReader", true, [[:keyword, true], [:name, true], [:colon, true], [:kind, false], [:ivar, false], [:ivar_name, false], [:visibility, false]], [[:name, :node], [:type, :node], [:ivar_name, :attr_ivar_name], [:kind, [:enum, [:instance, :singleton]]], [:annotations, :node_list], [:comment, :node], [:visibility, [:enum, [nil, :public, :private]]]], false],
50
+ [:node, "RBS::AST::Members::AttrWriter", true, [[:keyword, true], [:name, true], [:colon, true], [:kind, false], [:ivar, false], [:ivar_name, false], [:visibility, false]], [[:name, :node], [:type, :node], [:ivar_name, :attr_ivar_name], [:kind, [:enum, [:instance, :singleton]]], [:annotations, :node_list], [:comment, :node], [:visibility, [:enum, [nil, :public, :private]]]], false],
51
+ [:node, "RBS::AST::Members::ClassInstanceVariable", true, [[:name, true], [:colon, true], [:kind, false]], [[:name, :node], [:type, :node], [:comment, :node]], false],
52
+ [:node, "RBS::AST::Members::ClassVariable", true, [[:name, true], [:colon, true], [:kind, false]], [[:name, :node], [:type, :node], [:comment, :node]], false],
53
+ [:node, "RBS::AST::Members::Extend", true, [[:name, true], [:keyword, true], [:args, false]], [[:name, :node], [:args, :node_list], [:annotations, :node_list], [:comment, :node]], false],
54
+ [:node, "RBS::AST::Members::Include", true, [[:name, true], [:keyword, true], [:args, false]], [[:name, :node], [:args, :node_list], [:annotations, :node_list], [:comment, :node]], false],
55
+ [:node, "RBS::AST::Members::InstanceVariable", true, [[:name, true], [:colon, true], [:kind, false]], [[:name, :node], [:type, :node], [:comment, :node]], false],
56
+ [:node, "RBS::AST::Members::MethodDefinition", true, [[:keyword, true], [:name, true], [:kind, false], [:overloading, false], [:visibility, false]], [[:name, :node], [:kind, [:enum, [:instance, :singleton, :singleton_instance]]], [:overloads, :node_list], [:annotations, :node_list], [:comment, :node], [:overloading, :bool], [:visibility, [:enum, [nil, :public, :private]]]], false],
57
+ [:node, "RBS::AST::Members::MethodDefinition::Overload", false, nil, [[:annotations, :node_list], [:method_type, :node]], false],
58
+ [:node, "RBS::AST::Members::Prepend", true, [[:name, true], [:keyword, true], [:args, false]], [[:name, :node], [:args, :node_list], [:annotations, :node_list], [:comment, :node]], false],
59
+ [:node, "RBS::AST::Members::Private", true, nil, nil, false],
60
+ [:node, "RBS::AST::Members::Public", true, nil, nil, false],
61
+ [:node, "RBS::AST::Ruby::Annotations::BlockParamTypeAnnotation", true, nil, [[:prefix_location, :location_range], [:ampersand_location, :location_range], [:name_location, :location_range], [:colon_location, :location_range], [:question_location, :location_range], [:type_location, :location_range], [:type, :node], [:comment_location, :location_range]], false],
62
+ [:node, "RBS::AST::Ruby::Annotations::ClassAliasAnnotation", true, nil, [[:prefix_location, :location_range], [:keyword_location, :location_range], [:type_name, :node], [:type_name_location, :location_range]], false],
63
+ [:node, "RBS::AST::Ruby::Annotations::ColonMethodTypeAnnotation", true, nil, [[:prefix_location, :location_range], [:annotations, :node_list], [:method_type, :node]], false],
64
+ [:node, "RBS::AST::Ruby::Annotations::DoubleSplatParamTypeAnnotation", true, nil, [[:prefix_location, :location_range], [:star2_location, :location_range], [:name_location, :location_range], [:colon_location, :location_range], [:param_type, :node], [:comment_location, :location_range]], false],
65
+ [:node, "RBS::AST::Ruby::Annotations::InstanceVariableAnnotation", true, nil, [[:prefix_location, :location_range], [:ivar_name, :node], [:ivar_name_location, :location_range], [:colon_location, :location_range], [:type, :node], [:comment_location, :location_range]], false],
66
+ [:node, "RBS::AST::Ruby::Annotations::MethodTypesAnnotation", true, nil, [[:prefix_location, :location_range], [:overloads, :node_list], [:vertical_bar_locations, :location_range_list], [:dot3_location, :location_range]], false],
67
+ [:node, "RBS::AST::Ruby::Annotations::ModuleAliasAnnotation", true, nil, [[:prefix_location, :location_range], [:keyword_location, :location_range], [:type_name, :node], [:type_name_location, :location_range]], false],
68
+ [:node, "RBS::AST::Ruby::Annotations::ModuleSelfAnnotation", true, nil, [[:prefix_location, :location_range], [:keyword_location, :location_range], [:colon_location, :location_range], [:name, :node], [:args, :node_list], [:open_bracket_location, :location_range], [:close_bracket_location, :location_range], [:args_comma_locations, :location_range_list], [:comment_location, :location_range]], false],
69
+ [:node, "RBS::AST::Ruby::Annotations::NodeTypeAssertion", true, nil, [[:prefix_location, :location_range], [:type, :node]], false],
70
+ [:node, "RBS::AST::Ruby::Annotations::ParamTypeAnnotation", true, nil, [[:prefix_location, :location_range], [:name_location, :location_range], [:colon_location, :location_range], [:param_type, :node], [:comment_location, :location_range]], false],
71
+ [:node, "RBS::AST::Ruby::Annotations::ReturnTypeAnnotation", true, nil, [[:prefix_location, :location_range], [:return_location, :location_range], [:colon_location, :location_range], [:return_type, :node], [:comment_location, :location_range]], false],
72
+ [:node, "RBS::AST::Ruby::Annotations::SkipAnnotation", true, nil, [[:prefix_location, :location_range], [:skip_location, :location_range], [:comment_location, :location_range]], false],
73
+ [:node, "RBS::AST::Ruby::Annotations::SplatParamTypeAnnotation", true, nil, [[:prefix_location, :location_range], [:star_location, :location_range], [:name_location, :location_range], [:colon_location, :location_range], [:param_type, :node], [:comment_location, :location_range]], false],
74
+ [:node, "RBS::AST::Ruby::Annotations::TypeApplicationAnnotation", true, nil, [[:prefix_location, :location_range], [:type_args, :node_list], [:close_bracket_location, :location_range], [:comma_locations, :location_range_list]], false],
75
+ [:string_value],
76
+ [:node, "RBS::AST::TypeParam", true, [[:name, true], [:variance, false], [:unchecked, false], [:upper_bound, false], [:lower_bound, false], [:default, false]], [[:name, :node], [:variance, [:enum, [:invariant, :covariant, :contravariant]]], [:upper_bound, :node], [:lower_bound, :node], [:default_type, :node], [:unchecked, :bool]], false],
77
+ [:node, "RBS::MethodType", true, [[:type, true], [:type_params, false]], [[:type_params, :node_list], [:type, :node], [:block, :node]], true],
78
+ [:namespace],
79
+ [:signature],
80
+ [:type_name],
81
+ [:node, "RBS::Types::Alias", true, [[:name, true], [:args, false]], [[:name, :node], [:args, :node_list]], false],
82
+ [:node, "RBS::Types::Bases::Any", true, nil, [[:todo, :bool]], false],
83
+ [:node, "RBS::Types::Bases::Bool", true, nil, nil, false],
84
+ [:node, "RBS::Types::Bases::Bottom", true, nil, nil, false],
85
+ [:node, "RBS::Types::Bases::Class", true, nil, nil, false],
86
+ [:node, "RBS::Types::Bases::Instance", true, nil, nil, false],
87
+ [:node, "RBS::Types::Bases::Nil", true, nil, nil, false],
88
+ [:node, "RBS::Types::Bases::Self", true, nil, nil, false],
89
+ [:node, "RBS::Types::Bases::Top", true, nil, nil, false],
90
+ [:node, "RBS::Types::Bases::Void", true, nil, nil, false],
91
+ [:node, "RBS::Types::Block", true, nil, [[:type, :node], [:required, :bool], [:self_type, :node]], false],
92
+ [:node, "RBS::Types::ClassInstance", true, [[:name, true], [:args, false]], [[:name, :node], [:args, :node_list]], false],
93
+ [:node, "RBS::Types::ClassSingleton", true, [[:name, true], [:args, false]], [[:name, :node], [:args, :node_list]], false],
94
+ [:node, "RBS::Types::Function", false, nil, [[:required_positionals, :node_list], [:optional_positionals, :node_list], [:rest_positionals, :node], [:trailing_positionals, :node_list], [:required_keywords, :hash], [:optional_keywords, :hash], [:rest_keywords, :node], [:forwarding, :node], [:return_type, :node]], false],
95
+ [:node, "RBS::Types::Function::ForwardingParam", true, nil, nil, false],
96
+ [:node, "RBS::Types::Function::Param", true, [[:name, false]], [[:type, :node], [:name, :node]], false],
97
+ [:node, "RBS::Types::Interface", true, [[:name, true], [:args, false]], [[:name, :node], [:args, :node_list]], false],
98
+ [:node, "RBS::Types::Intersection", true, nil, [[:types, :node_list]], false],
99
+ [:node, "RBS::Types::Literal", true, nil, [[:literal, :node]], false],
100
+ [:node, "RBS::Types::Optional", true, nil, [[:type, :node]], false],
101
+ [:node, "RBS::Types::Proc", true, nil, [[:type, :node], [:block, :node], [:self_type, :node]], false],
102
+ [:node, "RBS::Types::Record", true, nil, [[:all_fields, :hash]], false],
103
+ [:record_field],
104
+ [:node, "RBS::Types::Tuple", true, nil, [[:types, :node_list]], false],
105
+ [:node, "RBS::Types::Union", true, nil, [[:types, :node_list]], false],
106
+ [:node, "RBS::Types::UntypedFunction", false, nil, [[:return_type, :node]], false],
107
+ [:node, "RBS::Types::Variable", true, nil, [[:name, :node]], false],
108
+ ].freeze
109
+ end
110
+ end
111
+ end
data/lib/rbs.rb CHANGED
@@ -4,12 +4,16 @@ require "rbs/version"
4
4
 
5
5
  require "set"
6
6
  require "json"
7
+ # Always require pathname: `Pathname()` (Kernel#Pathname) is only defined once
8
+ # pathname is loaded. Guarding on `defined?(Pathname)` is wrong because another
9
+ # library (e.g. Bundler) can define the Pathname constant without that method,
10
+ # which left RBS::EnvironmentLoader's `Pathname(...)` undefined on JRuby.
7
11
  require "pathname"
8
12
  require "pp"
9
- require "ripper"
10
13
  require "logger"
11
14
  require "tsort"
12
15
  require "strscan"
16
+ require "prism"
13
17
 
14
18
  require "rbs/errors"
15
19
  require "rbs/buffer"
@@ -24,8 +28,19 @@ require "rbs/ast/declarations"
24
28
  require "rbs/ast/members"
25
29
  require "rbs/ast/annotation"
26
30
  require "rbs/ast/visitor"
31
+ require "rbs/ast/ruby/comment_block"
32
+ require "rbs/ast/ruby/helpers/constant_helper"
33
+ require "rbs/ast/ruby/helpers/location_helper"
34
+ require "rbs/ast/ruby/annotations"
35
+ require "rbs/ast/ruby/declarations"
36
+ require "rbs/ast/ruby/members"
37
+ require "rbs/source"
38
+ require "rbs/inline_parser"
39
+ require "rbs/inline_parser/comment_association"
27
40
  require "rbs/environment"
28
41
  require "rbs/environment/use_map"
42
+ require "rbs/environment/class_entry"
43
+ require "rbs/environment/module_entry"
29
44
  require "rbs/environment_loader"
30
45
  require "rbs/builtin_names"
31
46
  require "rbs/definition"
@@ -40,6 +55,7 @@ require "rbs/resolver/constant_resolver"
40
55
  require "rbs/resolver/type_name_resolver"
41
56
  require "rbs/ast/comment"
42
57
  require "rbs/writer"
58
+ require "rbs/rewriter"
43
59
  require "rbs/prototype/helpers"
44
60
  require "rbs/prototype/rbi"
45
61
  require "rbs/prototype/rb"
@@ -57,7 +73,14 @@ require "rbs/type_alias_dependency"
57
73
  require "rbs/type_alias_regularity"
58
74
  require "rbs/collection"
59
75
 
60
- require "rbs_extension"
76
+ if RUBY_ENGINE == "jruby"
77
+ # JRuby cannot load the MRI C extension. Run the parser in WebAssembly and
78
+ # provide pure-Ruby implementations of RBS::Location and RBS::Parser instead.
79
+ require "rbs/wasm/location"
80
+ require "rbs/wasm/parser"
81
+ else
82
+ require "rbs_extension"
83
+ end
61
84
  require "rbs/parser_aux"
62
85
  require "rbs/location_aux"
63
86
 
data/lib/rbs_jars.rb ADDED
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This is the file jar-dependencies generates from the `jar` requirements in
4
+ # rbs.gemspec, kept with hand edits:
5
+ # 1. the `com.dylibso.chicory:runtime` require_jar line is corrected -- the
6
+ # generator mangles that artifact id to `jar` (it collides with a Maven
7
+ # scope keyword), which breaks loading;
8
+ # 2. the "# this is a generated file" marker is dropped so jar-dependencies
9
+ # does not regenerate (and re-break) this file at gem install;
10
+ # 3. a frozen_string_literal magic comment is added (rubocop).
11
+ # `rake wasm:install_jars` downloads the jars into ~/.m2; to refresh the list
12
+ # after a version bump, regenerate the file and re-apply these edits.
13
+ begin
14
+ require 'jar_dependencies'
15
+ rescue LoadError
16
+ require 'com/dylibso/chicory/compiler/1.7.5/compiler-1.7.5.jar'
17
+ require 'com/dylibso/chicory/runtime/1.7.5/runtime-1.7.5.jar'
18
+ require 'com/dylibso/chicory/wasm/1.7.5/wasm-1.7.5.jar'
19
+ require 'org/ow2/asm/asm/9.9.1/asm-9.9.1.jar'
20
+ require 'org/ow2/asm/asm-commons/9.9.1/asm-commons-9.9.1.jar'
21
+ require 'org/ow2/asm/asm-tree/9.9.1/asm-tree-9.9.1.jar'
22
+ require 'org/ow2/asm/asm-util/9.9.1/asm-util-9.9.1.jar'
23
+ require 'org/ow2/asm/asm-analysis/9.9.1/asm-analysis-9.9.1.jar'
24
+ require 'com/dylibso/chicory/wasi/1.7.5/wasi-1.7.5.jar'
25
+ require 'com/dylibso/chicory/log/1.7.5/log-1.7.5.jar'
26
+ end
27
+
28
+ if defined? Jars
29
+ require_jar 'com.dylibso.chicory', 'compiler', '1.7.5'
30
+ require_jar 'com.dylibso.chicory', 'runtime', '1.7.5'
31
+ require_jar 'com.dylibso.chicory', 'wasm', '1.7.5'
32
+ require_jar 'org.ow2.asm', 'asm', '9.9.1'
33
+ require_jar 'org.ow2.asm', 'asm-commons', '9.9.1'
34
+ require_jar 'org.ow2.asm', 'asm-tree', '9.9.1'
35
+ require_jar 'org.ow2.asm', 'asm-util', '9.9.1'
36
+ require_jar 'org.ow2.asm', 'asm-analysis', '9.9.1'
37
+ require_jar 'com.dylibso.chicory', 'wasi', '1.7.5'
38
+ require_jar 'com.dylibso.chicory', 'log', '1.7.5'
39
+ end
data/lib/rdoc/discover.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  begin
4
- gem 'rdoc', '~> 6.4'
4
+ gem 'rdoc', '>= 6.16'
5
5
  require 'rdoc_plugin/parser'
6
6
  module RDoc
7
7
  class Parser
@@ -14,6 +14,11 @@ module RBS
14
14
  end
15
15
 
16
16
  def scan
17
+ Kernel.warn(
18
+ "The RBS RDoc parser plugin is deprecated and will be removed from RBS. " \
19
+ "RDoc 8.0 provides RBS parsing directly."
20
+ )
21
+
17
22
  _, _, decls = ::RBS::Parser.parse_signature(@content)
18
23
  decls.each do |decl|
19
24
  parse_member(decl: decl, context: @top_level)
@@ -76,7 +81,7 @@ module RBS
76
81
  method.visibility = decl.visibility
77
82
  method.call_seq = decl.overloads.map {|overload| "#{decl.name.to_s}#{overload.method_type.to_s}" }.join("\n")
78
83
  if loc = decl.location
79
- method.start_collecting_tokens
84
+ method.start_collecting_tokens(:ruby)
80
85
  method.add_token({ line_no: 1, char_no: 1, kind: :on_comment, text: "# File #{@top_level.relative_name}, line(s) #{loc.start_line}:#{loc.end_line}\n" })
81
86
  method.add_token({ line_no: 1, char_no: 1, text: loc.source })
82
87
  method.line = loc.start_line
@@ -86,7 +91,7 @@ module RBS
86
91
  end
87
92
 
88
93
  def parse_method_alias_decl(decl:, context:, outer_name: nil)
89
- alias_def = RDoc::Alias.new(nil, decl.old_name.to_s, decl.new_name.to_s, nil, decl.kind == :singleton)
94
+ alias_def = RDoc::Alias.new(nil, decl.old_name.to_s, decl.new_name.to_s, nil, singleton: decl.kind == :singleton)
90
95
  alias_def.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
91
96
  context.add_alias(alias_def)
92
97
  end
@@ -100,7 +105,7 @@ module RBS
100
105
  when ::RBS::AST::Members::AttrAccessor
101
106
  'RW'
102
107
  end
103
- attribute = RDoc::Attr.new(nil, decl.name.to_s, rw, nil, decl.kind == :singleton)
108
+ attribute = RDoc::Attr.new(nil, decl.name.to_s, rw, nil, singleton: decl.kind == :singleton)
104
109
  attribute.visibility = decl.visibility
105
110
  attribute.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
106
111
  context.add_attribute(attribute)
data/rbs.gemspec CHANGED
@@ -30,20 +30,48 @@ Gem::Specification.new do |spec|
30
30
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
31
31
  `git ls-files -z`.split("\x0").reject do |f|
32
32
  [
33
- %r{^(test|spec|features|bin|steep|benchmark|templates)/},
34
- /Gemfile/
33
+ %r{^(test|spec|features|bin|steep|benchmark|templates|rust|\.vscode)/},
34
+ /Gemfile/,
35
35
  ].any? {|r| f.match(r) }
36
36
  end
37
37
  end
38
- spec.extensions = %w{ext/rbs_extension/extconf.rb}
39
38
 
40
- if false
41
- spec.required_ruby_version = ">= 3.3"
39
+ # JRuby cannot load the MRI C extension. On JRuby (and in the `java` platform
40
+ # gem, built with RBS_PLATFORM=java) RBS runs the WebAssembly-backed parser, so
41
+ # ship the prebuilt parser (built by `rake wasm:build`) and skip the C
42
+ # extension. The Chicory/ASM jars the runtime needs are NOT shipped in the gem:
43
+ # they are declared as `jar-dependencies` requirements below and fetched from
44
+ # Maven Central at install time (see lib/rbs/wasm/jars.rb).
45
+ building_java_gem = ENV["RBS_PLATFORM"] == "java"
46
+ on_jruby = defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
47
+
48
+ if building_java_gem || on_jruby
49
+ # Only stamp the platform when building the release gem; leave it unset for
50
+ # local development on JRuby so it still matches a `ruby` platform lockfile.
51
+ spec.platform = "java" if building_java_gem
52
+ # rbs_parser.wasm is a build artifact (not tracked in git), so add it
53
+ # explicitly. lib/rbs_jars.rb is committed, so git ls-files already has it.
54
+ spec.files += Dir.chdir(File.expand_path('..', __FILE__)) do
55
+ Dir.glob("lib/rbs/wasm/rbs_parser.wasm")
56
+ end
57
+
58
+ # jar-dependencies (bundled with JRuby) downloads these jars from Maven when
59
+ # the gem is installed, keeping the gem small and avoiding conflicting copies.
60
+ # Only the top-level artifacts are declared; Maven resolves the rest (runtime,
61
+ # wasm, asm, ...) transitively. lib/rbs_jars.rb require_jars the full resolved
62
+ # set at load time.
63
+ spec.add_dependency "jar-dependencies", ">= 0.1.7"
64
+ spec.requirements << "jar com.dylibso.chicory:compiler, 1.7.5"
65
+ spec.requirements << "jar com.dylibso.chicory:wasi, 1.7.5"
66
+ else
67
+ spec.extensions = %w{ext/rbs_extension/extconf.rb}
42
68
  end
43
69
 
44
70
  spec.bindir = "exe"
45
71
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
46
72
  spec.require_paths = ["lib"]
47
- spec.required_ruby_version = ">= 3.1"
73
+ spec.required_ruby_version = ">= 3.3"
48
74
  spec.add_dependency "logger"
75
+ spec.add_dependency "prism", ">= 1.6.0"
76
+ spec.add_dependency "tsort"
49
77
  end
data/schema/function.json CHANGED
@@ -78,10 +78,21 @@
78
78
  }
79
79
  ]
80
80
  },
81
+ "forwarding": {
82
+ "title": "Forwarding parameter",
83
+ "oneOf": [
84
+ {
85
+ "type": "object"
86
+ },
87
+ {
88
+ "type": "null"
89
+ }
90
+ ]
91
+ },
81
92
  "return_type": {
82
93
  "title": "Return type of a function",
83
94
  "$ref": "types.json"
84
95
  }
85
96
  },
86
- "required": ["required_positionals", "optional_positionals", "rest_positionals", "trailing_positionals", "required_keywords", "optional_keywords", "rest_keywords", "return_type"]
97
+ "required": ["required_positionals", "optional_positionals", "rest_positionals", "trailing_positionals", "required_keywords", "optional_keywords", "rest_keywords", "forwarding", "return_type"]
87
98
  }
@@ -28,9 +28,25 @@
28
28
  }
29
29
  ]
30
30
  },
31
+ "lower_bound": {
32
+ "oneOf": [
33
+ {
34
+ "$ref": "types.json#/definitions/classInstance"
35
+ },
36
+ {
37
+ "$ref": "types.json#/definitions/classSingleton"
38
+ },
39
+ {
40
+ "$ref": "types.json#/definitions/interface"
41
+ },
42
+ {
43
+ "type": "null"
44
+ }
45
+ ]
46
+ },
31
47
  "location": {
32
48
  "$ref": "location.json"
33
49
  }
34
50
  },
35
- "required": ["name", "variance", "unchecked", "upper_bound", "location"]
51
+ "required": ["name", "variance", "unchecked", "upper_bound", "lower_bound", "location"]
36
52
  }
@@ -146,7 +146,7 @@ module RBS
146
146
  extended_modules: Array[Definition::Ancestor::Instance]?,
147
147
  extended_interfaces: Array[Definition::Ancestor::Instance]?) -> void
148
148
 
149
- def mixin_ancestors0: (AST::Declarations::Class | AST::Declarations::Module | AST::Declarations::Interface,
149
+ def mixin_ancestors0: (AST::Declarations::Class | AST::Declarations::Module | AST::Declarations::Interface | AST::Ruby::Declarations::ClassDecl | AST::Ruby::Declarations::ModuleDecl,
150
150
  TypeName,
151
151
  align_params: Substitution?,
152
152
  included_modules: Array[Definition::Ancestor::Instance]?,
@@ -17,8 +17,8 @@ module RBS
17
17
 
18
18
  def self.translate: (RDoc::Markup::Document) -> String?
19
19
 
20
- def self.each_part: (RDoc::Markup::Document | RDoc::Comment | String) { (RDoc::Markup::Document) -> void } -> void
21
- | (RDoc::Markup::Document | RDoc::Comment | String) -> Enumerator[RDoc::Markup::Document, void]
20
+ def self.each_part: (RDoc::Markup::Document) { (RDoc::Markup::Document) -> void } -> void
21
+ | (RDoc::Markup::Document) -> Enumerator[RDoc::Markup::Document, void]
22
22
  end
23
23
  end
24
24
  end
@@ -8,16 +8,17 @@ module RBS
8
8
 
9
9
  def initialize: (source: RDocSource) -> void
10
10
 
11
- def annotate_file: (Pathname, preserve: bool) -> void
11
+ def annotate_file: (Pathname) -> void
12
+ | %a{deprecated: it preserves the format by default} (Pathname, preserve: bool) -> void
12
13
 
13
- def annotate_decls: (Array[AST::Declarations::t], ?outer: Array[Namespace]) -> void
14
+ def annotate_decls: (Array[AST::Declarations::t], Rewriter, ?outer: Array[Namespace]) -> void
14
15
 
15
16
  interface _PathTester
16
17
  def test_path: (String) -> bool
17
18
  end
18
19
 
19
20
  interface _WithRDocComment
20
- def comment: () -> (RDoc::Markup::Document | RDoc::Comment | String)
21
+ def comment: () -> (RDoc::Comment | String)
21
22
  end
22
23
 
23
24
  def each_part: (Array[Object & _WithRDocComment], tester: _PathTester) { ([RDoc::Markup::Document, Object & _WithRDocComment]) -> void } -> void
@@ -50,15 +51,15 @@ module RBS
50
51
 
51
52
  def resolve_doc_source: (Annotations::Copy?, tester: _PathTester) { () -> String? } -> String?
52
53
 
53
- def annotate_class: (AST::Declarations::Class | AST::Declarations::Module, outer: Array[Namespace]) -> void
54
+ def annotate_class: (AST::Declarations::Class | AST::Declarations::Module, Rewriter, outer: Array[Namespace]) -> void
54
55
 
55
- def annotate_constant: (AST::Declarations::Constant, outer: Array[Namespace]) -> void
56
+ def annotate_constant: (AST::Declarations::Constant, Rewriter, outer: Array[Namespace]) -> void
56
57
 
57
- def annotate_method: (TypeName, AST::Members::MethodDefinition) -> void
58
+ def annotate_method: (TypeName, AST::Members::MethodDefinition, Rewriter) -> void
58
59
 
59
- def annotate_alias: (TypeName, AST::Members::Alias) -> void
60
+ def annotate_alias: (TypeName, AST::Members::Alias, Rewriter) -> void
60
61
 
61
- def annotate_attribute: (TypeName, AST::Members::AttrReader | AST::Members::AttrWriter | AST::Members::AttrAccessor) -> void
62
+ def annotate_attribute: (TypeName, AST::Members::AttrReader | AST::Members::AttrWriter | AST::Members::AttrAccessor, Rewriter) -> void
62
63
 
63
64
  def annotations: (_Annotated) -> Annotations
64
65
 
@@ -70,10 +71,12 @@ module RBS
70
71
  # - If empty string is given as `comment`, it deletes the original comment.
71
72
  # - If `nil` is given as `comment`, it keeps the original comment.
72
73
  #
73
- def replace_comment: (Object & _Commented, String? comment) -> void
74
+ def replace_comment: (_Commented, String?, Rewriter) -> void
74
75
 
75
76
  interface _Commented
76
- def comment: () -> AST::Comment?
77
+ %a{pure} def comment: () -> AST::Comment?
78
+ %a{pure} def location: () -> Location[untyped, untyped]?
79
+ def annotations: () -> Array[AST::Annotation]
77
80
  end
78
81
 
79
82
  def resolve_name: (TypeName, outer: Array[Namespace]) -> TypeName