rbs 3.9.5 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +74 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +14 -14
  5. data/.github/workflows/bundle-update.yml +60 -0
  6. data/.github/workflows/c-check.yml +58 -0
  7. data/.github/workflows/comments.yml +5 -3
  8. data/.github/workflows/dependabot.yml +2 -2
  9. data/.github/workflows/ruby.yml +40 -32
  10. data/.github/workflows/rust.yml +95 -0
  11. data/.github/workflows/typecheck.yml +2 -2
  12. data/.github/workflows/windows.yml +3 -3
  13. data/.gitignore +4 -0
  14. data/.rubocop.yml +2 -2
  15. data/.vscode/extensions.json +5 -0
  16. data/.vscode/settings.json +19 -0
  17. data/CHANGELOG.md +284 -0
  18. data/README.md +38 -1
  19. data/Rakefile +144 -29
  20. data/Steepfile +2 -0
  21. data/config.yml +634 -62
  22. data/core/array.rbs +307 -227
  23. data/core/basic_object.rbs +9 -8
  24. data/core/binding.rbs +0 -2
  25. data/core/builtin.rbs +2 -2
  26. data/core/class.rbs +6 -5
  27. data/core/comparable.rbs +55 -34
  28. data/core/complex.rbs +104 -78
  29. data/core/dir.rbs +61 -49
  30. data/core/encoding.rbs +12 -15
  31. data/core/enumerable.rbs +188 -87
  32. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  33. data/core/enumerator.rbs +65 -2
  34. data/core/errno.rbs +11 -2
  35. data/core/errors.rbs +58 -29
  36. data/core/exception.rbs +13 -13
  37. data/core/fiber.rbs +74 -54
  38. data/core/file.rbs +280 -177
  39. data/core/file_test.rbs +3 -3
  40. data/core/float.rbs +257 -92
  41. data/core/gc.rbs +425 -281
  42. data/core/hash.rbs +1045 -739
  43. data/core/integer.rbs +135 -137
  44. data/core/io/buffer.rbs +53 -42
  45. data/core/io/wait.rbs +13 -35
  46. data/core/io.rbs +196 -148
  47. data/core/kernel.rbs +216 -155
  48. data/core/marshal.rbs +4 -4
  49. data/core/match_data.rbs +15 -13
  50. data/core/math.rbs +107 -66
  51. data/core/method.rbs +69 -33
  52. data/core/module.rbs +244 -106
  53. data/core/nil_class.rbs +7 -6
  54. data/core/numeric.rbs +74 -63
  55. data/core/object.rbs +9 -11
  56. data/core/object_space.rbs +30 -23
  57. data/core/pathname.rbs +1322 -0
  58. data/core/proc.rbs +95 -58
  59. data/core/process.rbs +222 -202
  60. data/core/ractor.rbs +371 -515
  61. data/core/random.rbs +21 -3
  62. data/core/range.rbs +159 -57
  63. data/core/rational.rbs +60 -89
  64. data/core/rbs/unnamed/argf.rbs +60 -53
  65. data/core/rbs/unnamed/env_class.rbs +19 -14
  66. data/core/rbs/unnamed/main_class.rbs +123 -0
  67. data/core/rbs/unnamed/random.rbs +11 -118
  68. data/core/regexp.rbs +258 -214
  69. data/core/ruby.rbs +53 -0
  70. data/core/ruby_vm.rbs +38 -34
  71. data/core/rubygems/config_file.rbs +5 -5
  72. data/core/rubygems/errors.rbs +4 -71
  73. data/core/rubygems/requirement.rbs +5 -5
  74. data/core/rubygems/rubygems.rbs +16 -82
  75. data/core/rubygems/version.rbs +2 -3
  76. data/core/set.rbs +490 -360
  77. data/core/signal.rbs +26 -16
  78. data/core/string.rbs +3303 -1365
  79. data/core/struct.rbs +27 -26
  80. data/core/symbol.rbs +41 -34
  81. data/core/thread.rbs +135 -74
  82. data/core/time.rbs +81 -50
  83. data/core/trace_point.rbs +41 -35
  84. data/core/true_class.rbs +2 -2
  85. data/core/unbound_method.rbs +24 -16
  86. data/core/warning.rbs +7 -7
  87. data/docs/aliases.md +79 -0
  88. data/docs/collection.md +3 -3
  89. data/docs/config.md +171 -0
  90. data/docs/encoding.md +56 -0
  91. data/docs/gem.md +0 -1
  92. data/docs/inline.md +576 -0
  93. data/docs/sigs.md +3 -3
  94. data/docs/syntax.md +46 -16
  95. data/docs/type_fingerprint.md +21 -0
  96. data/exe/rbs +1 -1
  97. data/ext/rbs_extension/ast_translation.c +1513 -0
  98. data/ext/rbs_extension/ast_translation.h +37 -0
  99. data/ext/rbs_extension/class_constants.c +185 -0
  100. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +22 -1
  101. data/ext/rbs_extension/compat.h +10 -0
  102. data/ext/rbs_extension/extconf.rb +25 -1
  103. data/ext/rbs_extension/legacy_location.c +294 -0
  104. data/ext/rbs_extension/legacy_location.h +82 -0
  105. data/ext/rbs_extension/main.c +468 -24
  106. data/ext/rbs_extension/rbs_extension.h +6 -21
  107. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  108. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  109. data/include/rbs/ast.h +1022 -0
  110. data/include/rbs/defines.h +86 -0
  111. data/include/rbs/lexer.h +206 -0
  112. data/include/rbs/location.h +40 -0
  113. data/include/rbs/parser.h +153 -0
  114. data/include/rbs/string.h +47 -0
  115. data/include/rbs/util/rbs_allocator.h +59 -0
  116. data/include/rbs/util/rbs_assert.h +20 -0
  117. data/include/rbs/util/rbs_buffer.h +83 -0
  118. data/include/rbs/util/rbs_constant_pool.h +6 -70
  119. data/include/rbs/util/rbs_encoding.h +282 -0
  120. data/include/rbs/util/rbs_unescape.h +24 -0
  121. data/include/rbs.h +9 -2
  122. data/lib/rbs/annotate/formatter.rb +3 -13
  123. data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
  124. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  125. data/lib/rbs/ast/annotation.rb +1 -1
  126. data/lib/rbs/ast/comment.rb +1 -1
  127. data/lib/rbs/ast/declarations.rb +10 -10
  128. data/lib/rbs/ast/members.rb +14 -14
  129. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  130. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  131. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  132. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  133. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  134. data/lib/rbs/ast/ruby/members.rb +723 -0
  135. data/lib/rbs/ast/type_param.rb +24 -4
  136. data/lib/rbs/buffer.rb +105 -20
  137. data/lib/rbs/cli/diff.rb +16 -15
  138. data/lib/rbs/cli/validate.rb +63 -126
  139. data/lib/rbs/cli.rb +56 -24
  140. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  141. data/lib/rbs/collection/sources/git.rb +1 -0
  142. data/lib/rbs/collection.rb +0 -1
  143. data/lib/rbs/definition.rb +6 -1
  144. data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
  145. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  146. data/lib/rbs/definition_builder.rb +177 -20
  147. data/lib/rbs/diff.rb +7 -1
  148. data/lib/rbs/environment/class_entry.rb +69 -0
  149. data/lib/rbs/environment/module_entry.rb +66 -0
  150. data/lib/rbs/environment.rb +402 -214
  151. data/lib/rbs/environment_loader.rb +2 -8
  152. data/lib/rbs/errors.rb +31 -21
  153. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  154. data/lib/rbs/inline_parser.rb +542 -0
  155. data/lib/rbs/location_aux.rb +36 -4
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +0 -7
  159. data/lib/rbs/parser_aux.rb +35 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -2
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  166. data/lib/rbs/source.rb +99 -0
  167. data/lib/rbs/subtractor.rb +7 -4
  168. data/lib/rbs/test/type_check.rb +19 -2
  169. data/lib/rbs/type_name.rb +1 -8
  170. data/lib/rbs/types.rb +91 -79
  171. data/lib/rbs/unit_test/convertibles.rb +1 -0
  172. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  173. data/lib/rbs/validator.rb +2 -2
  174. data/lib/rbs/version.rb +1 -1
  175. data/lib/rbs.rb +13 -2
  176. data/lib/rdoc/discover.rb +1 -1
  177. data/lib/rdoc_plugin/parser.rb +3 -3
  178. data/rbs.gemspec +4 -2
  179. data/rust/.gitignore +1 -0
  180. data/rust/Cargo.lock +378 -0
  181. data/rust/Cargo.toml +7 -0
  182. data/rust/ruby-rbs/Cargo.toml +22 -0
  183. data/rust/ruby-rbs/build.rs +764 -0
  184. data/rust/ruby-rbs/examples/locations.rs +60 -0
  185. data/rust/ruby-rbs/src/lib.rs +1 -0
  186. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  187. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  188. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  189. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  190. data/rust/ruby-rbs-sys/build.rs +204 -0
  191. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  192. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  193. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  194. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  195. data/schema/typeParam.json +17 -1
  196. data/sig/ancestor_builder.rbs +1 -1
  197. data/sig/annotate/formatter.rbs +2 -2
  198. data/sig/annotate/rdoc_annotater.rbs +1 -1
  199. data/sig/ast/ruby/annotations.rbs +421 -0
  200. data/sig/ast/ruby/comment_block.rbs +127 -0
  201. data/sig/ast/ruby/declarations.rbs +158 -0
  202. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  203. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  204. data/sig/ast/ruby/members.rbs +178 -0
  205. data/sig/buffer.rbs +63 -5
  206. data/sig/cli/diff.rbs +5 -11
  207. data/sig/cli/validate.rbs +12 -8
  208. data/sig/cli.rbs +18 -18
  209. data/sig/definition.rbs +6 -0
  210. data/sig/definition_builder.rbs +3 -1
  211. data/sig/environment/class_entry.rbs +50 -0
  212. data/sig/environment/module_entry.rbs +50 -0
  213. data/sig/environment.rbs +94 -87
  214. data/sig/errors.rbs +26 -20
  215. data/sig/inline_parser/comment_association.rbs +71 -0
  216. data/sig/inline_parser.rbs +124 -0
  217. data/sig/location.rbs +32 -7
  218. data/sig/locator.rbs +0 -2
  219. data/sig/manifest.yaml +0 -1
  220. data/sig/method_builder.rbs +9 -4
  221. data/sig/namespace.rbs +0 -5
  222. data/sig/parser.rbs +67 -13
  223. data/sig/prototype/helpers.rbs +2 -0
  224. data/sig/resolver/type_name_resolver.rbs +35 -7
  225. data/sig/source.rbs +48 -0
  226. data/sig/type_param.rbs +13 -8
  227. data/sig/typename.rbs +0 -5
  228. data/sig/types.rbs +10 -8
  229. data/sig/unit_test/spy.rbs +0 -8
  230. data/sig/unit_test/type_assertions.rbs +11 -0
  231. data/src/ast.c +1604 -0
  232. data/src/lexer.c +3194 -0
  233. data/src/lexer.re +154 -0
  234. data/src/lexstate.c +212 -0
  235. data/src/location.c +31 -0
  236. data/src/parser.c +4205 -0
  237. data/src/string.c +41 -0
  238. data/src/util/rbs_allocator.c +165 -0
  239. data/src/util/rbs_assert.c +19 -0
  240. data/src/util/rbs_buffer.c +54 -0
  241. data/src/util/rbs_constant_pool.c +18 -92
  242. data/src/util/rbs_encoding.c +21308 -0
  243. data/src/util/rbs_unescape.c +167 -0
  244. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  245. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  246. data/stdlib/cgi/0/core.rbs +9 -393
  247. data/stdlib/cgi/0/manifest.yaml +1 -0
  248. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  249. data/stdlib/coverage/0/coverage.rbs +7 -4
  250. data/stdlib/date/0/date.rbs +92 -79
  251. data/stdlib/date/0/date_time.rbs +25 -24
  252. data/stdlib/delegate/0/delegator.rbs +10 -7
  253. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  254. data/stdlib/digest/0/digest.rbs +110 -0
  255. data/stdlib/erb/0/erb.rbs +748 -347
  256. data/stdlib/etc/0/etc.rbs +55 -50
  257. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  258. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  259. data/stdlib/io-console/0/io-console.rbs +2 -2
  260. data/stdlib/json/0/json.rbs +226 -179
  261. data/stdlib/monitor/0/monitor.rbs +3 -3
  262. data/stdlib/net-http/0/net-http.rbs +162 -134
  263. data/stdlib/objspace/0/objspace.rbs +17 -34
  264. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  265. data/stdlib/open3/0/open3.rbs +469 -10
  266. data/stdlib/openssl/0/openssl.rbs +475 -357
  267. data/stdlib/optparse/0/optparse.rbs +26 -17
  268. data/stdlib/pathname/0/pathname.rbs +11 -1381
  269. data/stdlib/pp/0/pp.rbs +9 -8
  270. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  271. data/stdlib/pstore/0/pstore.rbs +35 -30
  272. data/stdlib/psych/0/psych.rbs +65 -12
  273. data/stdlib/psych/0/store.rbs +2 -4
  274. data/stdlib/pty/0/pty.rbs +9 -6
  275. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  276. data/stdlib/rdoc/0/code_object.rbs +4 -3
  277. data/stdlib/rdoc/0/comment.rbs +2 -0
  278. data/stdlib/rdoc/0/options.rbs +76 -0
  279. data/stdlib/rdoc/0/parser.rbs +1 -1
  280. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  281. data/stdlib/rdoc/0/store.rbs +2 -2
  282. data/stdlib/resolv/0/resolv.rbs +25 -68
  283. data/stdlib/ripper/0/ripper.rbs +25 -19
  284. data/stdlib/securerandom/0/manifest.yaml +2 -0
  285. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  286. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  287. data/stdlib/singleton/0/singleton.rbs +3 -0
  288. data/stdlib/socket/0/addrinfo.rbs +9 -9
  289. data/stdlib/socket/0/basic_socket.rbs +3 -3
  290. data/stdlib/socket/0/ip_socket.rbs +10 -8
  291. data/stdlib/socket/0/socket.rbs +23 -10
  292. data/stdlib/socket/0/tcp_server.rbs +1 -1
  293. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  294. data/stdlib/socket/0/udp_socket.rbs +1 -1
  295. data/stdlib/socket/0/unix_server.rbs +1 -1
  296. data/stdlib/stringio/0/stringio.rbs +1177 -85
  297. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  298. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  299. data/stdlib/time/0/time.rbs +8 -6
  300. data/stdlib/timeout/0/timeout.rbs +63 -7
  301. data/stdlib/tsort/0/cyclic.rbs +3 -0
  302. data/stdlib/tsort/0/tsort.rbs +7 -6
  303. data/stdlib/uri/0/common.rbs +42 -20
  304. data/stdlib/uri/0/file.rbs +3 -3
  305. data/stdlib/uri/0/generic.rbs +26 -18
  306. data/stdlib/uri/0/http.rbs +2 -2
  307. data/stdlib/uri/0/ldap.rbs +2 -2
  308. data/stdlib/uri/0/mailto.rbs +3 -3
  309. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  310. data/stdlib/zlib/0/deflate.rbs +4 -3
  311. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  312. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  313. data/stdlib/zlib/0/inflate.rbs +1 -1
  314. data/stdlib/zlib/0/need_dict.rbs +1 -1
  315. data/stdlib/zlib/0/zstream.rbs +1 -0
  316. metadata +121 -18
  317. data/ext/rbs_extension/lexer.c +0 -2728
  318. data/ext/rbs_extension/lexer.h +0 -179
  319. data/ext/rbs_extension/lexer.re +0 -147
  320. data/ext/rbs_extension/lexstate.c +0 -175
  321. data/ext/rbs_extension/location.c +0 -325
  322. data/ext/rbs_extension/location.h +0 -85
  323. data/ext/rbs_extension/parser.c +0 -2982
  324. data/ext/rbs_extension/parser.h +0 -18
  325. data/ext/rbs_extension/parserstate.c +0 -411
  326. data/ext/rbs_extension/parserstate.h +0 -163
  327. data/ext/rbs_extension/unescape.c +0 -32
  328. data/include/rbs/ruby_objs.h +0 -72
  329. data/src/constants.c +0 -153
  330. data/src/ruby_objs.c +0 -799
data/lib/rbs/types.rb CHANGED
@@ -61,7 +61,7 @@ module RBS
61
61
  include EmptyEachType
62
62
  include NoTypeName
63
63
 
64
- def to_json(state = _ = nil)
64
+ def to_json(state = nil)
65
65
  klass = to_s.to_sym
66
66
  { class: klass, location: location }.to_json(state)
67
67
  end
@@ -157,7 +157,7 @@ module RBS
157
157
  end
158
158
  end
159
159
 
160
- def to_json(state = _ = nil)
160
+ def to_json(state = nil)
161
161
  { class: :variable, name: name, location: location }.to_json(state)
162
162
  end
163
163
 
@@ -199,58 +199,6 @@ module RBS
199
199
  end
200
200
  end
201
201
 
202
- class ClassSingleton
203
- attr_reader :name
204
- attr_reader :location
205
-
206
- def initialize(name:, location:)
207
- @name = name
208
- @location = location
209
- end
210
-
211
- def ==(other)
212
- other.is_a?(ClassSingleton) && other.name == name
213
- end
214
-
215
- alias eql? ==
216
-
217
- def hash
218
- self.class.hash ^ name.hash
219
- end
220
-
221
- include NoFreeVariables
222
- include NoSubst
223
-
224
- def to_json(state = _ = nil)
225
- { class: :class_singleton, name: name, location: location }.to_json(state)
226
- end
227
-
228
- def to_s(level = 0)
229
- "singleton(#{name})"
230
- end
231
-
232
- include EmptyEachType
233
-
234
- def map_type_name(&)
235
- ClassSingleton.new(
236
- name: yield(name, location, self),
237
- location: location
238
- )
239
- end
240
-
241
- def has_self_type?
242
- false
243
- end
244
-
245
- def has_classish_type?
246
- false
247
- end
248
-
249
- def with_nonreturn_void?
250
- false
251
- end
252
- end
253
-
254
202
  module Application
255
203
  attr_reader :name
256
204
  attr_reader :args
@@ -303,12 +251,74 @@ module RBS
303
251
  # `void` in immediate generics parameter is allowed
304
252
  false
305
253
  else
306
- type.with_nonreturn_void?
254
+ type.with_nonreturn_void? # steep:ignore DeprecatedReference
307
255
  end
308
256
  end
309
257
  end
310
258
  end
311
259
 
260
+ class ClassSingleton
261
+ attr_reader :location
262
+
263
+ include Application
264
+
265
+ def initialize(name:, location:, args: [])
266
+ @name = name
267
+ @location = location
268
+ @args = args
269
+ end
270
+
271
+ def ==(other)
272
+ other.is_a?(ClassSingleton) && other.name == name && other.args == args
273
+ end
274
+
275
+ alias eql? ==
276
+
277
+ def hash
278
+ self.class.hash ^ name.hash ^ args.hash
279
+ end
280
+
281
+ def sub(s)
282
+ return self if s.empty?
283
+
284
+ self.class.new(name: name,
285
+ args: args.map {|ty| ty.sub(s) },
286
+ location: location)
287
+ end
288
+
289
+ def to_json(state = _ = nil)
290
+ { class: :class_singleton, name: name, args: args, location: location }.to_json(state)
291
+ end
292
+
293
+ def to_s(level = 0)
294
+ if args.empty?
295
+ "singleton(#{name})"
296
+ else
297
+ "singleton(#{name})[#{args.join(", ")}]"
298
+ end
299
+ end
300
+
301
+ def map_type_name(&block)
302
+ ClassSingleton.new(
303
+ name: yield(name, location, self),
304
+ args: args.map {|type| type.map_type_name(&block) },
305
+ location: location
306
+ )
307
+ end
308
+
309
+ def map_type(&block)
310
+ if block
311
+ ClassSingleton.new(
312
+ name: name,
313
+ args: args.map {|type| yield type },
314
+ location: location
315
+ )
316
+ else
317
+ enum_for :map_type
318
+ end
319
+ end
320
+ end
321
+
312
322
  class Interface
313
323
  attr_reader :location
314
324
 
@@ -320,7 +330,7 @@ module RBS
320
330
  @location = location
321
331
  end
322
332
 
323
- def to_json(state = _ = nil)
333
+ def to_json(state = nil)
324
334
  { class: :interface, name: name, args: args, location: location }.to_json(state)
325
335
  end
326
336
 
@@ -364,7 +374,7 @@ module RBS
364
374
  @location = location
365
375
  end
366
376
 
367
- def to_json(state = _ = nil)
377
+ def to_json(state = nil)
368
378
  { class: :class_instance, name: name, args: args, location: location }.to_json(state)
369
379
  end
370
380
 
@@ -408,7 +418,7 @@ module RBS
408
418
  @location = location
409
419
  end
410
420
 
411
- def to_json(state = _ = nil)
421
+ def to_json(state = nil)
412
422
  { class: :alias, name: name, args: args, location: location }.to_json(state)
413
423
  end
414
424
 
@@ -466,7 +476,7 @@ module RBS
466
476
  end
467
477
  end
468
478
 
469
- def to_json(state = _ = nil)
479
+ def to_json(state = nil)
470
480
  { class: :tuple, types: types, location: location }.to_json(state)
471
481
  end
472
482
 
@@ -520,7 +530,7 @@ module RBS
520
530
  end
521
531
 
522
532
  def with_nonreturn_void?
523
- each_type.any? {|type| type.with_nonreturn_void? }
533
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
524
534
  end
525
535
  end
526
536
 
@@ -573,7 +583,7 @@ module RBS
573
583
  end
574
584
  end
575
585
 
576
- def to_json(state = _ = nil)
586
+ def to_json(state = nil)
577
587
  { class: :record, fields: fields, optional_fields: optional_fields, location: location }.to_json(state)
578
588
  end
579
589
 
@@ -638,7 +648,7 @@ module RBS
638
648
  end
639
649
 
640
650
  def with_nonreturn_void?
641
- each_type.any? {|type| type.with_nonreturn_void? }
651
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
642
652
  end
643
653
  end
644
654
 
@@ -665,7 +675,7 @@ module RBS
665
675
  type.free_variables(set)
666
676
  end
667
677
 
668
- def to_json(state = _ = nil)
678
+ def to_json(state = nil)
669
679
  { class: :optional, type: type, location: location }.to_json(state)
670
680
  end
671
681
 
@@ -724,7 +734,7 @@ module RBS
724
734
  end
725
735
 
726
736
  def with_nonreturn_void?
727
- each_type.any? {|type| type.with_nonreturn_void? }
737
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
728
738
  end
729
739
  end
730
740
 
@@ -755,7 +765,7 @@ module RBS
755
765
  end
756
766
  end
757
767
 
758
- def to_json(state = _ = nil)
768
+ def to_json(state = nil)
759
769
  { class: :union, types: types, location: location }.to_json(state)
760
770
  end
761
771
 
@@ -815,7 +825,7 @@ module RBS
815
825
  end
816
826
 
817
827
  def with_nonreturn_void?
818
- each_type.any? {|type| type.with_nonreturn_void? }
828
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
819
829
  end
820
830
  end
821
831
 
@@ -846,7 +856,7 @@ module RBS
846
856
  end
847
857
  end
848
858
 
849
- def to_json(state = _ = nil)
859
+ def to_json(state = nil)
850
860
  { class: :intersection, types: types, location: location }.to_json(state)
851
861
  end
852
862
 
@@ -898,7 +908,7 @@ module RBS
898
908
  end
899
909
 
900
910
  def with_nonreturn_void?
901
- each_type.any? {|type| type.with_nonreturn_void? }
911
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
902
912
  end
903
913
  end
904
914
 
@@ -932,7 +942,7 @@ module RBS
932
942
  end
933
943
  end
934
944
 
935
- def to_json(state = _ = nil)
945
+ def to_json(state = nil)
936
946
  { type: type, name: name }.to_json(state)
937
947
  end
938
948
 
@@ -1091,7 +1101,7 @@ module RBS
1091
1101
  end
1092
1102
  end
1093
1103
 
1094
- def to_json(state = _ = nil)
1104
+ def to_json(state = nil)
1095
1105
  {
1096
1106
  required_positionals: required_positionals,
1097
1107
  optional_positionals: optional_positionals,
@@ -1226,13 +1236,13 @@ module RBS
1226
1236
  end
1227
1237
 
1228
1238
  def with_nonreturn_void?
1229
- if each_param.any? {|param| param.type.with_nonreturn_void? }
1239
+ if each_param.any? {|param| param.type.with_nonreturn_void? } # steep:ignore DeprecatedReference
1230
1240
  true
1231
1241
  else
1232
1242
  if return_type.is_a?(Bases::Void)
1233
1243
  false
1234
1244
  else
1235
- return_type.with_nonreturn_void?
1245
+ return_type.with_nonreturn_void? # steep:ignore DeprecatedReference
1236
1246
  end
1237
1247
  end
1238
1248
  end
@@ -1279,7 +1289,7 @@ module RBS
1279
1289
  end
1280
1290
  end
1281
1291
 
1282
- def to_json(state = _ = nil)
1292
+ def to_json(state = nil)
1283
1293
  {
1284
1294
  return_type: return_type
1285
1295
  }.to_json(state)
@@ -1339,8 +1349,10 @@ module RBS
1339
1349
  attr_reader :type
1340
1350
  attr_reader :required
1341
1351
  attr_reader :self_type
1352
+ attr_reader :location
1342
1353
 
1343
- def initialize(type:, required:, self_type: nil)
1354
+ def initialize(location: nil, type:, required:, self_type: nil)
1355
+ @location = location
1344
1356
  @type = type
1345
1357
  @required = required ? true : false
1346
1358
  @self_type = self_type
@@ -1353,7 +1365,7 @@ module RBS
1353
1365
  other.self_type == self_type
1354
1366
  end
1355
1367
 
1356
- def to_json(state = _ = nil)
1368
+ def to_json(state = nil)
1357
1369
  {
1358
1370
  type: type,
1359
1371
  required: required,
@@ -1422,7 +1434,7 @@ module RBS
1422
1434
  set
1423
1435
  end
1424
1436
 
1425
- def to_json(state = _ = nil)
1437
+ def to_json(state = nil)
1426
1438
  {
1427
1439
  class: :proc,
1428
1440
  type: type,
@@ -1503,11 +1515,11 @@ module RBS
1503
1515
  end
1504
1516
 
1505
1517
  def with_nonreturn_void?
1506
- if type.with_nonreturn_void? || self_type&.with_nonreturn_void?
1518
+ if type.with_nonreturn_void? || self_type&.with_nonreturn_void? # steep:ignore DeprecatedReference
1507
1519
  true
1508
1520
  else
1509
1521
  if block = block()
1510
- block.type.with_nonreturn_void? || block.self_type&.with_nonreturn_void? || false
1522
+ block.type.with_nonreturn_void? || block.self_type&.with_nonreturn_void? || false # steep:ignore DeprecatedReference
1511
1523
  else
1512
1524
  false
1513
1525
  end
@@ -1539,7 +1551,7 @@ module RBS
1539
1551
  include EmptyEachType
1540
1552
  include NoTypeName
1541
1553
 
1542
- def to_json(state = _ = nil)
1554
+ def to_json(state = nil)
1543
1555
  { class: :literal, literal: literal.inspect, location: location }.to_json(state)
1544
1556
  end
1545
1557
 
@@ -5,6 +5,7 @@ module RBS
5
5
  module Convertibles
6
6
  class BlankSlate < BasicObject
7
7
  instance_methods.each do |im|
8
+ next if im == :__id__
8
9
  next if im == :__send__
9
10
  undef_method im
10
11
  end
@@ -192,6 +192,31 @@ module RBS
192
192
  end
193
193
  end
194
194
 
195
+ ruby2_keywords def assert_send_type_error(method_type, error_type, receiver, method, *args, &block)
196
+ send_setup(method_type, receiver, method, args, block) do |method_type, trace, result, exception|
197
+ typecheck = RBS::Test::TypeCheck.new(
198
+ self_class: receiver.class,
199
+ builder: builder,
200
+ sample_size: 100,
201
+ unchecked_classes: [],
202
+ instance_class: instance_class,
203
+ class_class: class_class
204
+ )
205
+ errors = typecheck.method_call(method, method_type, trace, errors: [])
206
+
207
+ assert_empty errors.map {|x| RBS::Test::Errors.to_string(x) }, "Call trace does not match with given method type: #{trace.inspect}"
208
+
209
+ method_defs = method_defs(method)
210
+ all_errors = method_defs.map {|t| typecheck.method_call(method, t.type, trace, errors: [], annotations: t.each_annotation.to_a) }
211
+ assert all_errors.any? {|es| es.empty? }, "Call trace does not match one of method definitions:\n #{trace.inspect}\n #{method_defs.map(&:type).join(" | ")}"
212
+
213
+ # Use `instnace_of?` instead of `is_a?` as we want to check for _the exact exception class_.
214
+ assert exception.instance_of? error_type
215
+
216
+ result
217
+ end
218
+ end
219
+
195
220
  ruby2_keywords def refute_send_type(method_type, receiver, method, *args, &block)
196
221
  send_setup(method_type, receiver, method, args, block) do |method_type, trace, result, exception|
197
222
  method_type = method_type.update(
@@ -231,15 +256,17 @@ module RBS
231
256
  type, definition = target
232
257
 
233
258
  case type
234
- when Types::ClassInstance
235
- subst = RBS::Substitution.build(definition.type_params, type.args)
236
- definition.methods[method].defs.map do |type_def|
237
- type_def.update(
238
- type: type_def.type.sub(subst)
239
- )
259
+ when Types::ClassInstance, Types::ClassSingleton
260
+ if type.is_a?(Types::ClassSingleton) && type.args.empty?
261
+ definition.methods[method].defs
262
+ else
263
+ subst = RBS::Substitution.build(definition.type_params, type.args)
264
+ definition.methods[method].defs.map do |type_def|
265
+ type_def.update(
266
+ type: type_def.type.sub(subst)
267
+ )
268
+ end
240
269
  end
241
- when Types::ClassSingleton
242
- definition.methods[method].defs
243
270
  else
244
271
  raise
245
272
  end
data/lib/rbs/validator.rb CHANGED
@@ -127,8 +127,8 @@ module RBS
127
127
  # @type var each_child: ^(Symbol) { (Symbol) -> void } -> void
128
128
  each_child = -> (name, &block) do
129
129
  if param = params.find {|p| p.name == name }
130
- if b = param.upper_bound_type
131
- b.free_variables.each do |tv|
130
+ [param.upper_bound_type, param.lower_bound_type].compact.each do |bound|
131
+ bound.free_variables.each do |tv|
132
132
  block[tv]
133
133
  end
134
134
  end
data/lib/rbs/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RBS
4
- VERSION = "3.9.5"
4
+ VERSION = "4.0.0"
5
5
  end
data/lib/rbs.rb CHANGED
@@ -4,12 +4,12 @@ require "rbs/version"
4
4
 
5
5
  require "set"
6
6
  require "json"
7
- require "pathname"
7
+ require "pathname" unless defined?(Pathname)
8
8
  require "pp"
9
- require "ripper"
10
9
  require "logger"
11
10
  require "tsort"
12
11
  require "strscan"
12
+ require "prism"
13
13
 
14
14
  require "rbs/errors"
15
15
  require "rbs/buffer"
@@ -24,8 +24,19 @@ require "rbs/ast/declarations"
24
24
  require "rbs/ast/members"
25
25
  require "rbs/ast/annotation"
26
26
  require "rbs/ast/visitor"
27
+ require "rbs/ast/ruby/comment_block"
28
+ require "rbs/ast/ruby/helpers/constant_helper"
29
+ require "rbs/ast/ruby/helpers/location_helper"
30
+ require "rbs/ast/ruby/annotations"
31
+ require "rbs/ast/ruby/declarations"
32
+ require "rbs/ast/ruby/members"
33
+ require "rbs/source"
34
+ require "rbs/inline_parser"
35
+ require "rbs/inline_parser/comment_association"
27
36
  require "rbs/environment"
28
37
  require "rbs/environment/use_map"
38
+ require "rbs/environment/class_entry"
39
+ require "rbs/environment/module_entry"
29
40
  require "rbs/environment_loader"
30
41
  require "rbs/builtin_names"
31
42
  require "rbs/definition"
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
@@ -76,7 +76,7 @@ module RBS
76
76
  method.visibility = decl.visibility
77
77
  method.call_seq = decl.overloads.map {|overload| "#{decl.name.to_s}#{overload.method_type.to_s}" }.join("\n")
78
78
  if loc = decl.location
79
- method.start_collecting_tokens
79
+ method.start_collecting_tokens(:ruby)
80
80
  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
81
  method.add_token({ line_no: 1, char_no: 1, text: loc.source })
82
82
  method.line = loc.start_line
@@ -86,7 +86,7 @@ module RBS
86
86
  end
87
87
 
88
88
  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)
89
+ alias_def = RDoc::Alias.new(nil, decl.old_name.to_s, decl.new_name.to_s, nil, singleton: decl.kind == :singleton)
90
90
  alias_def.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
91
91
  context.add_alias(alias_def)
92
92
  end
@@ -100,7 +100,7 @@ module RBS
100
100
  when ::RBS::AST::Members::AttrAccessor
101
101
  'RW'
102
102
  end
103
- attribute = RDoc::Attr.new(nil, decl.name.to_s, rw, nil, decl.kind == :singleton)
103
+ attribute = RDoc::Attr.new(nil, decl.name.to_s, rw, nil, singleton: decl.kind == :singleton)
104
104
  attribute.visibility = decl.visibility
105
105
  attribute.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
106
106
  context.add_attribute(attribute)
data/rbs.gemspec CHANGED
@@ -38,12 +38,14 @@ Gem::Specification.new do |spec|
38
38
  spec.extensions = %w{ext/rbs_extension/extconf.rb}
39
39
 
40
40
  if false
41
- spec.required_ruby_version = ">= 3.3"
41
+ spec.required_ruby_version = ">= 3.4"
42
42
  end
43
43
 
44
44
  spec.bindir = "exe"
45
45
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
46
46
  spec.require_paths = ["lib"]
47
- spec.required_ruby_version = ">= 3.1"
47
+ spec.required_ruby_version = ">= 3.2"
48
48
  spec.add_dependency "logger"
49
+ spec.add_dependency "prism", ">= 1.6.0"
50
+ spec.add_dependency "tsort"
49
51
  end
data/rust/.gitignore ADDED
@@ -0,0 +1 @@
1
+ /target/