rbs 3.10.4 → 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 (267) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +7 -5
  5. data/.github/workflows/comments.yml +2 -2
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +16 -26
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +1 -1
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +2 -2
  12. data/.vscode/extensions.json +5 -0
  13. data/.vscode/settings.json +19 -0
  14. data/CHANGELOG.md +202 -2
  15. data/Rakefile +9 -23
  16. data/Steepfile +2 -0
  17. data/config.yml +457 -13
  18. data/core/array.rbs +218 -188
  19. data/core/basic_object.rbs +9 -8
  20. data/core/binding.rbs +0 -2
  21. data/core/builtin.rbs +2 -2
  22. data/core/class.rbs +6 -5
  23. data/core/comparable.rbs +45 -31
  24. data/core/complex.rbs +66 -55
  25. data/core/dir.rbs +57 -45
  26. data/core/encoding.rbs +6 -6
  27. data/core/enumerable.rbs +105 -91
  28. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  29. data/core/enumerator.rbs +24 -3
  30. data/core/errno.rbs +3 -2
  31. data/core/errors.rbs +31 -29
  32. data/core/exception.rbs +12 -12
  33. data/core/fiber.rbs +47 -36
  34. data/core/file.rbs +242 -169
  35. data/core/file_test.rbs +2 -2
  36. data/core/float.rbs +42 -68
  37. data/core/gc.rbs +78 -70
  38. data/core/hash.rbs +70 -60
  39. data/core/integer.rbs +32 -75
  40. data/core/io/buffer.rbs +36 -36
  41. data/core/io/wait.rbs +7 -7
  42. data/core/io.rbs +192 -146
  43. data/core/kernel.rbs +198 -147
  44. data/core/marshal.rbs +3 -3
  45. data/core/match_data.rbs +14 -12
  46. data/core/math.rbs +69 -67
  47. data/core/method.rbs +6 -8
  48. data/core/module.rbs +148 -88
  49. data/core/nil_class.rbs +4 -3
  50. data/core/numeric.rbs +53 -50
  51. data/core/object.rbs +6 -8
  52. data/core/object_space.rbs +11 -10
  53. data/core/pathname.rbs +131 -81
  54. data/core/proc.rbs +65 -34
  55. data/core/process.rbs +221 -201
  56. data/core/ractor.rbs +15 -11
  57. data/core/random.rbs +21 -3
  58. data/core/range.rbs +152 -49
  59. data/core/rational.rbs +5 -56
  60. data/core/rbs/unnamed/argf.rbs +58 -51
  61. data/core/rbs/unnamed/env_class.rbs +18 -13
  62. data/core/rbs/unnamed/main_class.rbs +123 -0
  63. data/core/rbs/unnamed/random.rbs +7 -116
  64. data/core/regexp.rbs +236 -197
  65. data/core/ruby.rbs +1 -1
  66. data/core/ruby_vm.rbs +32 -30
  67. data/core/rubygems/config_file.rbs +5 -5
  68. data/core/rubygems/errors.rbs +1 -1
  69. data/core/rubygems/requirement.rbs +5 -5
  70. data/core/rubygems/rubygems.rbs +5 -3
  71. data/core/set.rbs +17 -16
  72. data/core/signal.rbs +2 -2
  73. data/core/string.rbs +318 -298
  74. data/core/struct.rbs +26 -25
  75. data/core/symbol.rbs +25 -24
  76. data/core/thread.rbs +40 -41
  77. data/core/time.rbs +47 -42
  78. data/core/trace_point.rbs +34 -31
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +10 -10
  81. data/core/warning.rbs +7 -7
  82. data/docs/collection.md +1 -1
  83. data/docs/config.md +171 -0
  84. data/docs/inline.md +576 -0
  85. data/docs/syntax.md +46 -16
  86. data/docs/type_fingerprint.md +21 -0
  87. data/exe/rbs +1 -1
  88. data/ext/rbs_extension/ast_translation.c +595 -98
  89. data/ext/rbs_extension/class_constants.c +30 -0
  90. data/ext/rbs_extension/class_constants.h +15 -0
  91. data/ext/rbs_extension/legacy_location.c +30 -53
  92. data/ext/rbs_extension/legacy_location.h +37 -0
  93. data/ext/rbs_extension/main.c +125 -24
  94. data/include/rbs/ast.h +485 -150
  95. data/include/rbs/lexer.h +11 -4
  96. data/include/rbs/location.h +25 -44
  97. data/include/rbs/parser.h +20 -2
  98. data/include/rbs/util/rbs_constant_pool.h +0 -3
  99. data/include/rbs.h +8 -0
  100. data/lib/rbs/ast/annotation.rb +1 -1
  101. data/lib/rbs/ast/comment.rb +1 -1
  102. data/lib/rbs/ast/declarations.rb +10 -10
  103. data/lib/rbs/ast/members.rb +14 -14
  104. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  105. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  106. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  107. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  108. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  109. data/lib/rbs/ast/ruby/members.rb +723 -0
  110. data/lib/rbs/ast/type_param.rb +24 -4
  111. data/lib/rbs/buffer.rb +105 -20
  112. data/lib/rbs/cli/diff.rb +16 -15
  113. data/lib/rbs/cli/validate.rb +62 -125
  114. data/lib/rbs/cli.rb +55 -23
  115. data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
  116. data/lib/rbs/collection/sources/git.rb +1 -0
  117. data/lib/rbs/collection.rb +0 -1
  118. data/lib/rbs/definition.rb +6 -1
  119. data/lib/rbs/definition_builder/ancestor_builder.rb +119 -63
  120. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  121. data/lib/rbs/definition_builder.rb +177 -20
  122. data/lib/rbs/diff.rb +7 -1
  123. data/lib/rbs/environment/class_entry.rb +69 -0
  124. data/lib/rbs/environment/module_entry.rb +66 -0
  125. data/lib/rbs/environment.rb +338 -155
  126. data/lib/rbs/environment_loader.rb +2 -2
  127. data/lib/rbs/errors.rb +30 -20
  128. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  129. data/lib/rbs/inline_parser.rb +542 -0
  130. data/lib/rbs/location_aux.rb +36 -4
  131. data/lib/rbs/locator.rb +5 -1
  132. data/lib/rbs/method_type.rb +5 -3
  133. data/lib/rbs/namespace.rb +0 -7
  134. data/lib/rbs/parser_aux.rb +31 -8
  135. data/lib/rbs/prototype/helpers.rb +57 -0
  136. data/lib/rbs/prototype/rb.rb +3 -28
  137. data/lib/rbs/prototype/rbi.rb +3 -20
  138. data/lib/rbs/prototype/runtime.rb +10 -2
  139. data/lib/rbs/resolver/type_name_resolver.rb +0 -8
  140. data/lib/rbs/source.rb +99 -0
  141. data/lib/rbs/subtractor.rb +4 -3
  142. data/lib/rbs/test/type_check.rb +5 -2
  143. data/lib/rbs/type_name.rb +1 -8
  144. data/lib/rbs/types.rb +88 -78
  145. data/lib/rbs/unit_test/convertibles.rb +1 -0
  146. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  147. data/lib/rbs/validator.rb +2 -2
  148. data/lib/rbs/version.rb +1 -1
  149. data/lib/rbs.rb +12 -1
  150. data/rbs.gemspec +3 -2
  151. data/rust/.gitignore +1 -0
  152. data/rust/Cargo.lock +378 -0
  153. data/rust/Cargo.toml +7 -0
  154. data/rust/ruby-rbs/Cargo.toml +22 -0
  155. data/rust/ruby-rbs/build.rs +764 -0
  156. data/rust/ruby-rbs/examples/locations.rs +60 -0
  157. data/rust/ruby-rbs/src/lib.rs +1 -0
  158. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  159. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  160. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  161. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  162. data/rust/ruby-rbs-sys/build.rs +204 -0
  163. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  164. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  165. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  166. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  167. data/schema/typeParam.json +17 -1
  168. data/sig/ancestor_builder.rbs +1 -1
  169. data/sig/ast/ruby/annotations.rbs +421 -0
  170. data/sig/ast/ruby/comment_block.rbs +127 -0
  171. data/sig/ast/ruby/declarations.rbs +158 -0
  172. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  173. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  174. data/sig/ast/ruby/members.rbs +178 -0
  175. data/sig/buffer.rbs +63 -5
  176. data/sig/cli/diff.rbs +5 -11
  177. data/sig/cli/validate.rbs +12 -8
  178. data/sig/cli.rbs +18 -18
  179. data/sig/definition.rbs +6 -0
  180. data/sig/definition_builder.rbs +3 -1
  181. data/sig/environment/class_entry.rbs +50 -0
  182. data/sig/environment/module_entry.rbs +50 -0
  183. data/sig/environment.rbs +37 -81
  184. data/sig/errors.rbs +26 -20
  185. data/sig/inline_parser/comment_association.rbs +71 -0
  186. data/sig/inline_parser.rbs +124 -0
  187. data/sig/location.rbs +32 -7
  188. data/sig/locator.rbs +0 -2
  189. data/sig/method_builder.rbs +9 -4
  190. data/sig/namespace.rbs +0 -5
  191. data/sig/parser.rbs +47 -13
  192. data/sig/prototype/helpers.rbs +2 -0
  193. data/sig/resolver/type_name_resolver.rbs +0 -3
  194. data/sig/source.rbs +48 -0
  195. data/sig/type_param.rbs +13 -8
  196. data/sig/typename.rbs +0 -5
  197. data/sig/types.rbs +6 -7
  198. data/sig/unit_test/spy.rbs +0 -8
  199. data/sig/unit_test/type_assertions.rbs +11 -0
  200. data/src/ast.c +491 -143
  201. data/src/lexer.c +1552 -1314
  202. data/src/lexer.re +7 -0
  203. data/src/lexstate.c +8 -1
  204. data/src/location.c +8 -48
  205. data/src/parser.c +1107 -409
  206. data/src/util/rbs_constant_pool.c +0 -4
  207. data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
  208. data/stdlib/cgi-escape/0/escape.rbs +4 -4
  209. data/stdlib/coverage/0/coverage.rbs +4 -3
  210. data/stdlib/date/0/date.rbs +33 -28
  211. data/stdlib/date/0/date_time.rbs +24 -23
  212. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  213. data/stdlib/digest/0/digest.rbs +110 -0
  214. data/stdlib/erb/0/erb.rbs +64 -53
  215. data/stdlib/etc/0/etc.rbs +55 -50
  216. data/stdlib/fileutils/0/fileutils.rbs +140 -126
  217. data/stdlib/forwardable/0/forwardable.rbs +10 -10
  218. data/stdlib/io-console/0/io-console.rbs +2 -2
  219. data/stdlib/json/0/json.rbs +158 -131
  220. data/stdlib/monitor/0/monitor.rbs +3 -3
  221. data/stdlib/net-http/0/net-http.rbs +159 -134
  222. data/stdlib/objspace/0/objspace.rbs +8 -30
  223. data/stdlib/open-uri/0/open-uri.rbs +8 -8
  224. data/stdlib/open3/0/open3.rbs +469 -10
  225. data/stdlib/openssl/0/openssl.rbs +144 -129
  226. data/stdlib/optparse/0/optparse.rbs +23 -14
  227. data/stdlib/pathname/0/pathname.rbs +2 -2
  228. data/stdlib/pp/0/pp.rbs +9 -8
  229. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  230. data/stdlib/pstore/0/pstore.rbs +35 -30
  231. data/stdlib/psych/0/psych.rbs +62 -9
  232. data/stdlib/psych/0/store.rbs +2 -4
  233. data/stdlib/pty/0/pty.rbs +9 -6
  234. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  235. data/stdlib/rdoc/0/code_object.rbs +2 -1
  236. data/stdlib/rdoc/0/parser.rbs +1 -1
  237. data/stdlib/rdoc/0/store.rbs +1 -1
  238. data/stdlib/ripper/0/ripper.rbs +20 -17
  239. data/stdlib/securerandom/0/manifest.yaml +2 -0
  240. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  241. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  242. data/stdlib/socket/0/addrinfo.rbs +9 -9
  243. data/stdlib/socket/0/basic_socket.rbs +3 -3
  244. data/stdlib/socket/0/ip_socket.rbs +10 -8
  245. data/stdlib/socket/0/socket.rbs +10 -9
  246. data/stdlib/socket/0/tcp_server.rbs +1 -1
  247. data/stdlib/socket/0/tcp_socket.rbs +1 -1
  248. data/stdlib/socket/0/udp_socket.rbs +1 -1
  249. data/stdlib/socket/0/unix_server.rbs +1 -1
  250. data/stdlib/stringio/0/stringio.rbs +55 -54
  251. data/stdlib/strscan/0/string_scanner.rbs +46 -44
  252. data/stdlib/tempfile/0/tempfile.rbs +24 -20
  253. data/stdlib/time/0/time.rbs +7 -5
  254. data/stdlib/tsort/0/tsort.rbs +7 -6
  255. data/stdlib/uri/0/common.rbs +31 -18
  256. data/stdlib/uri/0/file.rbs +2 -2
  257. data/stdlib/uri/0/generic.rbs +9 -2
  258. data/stdlib/uri/0/http.rbs +2 -2
  259. data/stdlib/uri/0/ldap.rbs +2 -2
  260. data/stdlib/uri/0/mailto.rbs +3 -3
  261. data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
  262. data/stdlib/zlib/0/deflate.rbs +4 -3
  263. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  264. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  265. data/stdlib/zlib/0/inflate.rbs +1 -1
  266. data/stdlib/zlib/0/need_dict.rbs +1 -1
  267. metadata +66 -3
data/core/ractor.rbs CHANGED
@@ -96,8 +96,9 @@
96
96
  # object.
97
97
  #
98
98
  # Deep cloning of objects may be slow, and sometimes impossible. Alternatively,
99
- # `move: true` may be used during sending. This will *move* the unshareable
100
- # object to the receiving ractor, making it inaccessible to the sending ractor.
99
+ # <code>move: true</code> may be used during sending. This will *move* the
100
+ # unshareable object to the receiving ractor, making it inaccessible to the
101
+ # sending ractor.
101
102
  #
102
103
  # data = ['foo', 'bar']
103
104
  # r = Ractor.new do
@@ -171,8 +172,8 @@
171
172
  # # I see C
172
173
  # # can not access instance variables of classes/modules from non-main Ractors (RuntimeError)
173
174
  #
174
- # See also the description of `# shareable_constant_value` pragma in [Comments
175
- # syntax](rdoc-ref:syntax/comments.rdoc) explanation.
175
+ # See also the description of <code># shareable_constant_value</code> pragma in
176
+ # [Comments syntax](rdoc-ref:syntax/comments.rdoc) explanation.
176
177
  #
177
178
  # ## Ractors vs threads
178
179
  #
@@ -392,9 +393,10 @@ class Ractor
392
393
  # # r1 done
393
394
  # # r0 done
394
395
  #
395
- # The following example is almost equivalent to `ractors.map(&:value)` except
396
- # the thread is unblocked when any of the ractors has terminated as opposed to
397
- # waiting for their termination in the array element order.
396
+ # The following example is almost equivalent to
397
+ # <code>ractors.map(&:value)</code> except the thread is unblocked when any of
398
+ # the ractors has terminated as opposed to waiting for their termination in the
399
+ # array element order.
398
400
  #
399
401
  # values = []
400
402
  # until ractors.empty?
@@ -425,8 +427,8 @@ class Ractor
425
427
  # - Ractor.shareable_proc(self: nil){} -> shareable proc
426
428
  # -->
427
429
  # Returns a shareable copy of the given block's Proc. The value of `self` in the
428
- # Proc will be replaced with the value passed via the `self:` keyword, or `nil`
429
- # if not given.
430
+ # Proc will be replaced with the value passed via the <code>self:</code>
431
+ # keyword, or `nil` if not given.
430
432
  #
431
433
  # In a shareable Proc, access to any outer variables if prohibited.
432
434
  #
@@ -539,8 +541,10 @@ class Ractor
539
541
  # Registers the port as a monitoring port for this ractor. When the ractor
540
542
  # terminates, the port receives a Symbol object.
541
543
  #
542
- # * `:exited` is sent if the ractor terminates without an unhandled exception.
543
- # * `:aborted` is sent if the ractor terminates by an unhandled exception.
544
+ # * <code>:exited</code> is sent if the ractor terminates without an unhandled
545
+ # exception.
546
+ # * <code>:aborted</code> is sent if the ractor terminates by an unhandled
547
+ # exception.
544
548
  #
545
549
  # r = Ractor.new{ some_task() }
546
550
  # r.monitor(port = Ractor::Port.new)
data/core/random.rbs CHANGED
@@ -96,6 +96,23 @@ class Random < RBS::Unnamed::Random_Base
96
96
  | (Float | ::Range[Float] max) -> Float
97
97
  | [T < Numeric] (::Range[T]) -> T
98
98
 
99
+ # <!--
100
+ # rdoc-file=random.c
101
+ # - Random.seed -> integer
102
+ # -->
103
+ # Returns the seed value used to initialize the Ruby system PRNG. This may be
104
+ # used to initialize another generator with the same state at a later time,
105
+ # causing it to produce the same sequence of numbers.
106
+ #
107
+ # Random.seed #=> 1234
108
+ # prng1 = Random.new(Random.seed)
109
+ # prng1.seed #=> 1234
110
+ # prng1.rand(100) #=> 47
111
+ # Random.seed #=> 1234
112
+ # Random.rand(100) #=> 47
113
+ #
114
+ def self.seed: () -> ::Integer
115
+
99
116
  # <!--
100
117
  # rdoc-file=random.c
101
118
  # - srand(number = Random.new_seed) -> old_seed
@@ -173,9 +190,10 @@ end
173
190
  # <!-- rdoc-file=lib/random/formatter.rb -->
174
191
  # ## Random number formatter.
175
192
  #
176
- # Formats generated random numbers in many manners. When `'random/formatter'` is
177
- # required, several methods are added to empty core module `Random::Formatter`,
178
- # making them available as Random's instance and module methods.
193
+ # Formats generated random numbers in many manners. When
194
+ # <code>'random/formatter'</code> is required, several methods are added to
195
+ # empty core module <code>Random::Formatter</code>, making them available as
196
+ # Random's instance and module methods.
179
197
  #
180
198
  # Standard library SecureRandom is also extended with the module, and the
181
199
  # methods described below are available as a module methods in it.
data/core/range.rbs CHANGED
@@ -98,8 +98,9 @@
98
98
  # ## Ranges and Other Classes
99
99
  #
100
100
  # An object may be put into a range if its class implements instance method
101
- # `#<=>`. Ruby core classes that do so include Array, Complex, File::Stat,
102
- # Float, Integer, Kernel, Module, Numeric, Rational, String, Symbol, and Time.
101
+ # <code>#<=></code>. Ruby core classes that do so include Array, Complex,
102
+ # File::Stat, Float, Integer, Kernel, Module, Numeric, Rational, String, Symbol,
103
+ # and Time.
103
104
  #
104
105
  # Example:
105
106
  #
@@ -128,12 +129,13 @@
128
129
  # ## Ranges and User-Defined Classes
129
130
  #
130
131
  # A user-defined class that is to be used in a range must implement instance
131
- # method `#<=>`; see Integer#<=>. To make iteration available, it must also
132
- # implement instance method `succ`; see Integer#succ.
132
+ # method <code>#<=></code>; see Integer#<=>. To make iteration available, it
133
+ # must also implement instance method `succ`; see Integer#succ.
133
134
  #
134
- # The class below implements both `#<=>` and `succ`, and so can be used both to
135
- # construct ranges and to iterate over them. Note that the Comparable module is
136
- # included so the `==` method is defined in terms of `#<=>`.
135
+ # The class below implements both <code>#<=></code> and `succ`, and so can be
136
+ # used both to construct ranges and to iterate over them. Note that the
137
+ # Comparable module is included so the <code>==</code> method is defined in
138
+ # terms of <code>#<=></code>.
137
139
  #
138
140
  # # Represent a string of 'X' characters.
139
141
  # class Xs
@@ -268,9 +270,9 @@ class Range[out Elem] < Object
268
270
  # Returns `true` if and only if:
269
271
  #
270
272
  # * `other` is a range.
271
- # * `other.begin == self.begin`.
272
- # * `other.end == self.end`.
273
- # * `other.exclude_end? == self.exclude_end?`.
273
+ # * <code>other.begin == self.begin</code>.
274
+ # * <code>other.end == self.end</code>.
275
+ # * <code>other.exclude_end? == self.exclude_end?</code>.
274
276
  #
275
277
  # Otherwise returns `false`.
276
278
  #
@@ -297,8 +299,8 @@ class Range[out Elem] < Object
297
299
  # rdoc-file=range.c
298
300
  # - self === object -> true or false
299
301
  # -->
300
- # Returns `true` if `object` is between `self.begin` and `self.end`. `false`
301
- # otherwise:
302
+ # Returns `true` if `object` is between <code>self.begin</code> and
303
+ # <code>self.end</code>. `false` otherwise:
302
304
  #
303
305
  # (1..4) === 2 # => true
304
306
  # (1..4) === 5 # => false
@@ -308,7 +310,7 @@ class Range[out Elem] < Object
308
310
  # ('a'..'d') === 'c' # => true
309
311
  # ('a'..'d') === 'e' # => false
310
312
  #
311
- # A case statement uses method `===`, and so:
313
+ # A case statement uses method <code>===</code>, and so:
312
314
  #
313
315
  # case 79
314
316
  # when (1..50)
@@ -364,10 +366,11 @@ class Range[out Elem] < Object
364
366
  # -->
365
367
  # Returns `true` if the given argument is within `self`, `false` otherwise.
366
368
  #
367
- # With non-range argument `object`, evaluates with `<=` and `<`.
369
+ # With non-range argument `object`, evaluates with <code><=</code> and
370
+ # <code><</code>.
368
371
  #
369
- # For range `self` with included end value (`#exclude_end? == false`), evaluates
370
- # thus:
372
+ # For range `self` with included end value (<code>#exclude_end? ==
373
+ # false</code>), evaluates thus:
371
374
  #
372
375
  # self.begin <= object <= self.end
373
376
  #
@@ -387,8 +390,8 @@ class Range[out Elem] < Object
387
390
  # r.cover?('e') # => false
388
391
  # r.cover?(0) # => false
389
392
  #
390
- # For range `r` with excluded end value (`#exclude_end? == true`), evaluates
391
- # thus:
393
+ # For range `r` with excluded end value (<code>#exclude_end? == true</code>),
394
+ # evaluates thus:
392
395
  #
393
396
  # r.begin <= object < r.end
394
397
  #
@@ -434,8 +437,8 @@ class Range[out Elem] < Object
434
437
  # Returns `false` if either:
435
438
  #
436
439
  # * The begin value of `self` is larger than its end value.
437
- # * An internal call to `#<=>` returns `nil`; that is, the operands are not
438
- # comparable.
440
+ # * An internal call to <code>#<=></code> returns `nil`; that is, the operands
441
+ # are not comparable.
439
442
  #
440
443
  # Beginless ranges cover all values of the same type before the end, excluding
441
444
  # the end for exclusive ranges. Beginless ranges cover ranges that end before
@@ -493,7 +496,7 @@ class Range[out Elem] < Object
493
496
  # (1..4).each {|element| a.push(element) } # => 1..4
494
497
  # a # => [1, 2, 3, 4]
495
498
  #
496
- # Raises an exception unless `self.first.respond_to?(:succ)`.
499
+ # Raises an exception unless <code>self.first.respond_to?(:succ)</code>.
497
500
  #
498
501
  # With no block given, returns an enumerator.
499
502
  #
@@ -556,7 +559,7 @@ class Range[out Elem] < Object
556
559
  # - hash -> integer
557
560
  # -->
558
561
  # Returns the integer hash value for `self`. Two range objects `r0` and `r1`
559
- # have the same hash value if and only if `r0.eql?(r1)`.
562
+ # have the same hash value if and only if <code>r0.eql?(r1)</code>.
560
563
  #
561
564
  # Related: Range#eql?, Object#hash.
562
565
  #
@@ -608,8 +611,8 @@ class Range[out Elem] < Object
608
611
  # rdoc-file=range.c
609
612
  # - inspect -> string
610
613
  # -->
611
- # Returns a string representation of `self`, including `begin.inspect` and
612
- # `end.inspect`:
614
+ # Returns a string representation of `self`, including
615
+ # <code>begin.inspect</code> and <code>end.inspect</code>:
613
616
  #
614
617
  # (1..4).inspect # => "1..4"
615
618
  # (1...4).inspect # => "1...4"
@@ -668,8 +671,8 @@ class Range[out Elem] < Object
668
671
  # - max {|a, b| ... } -> object
669
672
  # - max(n) {|a, b| ... } -> array
670
673
  # -->
671
- # Returns the maximum value in `self`, using method `#<=>` or a given block for
672
- # comparison.
674
+ # Returns the maximum value in `self`, using method <code>#<=></code> or a given
675
+ # block for comparison.
673
676
  #
674
677
  # With no argument and no block given, returns the maximum-valued element of
675
678
  # `self`.
@@ -736,15 +739,12 @@ class Range[out Elem] < Object
736
739
  #
737
740
  # Raises an exception if either:
738
741
  #
739
- # * `self` is a endless range: `(1..)`.
742
+ # * `self` is a endless range: <code>(1..)</code>.
740
743
  # * A block is given and `self` is a beginless range.
741
744
  #
742
745
  # Related: Range#min, Range#minmax.
743
746
  #
744
- def max: () -> Elem
745
- | () { (Elem a, Elem b) -> Integer } -> Elem
746
- | (Integer n) -> ::Array[Elem]
747
- | (Integer n) { (Elem a, Elem b) -> Integer } -> ::Array[Elem]
747
+ def max: ...
748
748
 
749
749
  # <!--
750
750
  # rdoc-file=range.c
@@ -753,8 +753,8 @@ class Range[out Elem] < Object
753
753
  # - min {|a, b| ... } -> object
754
754
  # - min(n) {|a, b| ... } -> array
755
755
  # -->
756
- # Returns the minimum value in `self`, using method `#<=>` or a given block for
757
- # comparison.
756
+ # Returns the minimum value in `self`, using method <code>#<=></code> or a given
757
+ # block for comparison.
758
758
  #
759
759
  # With no argument and no block given, returns the minimum-valued element of
760
760
  # `self`.
@@ -821,15 +821,58 @@ class Range[out Elem] < Object
821
821
  #
822
822
  # Raises an exception if either:
823
823
  #
824
- # * `self` is a beginless range: `(..4)`.
824
+ # * `self` is a beginless range: <code>(..4)</code>.
825
825
  # * A block is given and `self` is an endless range.
826
826
  #
827
827
  # Related: Range#max, Range#minmax.
828
828
  #
829
- def min: () -> Elem
830
- | () { (Elem a, Elem b) -> Integer } -> Elem
831
- | (Integer n) -> ::Array[Elem]
832
- | (Integer n) { (Elem a, Elem b) -> Integer } -> ::Array[Elem]
829
+ def min: ...
830
+
831
+ # <!--
832
+ # rdoc-file=range.c
833
+ # - minmax -> [object, object]
834
+ # - minmax {|a, b| ... } -> [object, object]
835
+ # -->
836
+ # Returns a 2-element array containing the minimum and maximum value in `self`,
837
+ # either according to comparison method <code>#<=></code> or a given block.
838
+ #
839
+ # With no block given, returns the minimum and maximum values, using
840
+ # <code>#<=></code> for comparison:
841
+ #
842
+ # (1..4).minmax # => [1, 4]
843
+ # (1...4).minmax # => [1, 3]
844
+ # ('a'..'d').minmax # => ["a", "d"]
845
+ # (-4..-1).minmax # => [-4, -1]
846
+ #
847
+ # With a block given, the block must return an integer:
848
+ #
849
+ # * Negative if `a` is smaller than `b`.
850
+ # * Zero if `a` and `b` are equal.
851
+ # * Positive if `a` is larger than `b`.
852
+ #
853
+ # The block is called <code>self.size</code> times to compare elements; returns
854
+ # a 2-element Array containing the minimum and maximum values from `self`, per
855
+ # the block:
856
+ #
857
+ # (1..4).minmax {|a, b| -(a <=> b) } # => [4, 1]
858
+ #
859
+ # Returns <code>[nil, nil]</code> if:
860
+ #
861
+ # * The begin value of the range is larger than the end value:
862
+ #
863
+ # (4..1).minmax # => [nil, nil]
864
+ # (4..1).minmax {|a, b| -(a <=> b) } # => [nil, nil]
865
+ #
866
+ # * The begin value of an exclusive range is equal to the end value:
867
+ #
868
+ # (1...1).minmax # => [nil, nil]
869
+ # (1...1).minmax {|a, b| -(a <=> b) } # => [nil, nil]
870
+ #
871
+ # Raises an exception if `self` is a beginless or an endless range.
872
+ #
873
+ # Related: Range#min, Range#max.
874
+ #
875
+ def minmax: ...
833
876
 
834
877
  # <!--
835
878
  # rdoc-file=range.c
@@ -845,8 +888,8 @@ class Range[out Elem] < Object
845
888
  #
846
889
  # (1..3).overlap?(1) # TypeError
847
890
  #
848
- # Returns `false` if an internal call to `#<=>` returns `nil`; that is, the
849
- # operands are not comparable.
891
+ # Returns `false` if an internal call to <code>#<=></code> returns `nil`; that
892
+ # is, the operands are not comparable.
850
893
  #
851
894
  # (1..3).overlap?('a'..'d') # => false
852
895
  #
@@ -890,7 +933,8 @@ class Range[out Elem] < Object
890
933
  # (...[]).overlap?(...[]) # => true
891
934
  #
892
935
  # Even if those ranges are effectively empty (no number can be smaller than
893
- # `-Float::INFINITY`), they are still considered overlapping with themselves.
936
+ # <code>-Float::INFINITY</code>), they are still considered overlapping with
937
+ # themselves.
894
938
  #
895
939
  # Related: Range#cover?.
896
940
  #
@@ -938,13 +982,49 @@ class Range[out Elem] < Object
938
982
  #
939
983
  def size: () -> (Integer | Float | nil)
940
984
 
985
+ # <!--
986
+ # rdoc-file=range.c
987
+ # - count -> integer
988
+ # - count(object) -> integer
989
+ # - count {|element| ... } -> integer
990
+ # -->
991
+ # Returns the count of elements, based on an argument or block criterion, if
992
+ # given.
993
+ #
994
+ # With no argument and no block given, returns the number of elements:
995
+ #
996
+ # (1..4).count # => 4
997
+ # (1...4).count # => 3
998
+ # ('a'..'d').count # => 4
999
+ # ('a'...'d').count # => 3
1000
+ # (1..).count # => Infinity
1001
+ # (..4).count # => Infinity
1002
+ #
1003
+ # With argument `object`, returns the number of `object` found in `self`, which
1004
+ # will usually be zero or one:
1005
+ #
1006
+ # (1..4).count(2) # => 1
1007
+ # (1..4).count(5) # => 0
1008
+ # (1..4).count('a') # => 0
1009
+ #
1010
+ # With a block given, calls the block with each element; returns the number of
1011
+ # elements for which the block returns a truthy value:
1012
+ #
1013
+ # (1..4).count {|element| element < 3 } # => 2
1014
+ #
1015
+ # Related: Range#size.
1016
+ #
1017
+ def count: () -> (Integer | Float)
1018
+ | (untyped) -> Integer
1019
+ | () { (Elem) -> boolish } -> Integer
1020
+
941
1021
  # <!--
942
1022
  # rdoc-file=range.c
943
1023
  # - step(s = 1) {|element| ... } -> self
944
1024
  # - step(s = 1) -> enumerator/arithmetic_sequence
945
1025
  # -->
946
1026
  # Iterates over the elements of range in steps of `s`. The iteration is
947
- # performed by `+` operator:
1027
+ # performed by <code>+</code> operator:
948
1028
  #
949
1029
  # (0..6).step(2) { puts _1 } #=> 1..5
950
1030
  # # Prints: 0, 2, 4, 6
@@ -959,8 +1039,8 @@ class Range[out Elem] < Object
959
1039
  # # 2022-02-28 00:00:00 UTC
960
1040
  # # 2022-03-01 00:00:00 UTC
961
1041
  #
962
- # If ` + step` decreases the value, iteration is still performed when step
963
- # `begin` is higher than the `end`:
1042
+ # If <code> + step</code> decreases the value, iteration is still performed when
1043
+ # step `begin` is higher than the `end`:
964
1044
  #
965
1045
  # (0..6).step(-2) { puts _1 }
966
1046
  # # Prints nothing
@@ -1025,8 +1105,8 @@ class Range[out Elem] < Object
1025
1105
  # rdoc-file=range.c
1026
1106
  # - to_s -> string
1027
1107
  # -->
1028
- # Returns a string representation of `self`, including `begin.to_s` and
1029
- # `end.to_s`:
1108
+ # Returns a string representation of `self`, including <code>begin.to_s</code>
1109
+ # and <code>end.to_s</code>:
1030
1110
  #
1031
1111
  # (1..4).to_s # => "1..4"
1032
1112
  # (1...4).to_s # => "1...4"
@@ -1049,9 +1129,9 @@ class Range[out Elem] < Object
1049
1129
  # Returns `true` if and only if:
1050
1130
  #
1051
1131
  # * `other` is a range.
1052
- # * `other.begin.eql?(self.begin)`.
1053
- # * `other.end.eql?(self.end)`.
1054
- # * `other.exclude_end? == self.exclude_end?`.
1132
+ # * <code>other.begin.eql?(self.begin)</code>.
1133
+ # * <code>other.end.eql?(self.end)</code>.
1134
+ # * <code>other.exclude_end? == self.exclude_end?</code>.
1055
1135
  #
1056
1136
  # Otherwise returns `false`.
1057
1137
  #
@@ -1103,4 +1183,27 @@ class Range[out Elem] < Object
1103
1183
  # Related: Range#cover?.
1104
1184
  #
1105
1185
  def member?: (untyped obj) -> bool
1186
+
1187
+ # <!--
1188
+ # rdoc-file=range.c
1189
+ # - to_a -> array
1190
+ # -->
1191
+ # Returns an array containing the elements in `self`, if a finite collection;
1192
+ # raises an exception otherwise.
1193
+ #
1194
+ # (1..4).to_a # => [1, 2, 3, 4]
1195
+ # (1...4).to_a # => [1, 2, 3]
1196
+ # ('a'..'d').to_a # => ["a", "b", "c", "d"]
1197
+ #
1198
+ def to_a: ...
1199
+
1200
+ # <!-- rdoc-file=range.c -->
1201
+ # Returns an array containing the elements in `self`, if a finite collection;
1202
+ # raises an exception otherwise.
1203
+ #
1204
+ # (1..4).to_a # => [1, 2, 3, 4]
1205
+ # (1...4).to_a # => [1, 2, 3]
1206
+ # ('a'..'d').to_a # => ["a", "b", "c", "d"]
1207
+ #
1208
+ alias entries to_a
1106
1209
  end
data/core/rational.rbs CHANGED
@@ -110,8 +110,6 @@ class Rational < Numeric
110
110
  | (Complex) -> Complex
111
111
  | (Numeric) -> Rational
112
112
 
113
- def +@: () -> Rational
114
-
115
113
  # <!--
116
114
  # rdoc-file=rational.c
117
115
  # - self - other -> numeric
@@ -163,7 +161,7 @@ class Rational < Numeric
163
161
  #
164
162
  # Returns:
165
163
  #
166
- # * `-1`, if `self` is less than `other`.
164
+ # * <code>-1</code>, if `self` is less than `other`.
167
165
  # * `0`, if the two values are the same.
168
166
  # * `1`, if `self` is greater than `other`.
169
167
  # * `nil`, if the two values are incomparable.
@@ -210,12 +208,6 @@ class Rational < Numeric
210
208
  #
211
209
  def abs: () -> Rational
212
210
 
213
- def abs2: () -> Rational
214
-
215
- def angle: () -> (Integer | Float)
216
-
217
- alias arg angle
218
-
219
211
  # <!--
220
212
  # rdoc-file=rational.c
221
213
  # - rat.ceil([ndigits]) -> integer or rational
@@ -224,7 +216,7 @@ class Rational < Numeric
224
216
  # `ndigits` decimal digits (default: 0).
225
217
  #
226
218
  # When the precision is negative, the returned value is an integer with at least
227
- # `ndigits.abs` trailing zeros.
219
+ # <code>ndigits.abs</code> trailing zeros.
228
220
  #
229
221
  # Returns a rational when `ndigits` is positive, otherwise returns an integer.
230
222
  #
@@ -244,10 +236,6 @@ class Rational < Numeric
244
236
 
245
237
  def coerce: (Numeric) -> [ Numeric, Numeric ]
246
238
 
247
- def conj: () -> Rational
248
-
249
- def conjugate: () -> Rational
250
-
251
239
  # <!--
252
240
  # rdoc-file=rational.c
253
241
  # - rat.denominator -> integer
@@ -261,15 +249,9 @@ class Rational < Numeric
261
249
  #
262
250
  def denominator: () -> Integer
263
251
 
264
- def div: (Numeric) -> Integer
265
-
266
252
  def divmod: (Integer | Float | Rational) -> [ Integer, Rational ]
267
253
  | (Numeric) -> [ Numeric, Numeric ]
268
254
 
269
- def dup: () -> self
270
-
271
- def eql?: (untyped) -> bool
272
-
273
255
  # <!--
274
256
  # rdoc-file=rational.c
275
257
  # - rat.fdiv(numeric) -> float
@@ -282,8 +264,6 @@ class Rational < Numeric
282
264
  #
283
265
  def fdiv: (Numeric) -> Float
284
266
 
285
- def finite?: () -> bool
286
-
287
267
  # <!--
288
268
  # rdoc-file=rational.c
289
269
  # - rat.floor([ndigits]) -> integer or rational
@@ -292,7 +272,7 @@ class Rational < Numeric
292
272
  # `ndigits` decimal digits (default: 0).
293
273
  #
294
274
  # When the precision is negative, the returned value is an integer with at least
295
- # `ndigits.abs` trailing zeros.
275
+ # <code>ndigits.abs</code> trailing zeros.
296
276
  #
297
277
  # Returns a rational when `ndigits` is positive, otherwise returns an integer.
298
278
  #
@@ -317,14 +297,6 @@ class Rational < Numeric
317
297
  #
318
298
  def hash: () -> Integer
319
299
 
320
- def i: () -> Complex
321
-
322
- def imag: () -> Integer
323
-
324
- def imaginary: () -> Integer
325
-
326
- def infinite?: () -> Integer?
327
-
328
300
  # <!--
329
301
  # rdoc-file=rational.c
330
302
  # - rat.inspect -> string
@@ -337,8 +309,6 @@ class Rational < Numeric
337
309
  #
338
310
  def inspect: () -> String
339
311
 
340
- def integer?: () -> bool
341
-
342
312
  # <!-- rdoc-file=rational.c -->
343
313
  # Returns the absolute value of `rat`.
344
314
  #
@@ -358,8 +328,6 @@ class Rational < Numeric
358
328
  #
359
329
  def negative?: () -> bool
360
330
 
361
- def nonzero?: () -> self?
362
-
363
331
  # <!--
364
332
  # rdoc-file=rational.c
365
333
  # - rat.numerator -> integer
@@ -373,8 +341,6 @@ class Rational < Numeric
373
341
  #
374
342
  def numerator: () -> Integer
375
343
 
376
- alias phase angle
377
-
378
344
  def polar: () -> [ Rational, Integer | Float ]
379
345
 
380
346
  # <!--
@@ -413,14 +379,8 @@ class Rational < Numeric
413
379
  #
414
380
  def rationalize: (?Numeric eps) -> Rational
415
381
 
416
- def real: () -> Rational
417
-
418
- def real?: () -> true
419
-
420
382
  def rect: () -> [ Rational, Numeric ]
421
383
 
422
- alias rectangular rect
423
-
424
384
  def remainder: (Float) -> Float
425
385
  | (Numeric) -> Rational
426
386
 
@@ -432,7 +392,7 @@ class Rational < Numeric
432
392
  # decimal digits (default: 0).
433
393
  #
434
394
  # When the precision is negative, the returned value is an integer with at least
435
- # `ndigits.abs` trailing zeros.
395
+ # <code>ndigits.abs</code> trailing zeros.
436
396
  #
437
397
  # Returns a rational when `ndigits` is positive, otherwise returns an integer.
438
398
  #
@@ -462,13 +422,6 @@ class Rational < Numeric
462
422
  def round: (?half: :up | :down | :even) -> Integer
463
423
  | (Integer digits, ?half: :up | :down | :even) -> (Integer | Rational)
464
424
 
465
- def step: (?Numeric limit, ?Numeric step) { (Rational) -> void } -> self
466
- | (?Numeric limit, ?Numeric step) -> Enumerator[Rational, self]
467
- | (?by: Numeric, ?to: Numeric) { (Rational) -> void } -> self
468
- | (?by: Numeric, ?to: Numeric) -> Enumerator[Rational, self]
469
-
470
- def to_c: () -> Complex
471
-
472
425
  # <!--
473
426
  # rdoc-file=rational.c
474
427
  # - rat.to_f -> float
@@ -498,8 +451,6 @@ class Rational < Numeric
498
451
  #
499
452
  def to_i: () -> Integer
500
453
 
501
- alias to_int to_i
502
-
503
454
  # <!--
504
455
  # rdoc-file=rational.c
505
456
  # - rat.to_r -> self
@@ -531,7 +482,7 @@ class Rational < Numeric
531
482
  # digits (default: 0).
532
483
  #
533
484
  # When the precision is negative, the returned value is an integer with at least
534
- # `ndigits.abs` trailing zeros.
485
+ # <code>ndigits.abs</code> trailing zeros.
535
486
  #
536
487
  # Returns a rational when `ndigits` is positive, otherwise returns an integer.
537
488
  #
@@ -548,6 +499,4 @@ class Rational < Numeric
548
499
  #
549
500
  def truncate: () -> Integer
550
501
  | (Integer ndigits) -> (Integer | Rational)
551
-
552
- def zero?: () -> bool
553
502
  end