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
@@ -23,7 +23,7 @@ module RBS
23
23
  @stores.clear()
24
24
 
25
25
  RDoc::RI::Paths.each(with_system_dir, with_site_dir, with_home_dir, with_gems_dir ? :latest : false, *extra_dirs.map(&:to_s)) do |path, type|
26
- store = RDoc::Store.new(path, type)
26
+ store = RDoc::Store.new(RDoc::Options.new, path:, type:)
27
27
  store.load_all
28
28
 
29
29
  @stores << store
@@ -21,7 +21,7 @@ module RBS
21
21
  self.class.hash ^ string.hash
22
22
  end
23
23
 
24
- def to_json(state = _ = nil)
24
+ def to_json(state = nil)
25
25
  { string: string, location: location }.to_json(state)
26
26
  end
27
27
  end
@@ -21,7 +21,7 @@ module RBS
21
21
  self.class.hash ^ string.hash
22
22
  end
23
23
 
24
- def to_json(state = _ = nil)
24
+ def to_json(state = nil)
25
25
  { string: string, location: location }.to_json(state)
26
26
  end
27
27
  end
@@ -74,7 +74,7 @@ module RBS
74
74
  self.class.hash ^ name.hash ^ args.hash
75
75
  end
76
76
 
77
- def to_json(state = _ = nil)
77
+ def to_json(state = nil)
78
78
  {
79
79
  name: name,
80
80
  args: args,
@@ -130,7 +130,7 @@ module RBS
130
130
  self.class.hash ^ name.hash ^ type_params.hash ^ super_class.hash ^ members.hash
131
131
  end
132
132
 
133
- def to_json(state = _ = nil)
133
+ def to_json(state = nil)
134
134
  {
135
135
  declaration: :class,
136
136
  name: name,
@@ -166,7 +166,7 @@ module RBS
166
166
  self.class.hash ^ name.hash ^ args.hash ^ location.hash
167
167
  end
168
168
 
169
- def to_json(state = _ = nil)
169
+ def to_json(state = nil)
170
170
  {
171
171
  name: name,
172
172
  args: args,
@@ -231,7 +231,7 @@ module RBS
231
231
  self.class.hash ^ name.hash ^ type_params.hash ^ self_types.hash ^ members.hash
232
232
  end
233
233
 
234
- def to_json(state = _ = nil)
234
+ def to_json(state = nil)
235
235
  {
236
236
  declaration: :module,
237
237
  name: name,
@@ -288,7 +288,7 @@ module RBS
288
288
  self.class.hash ^ type_params.hash ^ members.hash
289
289
  end
290
290
 
291
- def to_json(state = _ = nil)
291
+ def to_json(state = nil)
292
292
  {
293
293
  declaration: :interface,
294
294
  name: name,
@@ -331,7 +331,7 @@ module RBS
331
331
  self.class.hash ^ name.hash ^ type_params.hash ^ type.hash
332
332
  end
333
333
 
334
- def to_json(state = _ = nil)
334
+ def to_json(state = nil)
335
335
  {
336
336
  declaration: :alias,
337
337
  name: name,
@@ -371,7 +371,7 @@ module RBS
371
371
  self.class.hash ^ name.hash ^ type.hash
372
372
  end
373
373
 
374
- def to_json(state = _ = nil)
374
+ def to_json(state = nil)
375
375
  {
376
376
  declaration: :constant,
377
377
  name: name,
@@ -409,7 +409,7 @@ module RBS
409
409
  self.class.hash ^ name.hash ^ type.hash
410
410
  end
411
411
 
412
- def to_json(state = _ = nil)
412
+ def to_json(state = nil)
413
413
  {
414
414
  declaration: :global,
415
415
  name: name,
@@ -445,7 +445,7 @@ module RBS
445
445
  end
446
446
 
447
447
  class ClassAlias < AliasDecl
448
- def to_json(state = _ = nil)
448
+ def to_json(state = nil)
449
449
  {
450
450
  declaration: :class_alias,
451
451
  new_name: new_name,
@@ -457,7 +457,7 @@ module RBS
457
457
  end
458
458
 
459
459
  class ModuleAlias < AliasDecl
460
- def to_json(state = _ = nil)
460
+ def to_json(state = nil)
461
461
  {
462
462
  declaration: :module_alias,
463
463
  new_name: new_name,
@@ -35,7 +35,7 @@ module RBS
35
35
  update(method_type: self.method_type.sub(subst))
36
36
  end
37
37
 
38
- def to_json(state = _ = nil)
38
+ def to_json(state = nil)
39
39
  {
40
40
  annotations: annotations,
41
41
  method_type: method_type
@@ -103,7 +103,7 @@ module RBS
103
103
  )
104
104
  end
105
105
 
106
- def to_json(state = _ = nil)
106
+ def to_json(state = nil)
107
107
  {
108
108
  member: :method_definition,
109
109
  name: name,
@@ -145,7 +145,7 @@ module RBS
145
145
  class InstanceVariable < Base
146
146
  include Var
147
147
 
148
- def to_json(state = _ = nil)
148
+ def to_json(state = nil)
149
149
  {
150
150
  member: :instance_variable,
151
151
  name: name,
@@ -159,7 +159,7 @@ module RBS
159
159
  class ClassInstanceVariable < Base
160
160
  include Var
161
161
 
162
- def to_json(state = _ = nil)
162
+ def to_json(state = nil)
163
163
  {
164
164
  member: :class_instance_variable,
165
165
  name: name,
@@ -173,7 +173,7 @@ module RBS
173
173
  class ClassVariable < Base
174
174
  include Var
175
175
 
176
- def to_json(state = _ = nil)
176
+ def to_json(state = nil)
177
177
  {
178
178
  member: :class_variable,
179
179
  name: name,
@@ -215,7 +215,7 @@ module RBS
215
215
  class Include < Base
216
216
  include Mixin
217
217
 
218
- def to_json(state = _ = nil)
218
+ def to_json(state = nil)
219
219
  {
220
220
  member: :include,
221
221
  name: name,
@@ -230,7 +230,7 @@ module RBS
230
230
  class Extend < Base
231
231
  include Mixin
232
232
 
233
- def to_json(state = _ = nil)
233
+ def to_json(state = nil)
234
234
  {
235
235
  member: :extend,
236
236
  name: name,
@@ -245,7 +245,7 @@ module RBS
245
245
  class Prepend < Base
246
246
  include Mixin
247
247
 
248
- def to_json(state = _ = nil)
248
+ def to_json(state = nil)
249
249
  {
250
250
  member: :prepend,
251
251
  name: name,
@@ -311,7 +311,7 @@ module RBS
311
311
  class AttrReader < Base
312
312
  include Attribute
313
313
 
314
- def to_json(state = _ = nil)
314
+ def to_json(state = nil)
315
315
  {
316
316
  member: :attr_reader,
317
317
  name: name,
@@ -329,7 +329,7 @@ module RBS
329
329
  class AttrAccessor < Base
330
330
  include Attribute
331
331
 
332
- def to_json(state = _ = nil)
332
+ def to_json(state = nil)
333
333
  {
334
334
  member: :attr_accessor,
335
335
  name: name,
@@ -347,7 +347,7 @@ module RBS
347
347
  class AttrWriter < Base
348
348
  include Attribute
349
349
 
350
- def to_json(state = _ = nil)
350
+ def to_json(state = nil)
351
351
  {
352
352
  member: :attr_writer,
353
353
  name: name,
@@ -383,7 +383,7 @@ module RBS
383
383
  class Public < Base
384
384
  include LocationOnly
385
385
 
386
- def to_json(state = _ = nil)
386
+ def to_json(state = nil)
387
387
  { member: :public, location: location }.to_json(state)
388
388
  end
389
389
  end
@@ -391,7 +391,7 @@ module RBS
391
391
  class Private < Base
392
392
  include LocationOnly
393
393
 
394
- def to_json(state = _ = nil)
394
+ def to_json(state = nil)
395
395
  { member: :private, location: location }.to_json(state)
396
396
  end
397
397
  end
@@ -426,7 +426,7 @@ module RBS
426
426
  new_name.hash ^ old_name.hash ^ kind.hash
427
427
  end
428
428
 
429
- def to_json(state = _ = nil)
429
+ def to_json(state = nil)
430
430
  {
431
431
  member: :alias,
432
432
  new_name: new_name,
@@ -0,0 +1,451 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ module Ruby
6
+ module Annotations
7
+ class Base
8
+ attr_reader :location, :prefix_location
9
+
10
+ def initialize(location, prefix_location)
11
+ @location = location
12
+ @prefix_location = prefix_location
13
+ end
14
+
15
+ def buffer
16
+ location.buffer
17
+ end
18
+ end
19
+
20
+ class NodeTypeAssertion < Base
21
+ attr_reader :type
22
+
23
+ def initialize(location:, prefix_location:, type:)
24
+ super(location, prefix_location)
25
+ @type = type
26
+ end
27
+
28
+ def map_type_name
29
+ self.class.new(
30
+ location:, prefix_location:,
31
+ type: type.map_type_name { yield _1 }
32
+ ) #: self
33
+ end
34
+
35
+ def type_fingerprint
36
+ [
37
+ "annots/node_type_assertion",
38
+ type.to_s
39
+ ]
40
+ end
41
+ end
42
+
43
+ class AliasAnnotation < Base
44
+ attr_reader :keyword_location, :type_name_location, :type_name
45
+
46
+ def initialize(location:, prefix_location:, keyword_location:, type_name:, type_name_location:)
47
+ super(location, prefix_location)
48
+ @keyword_location = keyword_location
49
+ @type_name = type_name
50
+ @type_name_location = type_name_location
51
+ end
52
+
53
+ def map_type_name
54
+ self.class.new(
55
+ location:,
56
+ prefix_location:,
57
+ keyword_location:,
58
+ type_name: type_name ? yield(type_name) : nil,
59
+ type_name_location:
60
+ ) #: self
61
+ end
62
+ end
63
+
64
+ class ClassAliasAnnotation < AliasAnnotation
65
+ def type_fingerprint
66
+ [
67
+ "annots/class-alias",
68
+ type_name&.to_s
69
+ ]
70
+ end
71
+ end
72
+
73
+ class ModuleAliasAnnotation < AliasAnnotation
74
+ def type_fingerprint
75
+ [
76
+ "annots/module-alias",
77
+ type_name&.to_s
78
+ ]
79
+ end
80
+ end
81
+
82
+ class ColonMethodTypeAnnotation < Base
83
+ attr_reader :annotations, :method_type
84
+
85
+ def initialize(location:, prefix_location:, annotations:, method_type:)
86
+ super(location, prefix_location)
87
+ @annotations = annotations
88
+ @method_type = method_type
89
+ end
90
+
91
+ def map_type_name
92
+ self.class.new(
93
+ location:,
94
+ prefix_location:,
95
+ annotations: annotations,
96
+ method_type: method_type.map_type {|type| type.map_type_name { yield _1 }}
97
+ ) #: self
98
+ end
99
+
100
+ def type_fingerprint
101
+ [
102
+ "annots/colon_method_type",
103
+ annotations.map(&:to_s),
104
+ method_type.to_s
105
+ ]
106
+ end
107
+ end
108
+
109
+ class MethodTypesAnnotation < Base
110
+ Overload = AST::Members::MethodDefinition::Overload
111
+
112
+ attr_reader :overloads, :vertical_bar_locations, :dot3_location
113
+
114
+ def initialize(location:, prefix_location:, overloads:, vertical_bar_locations:, dot3_location:)
115
+ super(location, prefix_location)
116
+ @overloads = overloads
117
+ @vertical_bar_locations = vertical_bar_locations
118
+ @dot3_location = dot3_location
119
+ end
120
+
121
+ def map_type_name(&block)
122
+ ovs = overloads.map do |overload|
123
+ Overload.new(
124
+ method_type: overload.method_type.map_type {|type| type.map_type_name { yield _1 } },
125
+ annotations: overload.annotations
126
+ )
127
+ end
128
+
129
+ self.class.new(location:, prefix_location:, overloads: ovs, vertical_bar_locations:, dot3_location:) #: self
130
+ end
131
+
132
+ def type_fingerprint
133
+ [
134
+ "annots/method_types",
135
+ overloads.map { |o| [o.annotations.map(&:to_s), o.method_type.to_s] },
136
+ overloading: dot3_location ? true : false
137
+ ]
138
+ end
139
+ end
140
+
141
+ class SkipAnnotation < Base
142
+ attr_reader :skip_location, :comment_location
143
+
144
+ def initialize(location:, prefix_location:, skip_location:, comment_location:)
145
+ super(location, prefix_location)
146
+ @skip_location = skip_location
147
+ @comment_location = comment_location
148
+ end
149
+
150
+ def type_fingerprint
151
+ "annots/skip"
152
+ end
153
+ end
154
+
155
+ class ReturnTypeAnnotation < Base
156
+ attr_reader :return_location
157
+
158
+ attr_reader :colon_location
159
+
160
+ attr_reader :return_type
161
+
162
+ attr_reader :comment_location
163
+
164
+ def initialize(location:, prefix_location:, return_location:, colon_location:, return_type:, comment_location:)
165
+ super(location, prefix_location)
166
+ @return_location = return_location
167
+ @colon_location = colon_location
168
+ @return_type = return_type
169
+ @comment_location = comment_location
170
+ end
171
+
172
+ def map_type_name(&block)
173
+ self.class.new(
174
+ location:,
175
+ prefix_location:,
176
+ return_location: return_location,
177
+ colon_location: colon_location,
178
+ return_type: return_type.map_type_name { yield _1 },
179
+ comment_location: comment_location
180
+ ) #: self
181
+ end
182
+
183
+ def type_fingerprint
184
+ [
185
+ "annots/return_type",
186
+ return_type.to_s,
187
+ comment_location&.source
188
+ ]
189
+ end
190
+ end
191
+
192
+ class TypeApplicationAnnotation < Base
193
+ attr_reader :type_args, :close_bracket_location, :comma_locations
194
+
195
+ def initialize(location:, prefix_location:, type_args:, close_bracket_location:, comma_locations:)
196
+ super(location, prefix_location)
197
+ @type_args = type_args
198
+ @close_bracket_location = close_bracket_location
199
+ @comma_locations = comma_locations
200
+ end
201
+
202
+ def map_type_name(&block)
203
+ mapped_type_args = type_args.map { |type| type.map_type_name { yield _1 } }
204
+
205
+ self.class.new(
206
+ location:,
207
+ prefix_location:,
208
+ type_args: mapped_type_args,
209
+ close_bracket_location:,
210
+ comma_locations:
211
+ ) #: self
212
+ end
213
+
214
+ def type_fingerprint
215
+ [
216
+ "annots/type_application",
217
+ type_args.map(&:to_s)
218
+ ]
219
+ end
220
+ end
221
+
222
+ class InstanceVariableAnnotation < Base
223
+ attr_reader :ivar_name, :ivar_name_location, :colon_location, :type, :comment_location
224
+
225
+ def initialize(location:, prefix_location:, ivar_name:, ivar_name_location:, colon_location:, type:, comment_location:)
226
+ super(location, prefix_location)
227
+ @ivar_name = ivar_name
228
+ @ivar_name_location = ivar_name_location
229
+ @colon_location = colon_location
230
+ @type = type
231
+ @comment_location = comment_location
232
+ end
233
+
234
+ def map_type_name(&block)
235
+ self.class.new(
236
+ location:,
237
+ prefix_location:,
238
+ ivar_name:,
239
+ ivar_name_location:,
240
+ colon_location:,
241
+ type: type.map_type_name { yield _1 },
242
+ comment_location:
243
+ ) #: self
244
+ end
245
+
246
+ def type_fingerprint
247
+ [
248
+ "annots/instance_variable",
249
+ ivar_name.to_s,
250
+ type.to_s,
251
+ comment_location&.source
252
+ ]
253
+ end
254
+ end
255
+
256
+ class ParamTypeAnnotation < Base
257
+ attr_reader :name_location, :colon_location, :param_type, :comment_location
258
+
259
+ def initialize(location:, prefix_location:, name_location:, colon_location:, param_type:, comment_location:)
260
+ super(location, prefix_location)
261
+ @name_location = name_location
262
+ @colon_location = colon_location
263
+ @param_type = param_type
264
+ @comment_location = comment_location
265
+ end
266
+
267
+ def map_type_name(&block)
268
+ self.class.new(
269
+ location:,
270
+ prefix_location:,
271
+ name_location: name_location,
272
+ colon_location: colon_location,
273
+ param_type: param_type.map_type_name { yield _1 },
274
+ comment_location: comment_location
275
+ ) #: self
276
+ end
277
+
278
+ def type_fingerprint
279
+ [
280
+ "annots/param_type",
281
+ name_location.source,
282
+ param_type.to_s,
283
+ comment_location&.source
284
+ ]
285
+ end
286
+ end
287
+
288
+ class SplatParamTypeAnnotation < Base
289
+ attr_reader :star_location, :name_location, :colon_location, :param_type, :comment_location
290
+
291
+ def initialize(location:, prefix_location:, star_location:, name_location:, colon_location:, param_type:, comment_location:)
292
+ super(location, prefix_location)
293
+ @star_location = star_location
294
+ @name_location = name_location
295
+ @colon_location = colon_location
296
+ @param_type = param_type
297
+ @comment_location = comment_location
298
+ end
299
+
300
+ def map_type_name(&block)
301
+ self.class.new(
302
+ location:,
303
+ prefix_location:,
304
+ star_location: star_location,
305
+ name_location: name_location,
306
+ colon_location: colon_location,
307
+ param_type: param_type.map_type_name { yield _1 },
308
+ comment_location: comment_location
309
+ ) #: self
310
+ end
311
+
312
+ def type_fingerprint
313
+ [
314
+ "annots/splat_param_type",
315
+ name_location&.source,
316
+ param_type.to_s,
317
+ comment_location&.source
318
+ ]
319
+ end
320
+ end
321
+
322
+ class DoubleSplatParamTypeAnnotation < Base
323
+ attr_reader :star2_location, :name_location, :colon_location, :param_type, :comment_location
324
+
325
+ def initialize(location:, prefix_location:, star2_location:, name_location:, colon_location:, param_type:, comment_location:)
326
+ super(location, prefix_location)
327
+ @star2_location = star2_location
328
+ @name_location = name_location
329
+ @colon_location = colon_location
330
+ @param_type = param_type
331
+ @comment_location = comment_location
332
+ end
333
+
334
+ def map_type_name(&block)
335
+ self.class.new(
336
+ location:,
337
+ prefix_location:,
338
+ star2_location: star2_location,
339
+ name_location: name_location,
340
+ colon_location: colon_location,
341
+ param_type: param_type.map_type_name { yield _1 },
342
+ comment_location: comment_location
343
+ ) #: self
344
+ end
345
+
346
+ def type_fingerprint
347
+ [
348
+ "annots/double_splat_param_type",
349
+ name_location&.source,
350
+ param_type.to_s,
351
+ comment_location&.source
352
+ ]
353
+ end
354
+ end
355
+
356
+ class ModuleSelfAnnotation < Base
357
+ attr_reader :keyword_location, :colon_location, :name, :args, :open_bracket_location, :close_bracket_location, :args_comma_locations, :comment_location
358
+
359
+ def initialize(location:, prefix_location:, keyword_location:, colon_location:, name:, args:, open_bracket_location:, close_bracket_location:, args_comma_locations:, comment_location:)
360
+ super(location, prefix_location)
361
+ @keyword_location = keyword_location
362
+ @colon_location = colon_location
363
+ @name = name
364
+ @args = args
365
+ @open_bracket_location = open_bracket_location
366
+ @close_bracket_location = close_bracket_location
367
+ @args_comma_locations = args_comma_locations
368
+ @comment_location = comment_location
369
+ end
370
+
371
+ def map_type_name
372
+ mapped_args = args.map { |type| type.map_type_name { yield _1 } }
373
+
374
+ self.class.new(
375
+ location:,
376
+ prefix_location:,
377
+ keyword_location:,
378
+ colon_location:,
379
+ name: yield(name),
380
+ args: mapped_args,
381
+ open_bracket_location:,
382
+ close_bracket_location:,
383
+ args_comma_locations:,
384
+ comment_location:
385
+ ) #: self
386
+ end
387
+
388
+ def type_fingerprint
389
+ [
390
+ "annots/module_self",
391
+ name.to_s,
392
+ args.map(&:to_s),
393
+ comment_location&.source
394
+ ]
395
+ end
396
+ end
397
+
398
+ class BlockParamTypeAnnotation < Base
399
+ attr_reader :ampersand_location, :name_location, :colon_location, :question_location, :type_location, :type, :comment_location
400
+
401
+ def initialize(location:, prefix_location:, ampersand_location:, name_location:, colon_location:, question_location:, type_location:, type:, comment_location:)
402
+ super(location, prefix_location)
403
+ @ampersand_location = ampersand_location
404
+ @name_location = name_location
405
+ @colon_location = colon_location
406
+ @question_location = question_location
407
+ @type_location = type_location
408
+ @type = type
409
+ @comment_location = comment_location
410
+ end
411
+
412
+ def map_type_name(&block)
413
+ self.class.new(
414
+ location:,
415
+ prefix_location:,
416
+ ampersand_location: ampersand_location,
417
+ name_location: name_location,
418
+ colon_location: colon_location,
419
+ question_location: question_location,
420
+ type_location: type_location,
421
+ type: type.map_type_name { yield _1 },
422
+ comment_location: comment_location
423
+ ) #: self
424
+ end
425
+
426
+ def name
427
+ name_location&.source&.to_sym
428
+ end
429
+
430
+ def optional?
431
+ question_location ? true : false
432
+ end
433
+
434
+ def required?
435
+ !optional?
436
+ end
437
+
438
+ def type_fingerprint
439
+ [
440
+ "annots/block_param_type",
441
+ name_location&.source,
442
+ type.to_s,
443
+ optional? ? "optional" : "required",
444
+ comment_location&.source
445
+ ]
446
+ end
447
+ end
448
+ end
449
+ end
450
+ end
451
+ end