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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +1 -0
  3. data/.github/dependabot.yml +16 -14
  4. data/.github/workflows/bundle-update.yml +63 -0
  5. data/.github/workflows/c-check.yml +21 -11
  6. data/.github/workflows/comments.yml +5 -3
  7. data/.github/workflows/dependabot.yml +2 -2
  8. data/.github/workflows/jruby.yml +67 -0
  9. data/.github/workflows/milestone.yml +83 -0
  10. data/.github/workflows/ruby.yml +63 -24
  11. data/.github/workflows/rust.yml +184 -0
  12. data/.github/workflows/truffleruby.yml +54 -0
  13. data/.github/workflows/typecheck.yml +5 -2
  14. data/.github/workflows/wasm.yml +53 -0
  15. data/.github/workflows/windows.yml +8 -2
  16. data/.gitignore +11 -0
  17. data/.rubocop.yml +1 -1
  18. data/CHANGELOG.md +357 -0
  19. data/README.md +4 -4
  20. data/Rakefile +365 -33
  21. data/Steepfile +8 -0
  22. data/config.yml +450 -24
  23. data/core/array.rbs +443 -363
  24. data/core/basic_object.rbs +9 -8
  25. data/core/binding.rbs +0 -2
  26. data/core/builtin.rbs +9 -8
  27. data/core/class.rbs +11 -8
  28. data/core/comparable.rbs +55 -34
  29. data/core/complex.rbs +104 -78
  30. data/core/dir.rbs +61 -49
  31. data/core/encoding.rbs +12 -15
  32. data/core/enumerable.rbs +288 -196
  33. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  34. data/core/enumerator/product.rbs +5 -5
  35. data/core/enumerator.rbs +91 -28
  36. data/core/errno.rbs +11 -2
  37. data/core/errors.rbs +58 -29
  38. data/core/exception.rbs +13 -13
  39. data/core/fiber.rbs +74 -54
  40. data/core/file.rbs +260 -1151
  41. data/core/file_constants.rbs +463 -0
  42. data/core/file_stat.rbs +534 -0
  43. data/core/file_test.rbs +3 -3
  44. data/core/float.rbs +257 -92
  45. data/core/gc.rbs +425 -281
  46. data/core/hash.rbs +1151 -829
  47. data/core/integer.rbs +156 -195
  48. data/core/io/buffer.rbs +53 -42
  49. data/core/io/wait.rbs +13 -35
  50. data/core/io.rbs +216 -150
  51. data/core/kernel.rbs +239 -163
  52. data/core/marshal.rbs +4 -4
  53. data/core/match_data.rbs +15 -13
  54. data/core/math.rbs +107 -66
  55. data/core/method.rbs +69 -33
  56. data/core/module.rbs +302 -150
  57. data/core/nil_class.rbs +7 -6
  58. data/core/numeric.rbs +77 -63
  59. data/core/object.rbs +9 -11
  60. data/core/object_space/weak_key_map.rbs +7 -7
  61. data/core/object_space.rbs +30 -23
  62. data/core/pathname.rbs +1322 -0
  63. data/core/proc.rbs +95 -58
  64. data/core/process.rbs +222 -202
  65. data/core/ractor.rbs +371 -515
  66. data/core/random.rbs +21 -3
  67. data/core/range.rbs +181 -79
  68. data/core/rational.rbs +60 -89
  69. data/core/rbs/ops.rbs +154 -0
  70. data/core/rbs/unnamed/argf.rbs +63 -56
  71. data/core/rbs/unnamed/env_class.rbs +19 -14
  72. data/core/rbs/unnamed/main_class.rbs +123 -0
  73. data/core/rbs/unnamed/random.rbs +11 -118
  74. data/core/regexp.rbs +258 -214
  75. data/core/ruby.rbs +53 -0
  76. data/core/ruby_vm.rbs +78 -34
  77. data/core/rubygems/config_file.rbs +5 -5
  78. data/core/rubygems/errors.rbs +4 -71
  79. data/core/rubygems/requirement.rbs +5 -5
  80. data/core/rubygems/rubygems.rbs +16 -82
  81. data/core/rubygems/version.rbs +2 -3
  82. data/core/set.rbs +493 -363
  83. data/core/signal.rbs +26 -16
  84. data/core/string.rbs +3234 -1285
  85. data/core/struct.rbs +43 -42
  86. data/core/symbol.rbs +41 -34
  87. data/core/thread.rbs +141 -73
  88. data/core/time.rbs +81 -50
  89. data/core/trace_point.rbs +41 -35
  90. data/core/true_class.rbs +2 -2
  91. data/core/unbound_method.rbs +24 -16
  92. data/core/warning.rbs +7 -7
  93. data/docs/CONTRIBUTING.md +2 -1
  94. data/docs/aliases.md +79 -0
  95. data/docs/collection.md +3 -3
  96. data/docs/config.md +171 -0
  97. data/docs/encoding.md +56 -0
  98. data/docs/gem.md +0 -1
  99. data/docs/inline.md +634 -0
  100. data/docs/rbs_by_example.md +20 -20
  101. data/docs/rust.md +96 -0
  102. data/docs/sigs.md +3 -3
  103. data/docs/syntax.md +48 -18
  104. data/docs/type_fingerprint.md +21 -0
  105. data/docs/wasm_serialization.md +80 -0
  106. data/exe/rbs +1 -1
  107. data/ext/rbs_extension/ast_translation.c +1441 -671
  108. data/ext/rbs_extension/ast_translation.h +7 -0
  109. data/ext/rbs_extension/class_constants.c +18 -2
  110. data/ext/rbs_extension/class_constants.h +9 -0
  111. data/ext/rbs_extension/extconf.rb +6 -1
  112. data/ext/rbs_extension/legacy_location.c +33 -56
  113. data/ext/rbs_extension/legacy_location.h +37 -0
  114. data/ext/rbs_extension/main.c +183 -39
  115. data/include/rbs/ast.h +597 -297
  116. data/include/rbs/defines.h +40 -0
  117. data/include/rbs/lexer.h +31 -11
  118. data/include/rbs/location.h +25 -44
  119. data/include/rbs/parser.h +6 -6
  120. data/include/rbs/serialize.h +39 -0
  121. data/include/rbs/string.h +0 -2
  122. data/include/rbs/util/rbs_allocator.h +34 -13
  123. data/include/rbs/util/rbs_assert.h +12 -1
  124. data/include/rbs/util/rbs_constant_pool.h +0 -3
  125. data/include/rbs/util/rbs_encoding.h +2 -0
  126. data/include/rbs/util/rbs_unescape.h +2 -1
  127. data/include/rbs.h +8 -0
  128. data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
  129. data/lib/rbs/ast/annotation.rb +1 -1
  130. data/lib/rbs/ast/comment.rb +1 -1
  131. data/lib/rbs/ast/declarations.rb +10 -10
  132. data/lib/rbs/ast/members.rb +14 -14
  133. data/lib/rbs/ast/ruby/annotations.rb +335 -3
  134. data/lib/rbs/ast/ruby/comment_block.rb +30 -4
  135. data/lib/rbs/ast/ruby/declarations.rb +209 -4
  136. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  137. data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
  138. data/lib/rbs/ast/ruby/members.rb +571 -22
  139. data/lib/rbs/ast/type_param.rb +24 -4
  140. data/lib/rbs/buffer.rb +66 -24
  141. data/lib/rbs/cli/diff.rb +16 -15
  142. data/lib/rbs/cli/validate.rb +38 -106
  143. data/lib/rbs/cli.rb +55 -24
  144. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  145. data/lib/rbs/collection/sources/git.rb +7 -0
  146. data/lib/rbs/definition.rb +1 -1
  147. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  148. data/lib/rbs/definition_builder/method_builder.rb +32 -6
  149. data/lib/rbs/definition_builder.rb +147 -25
  150. data/lib/rbs/diff.rb +7 -1
  151. data/lib/rbs/environment.rb +235 -75
  152. data/lib/rbs/environment_loader.rb +0 -6
  153. data/lib/rbs/errors.rb +27 -18
  154. data/lib/rbs/inline_parser.rb +377 -15
  155. data/lib/rbs/location_aux.rb +1 -1
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +47 -11
  159. data/lib/rbs/parser_aux.rb +20 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -0
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  166. data/lib/rbs/rewriter.rb +70 -0
  167. data/lib/rbs/subtractor.rb +3 -1
  168. data/lib/rbs/test/type_check.rb +25 -3
  169. data/lib/rbs/type_name.rb +34 -14
  170. data/lib/rbs/types.rb +88 -78
  171. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  172. data/lib/rbs/validator.rb +2 -2
  173. data/lib/rbs/version.rb +1 -1
  174. data/lib/rbs/wasm/deserializer.rb +213 -0
  175. data/lib/rbs/wasm/location.rb +61 -0
  176. data/lib/rbs/wasm/parser.rb +137 -0
  177. data/lib/rbs/wasm/runtime.rb +217 -0
  178. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  179. data/lib/rbs.rb +13 -2
  180. data/lib/rdoc/discover.rb +1 -1
  181. data/lib/rdoc_plugin/parser.rb +1 -1
  182. data/rbs.gemspec +24 -6
  183. data/schema/typeParam.json +17 -1
  184. data/sig/annotate/rdoc_annotater.rbs +12 -9
  185. data/sig/ast/ruby/annotations.rbs +364 -4
  186. data/sig/ast/ruby/comment_block.rbs +8 -0
  187. data/sig/ast/ruby/declarations.rbs +102 -4
  188. data/sig/ast/ruby/members.rbs +128 -2
  189. data/sig/buffer.rbs +19 -1
  190. data/sig/cli/diff.rbs +5 -11
  191. data/sig/cli/validate.rbs +12 -8
  192. data/sig/cli.rbs +18 -18
  193. data/sig/collection/config/lockfile_generator.rbs +2 -0
  194. data/sig/definition.rbs +6 -1
  195. data/sig/definition_builder.rbs +2 -0
  196. data/sig/environment.rbs +70 -12
  197. data/sig/errors.rbs +13 -14
  198. data/sig/inline_parser.rbs +41 -2
  199. data/sig/locator.rbs +0 -2
  200. data/sig/manifest.yaml +0 -2
  201. data/sig/method_builder.rbs +3 -1
  202. data/sig/namespace.rbs +20 -0
  203. data/sig/parser.rbs +41 -13
  204. data/sig/prototype/helpers.rbs +2 -0
  205. data/sig/resolver/type_name_resolver.rbs +36 -10
  206. data/sig/rewriter.rbs +45 -0
  207. data/sig/source.rbs +3 -3
  208. data/sig/type_param.rbs +13 -8
  209. data/sig/typename.rbs +15 -0
  210. data/sig/types.rbs +6 -7
  211. data/sig/unit_test/spy.rbs +0 -8
  212. data/sig/unit_test/type_assertions.rbs +15 -0
  213. data/sig/wasm/deserializer.rbs +66 -0
  214. data/sig/wasm/serialization_schema.rbs +13 -0
  215. data/src/ast.c +443 -162
  216. data/src/lexer.c +1415 -1313
  217. data/src/lexer.re +4 -0
  218. data/src/lexstate.c +63 -37
  219. data/src/location.c +7 -47
  220. data/src/parser.c +1032 -521
  221. data/src/serialize.c +958 -0
  222. data/src/string.c +0 -48
  223. data/src/util/rbs_allocator.c +89 -74
  224. data/src/util/rbs_assert.c +1 -1
  225. data/src/util/rbs_buffer.c +2 -2
  226. data/src/util/rbs_constant_pool.c +10 -14
  227. data/src/util/rbs_encoding.c +4 -8
  228. data/src/util/rbs_unescape.c +56 -20
  229. data/stdlib/abbrev/0/array.rbs +1 -1
  230. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  231. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  232. data/stdlib/cgi/0/core.rbs +9 -393
  233. data/stdlib/cgi/0/manifest.yaml +1 -0
  234. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  235. data/stdlib/coverage/0/coverage.rbs +7 -4
  236. data/stdlib/csv/0/csv.rbs +5 -5
  237. data/stdlib/date/0/date.rbs +92 -79
  238. data/stdlib/date/0/date_time.rbs +25 -24
  239. data/stdlib/delegate/0/delegator.rbs +10 -7
  240. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  241. data/stdlib/digest/0/digest.rbs +111 -1
  242. data/stdlib/erb/0/erb.rbs +748 -347
  243. data/stdlib/etc/0/etc.rbs +73 -54
  244. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  245. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  246. data/stdlib/io-console/0/io-console.rbs +2 -2
  247. data/stdlib/json/0/json.rbs +223 -142
  248. data/stdlib/monitor/0/monitor.rbs +3 -3
  249. data/stdlib/net-http/0/net-http.rbs +162 -134
  250. data/stdlib/objspace/0/objspace.rbs +17 -34
  251. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  252. data/stdlib/open3/0/open3.rbs +469 -10
  253. data/stdlib/openssl/0/openssl.rbs +482 -364
  254. data/stdlib/optparse/0/optparse.rbs +26 -17
  255. data/stdlib/pathname/0/pathname.rbs +11 -1381
  256. data/stdlib/pp/0/pp.rbs +9 -8
  257. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  258. data/stdlib/pstore/0/pstore.rbs +35 -30
  259. data/stdlib/psych/0/psych.rbs +65 -12
  260. data/stdlib/psych/0/store.rbs +2 -4
  261. data/stdlib/pty/0/pty.rbs +9 -6
  262. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  263. data/stdlib/rdoc/0/code_object.rbs +2 -1
  264. data/stdlib/rdoc/0/parser.rbs +1 -1
  265. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  266. data/stdlib/rdoc/0/store.rbs +1 -1
  267. data/stdlib/resolv/0/resolv.rbs +26 -69
  268. data/stdlib/ripper/0/ripper.rbs +22 -19
  269. data/stdlib/securerandom/0/manifest.yaml +2 -0
  270. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  271. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  272. data/stdlib/singleton/0/singleton.rbs +3 -0
  273. data/stdlib/socket/0/addrinfo.rbs +7 -7
  274. data/stdlib/socket/0/basic_socket.rbs +3 -3
  275. data/stdlib/socket/0/ip_socket.rbs +10 -8
  276. data/stdlib/socket/0/socket.rbs +23 -10
  277. data/stdlib/socket/0/tcp_server.rbs +1 -1
  278. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  279. data/stdlib/socket/0/udp_socket.rbs +1 -1
  280. data/stdlib/socket/0/unix_server.rbs +1 -1
  281. data/stdlib/stringio/0/stringio.rbs +1209 -95
  282. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  283. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  284. data/stdlib/time/0/time.rbs +8 -6
  285. data/stdlib/timeout/0/timeout.rbs +63 -7
  286. data/stdlib/tsort/0/cyclic.rbs +4 -1
  287. data/stdlib/tsort/0/interfaces.rbs +8 -8
  288. data/stdlib/tsort/0/tsort.rbs +16 -15
  289. data/stdlib/uri/0/common.rbs +42 -20
  290. data/stdlib/uri/0/file.rbs +3 -3
  291. data/stdlib/uri/0/generic.rbs +26 -18
  292. data/stdlib/uri/0/http.rbs +2 -2
  293. data/stdlib/uri/0/ldap.rbs +2 -2
  294. data/stdlib/uri/0/mailto.rbs +3 -3
  295. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  296. data/stdlib/zlib/0/deflate.rbs +4 -3
  297. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  298. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  299. data/stdlib/zlib/0/inflate.rbs +1 -1
  300. data/stdlib/zlib/0/need_dict.rbs +1 -1
  301. data/stdlib/zlib/0/zstream.rbs +1 -0
  302. data/wasm/README.md +59 -0
  303. data/wasm/rbs_wasm.c +411 -0
  304. metadata +56 -8
  305. data/.vscode/extensions.json +0 -5
  306. data/.vscode/settings.json +0 -19
@@ -17,7 +17,8 @@
17
17
  # * Do not have namespace "pollution" from the many methods provided in class
18
18
  # Object and its included module Kernel.
19
19
  # * Do not have definitions of common classes, and so references to such
20
- # common classes must be fully qualified (`::String`, not `String`).
20
+ # common classes must be fully qualified (<code>::String</code>, not
21
+ # `String`).
21
22
  #
22
23
  # A variety of strategies can be used to provide useful portions of the Standard
23
24
  # Library in subclasses of `BasicObject`:
@@ -92,8 +93,8 @@ class BasicObject
92
93
  # classes to provide class-specific meaning.
93
94
  #
94
95
  # Unlike #==, the #equal? method should never be overridden by subclasses as it
95
- # is used to determine object identity (that is, `a.equal?(b)` if and only if
96
- # `a` is the same object as `b`):
96
+ # is used to determine object identity (that is, <code>a.equal?(b)</code> if and
97
+ # only if `a` is the same object as `b`):
97
98
  #
98
99
  # obj = "a"
99
100
  # other = obj.dup
@@ -174,8 +175,8 @@ class BasicObject
174
175
  # classes to provide class-specific meaning.
175
176
  #
176
177
  # Unlike #==, the #equal? method should never be overridden by subclasses as it
177
- # is used to determine object identity (that is, `a.equal?(b)` if and only if
178
- # `a` is the same object as `b`):
178
+ # is used to determine object identity (that is, <code>a.equal?(b)</code> if and
179
+ # only if `a` is the same object as `b`):
179
180
  #
180
181
  # obj = "a"
181
182
  # other = obj.dup
@@ -315,7 +316,7 @@ class BasicObject
315
316
  # def Chatty.three() end
316
317
  # end
317
318
  #
318
- # *produces:*
319
+ # <em>produces:</em>
319
320
  #
320
321
  # Adding singleton_method_added
321
322
  # Adding one
@@ -343,7 +344,7 @@ class BasicObject
343
344
  # end
344
345
  # end
345
346
  #
346
- # *produces:*
347
+ # <em>produces:</em>
347
348
  #
348
349
  # Removing three
349
350
  # Removing one
@@ -367,7 +368,7 @@ class BasicObject
367
368
  # end
368
369
  # end
369
370
  #
370
- # *produces:*
371
+ # <em>produces:</em>
371
372
  #
372
373
  # Undefining one
373
374
  #
data/core/binding.rbs CHANGED
@@ -32,8 +32,6 @@
32
32
  class Binding
33
33
  def clone: () -> self
34
34
 
35
- def dup: () -> self
36
-
37
35
  # <!--
38
36
  # rdoc-file=proc.c
39
37
  # - binding.eval(string [, filename [,lineno]]) -> obj
data/core/builtin.rbs CHANGED
@@ -9,7 +9,7 @@ end
9
9
  # A type that's convertible to a `Rational`.
10
10
  #
11
11
  interface _ToR
12
- # Convert `self` to a `Complex`.
12
+ # Convert `self` to a `Rational`.
13
13
  #
14
14
  def to_r: () -> Rational
15
15
  end
@@ -58,7 +58,7 @@ end
58
58
  #
59
59
  # Implicit `.to_str` conversions are usable all over Ruby's stdlib, such as `Kernel#abort`,
60
60
  # `String#+`, and `Object#send`. Virtually anywhere that accepts a `String` will also accept
61
- # something that defines `.to_Str`.
61
+ # something that defines `.to_str`.
62
62
  #
63
63
  # Types that define `.to_str` are also usable wherever paths are expected (See the `path` type
64
64
  # alias).
@@ -170,20 +170,20 @@ interface _Inspect
170
170
  def inspect: () -> String
171
171
  end
172
172
 
173
- interface _Each[out E, out R = void]
174
- def each: () { (E) -> void } -> R
173
+ interface _Each[out T, out R = void]
174
+ def each: () { (T) -> void } -> R
175
175
  end
176
176
 
177
- interface _EachEntry[out E]
178
- def each_entry: () { (E) -> void } -> self
177
+ interface _EachEntry[out T]
178
+ def each_entry: () { (T) -> void } -> self
179
179
  end
180
180
 
181
181
  interface _Reader
182
- def read: (?int? length, ?string outbuf) -> String?
182
+ def read: (?int? length, ?string? outbuf) -> String?
183
183
  end
184
184
 
185
185
  interface _ReaderPartial
186
- def readpartial: (int maxlen, ?string outbuf) -> String
186
+ def readpartial: (int maxlen, ?string? outbuf) -> String
187
187
  end
188
188
 
189
189
  interface _Writer
@@ -225,6 +225,7 @@ type int = Integer | _ToInt
225
225
 
226
226
  # Represents a `Float`, or a type convertible to it (via `.to_f`).
227
227
  #
228
+ %a{deprecated: Use `_ToF` directly}
228
229
  type float = Float | _ToF
229
230
 
230
231
  # Represents a `Range[T]`, or a type that acts like it (via `.begin`, `.end`, and `.exclude_end?`).
data/core/class.rbs CHANGED
@@ -10,8 +10,9 @@
10
10
  # When a new class is created, an object of type Class is initialized and
11
11
  # assigned to a global constant (Name in this case).
12
12
  #
13
- # When `Name.new` is called to create a new object, the #new method in Class is
14
- # run by default. This can be demonstrated by overriding #new in Class:
13
+ # When <code>Name.new</code> is called to create a new object, the #new method
14
+ # in Class is run by default. This can be demonstrated by overriding #new in
15
+ # Class:
15
16
  #
16
17
  # class Class
17
18
  # alias old_new new
@@ -26,7 +27,7 @@
26
27
  #
27
28
  # n = Name.new
28
29
  #
29
- # *produces:*
30
+ # <em>produces:</em>
30
31
  #
31
32
  # Creating a new Name
32
33
  #
@@ -82,7 +83,7 @@ class Class < Module
82
83
  # Assign the class to a constant (name starting uppercase) if you want to treat
83
84
  # it like a regular class.
84
85
  #
85
- def initialize: (?Class superclass) ?{ (Class newclass) -> void } -> void
86
+ def initialize: (?Class superclass) ?{ (Class newclass) [self: Class] -> void } -> void
86
87
 
87
88
  # <!--
88
89
  # rdoc-file=object.c
@@ -106,6 +107,8 @@ class Class < Module
106
107
  #
107
108
  def allocate: () -> untyped
108
109
 
110
+ def self.allocate: () -> untyped
111
+
109
112
  # <!--
110
113
  # rdoc-file=object.c
111
114
  # - attached_object -> object
@@ -144,12 +147,12 @@ class Class < Module
144
147
  # class Baz < Bar
145
148
  # end
146
149
  #
147
- # *produces:*
150
+ # <em>produces:</em>
148
151
  #
149
152
  # New subclass: Bar
150
153
  # New subclass: Baz
151
154
  #
152
- def inherited: (Class arg0) -> untyped
155
+ private def inherited: (Class subclass) -> void
153
156
 
154
157
  # <!--
155
158
  # rdoc-file=object.c
@@ -157,9 +160,9 @@ class Class < Module
157
160
  # -->
158
161
  # Calls #allocate to create a new object of *class*'s class, then invokes that
159
162
  # object's #initialize method, passing it *args*. This is the method that ends
160
- # up getting called whenever an object is constructed using `.new`.
163
+ # up getting called whenever an object is constructed using <code>.new</code>.
161
164
  #
162
- def new: () -> untyped
165
+ def new: (*untyped, **untyped) ?{ (?) -> untyped } -> untyped
163
166
 
164
167
  # <!--
165
168
  # rdoc-file=object.c
data/core/comparable.rbs CHANGED
@@ -1,12 +1,13 @@
1
1
  # <!-- rdoc-file=compar.c -->
2
2
  # The Comparable mixin is used by classes whose objects may be ordered. The
3
- # class must define the `<=>` operator, which compares the receiver against
4
- # another object, returning a value less than 0, returning 0, or returning a
5
- # value greater than 0, depending on whether the receiver is less than, equal
6
- # to, or greater than the other object. If the other object is not comparable
7
- # then the `<=>` operator should return `nil`. Comparable uses `<=>` to
8
- # implement the conventional comparison operators (`<`, `<=`, `==`, `>=`, and
9
- # `>`) and the method `between?`.
3
+ # class must define the <code><=></code> operator, which compares the receiver
4
+ # against another object, returning a value less than 0, returning 0, or
5
+ # returning a value greater than 0, depending on whether the receiver is less
6
+ # than, equal to, or greater than the other object. If the other object is not
7
+ # comparable then the <code><=></code> operator should return `nil`. Comparable
8
+ # uses <code><=></code> to implement the conventional comparison operators
9
+ # (<code><</code>, <code><=</code>, <code>==</code>, <code>>=</code>, and
10
+ # <code>></code>) and the method <code>between?</code>.
10
11
  #
11
12
  # class StringSorter
12
13
  # include Comparable
@@ -38,7 +39,8 @@
38
39
  #
39
40
  # ## What's Here
40
41
  #
41
- # Module Comparable provides these methods, all of which use method `#<=>`:
42
+ # Module Comparable provides these methods, all of which use method
43
+ # <code>#<=></code>:
42
44
  #
43
45
  # * #<: Returns whether `self` is less than the given object.
44
46
  # * #<=: Returns whether `self` is less than or equal to the given object.
@@ -46,28 +48,36 @@
46
48
  # * #>: Returns whether `self` is greater than the given object.
47
49
  # * #>=: Returns whether `self` is greater than or equal to the given object.
48
50
  # * #between?: Returns `true` if `self` is between two given objects.
49
- # * #clamp: For given objects `min` and `max`, or range `(min..max)`, returns:
51
+ # * #clamp: For given objects `min` and `max`, or range
52
+ # <code>(min..max)</code>, returns:
50
53
  #
51
- # * `min` if `(self <=> min) < 0`.
52
- # * `max` if `(self <=> max) > 0`.
54
+ # * `min` if <code>(self <=> min) < 0</code>.
55
+ # * `max` if <code>(self <=> max) > 0</code>.
53
56
  # * `self` otherwise.
54
57
  #
55
58
  module Comparable : _WithSpaceshipOperator
56
59
  # <!--
57
60
  # rdoc-file=compar.c
58
- # - obj < other -> true or false
61
+ # - self < other -> true or false
59
62
  # -->
60
- # Compares two objects based on the receiver's `<=>` method, returning true if
61
- # it returns a value less than 0.
63
+ # Returns whether `self` is "less than" `other`; equivalent to <code>(self <=>
64
+ # other) < 0</code>:
65
+ #
66
+ # 'foo' < 'foo' # => false
67
+ # 'foo' < 'food' # => true
62
68
  #
63
69
  def <: (untyped other) -> bool
64
70
 
65
71
  # <!--
66
72
  # rdoc-file=compar.c
67
- # - obj <= other -> true or false
73
+ # - self <= other -> true or false
68
74
  # -->
69
- # Compares two objects based on the receiver's `<=>` method, returning true if
70
- # it returns a value less than or equal to 0.
75
+ # Returns whether `self` is "less than or equal to" `other`; equivalent to
76
+ # <code>(self <=> other) <= 0</code>:
77
+ #
78
+ # 'foo' <= 'foo' # => true
79
+ # 'foo' <= 'food' # => true
80
+ # 'food' <= 'foo' # => false
71
81
  #
72
82
  def <=: (untyped other) -> bool
73
83
 
@@ -75,8 +85,9 @@ module Comparable : _WithSpaceshipOperator
75
85
  # rdoc-file=compar.c
76
86
  # - obj == other -> true or false
77
87
  # -->
78
- # Compares two objects based on the receiver's `<=>` method, returning true if
79
- # it returns 0. Also returns true if *obj* and *other* are the same object.
88
+ # Compares two objects based on the receiver's <code><=></code> method,
89
+ # returning true if it returns 0. Also returns true if *obj* and *other* are the
90
+ # same object.
80
91
  #
81
92
  def ==: (untyped other) -> bool
82
93
 
@@ -84,8 +95,8 @@ module Comparable : _WithSpaceshipOperator
84
95
  # rdoc-file=compar.c
85
96
  # - obj > other -> true or false
86
97
  # -->
87
- # Compares two objects based on the receiver's `<=>` method, returning true if
88
- # it returns a value greater than 0.
98
+ # Compares two objects based on the receiver's <code><=></code> method,
99
+ # returning true if it returns a value greater than 0.
89
100
  #
90
101
  def >: (untyped other) -> bool
91
102
 
@@ -93,8 +104,8 @@ module Comparable : _WithSpaceshipOperator
93
104
  # rdoc-file=compar.c
94
105
  # - obj >= other -> true or false
95
106
  # -->
96
- # Compares two objects based on the receiver's `<=>` method, returning true if
97
- # it returns a value greater than or equal to 0.
107
+ # Compares two objects based on the receiver's <code><=></code> method,
108
+ # returning true if it returns a value greater than or equal to 0.
98
109
  #
99
110
  def >=: (untyped other) -> bool
100
111
 
@@ -102,8 +113,8 @@ module Comparable : _WithSpaceshipOperator
102
113
  # rdoc-file=compar.c
103
114
  # - obj.between?(min, max) -> true or false
104
115
  # -->
105
- # Returns `false` if *obj* `<=>` *min* is less than zero or if *obj* `<=>` *max*
106
- # is greater than zero, `true` otherwise.
116
+ # Returns `false` if *obj* <code><=></code> *min* is less than zero or if *obj*
117
+ # <code><=></code> *max* is greater than zero, `true` otherwise.
107
118
  #
108
119
  # 3.between?(1, 5) #=> true
109
120
  # 6.between?(1, 5) #=> false
@@ -117,8 +128,9 @@ module Comparable : _WithSpaceshipOperator
117
128
  # - obj.clamp(min, max) -> obj
118
129
  # - obj.clamp(range) -> obj
119
130
  # -->
120
- # In `(min, max)` form, returns *min* if *obj* `<=>` *min* is less than zero,
121
- # *max* if *obj* `<=>` *max* is greater than zero, and *obj* otherwise.
131
+ # In <code>(min, max)</code> form, returns *min* if *obj* <code><=></code> *min*
132
+ # is less than zero, *max* if *obj* <code><=></code> *max* is greater than zero,
133
+ # and *obj* otherwise.
122
134
  #
123
135
  # 12.clamp(0, 100) #=> 12
124
136
  # 523.clamp(0, 100) #=> 100
@@ -133,9 +145,10 @@ module Comparable : _WithSpaceshipOperator
133
145
  # -20.clamp(0, nil) #=> 0
134
146
  # 523.clamp(nil, 100) #=> 100
135
147
  #
136
- # In `(range)` form, returns *range.begin* if *obj* `<=>` *range.begin* is less
137
- # than zero, *range.end* if *obj* `<=>` *range.end* is greater than zero, and
138
- # *obj* otherwise.
148
+ # In <code>(range)</code> form, returns <em>range.begin</em> if *obj*
149
+ # <code><=></code> <em>range.begin</em> is less than zero, <em>range.end</em> if
150
+ # *obj* <code><=></code> <em>range.end</em> is greater than zero, and *obj*
151
+ # otherwise.
139
152
  #
140
153
  # 12.clamp(0..100) #=> 12
141
154
  # 523.clamp(0..100) #=> 100
@@ -144,13 +157,13 @@ module Comparable : _WithSpaceshipOperator
144
157
  # 'd'.clamp('a'..'f') #=> 'd'
145
158
  # 'z'.clamp('a'..'f') #=> 'f'
146
159
  #
147
- # If *range.begin* is `nil`, it is considered smaller than *obj*, and if
148
- # *range.end* is `nil`, it is considered greater than *obj*.
160
+ # If <em>range.begin</em> is `nil`, it is considered smaller than *obj*, and if
161
+ # <em>range.end</em> is `nil`, it is considered greater than *obj*.
149
162
  #
150
163
  # -20.clamp(0..) #=> 0
151
164
  # 523.clamp(..100) #=> 100
152
165
  #
153
- # When *range.end* is excluded and not `nil`, an exception is raised.
166
+ # When <em>range.end</em> is excluded and not `nil`, an exception is raised.
154
167
  #
155
168
  # 100.clamp(0...100) # ArgumentError
156
169
  #
@@ -167,5 +180,13 @@ interface Comparable::_WithSpaceshipOperator
167
180
  # If `other` is less than `self`, it returns a positive Integer.
168
181
  # If no comparison is defined with `other` and `self`, it returns `nil`.
169
182
  #
170
- def <=>: (untyped other) -> Integer?
183
+ def <=>: (untyped other) -> Comparable::_CompareToZero?
184
+ end
185
+
186
+ # This interface indicates a type is comparable against zero.
187
+ #
188
+ interface Comparable::_CompareToZero
189
+ def <: (0) -> boolish
190
+
191
+ def >: (0) -> boolish
171
192
  end