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/core/integer.rbs CHANGED
@@ -88,7 +88,7 @@
88
88
  # * #downto: Calls the given block with each integer value from `self` down to
89
89
  # the given value.
90
90
  # * #times: Calls the given block `self` times with each integer in
91
- # `(0..self-1)`.
91
+ # <code>(0..self-1)</code>.
92
92
  # * #upto: Calls the given block with each integer value from `self` up to the
93
93
  # given value.
94
94
  #
@@ -114,9 +114,9 @@ class Integer < Numeric
114
114
  # Integer.sqrt(4.0) # => 2
115
115
  # Integer.sqrt(3.14159) # => 1
116
116
  #
117
- # This method is equivalent to `Math.sqrt(numeric).floor`, except that the
118
- # result of the latter code may differ from the true value due to the limited
119
- # precision of floating point arithmetic.
117
+ # This method is equivalent to <code>Math.sqrt(numeric).floor</code>, except
118
+ # that the result of the latter code may differ from the true value due to the
119
+ # limited precision of floating point arithmetic.
120
120
  #
121
121
  # Integer.sqrt(10**46) # => 100000000000000000000000
122
122
  # Math.sqrt(10**46).floor # => 99999999999999991611392
@@ -132,23 +132,24 @@ class Integer < Numeric
132
132
  # If `object` is an Integer object, returns `object`.
133
133
  # Integer.try_convert(1) # => 1
134
134
  #
135
- # Otherwise if `object` responds to `:to_int`, calls `object.to_int` and returns
136
- # the result.
135
+ # Otherwise if `object` responds to <code>:to_int</code>, calls
136
+ # <code>object.to_int</code> and returns the result.
137
137
  # Integer.try_convert(1.25) # => 1
138
138
  #
139
- # Returns `nil` if `object` does not respond to `:to_int`
139
+ # Returns `nil` if `object` does not respond to <code>:to_int</code>
140
140
  # Integer.try_convert([]) # => nil
141
141
  #
142
- # Raises an exception unless `object.to_int` returns an Integer object.
142
+ # Raises an exception unless <code>object.to_int</code> returns an Integer
143
+ # object.
143
144
  #
144
145
  def self.try_convert: (int) -> Integer
145
146
  | (untyped) -> Integer?
146
147
 
147
148
  # <!--
148
149
  # rdoc-file=numeric.c
149
- # - self % other -> real_number
150
+ # - self % other -> real_numeric
150
151
  # -->
151
- # Returns `self` modulo `other` as a real number.
152
+ # Returns `self` modulo `other` as a real numeric (Integer, Float, or Rational).
152
153
  #
153
154
  # For integer `n` and real number `r`, these expressions are equivalent:
154
155
  #
@@ -193,13 +194,13 @@ class Integer < Numeric
193
194
 
194
195
  # <!--
195
196
  # rdoc-file=numeric.c
196
- # - self * numeric -> numeric_result
197
+ # - self * other -> numeric
197
198
  # -->
198
- # Performs multiplication:
199
+ # Returns the numeric product of `self` and `other`:
199
200
  #
200
201
  # 4 * 2 # => 8
201
- # 4 * -2 # => -8
202
202
  # -4 * 2 # => -8
203
+ # 4 * -2 # => -8
203
204
  # 4 * 2.0 # => 8.0
204
205
  # 4 * Rational(1, 3) # => (4/3)
205
206
  # 4 * Complex(2, 0) # => (8+0i)
@@ -211,17 +212,47 @@ class Integer < Numeric
211
212
 
212
213
  # <!--
213
214
  # rdoc-file=numeric.c
214
- # - self ** numeric -> numeric_result
215
+ # - self ** exponent -> numeric
215
216
  # -->
216
- # Raises `self` to the power of `numeric`:
217
- #
218
- # 2 ** 3 # => 8
219
- # 2 ** -3 # => (1/8)
220
- # -2 ** 3 # => -8
221
- # -2 ** -3 # => (-1/8)
222
- # 2 ** 3.3 # => 9.849155306759329
223
- # 2 ** Rational(3, 1) # => (8/1)
224
- # 2 ** Complex(3, 0) # => (8+0i)
217
+ # Returns `self` raised to the power `exponent`:
218
+ #
219
+ # # Result for non-negative Integer exponent is Integer.
220
+ # 2 ** 0 # => 1
221
+ # 2 ** 1 # => 2
222
+ # 2 ** 2 # => 4
223
+ # 2 ** 3 # => 8
224
+ # -2 ** 3 # => -8
225
+ # # Result for negative Integer exponent is Rational, not Float.
226
+ # 2 ** -3 # => (1/8)
227
+ # -2 ** -3 # => (-1/8)
228
+ #
229
+ # # Result for Float exponent is Float.
230
+ # 2 ** 0.0 # => 1.0
231
+ # 2 ** 1.0 # => 2.0
232
+ # 2 ** 2.0 # => 4.0
233
+ # 2 ** 3.0 # => 8.0
234
+ # -2 ** 3.0 # => -8.0
235
+ # 2 ** -3.0 # => 0.125
236
+ # -2 ** -3.0 # => -0.125
237
+ #
238
+ # # Result for non-negative Complex exponent is Complex with Integer parts.
239
+ # 2 ** Complex(0, 0) # => (1+0i)
240
+ # 2 ** Complex(1, 0) # => (2+0i)
241
+ # 2 ** Complex(2, 0) # => (4+0i)
242
+ # 2 ** Complex(3, 0) # => (8+0i)
243
+ # -2 ** Complex(3, 0) # => (-8+0i)
244
+ # # Result for negative Complex exponent is Complex with Rational parts.
245
+ # 2 ** Complex(-3, 0) # => ((1/8)+(0/1)*i)
246
+ # -2 ** Complex(-3, 0) # => ((-1/8)+(0/1)*i)
247
+ #
248
+ # # Result for Rational exponent is Rational.
249
+ # 2 ** Rational(0, 1) # => (1/1)
250
+ # 2 ** Rational(1, 1) # => (2/1)
251
+ # 2 ** Rational(2, 1) # => (4/1)
252
+ # 2 ** Rational(3, 1) # => (8/1)
253
+ # -2 ** Rational(3, 1) # => (-8/1)
254
+ # 2 ** Rational(-3, 1) # => (1/8)
255
+ # -2 ** Rational(-3, 1) # => (-1/8)
225
256
  #
226
257
  def **: (Integer) -> Numeric
227
258
  | (Float) -> Numeric
@@ -230,29 +261,31 @@ class Integer < Numeric
230
261
 
231
262
  # <!--
232
263
  # rdoc-file=numeric.c
233
- # - self + numeric -> numeric_result
264
+ # - self + other -> numeric
234
265
  # -->
235
- # Performs addition:
266
+ # Returns the sum of `self` and `other`:
267
+ #
268
+ # 1 + 1 # => 2
269
+ # 1 + -1 # => 0
270
+ # 1 + 0 # => 1
271
+ # 1 + -2 # => -1
272
+ # 1 + Complex(1, 0) # => (2+0i)
273
+ # 1 + Rational(1, 1) # => (2/1)
274
+ #
275
+ # For a computation involving Floats, the result may be inexact (see Float#+):
236
276
  #
237
- # 2 + 2 # => 4
238
- # -2 + 2 # => 0
239
- # -2 + -2 # => -4
240
- # 2 + 2.0 # => 4.0
241
- # 2 + Rational(2, 1) # => (4/1)
242
- # 2 + Complex(2, 0) # => (4+0i)
277
+ # 1 + 3.14 # => 4.140000000000001
243
278
  #
244
279
  def +: (Integer) -> Integer
245
280
  | (Float) -> Float
246
281
  | (Rational) -> Rational
247
282
  | (Complex) -> Complex
248
283
 
249
- def +@: () -> Integer
250
-
251
284
  # <!--
252
285
  # rdoc-file=numeric.c
253
- # - self - numeric -> numeric_result
286
+ # - self - other -> numeric
254
287
  # -->
255
- # Performs subtraction:
288
+ # Returns the difference of `self` and `other`:
256
289
  #
257
290
  # 4 - 2 # => 2
258
291
  # -4 - 2 # => -6
@@ -268,28 +301,34 @@ class Integer < Numeric
268
301
 
269
302
  # <!--
270
303
  # rdoc-file=numeric.rb
271
- # - -int -> integer
304
+ # - -self -> integer
272
305
  # -->
273
- # Returns `self`, negated.
306
+ # Returns `self`, negated:
307
+ #
308
+ # -1 # => -1
309
+ # -(-1) # => 1
310
+ # -0 # => 0
274
311
  #
275
312
  def -@: () -> Integer
276
313
 
277
314
  # <!--
278
315
  # rdoc-file=numeric.c
279
- # - self / numeric -> numeric_result
316
+ # - self / other -> numeric
280
317
  # -->
281
- # Performs division; for integer `numeric`, truncates the result to an integer:
318
+ # Returns the quotient of `self` and `other`.
319
+ #
320
+ # For integer `other`, truncates the result to an integer:
282
321
  #
283
- # 4 / 3 # => 1
284
- # 4 / -3 # => -2
285
- # -4 / 3 # => -2
286
- # -4 / -3 # => 1
322
+ # 4 / 3 # => 1
323
+ # 4 / -3 # => -2
324
+ # -4 / 3 # => -2
325
+ # -4 / -3 # => 1
287
326
  #
288
- # For other +numeric+, returns non-integer result:
327
+ # For non-integer `other`, returns a non-integer result:
289
328
  #
290
- # 4 / 3.0 # => 1.3333333333333333
291
- # 4 / Rational(3, 1) # => (4/3)
292
- # 4 / Complex(3, 0) # => ((4/3)+0i)
329
+ # 4 / 3.0 # => 1.3333333333333333
330
+ # 4 / Rational(3, 1) # => (4/3)
331
+ # 4 / Complex(3, 0) # => ((4/3)+0i)
293
332
  #
294
333
  def /: (Integer) -> Integer
295
334
  | (Float) -> Float
@@ -300,15 +339,14 @@ class Integer < Numeric
300
339
  # rdoc-file=numeric.c
301
340
  # - self < other -> true or false
302
341
  # -->
303
- # Returns `true` if the value of `self` is less than that of `other`:
342
+ # Returns whether the value of `self` is less than the value of `other`; `other`
343
+ # must be numeric, but may not be Complex:
304
344
  #
305
- # 1 < 0 # => false
306
- # 1 < 1 # => false
307
- # 1 < 2 # => true
308
- # 1 < 0.5 # => false
309
- # 1 < Rational(1, 2) # => false
310
- #
311
- # Raises an exception if the comparison cannot be made.
345
+ # 1 < 0 # => false
346
+ # 1 < 1 # => false
347
+ # 1 < 2 # => true
348
+ # 1 < 0.5 # => false
349
+ # 1 < Rational(1, 2) # => false
312
350
  #
313
351
  def <: (Numeric) -> bool
314
352
 
@@ -331,44 +369,46 @@ class Integer < Numeric
331
369
 
332
370
  # <!--
333
371
  # rdoc-file=numeric.c
334
- # - self <= real -> true or false
372
+ # - self <= other -> true or false
335
373
  # -->
336
- # Returns `true` if the value of `self` is less than or equal to that of
337
- # `other`:
374
+ # Returns whether the value of `self` is less than or equal to the value of
375
+ # `other`; `other` must be numeric, but may not be Complex:
338
376
  #
339
- # 1 <= 0 # => false
340
- # 1 <= 1 # => true
341
- # 1 <= 2 # => true
342
- # 1 <= 0.5 # => false
343
- # 1 <= Rational(1, 2) # => false
377
+ # 1 <= 0 # => false
378
+ # 1 <= 1 # => true
379
+ # 1 <= 2 # => true
380
+ # 1 <= 0.5 # => false
381
+ # 1 <= Rational(1, 2) # => false
344
382
  #
345
- # Raises an exception if the comparison cannot be made.
383
+ # Raises an exception if the comparison cannot be made.
346
384
  #
347
385
  def <=: (Numeric) -> bool
348
386
 
349
387
  # <!--
350
388
  # rdoc-file=numeric.c
351
- # - self <=> other -> -1, 0, +1, or nil
389
+ # - self <=> other -> -1, 0, 1, or nil
352
390
  # -->
391
+ # Compares `self` and `other`.
392
+ #
353
393
  # Returns:
354
394
  #
355
- # * -1, if `self` is less than `other`.
356
- # * 0, if `self` is equal to `other`.
357
- # * 1, if `self` is greater then `other`.
395
+ # * <code>-1</code>, if `self` is less than `other`.
396
+ # * `0`, if `self` is equal to `other`.
397
+ # * `1`, if `self` is greater then `other`.
358
398
  # * `nil`, if `self` and `other` are incomparable.
359
399
  #
360
400
  # Examples:
361
401
  #
362
402
  # 1 <=> 2 # => -1
363
403
  # 1 <=> 1 # => 0
364
- # 1 <=> 0 # => 1
365
- # 1 <=> 'foo' # => nil
366
- #
367
404
  # 1 <=> 1.0 # => 0
368
405
  # 1 <=> Rational(1, 1) # => 0
369
406
  # 1 <=> Complex(1, 0) # => 0
407
+ # 1 <=> 0 # => 1
408
+ # 1 <=> 'foo' # => nil
370
409
  #
371
- # This method is the basis for comparisons in module Comparable.
410
+ # Class Integer includes module Comparable, each of whose methods uses
411
+ # Integer#<=> for comparison.
372
412
  #
373
413
  def <=>: (Integer | Rational) -> Integer
374
414
  | (untyped) -> Integer?
@@ -463,8 +503,8 @@ class Integer < Numeric
463
503
  # n[2] # => 0
464
504
  # n[3] # => 0
465
505
  #
466
- # In principle, `n[i]` is equivalent to `(n >> i) & 1`. Thus, negative index
467
- # always returns zero:
506
+ # In principle, <code>n[i]</code> is equivalent to <code>(n >> i) & 1</code>.
507
+ # Thus, negative index always returns zero:
468
508
  #
469
509
  # 255[-1] # => 0
470
510
  #
@@ -475,8 +515,9 @@ class Integer < Numeric
475
515
  # "%010b" % n[0, 10] # => "0000111000"
476
516
  # "%010b" % n[4, 10] # => "0000000011"
477
517
  #
478
- # With argument `range`, returns `range.size` bits from `self`, beginning at
479
- # `range.begin` and including bits of greater significance:
518
+ # With argument `range`, returns <code>range.size</code> bits from `self`,
519
+ # beginning at <code>range.begin</code> and including bits of greater
520
+ # significance:
480
521
  #
481
522
  # n = 0b111000 # => 56
482
523
  # "%010b" % n[0..9] # => "0000111000"
@@ -515,8 +556,6 @@ class Integer < Numeric
515
556
  #
516
557
  def abs: () -> Integer
517
558
 
518
- def abs2: () -> Integer
519
-
520
559
  # <!--
521
560
  # rdoc-file=numeric.c
522
561
  # - allbits?(mask) -> true or false
@@ -540,8 +579,6 @@ class Integer < Numeric
540
579
  #
541
580
  def allbits?: (int mask) -> bool
542
581
 
543
- def angle: () -> (Integer | Float)
544
-
545
582
  # <!--
546
583
  # rdoc-file=numeric.c
547
584
  # - anybits?(mask) -> true or false
@@ -576,7 +613,7 @@ class Integer < Numeric
576
613
  # significant bit has bit position 1). If there is no such bit (zero or minus
577
614
  # one), returns zero.
578
615
  #
579
- # This method returns `ceil(log2(self < 0 ? -self : self + 1))`>.
616
+ # This method returns <code>ceil(log2(self < 0 ? -self : self + 1))</code>>.
580
617
  #
581
618
  # (-2**1000-1).bit_length # => 1001
582
619
  # (-2**1000).bit_length # => 1000
@@ -629,7 +666,7 @@ class Integer < Numeric
629
666
  #
630
667
  # * When `self` is non-zero and `ndigits` is negative,
631
668
  # returns a value based on a computed granularity:
632
- # * The granularity is `10 ** ndigits.abs`.
669
+ # * The granularity is <code>10 ** ndigits.abs</code>.
633
670
  # * The returned value is the smallest multiple of the granularity
634
671
  # that is greater than or equal to `self`.
635
672
  # Examples with positive `self`:
@@ -706,10 +743,6 @@ class Integer < Numeric
706
743
  #
707
744
  def coerce: (Numeric) -> [ Numeric, Numeric ]
708
745
 
709
- def conj: () -> Integer
710
-
711
- def conjugate: () -> Integer
712
-
713
746
  # <!--
714
747
  # rdoc-file=numeric.rb
715
748
  # - denominator -> 1
@@ -755,7 +788,7 @@ class Integer < Numeric
755
788
  # rdoc-file=numeric.c
756
789
  # - divmod(other) -> array
757
790
  # -->
758
- # Returns a 2-element array `[q, r]`, where
791
+ # Returns a 2-element array <code>[q, r]</code>, where
759
792
  #
760
793
  # q = (self/other).floor # Quotient
761
794
  # r = self % other # Remainder
@@ -801,10 +834,6 @@ class Integer < Numeric
801
834
  def downto: (Numeric limit) { (Integer) -> void } -> Integer
802
835
  | (Numeric limit) -> ::Enumerator[Integer, self]
803
836
 
804
- def dup: () -> self
805
-
806
- def eql?: (untyped) -> bool
807
-
808
837
  # <!--
809
838
  # rdoc-file=numeric.rb
810
839
  # - even? -> true or false
@@ -829,8 +858,6 @@ class Integer < Numeric
829
858
  #
830
859
  def fdiv: (Numeric) -> Float
831
860
 
832
- def finite?: () -> bool
833
-
834
861
  # <!--
835
862
  # rdoc-file=numeric.c
836
863
  # - floor(ndigits = 0) -> integer
@@ -850,7 +877,7 @@ class Integer < Numeric
850
877
  #
851
878
  # * When `self` is non-zero and `ndigits` is negative,
852
879
  # returns a value based on a computed granularity:
853
- # * The granularity is `10 ** ndigits.abs`.
880
+ # * The granularity is <code>10 ** ndigits.abs</code>.
854
881
  # * The returned value is the largest multiple of the granularity
855
882
  # that is less than or equal to `self`.
856
883
  # Examples with positive `self`:
@@ -901,14 +928,6 @@ class Integer < Numeric
901
928
  #
902
929
  def gcdlcm: (Integer) -> [ Integer, Integer ]
903
930
 
904
- def i: () -> Complex
905
-
906
- def imag: () -> Integer
907
-
908
- def imaginary: () -> Integer
909
-
910
- def infinite?: () -> Integer?
911
-
912
931
  # <!-- rdoc-file=numeric.c -->
913
932
  # Returns a string containing the place-value representation of `self` in radix
914
933
  # `base` (in 2..36).
@@ -955,7 +974,7 @@ class Integer < Numeric
955
974
  def magnitude: () -> Integer
956
975
 
957
976
  # <!-- rdoc-file=numeric.c -->
958
- # Returns `self` modulo `other` as a real number.
977
+ # Returns `self` modulo `other` as a real numeric (Integer, Float, or Rational).
959
978
  #
960
979
  # For integer `n` and real number `r`, these expressions are equivalent:
961
980
  #
@@ -983,7 +1002,7 @@ class Integer < Numeric
983
1002
  def negative?: () -> bool
984
1003
 
985
1004
  # <!-- rdoc-file=numeric.c -->
986
- # Returns the successor integer of `self` (equivalent to `self + 1`):
1005
+ # Returns the successor integer of `self` (equivalent to <code>self + 1</code>):
987
1006
  #
988
1007
  # 1.succ #=> 2
989
1008
  # -1.succ #=> 0
@@ -1015,8 +1034,6 @@ class Integer < Numeric
1015
1034
  #
1016
1035
  def nobits?: (int mask) -> bool
1017
1036
 
1018
- def nonzero?: () -> self?
1019
-
1020
1037
  # <!--
1021
1038
  # rdoc-file=numeric.rb
1022
1039
  # - numerator -> self
@@ -1041,8 +1058,6 @@ class Integer < Numeric
1041
1058
  #
1042
1059
  def ord: () -> Integer
1043
1060
 
1044
- alias phase angle
1045
-
1046
1061
  def polar: () -> [ Integer, Integer | Float ]
1047
1062
 
1048
1063
  def positive?: () -> bool
@@ -1067,7 +1082,7 @@ class Integer < Numeric
1067
1082
  # rdoc-file=numeric.c
1068
1083
  # - pred -> next_integer
1069
1084
  # -->
1070
- # Returns the predecessor of `self` (equivalent to `self - 1`):
1085
+ # Returns the predecessor of `self` (equivalent to <code>self - 1</code>):
1071
1086
  #
1072
1087
  # 1.pred #=> 0
1073
1088
  # -1.pred #=> -2
@@ -1091,14 +1106,8 @@ class Integer < Numeric
1091
1106
  #
1092
1107
  def rationalize: (?Numeric eps) -> Rational
1093
1108
 
1094
- def real: () -> self
1095
-
1096
- def real?: () -> true
1097
-
1098
1109
  def rect: () -> [ Integer, Numeric ]
1099
1110
 
1100
- alias rectangular rect
1101
-
1102
1111
  # <!--
1103
1112
  # rdoc-file=numeric.c
1104
1113
  # - remainder(other) -> real_number
@@ -1132,8 +1141,8 @@ class Integer < Numeric
1132
1141
  # Returns `self` rounded to the nearest value with a precision of `ndigits`
1133
1142
  # decimal digits.
1134
1143
  #
1135
- # When `ndigits` is negative, the returned value has at least `ndigits.abs`
1136
- # trailing zeros:
1144
+ # When `ndigits` is negative, the returned value has at least
1145
+ # <code>ndigits.abs</code> trailing zeros:
1137
1146
  #
1138
1147
  # 555.round(-1) # => 560
1139
1148
  # 555.round(-2) # => 600
@@ -1150,17 +1159,18 @@ class Integer < Numeric
1150
1159
  # If keyword argument `half` is given, and `self` is equidistant from the two
1151
1160
  # candidate values, the rounding is according to the given `half` value:
1152
1161
  #
1153
- # * `:up` or `nil`: round away from zero:
1162
+ # * <code>:up</code> or `nil`: round away from zero:
1154
1163
  #
1155
1164
  # 25.round(-1, half: :up) # => 30
1156
1165
  # (-25).round(-1, half: :up) # => -30
1157
1166
  #
1158
- # * `:down`: round toward zero:
1167
+ # * <code>:down</code>: round toward zero:
1159
1168
  #
1160
1169
  # 25.round(-1, half: :down) # => 20
1161
1170
  # (-25).round(-1, half: :down) # => -20
1162
1171
  #
1163
- # * `:even`: round toward the candidate whose last nonzero digit is even:
1172
+ # * <code>:even</code>: round toward the candidate whose last nonzero digit is
1173
+ # even:
1164
1174
  #
1165
1175
  # 25.round(-1, half: :even) # => 20
1166
1176
  # 15.round(-1, half: :even) # => 20
@@ -1189,22 +1199,11 @@ class Integer < Numeric
1189
1199
  #
1190
1200
  def size: () -> Integer
1191
1201
 
1192
- def step: () { (Integer) -> void } -> void
1193
- | (Numeric limit, ?Integer step) { (Integer) -> void } -> void
1194
- | (Numeric limit, ?Numeric step) { (Numeric) -> void } -> void
1195
- | (to: Numeric, ?by: Integer) { (Integer) -> void } -> void
1196
- | (by: Numeric, ?to: Numeric) { (Numeric) -> void } -> void
1197
- | () -> Enumerator[Integer, bot]
1198
- | (Numeric limit, ?Integer step) -> Enumerator[Integer]
1199
- | (Numeric limit, ?Numeric step) -> Enumerator[Numeric]
1200
- | (to: Numeric, ?by: Integer) -> Enumerator[Integer]
1201
- | (by: Numeric, ?to: Numeric) -> Enumerator[Numeric]
1202
-
1203
1202
  # <!--
1204
1203
  # rdoc-file=numeric.c
1205
1204
  # - succ -> next_integer
1206
1205
  # -->
1207
- # Returns the successor integer of `self` (equivalent to `self + 1`):
1206
+ # Returns the successor integer of `self` (equivalent to <code>self + 1</code>):
1208
1207
  #
1209
1208
  # 1.succ #=> 2
1210
1209
  # -1.succ #=> 0
@@ -1218,7 +1217,8 @@ class Integer < Numeric
1218
1217
  # - times {|i| ... } -> self
1219
1218
  # - times -> enumerator
1220
1219
  # -->
1221
- # Calls the given block `self` times with each integer in `(0..self-1)`:
1220
+ # Calls the given block `self` times with each integer in
1221
+ # <code>(0..self-1)</code>:
1222
1222
  #
1223
1223
  # a = []
1224
1224
  # 5.times {|i| a.push(i) } # => 5
@@ -1229,8 +1229,6 @@ class Integer < Numeric
1229
1229
  def times: () { (Integer) -> void } -> self
1230
1230
  | () -> ::Enumerator[Integer, self]
1231
1231
 
1232
- def to_c: () -> Complex
1233
-
1234
1232
  # <!--
1235
1233
  # rdoc-file=numeric.c
1236
1234
  # - to_f -> float
@@ -1336,8 +1334,8 @@ class Integer < Numeric
1336
1334
  # Returns `self` truncated (toward zero) to a precision of `ndigits` decimal
1337
1335
  # digits.
1338
1336
  #
1339
- # When `ndigits` is negative, the returned value has at least `ndigits.abs`
1340
- # trailing zeros:
1337
+ # When `ndigits` is negative, the returned value has at least
1338
+ # <code>ndigits.abs</code> trailing zeros:
1341
1339
  #
1342
1340
  # 555.truncate(-1) # => 550
1343
1341
  # 555.truncate(-2) # => 500