rbs 4.0.0.dev.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 (281) 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 +18 -11
  5. data/.github/workflows/comments.yml +5 -3
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +27 -34
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +2 -2
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +1 -1
  12. data/CHANGELOG.md +323 -0
  13. data/README.md +1 -1
  14. data/Rakefile +43 -33
  15. data/Steepfile +1 -0
  16. data/config.yml +426 -24
  17. data/core/array.rbs +307 -227
  18. data/core/basic_object.rbs +9 -8
  19. data/core/binding.rbs +0 -2
  20. data/core/builtin.rbs +2 -2
  21. data/core/class.rbs +6 -5
  22. data/core/comparable.rbs +55 -34
  23. data/core/complex.rbs +104 -78
  24. data/core/dir.rbs +61 -49
  25. data/core/encoding.rbs +12 -15
  26. data/core/enumerable.rbs +179 -87
  27. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  28. data/core/enumerator.rbs +65 -2
  29. data/core/errno.rbs +11 -2
  30. data/core/errors.rbs +58 -29
  31. data/core/exception.rbs +13 -13
  32. data/core/fiber.rbs +74 -54
  33. data/core/file.rbs +280 -177
  34. data/core/file_test.rbs +3 -3
  35. data/core/float.rbs +257 -92
  36. data/core/gc.rbs +425 -281
  37. data/core/hash.rbs +1045 -739
  38. data/core/integer.rbs +135 -137
  39. data/core/io/buffer.rbs +53 -42
  40. data/core/io/wait.rbs +13 -35
  41. data/core/io.rbs +192 -144
  42. data/core/kernel.rbs +216 -155
  43. data/core/marshal.rbs +4 -4
  44. data/core/match_data.rbs +15 -13
  45. data/core/math.rbs +107 -66
  46. data/core/method.rbs +69 -33
  47. data/core/module.rbs +244 -106
  48. data/core/nil_class.rbs +7 -6
  49. data/core/numeric.rbs +74 -63
  50. data/core/object.rbs +9 -11
  51. data/core/object_space.rbs +30 -23
  52. data/core/pathname.rbs +1322 -0
  53. data/core/proc.rbs +95 -58
  54. data/core/process.rbs +222 -202
  55. data/core/ractor.rbs +371 -515
  56. data/core/random.rbs +21 -3
  57. data/core/range.rbs +159 -57
  58. data/core/rational.rbs +60 -89
  59. data/core/rbs/unnamed/argf.rbs +60 -53
  60. data/core/rbs/unnamed/env_class.rbs +19 -14
  61. data/core/rbs/unnamed/main_class.rbs +123 -0
  62. data/core/rbs/unnamed/random.rbs +11 -118
  63. data/core/regexp.rbs +258 -214
  64. data/core/ruby.rbs +53 -0
  65. data/core/ruby_vm.rbs +38 -34
  66. data/core/rubygems/config_file.rbs +5 -5
  67. data/core/rubygems/errors.rbs +4 -71
  68. data/core/rubygems/requirement.rbs +5 -5
  69. data/core/rubygems/rubygems.rbs +16 -82
  70. data/core/rubygems/version.rbs +2 -3
  71. data/core/set.rbs +490 -360
  72. data/core/signal.rbs +26 -16
  73. data/core/string.rbs +3234 -1285
  74. data/core/struct.rbs +27 -26
  75. data/core/symbol.rbs +41 -34
  76. data/core/thread.rbs +135 -67
  77. data/core/time.rbs +81 -50
  78. data/core/trace_point.rbs +41 -35
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +24 -16
  81. data/core/warning.rbs +7 -7
  82. data/docs/aliases.md +79 -0
  83. data/docs/collection.md +3 -3
  84. data/docs/config.md +171 -0
  85. data/docs/encoding.md +56 -0
  86. data/docs/gem.md +0 -1
  87. data/docs/inline.md +576 -0
  88. data/docs/sigs.md +3 -3
  89. data/docs/syntax.md +46 -16
  90. data/docs/type_fingerprint.md +21 -0
  91. data/exe/rbs +1 -1
  92. data/ext/rbs_extension/ast_translation.c +544 -116
  93. data/ext/rbs_extension/ast_translation.h +3 -0
  94. data/ext/rbs_extension/class_constants.c +16 -2
  95. data/ext/rbs_extension/class_constants.h +8 -0
  96. data/ext/rbs_extension/extconf.rb +5 -1
  97. data/ext/rbs_extension/legacy_location.c +33 -56
  98. data/ext/rbs_extension/legacy_location.h +37 -0
  99. data/ext/rbs_extension/main.c +44 -35
  100. data/include/rbs/ast.h +448 -173
  101. data/include/rbs/defines.h +27 -0
  102. data/include/rbs/lexer.h +30 -11
  103. data/include/rbs/location.h +25 -44
  104. data/include/rbs/parser.h +6 -6
  105. data/include/rbs/string.h +0 -2
  106. data/include/rbs/util/rbs_allocator.h +34 -13
  107. data/include/rbs/util/rbs_assert.h +12 -1
  108. data/include/rbs/util/rbs_constant_pool.h +0 -3
  109. data/include/rbs/util/rbs_encoding.h +2 -0
  110. data/include/rbs/util/rbs_unescape.h +2 -1
  111. data/include/rbs.h +8 -0
  112. data/lib/rbs/ast/annotation.rb +1 -1
  113. data/lib/rbs/ast/comment.rb +1 -1
  114. data/lib/rbs/ast/declarations.rb +10 -10
  115. data/lib/rbs/ast/members.rb +14 -14
  116. data/lib/rbs/ast/ruby/annotations.rb +293 -3
  117. data/lib/rbs/ast/ruby/comment_block.rb +24 -0
  118. data/lib/rbs/ast/ruby/declarations.rb +198 -3
  119. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  120. data/lib/rbs/ast/ruby/members.rb +532 -22
  121. data/lib/rbs/ast/type_param.rb +24 -4
  122. data/lib/rbs/buffer.rb +20 -15
  123. data/lib/rbs/cli/diff.rb +16 -15
  124. data/lib/rbs/cli/validate.rb +38 -106
  125. data/lib/rbs/cli.rb +52 -19
  126. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  127. data/lib/rbs/collection/sources/git.rb +1 -0
  128. data/lib/rbs/definition.rb +1 -1
  129. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  130. data/lib/rbs/definition_builder/method_builder.rb +20 -0
  131. data/lib/rbs/definition_builder.rb +147 -25
  132. data/lib/rbs/diff.rb +7 -1
  133. data/lib/rbs/environment.rb +227 -74
  134. data/lib/rbs/environment_loader.rb +0 -6
  135. data/lib/rbs/errors.rb +27 -18
  136. data/lib/rbs/inline_parser.rb +342 -6
  137. data/lib/rbs/location_aux.rb +1 -1
  138. data/lib/rbs/locator.rb +5 -1
  139. data/lib/rbs/method_type.rb +5 -3
  140. data/lib/rbs/parser_aux.rb +20 -7
  141. data/lib/rbs/prototype/helpers.rb +57 -0
  142. data/lib/rbs/prototype/rb.rb +3 -28
  143. data/lib/rbs/prototype/rbi.rb +3 -20
  144. data/lib/rbs/prototype/runtime.rb +8 -0
  145. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  146. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  147. data/lib/rbs/subtractor.rb +3 -1
  148. data/lib/rbs/test/type_check.rb +19 -2
  149. data/lib/rbs/type_name.rb +1 -1
  150. data/lib/rbs/types.rb +88 -78
  151. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  152. data/lib/rbs/validator.rb +2 -2
  153. data/lib/rbs/version.rb +1 -1
  154. data/lib/rbs.rb +1 -2
  155. data/lib/rdoc/discover.rb +1 -1
  156. data/lib/rdoc_plugin/parser.rb +1 -1
  157. data/rbs.gemspec +4 -3
  158. data/rust/.gitignore +1 -0
  159. data/rust/Cargo.lock +378 -0
  160. data/rust/Cargo.toml +7 -0
  161. data/rust/ruby-rbs/Cargo.toml +22 -0
  162. data/rust/ruby-rbs/build.rs +764 -0
  163. data/rust/ruby-rbs/examples/locations.rs +60 -0
  164. data/rust/ruby-rbs/src/lib.rs +1 -0
  165. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  166. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  167. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  168. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  169. data/rust/ruby-rbs-sys/build.rs +204 -0
  170. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  171. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  172. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  173. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  174. data/schema/typeParam.json +17 -1
  175. data/sig/ast/ruby/annotations.rbs +315 -4
  176. data/sig/ast/ruby/comment_block.rbs +8 -0
  177. data/sig/ast/ruby/declarations.rbs +102 -4
  178. data/sig/ast/ruby/members.rbs +108 -2
  179. data/sig/cli/diff.rbs +5 -11
  180. data/sig/cli/validate.rbs +12 -8
  181. data/sig/cli.rbs +18 -18
  182. data/sig/definition.rbs +6 -1
  183. data/sig/definition_builder.rbs +2 -0
  184. data/sig/environment.rbs +70 -12
  185. data/sig/errors.rbs +13 -14
  186. data/sig/inline_parser.rbs +39 -2
  187. data/sig/locator.rbs +0 -2
  188. data/sig/manifest.yaml +0 -1
  189. data/sig/method_builder.rbs +3 -1
  190. data/sig/parser.rbs +31 -13
  191. data/sig/prototype/helpers.rbs +2 -0
  192. data/sig/resolver/type_name_resolver.rbs +35 -7
  193. data/sig/source.rbs +3 -3
  194. data/sig/type_param.rbs +13 -8
  195. data/sig/types.rbs +6 -7
  196. data/sig/unit_test/spy.rbs +0 -8
  197. data/sig/unit_test/type_assertions.rbs +11 -0
  198. data/src/ast.c +410 -153
  199. data/src/lexer.c +1392 -1313
  200. data/src/lexer.re +3 -0
  201. data/src/lexstate.c +58 -37
  202. data/src/location.c +8 -48
  203. data/src/parser.c +977 -516
  204. data/src/string.c +0 -48
  205. data/src/util/rbs_allocator.c +89 -71
  206. data/src/util/rbs_assert.c +1 -1
  207. data/src/util/rbs_buffer.c +2 -2
  208. data/src/util/rbs_constant_pool.c +10 -14
  209. data/src/util/rbs_encoding.c +4 -8
  210. data/src/util/rbs_unescape.c +56 -20
  211. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  212. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  213. data/stdlib/cgi/0/core.rbs +9 -393
  214. data/stdlib/cgi/0/manifest.yaml +1 -0
  215. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  216. data/stdlib/coverage/0/coverage.rbs +7 -4
  217. data/stdlib/date/0/date.rbs +92 -79
  218. data/stdlib/date/0/date_time.rbs +25 -24
  219. data/stdlib/delegate/0/delegator.rbs +10 -7
  220. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  221. data/stdlib/digest/0/digest.rbs +110 -0
  222. data/stdlib/erb/0/erb.rbs +748 -347
  223. data/stdlib/etc/0/etc.rbs +55 -50
  224. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  225. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  226. data/stdlib/io-console/0/io-console.rbs +2 -2
  227. data/stdlib/json/0/json.rbs +217 -136
  228. data/stdlib/monitor/0/monitor.rbs +3 -3
  229. data/stdlib/net-http/0/net-http.rbs +162 -134
  230. data/stdlib/objspace/0/objspace.rbs +17 -34
  231. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  232. data/stdlib/open3/0/open3.rbs +469 -10
  233. data/stdlib/openssl/0/openssl.rbs +475 -357
  234. data/stdlib/optparse/0/optparse.rbs +26 -17
  235. data/stdlib/pathname/0/pathname.rbs +11 -1381
  236. data/stdlib/pp/0/pp.rbs +9 -8
  237. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  238. data/stdlib/pstore/0/pstore.rbs +35 -30
  239. data/stdlib/psych/0/psych.rbs +65 -12
  240. data/stdlib/psych/0/store.rbs +2 -4
  241. data/stdlib/pty/0/pty.rbs +9 -6
  242. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  243. data/stdlib/rdoc/0/code_object.rbs +2 -1
  244. data/stdlib/rdoc/0/parser.rbs +1 -1
  245. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  246. data/stdlib/rdoc/0/store.rbs +1 -1
  247. data/stdlib/resolv/0/resolv.rbs +25 -68
  248. data/stdlib/ripper/0/ripper.rbs +22 -19
  249. data/stdlib/securerandom/0/manifest.yaml +2 -0
  250. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  251. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  252. data/stdlib/singleton/0/singleton.rbs +3 -0
  253. data/stdlib/socket/0/addrinfo.rbs +7 -7
  254. data/stdlib/socket/0/basic_socket.rbs +3 -3
  255. data/stdlib/socket/0/ip_socket.rbs +10 -8
  256. data/stdlib/socket/0/socket.rbs +23 -10
  257. data/stdlib/socket/0/tcp_server.rbs +1 -1
  258. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  259. data/stdlib/socket/0/udp_socket.rbs +1 -1
  260. data/stdlib/socket/0/unix_server.rbs +1 -1
  261. data/stdlib/stringio/0/stringio.rbs +1177 -85
  262. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  263. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  264. data/stdlib/time/0/time.rbs +8 -6
  265. data/stdlib/timeout/0/timeout.rbs +63 -7
  266. data/stdlib/tsort/0/cyclic.rbs +3 -0
  267. data/stdlib/tsort/0/tsort.rbs +7 -6
  268. data/stdlib/uri/0/common.rbs +42 -20
  269. data/stdlib/uri/0/file.rbs +3 -3
  270. data/stdlib/uri/0/generic.rbs +26 -18
  271. data/stdlib/uri/0/http.rbs +2 -2
  272. data/stdlib/uri/0/ldap.rbs +2 -2
  273. data/stdlib/uri/0/mailto.rbs +3 -3
  274. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  275. data/stdlib/zlib/0/deflate.rbs +4 -3
  276. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  277. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  278. data/stdlib/zlib/0/inflate.rbs +1 -1
  279. data/stdlib/zlib/0/need_dict.rbs +1 -1
  280. data/stdlib/zlib/0/zstream.rbs +1 -0
  281. metadata +50 -6
data/core/complex.rbs CHANGED
@@ -79,17 +79,19 @@
79
79
  # * #arg (and its aliases #angle and #phase): Returns the argument (angle) for
80
80
  # `self` in radians.
81
81
  # * #denominator: Returns the denominator of `self`.
82
- # * #finite?: Returns whether both `self.real` and `self.image` are finite.
82
+ # * #finite?: Returns whether both <code>self.real</code> and
83
+ # <code>self.image</code> are finite.
83
84
  # * #hash: Returns the integer hash value for `self`.
84
85
  # * #imag (and its alias #imaginary): Returns the imaginary value for `self`.
85
- # * #infinite?: Returns whether `self.real` or `self.image` is infinite.
86
+ # * #infinite?: Returns whether <code>self.real</code> or
87
+ # <code>self.image</code> is infinite.
86
88
  # * #numerator: Returns the numerator of `self`.
87
- # * #polar: Returns the array `[self.abs, self.arg]`.
89
+ # * #polar: Returns the array <code>[self.abs, self.arg]</code>.
88
90
  # * #inspect: Returns a string representation of `self`.
89
91
  # * #real: Returns the real value for `self`.
90
92
  # * #real?: Returns `false`; for compatibility with Numeric#real?.
91
- # * #rect (and its alias #rectangular): Returns the array `[self.real,
92
- # self.imag]`.
93
+ # * #rect (and its alias #rectangular): Returns the array <code>[self.real,
94
+ # self.imag]</code>.
93
95
  #
94
96
  # ### Comparing
95
97
  #
@@ -100,12 +102,15 @@
100
102
  # ### Converting
101
103
  #
102
104
  # * #rationalize: Returns a Rational object whose value is exactly or
103
- # approximately equivalent to that of `self.real`.
105
+ # approximately equivalent to that of <code>self.real</code>.
104
106
  # * #to_c: Returns `self`.
105
107
  # * #to_d: Returns the value as a BigDecimal object.
106
- # * #to_f: Returns the value of `self.real` as a Float, if possible.
107
- # * #to_i: Returns the value of `self.real` as an Integer, if possible.
108
- # * #to_r: Returns the value of `self.real` as a Rational, if possible.
108
+ # * #to_f: Returns the value of <code>self.real</code> as a Float, if
109
+ # possible.
110
+ # * #to_i: Returns the value of <code>self.real</code> as an Integer, if
111
+ # possible.
112
+ # * #to_r: Returns the value of <code>self.real</code> as a Rational, if
113
+ # possible.
109
114
  # * #to_s: Returns a string representation of `self`.
110
115
  #
111
116
  # ### Performing Complex Arithmetic
@@ -118,7 +123,8 @@
118
123
  # * #/: Returns the quotient of `self` and the given numeric.
119
124
  # * #abs2: Returns square of the absolute value (magnitude) for `self`.
120
125
  # * #conj (and its alias #conjugate): Returns the conjugate of `self`.
121
- # * #fdiv: Returns `Complex.rect(self.real/numeric, self.imag/numeric)`.
126
+ # * #fdiv: Returns <code>Complex.rect(self.real/numeric,
127
+ # self.imag/numeric)</code>.
122
128
  #
123
129
  # ### Working with JSON
124
130
  #
@@ -184,23 +190,24 @@ class Complex < Numeric
184
190
 
185
191
  # <!--
186
192
  # rdoc-file=complex.c
187
- # - complex * numeric -> new_complex
193
+ # - self * other -> numeric
188
194
  # -->
189
- # Returns the product of `self` and `numeric`:
195
+ # Returns the numeric product of `self` and `other`:
190
196
  #
197
+ # Complex.rect(9, 8) * 4 # => (36+32i)
198
+ # Complex.rect(20, 9) * 9.8 # => (196.0+88.2i)
191
199
  # Complex.rect(2, 3) * Complex.rect(2, 3) # => (-5+12i)
192
200
  # Complex.rect(900) * Complex.rect(1) # => (900+0i)
193
201
  # Complex.rect(-2, 9) * Complex.rect(-9, 2) # => (0-85i)
194
- # Complex.rect(9, 8) * 4 # => (36+32i)
195
- # Complex.rect(20, 9) * 9.8 # => (196.0+88.2i)
202
+ # Complex.rect(9, 8) * Rational(2, 3) # => ((6/1)+(16/3)*i)
196
203
  #
197
204
  def *: (Numeric) -> Complex
198
205
 
199
206
  # <!--
200
207
  # rdoc-file=complex.c
201
- # - complex ** numeric -> new_complex
208
+ # - self ** exponent -> complex
202
209
  # -->
203
- # Returns `self` raised to power `numeric`:
210
+ # Returns `self` raised to the power `exponent`:
204
211
  #
205
212
  # Complex.rect(0, 1) ** 2 # => (-1+0i)
206
213
  # Complex.rect(-8) ** Rational(1, 3) # => (1.0000000000000002+1.7320508075688772i)
@@ -209,25 +216,33 @@ class Complex < Numeric
209
216
 
210
217
  # <!--
211
218
  # rdoc-file=complex.c
212
- # - complex + numeric -> new_complex
219
+ # - self + other -> numeric
213
220
  # -->
214
- # Returns the sum of `self` and `numeric`:
221
+ # Returns the sum of `self` and `other`:
222
+ #
223
+ # Complex(1, 2) + 0 # => (1+2i)
224
+ # Complex(1, 2) + 1 # => (2+2i)
225
+ # Complex(1, 2) + -1 # => (0+2i)
226
+ #
227
+ # Complex(1, 2) + 1.0 # => (2.0+2i)
215
228
  #
216
- # Complex.rect(2, 3) + Complex.rect(2, 3) # => (4+6i)
217
- # Complex.rect(900) + Complex.rect(1) # => (901+0i)
218
- # Complex.rect(-2, 9) + Complex.rect(-9, 2) # => (-11+11i)
219
- # Complex.rect(9, 8) + 4 # => (13+8i)
220
- # Complex.rect(20, 9) + 9.8 # => (29.8+9i)
229
+ # Complex(1, 2) + Complex(2, 1) # => (3+3i)
230
+ # Complex(1, 2) + Complex(2.0, 1.0) # => (3.0+3.0i)
231
+ #
232
+ # Complex(1, 2) + Rational(1, 1) # => ((2/1)+2i)
233
+ # Complex(1, 2) + Rational(1, 2) # => ((3/2)+2i)
234
+ #
235
+ # For a computation involving Floats, the result may be inexact (see Float#+):
236
+ #
237
+ # Complex(1, 2) + 3.14 # => (4.140000000000001+2i)
221
238
  #
222
239
  def +: (Numeric) -> Complex
223
240
 
224
- def +@: () -> Complex
225
-
226
241
  # <!--
227
242
  # rdoc-file=complex.c
228
- # - complex - numeric -> new_complex
243
+ # - self - other -> complex
229
244
  # -->
230
- # Returns the difference of `self` and `numeric`:
245
+ # Returns the difference of `self` and `other`:
231
246
  #
232
247
  # Complex.rect(2, 3) - Complex.rect(2, 3) # => (0+0i)
233
248
  # Complex.rect(900) - Complex.rect(1) # => (899+0i)
@@ -239,9 +254,9 @@ class Complex < Numeric
239
254
 
240
255
  # <!--
241
256
  # rdoc-file=complex.c
242
- # - -complex -> new_complex
257
+ # - -self -> complex
243
258
  # -->
244
- # Returns the negation of `self`, which is the negation of each of its parts:
259
+ # Returns `self`, negated, which is the negation of each of its parts:
245
260
  #
246
261
  # -Complex.rect(1, 2) # => (-1-2i)
247
262
  # -Complex.rect(-1, -2) # => (1+2i)
@@ -250,9 +265,9 @@ class Complex < Numeric
250
265
 
251
266
  # <!--
252
267
  # rdoc-file=complex.c
253
- # - complex / numeric -> new_complex
268
+ # - self / other -> complex
254
269
  # -->
255
- # Returns the quotient of `self` and `numeric`:
270
+ # Returns the quotient of `self` and `other`:
256
271
  #
257
272
  # Complex.rect(2, 3) / Complex.rect(2, 3) # => (1+0i)
258
273
  # Complex.rect(900) / Complex.rect(1) # => (900+0i)
@@ -268,15 +283,17 @@ class Complex < Numeric
268
283
 
269
284
  # <!--
270
285
  # rdoc-file=complex.c
271
- # - complex <=> object -> -1, 0, 1, or nil
286
+ # - self <=> other -> -1, 0, 1, or nil
272
287
  # -->
288
+ # Compares `self` and `other`.
289
+ #
273
290
  # Returns:
274
291
  #
275
- # * `self.real <=> object.real` if both of the following are true:
292
+ # * <code>self.real <=> other.real</code> if both of the following are true:
276
293
  #
277
- # * `self.imag == 0`.
278
- # * `object.imag == 0`. # Always true if object is numeric but not
279
- # complex.
294
+ # * <code>self.imag == 0</code>.
295
+ # * <code>other.imag == 0</code> (always true if `other` is numeric but
296
+ # not complex).
280
297
  #
281
298
  # * `nil` otherwise.
282
299
  #
@@ -289,13 +306,17 @@ class Complex < Numeric
289
306
  # Complex.rect(1) <=> Complex.rect(1, 1) # => nil # object.imag not zero.
290
307
  # Complex.rect(1) <=> 'Foo' # => nil # object.imag not defined.
291
308
  #
309
+ # Class Complex includes module Comparable, each of whose methods uses
310
+ # Complex#<=> for comparison.
311
+ #
292
312
  def <=>: (untyped) -> Integer?
293
313
 
294
314
  # <!--
295
315
  # rdoc-file=complex.c
296
316
  # - complex == object -> true or false
297
317
  # -->
298
- # Returns `true` if `self.real == object.real` and `self.imag == object.imag`:
318
+ # Returns `true` if <code>self.real == object.real</code> and <code>self.imag ==
319
+ # object.imag</code>:
299
320
  #
300
321
  # Complex.rect(2, 3) == Complex.rect(2.0, 3.0) # => true
301
322
  #
@@ -375,21 +396,23 @@ class Complex < Numeric
375
396
  def coerce: (Numeric) -> [ Complex, Complex ]
376
397
 
377
398
  # <!-- rdoc-file=complex.c -->
378
- # Returns the conjugate of `self`, `Complex.rect(self.imag, self.real)`:
399
+ # Returns the conjugate of `self`, <code>Complex.rect(self.imag,
400
+ # self.real)</code>:
379
401
  #
380
402
  # Complex.rect(1, 2).conj # => (1-2i)
381
403
  #
382
- def conj: () -> Complex
404
+ def conj: () -> self
383
405
 
384
406
  # <!--
385
407
  # rdoc-file=complex.c
386
408
  # - conj -> complex
387
409
  # -->
388
- # Returns the conjugate of `self`, `Complex.rect(self.imag, self.real)`:
410
+ # Returns the conjugate of `self`, <code>Complex.rect(self.imag,
411
+ # self.real)</code>:
389
412
  #
390
413
  # Complex.rect(1, 2).conj # => (1-2i)
391
414
  #
392
- def conjugate: () -> Complex
415
+ def conjugate: () -> self
393
416
 
394
417
  # <!--
395
418
  # rdoc-file=complex.c
@@ -397,11 +420,11 @@ class Complex < Numeric
397
420
  # -->
398
421
  # Returns the denominator of `self`, which is the [least common
399
422
  # multiple](https://en.wikipedia.org/wiki/Least_common_multiple) of
400
- # `self.real.denominator` and `self.imag.denominator`:
423
+ # <code>self.real.denominator</code> and <code>self.imag.denominator</code>:
401
424
  #
402
425
  # Complex.rect(Rational(1, 2), Rational(2, 3)).denominator # => 6
403
426
  #
404
- # Note that `n.denominator` of a non-rational numeric is `1`.
427
+ # Note that <code>n.denominator</code> of a non-rational numeric is `1`.
405
428
  #
406
429
  # Related: Complex#numerator.
407
430
  #
@@ -411,15 +434,11 @@ class Complex < Numeric
411
434
 
412
435
  def divmod: (Numeric) -> bot
413
436
 
414
- def dup: () -> self
415
-
416
- def eql?: (untyped) -> bool
417
-
418
437
  # <!--
419
438
  # rdoc-file=complex.c
420
439
  # - fdiv(numeric) -> new_complex
421
440
  # -->
422
- # Returns `Complex.rect(self.real/numeric, self.imag/numeric)`:
441
+ # Returns <code>Complex.rect(self.real/numeric, self.imag/numeric)</code>:
423
442
  #
424
443
  # Complex.rect(11, 22).fdiv(3) # => (3.6666666666666665+7.333333333333333i)
425
444
  #
@@ -429,8 +448,8 @@ class Complex < Numeric
429
448
  # rdoc-file=complex.c
430
449
  # - finite? -> true or false
431
450
  # -->
432
- # Returns `true` if both `self.real.finite?` and `self.imag.finite?` are true,
433
- # `false` otherwise:
451
+ # Returns `true` if both <code>self.real.finite?</code> and
452
+ # <code>self.imag.finite?</code> are true, `false` otherwise:
434
453
  #
435
454
  # Complex.rect(1, 1).finite? # => true
436
455
  # Complex.rect(Float::INFINITY, 0).finite? # => false
@@ -454,6 +473,19 @@ class Complex < Numeric
454
473
  #
455
474
  def hash: () -> Integer
456
475
 
476
+ # <!--
477
+ # rdoc-file=numeric.c
478
+ # - i -> complex
479
+ # -->
480
+ # Returns <code>Complex(0, self)</code>:
481
+ #
482
+ # 2.i # => (0+2i)
483
+ # -2.i # => (0-2i)
484
+ # 2.0.i # => (0+2.0i)
485
+ # Rational(1, 2).i # => (0+(1/2)*i)
486
+ # Complex(3, 4).i # Raises NoMethodError.
487
+ #
488
+ %a{annotate:rdoc:copy:Numeric#i}
457
489
  def i: () -> bot
458
490
 
459
491
  # <!-- rdoc-file=complex.c -->
@@ -491,8 +523,8 @@ class Complex < Numeric
491
523
  # rdoc-file=complex.c
492
524
  # - infinite? -> 1 or nil
493
525
  # -->
494
- # Returns `1` if either `self.real.infinite?` or `self.imag.infinite?` is true,
495
- # `nil` otherwise:
526
+ # Returns `1` if either <code>self.real.infinite?</code> or
527
+ # <code>self.imag.infinite?</code> is true, `nil` otherwise:
496
528
  #
497
529
  # Complex.rect(Float::INFINITY, 0).infinite? # => 1
498
530
  # Complex.rect(1, 1).infinite? # => nil
@@ -515,8 +547,6 @@ class Complex < Numeric
515
547
  #
516
548
  def inspect: () -> String
517
549
 
518
- def integer?: () -> bool
519
-
520
550
  # <!-- rdoc-file=complex.c -->
521
551
  # Returns the absolute value (magnitude) for `self`; see [polar
522
552
  # coordinates](rdoc-ref:Complex@Polar+Coordinates):
@@ -535,8 +565,6 @@ class Complex < Numeric
535
565
 
536
566
  def negative?: () -> bot
537
567
 
538
- def nonzero?: () -> self?
539
-
540
568
  # <!--
541
569
  # rdoc-file=complex.c
542
570
  # - numerator -> new_complex
@@ -552,7 +580,7 @@ class Complex < Numeric
552
580
  # In this example, the lowest common denominator of the two parts is 12; the two
553
581
  # converted parts may be thought of as Rational(8, 12) and Rational(9, 12),
554
582
  # whose numerators, respectively, are 8 and 9; so the returned value of
555
- # `c.numerator` is `Complex.rect(8, 9)`.
583
+ # <code>c.numerator</code> is <code>Complex.rect(8, 9)</code>.
556
584
  #
557
585
  # Related: Complex#denominator.
558
586
  #
@@ -576,7 +604,7 @@ class Complex < Numeric
576
604
  # rdoc-file=complex.c
577
605
  # - polar -> array
578
606
  # -->
579
- # Returns the array `[self.abs, self.arg]`:
607
+ # Returns the array <code>[self.abs, self.arg]</code>:
580
608
  #
581
609
  # Complex.polar(1, 2).polar # => [1.0, 2.0]
582
610
  #
@@ -594,9 +622,9 @@ class Complex < Numeric
594
622
 
595
623
  # <!--
596
624
  # rdoc-file=complex.c
597
- # - complex / numeric -> new_complex
625
+ # - self / other -> complex
598
626
  # -->
599
- # Returns the quotient of `self` and `numeric`:
627
+ # Returns the quotient of `self` and `other`:
600
628
  #
601
629
  # Complex.rect(2, 3) / Complex.rect(2, 3) # => (1+0i)
602
630
  # Complex.rect(900) / Complex.rect(1) # => (900+0i)
@@ -611,17 +639,18 @@ class Complex < Numeric
611
639
  # - rationalize(epsilon = nil) -> rational
612
640
  # -->
613
641
  # Returns a Rational object whose value is exactly or approximately equivalent
614
- # to that of `self.real`.
642
+ # to that of <code>self.real</code>.
615
643
  #
616
644
  # With no argument `epsilon` given, returns a Rational object whose value is
617
- # exactly equal to that of `self.real.rationalize`:
645
+ # exactly equal to that of <code>self.real.rationalize</code>:
618
646
  #
619
647
  # Complex.rect(1, 0).rationalize # => (1/1)
620
648
  # Complex.rect(1, Rational(0, 1)).rationalize # => (1/1)
621
649
  # Complex.rect(3.14159, 0).rationalize # => (314159/100000)
622
650
  #
623
651
  # With argument `epsilon` given, returns a Rational object whose value is
624
- # exactly or approximately equal to that of `self.real` to the given precision:
652
+ # exactly or approximately equal to that of <code>self.real</code> to the given
653
+ # precision:
625
654
  #
626
655
  # Complex.rect(3.14159, 0).rationalize(0.1) # => (16/5)
627
656
  # Complex.rect(3.14159, 0).rationalize(0.01) # => (22/7)
@@ -682,7 +711,7 @@ class Complex < Numeric
682
711
  # rdoc-file=complex.c
683
712
  # - rect -> array
684
713
  # -->
685
- # Returns the array `[self.real, self.imag]`:
714
+ # Returns the array <code>[self.real, self.imag]</code>:
686
715
  #
687
716
  # Complex.rect(1, 2).rect # => [1, 2]
688
717
  #
@@ -716,13 +745,13 @@ class Complex < Numeric
716
745
  # rdoc-file=complex.c
717
746
  # - to_f -> float
718
747
  # -->
719
- # Returns the value of `self.real` as a Float, if possible:
748
+ # Returns the value of <code>self.real</code> as a Float, if possible:
720
749
  #
721
750
  # Complex.rect(1, 0).to_f # => 1.0
722
751
  # Complex.rect(1, Rational(0, 1)).to_f # => 1.0
723
752
  #
724
- # Raises RangeError if `self.imag` is not exactly zero (either `Integer(0)` or
725
- # `Rational(0, *n*)`).
753
+ # Raises RangeError if <code>self.imag</code> is not exactly zero (either
754
+ # <code>Integer(0)</code> or <code>Rational(0, _n_)</code>).
726
755
  #
727
756
  def to_f: () -> Float
728
757
 
@@ -730,30 +759,29 @@ class Complex < Numeric
730
759
  # rdoc-file=complex.c
731
760
  # - to_i -> integer
732
761
  # -->
733
- # Returns the value of `self.real` as an Integer, if possible:
762
+ # Returns the value of <code>self.real</code> as an Integer, if possible:
734
763
  #
735
764
  # Complex.rect(1, 0).to_i # => 1
736
765
  # Complex.rect(1, Rational(0, 1)).to_i # => 1
737
766
  #
738
- # Raises RangeError if `self.imag` is not exactly zero (either `Integer(0)` or
739
- # `Rational(0, *n*)`).
767
+ # Raises RangeError if <code>self.imag</code> is not exactly zero (either
768
+ # <code>Integer(0)</code> or <code>Rational(0, _n_)</code>).
740
769
  #
741
770
  def to_i: () -> Integer
742
771
 
743
- alias to_int to_i
744
-
745
772
  # <!--
746
773
  # rdoc-file=complex.c
747
774
  # - to_r -> rational
748
775
  # -->
749
- # Returns the value of `self.real` as a Rational, if possible:
776
+ # Returns the value of <code>self.real</code> as a Rational, if possible:
750
777
  #
751
778
  # Complex.rect(1, 0).to_r # => (1/1)
752
779
  # Complex.rect(1, Rational(0, 1)).to_r # => (1/1)
753
780
  # Complex.rect(1, 0.0).to_r # => (1/1)
754
781
  #
755
- # Raises RangeError if `self.imag` is not exactly zero (either `Integer(0)` or
756
- # `Rational(0, *n*)`) and `self.imag.to_r` is not exactly zero.
782
+ # Raises RangeError if <code>self.imag</code> is not exactly zero (either
783
+ # <code>Integer(0)</code> or <code>Rational(0, _n_)</code>) and
784
+ # <code>self.imag.to_r</code> is not exactly zero.
757
785
  #
758
786
  # Related: Complex#rationalize.
759
787
  #
@@ -774,12 +802,10 @@ class Complex < Numeric
774
802
  def to_s: () -> String
775
803
 
776
804
  def truncate: (?Integer) -> bot
777
-
778
- def zero?: () -> bool
779
805
  end
780
806
 
781
807
  # <!-- rdoc-file=complex.c -->
782
- # Equivalent to `Complex.rect(0, 1)`:
808
+ # Equivalent to <code>Complex.rect(0, 1)</code>:
783
809
  #
784
810
  # Complex::I # => (0+1i)
785
811
  #