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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +1 -0
  3. data/.github/dependabot.yml +16 -14
  4. data/.github/workflows/bundle-update.yml +63 -0
  5. data/.github/workflows/c-check.yml +21 -11
  6. data/.github/workflows/comments.yml +5 -3
  7. data/.github/workflows/dependabot.yml +2 -2
  8. data/.github/workflows/jruby.yml +67 -0
  9. data/.github/workflows/milestone.yml +83 -0
  10. data/.github/workflows/ruby.yml +63 -24
  11. data/.github/workflows/rust.yml +184 -0
  12. data/.github/workflows/truffleruby.yml +54 -0
  13. data/.github/workflows/typecheck.yml +5 -2
  14. data/.github/workflows/wasm.yml +53 -0
  15. data/.github/workflows/windows.yml +8 -2
  16. data/.gitignore +11 -0
  17. data/.rubocop.yml +1 -1
  18. data/CHANGELOG.md +357 -0
  19. data/README.md +4 -4
  20. data/Rakefile +365 -33
  21. data/Steepfile +8 -0
  22. data/config.yml +450 -24
  23. data/core/array.rbs +443 -363
  24. data/core/basic_object.rbs +9 -8
  25. data/core/binding.rbs +0 -2
  26. data/core/builtin.rbs +9 -8
  27. data/core/class.rbs +11 -8
  28. data/core/comparable.rbs +55 -34
  29. data/core/complex.rbs +104 -78
  30. data/core/dir.rbs +61 -49
  31. data/core/encoding.rbs +12 -15
  32. data/core/enumerable.rbs +288 -196
  33. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  34. data/core/enumerator/product.rbs +5 -5
  35. data/core/enumerator.rbs +91 -28
  36. data/core/errno.rbs +11 -2
  37. data/core/errors.rbs +58 -29
  38. data/core/exception.rbs +13 -13
  39. data/core/fiber.rbs +74 -54
  40. data/core/file.rbs +260 -1151
  41. data/core/file_constants.rbs +463 -0
  42. data/core/file_stat.rbs +534 -0
  43. data/core/file_test.rbs +3 -3
  44. data/core/float.rbs +257 -92
  45. data/core/gc.rbs +425 -281
  46. data/core/hash.rbs +1151 -829
  47. data/core/integer.rbs +156 -195
  48. data/core/io/buffer.rbs +53 -42
  49. data/core/io/wait.rbs +13 -35
  50. data/core/io.rbs +216 -150
  51. data/core/kernel.rbs +239 -163
  52. data/core/marshal.rbs +4 -4
  53. data/core/match_data.rbs +15 -13
  54. data/core/math.rbs +107 -66
  55. data/core/method.rbs +69 -33
  56. data/core/module.rbs +302 -150
  57. data/core/nil_class.rbs +7 -6
  58. data/core/numeric.rbs +77 -63
  59. data/core/object.rbs +9 -11
  60. data/core/object_space/weak_key_map.rbs +7 -7
  61. data/core/object_space.rbs +30 -23
  62. data/core/pathname.rbs +1322 -0
  63. data/core/proc.rbs +95 -58
  64. data/core/process.rbs +222 -202
  65. data/core/ractor.rbs +371 -515
  66. data/core/random.rbs +21 -3
  67. data/core/range.rbs +181 -79
  68. data/core/rational.rbs +60 -89
  69. data/core/rbs/ops.rbs +154 -0
  70. data/core/rbs/unnamed/argf.rbs +63 -56
  71. data/core/rbs/unnamed/env_class.rbs +19 -14
  72. data/core/rbs/unnamed/main_class.rbs +123 -0
  73. data/core/rbs/unnamed/random.rbs +11 -118
  74. data/core/regexp.rbs +258 -214
  75. data/core/ruby.rbs +53 -0
  76. data/core/ruby_vm.rbs +78 -34
  77. data/core/rubygems/config_file.rbs +5 -5
  78. data/core/rubygems/errors.rbs +4 -71
  79. data/core/rubygems/requirement.rbs +5 -5
  80. data/core/rubygems/rubygems.rbs +16 -82
  81. data/core/rubygems/version.rbs +2 -3
  82. data/core/set.rbs +493 -363
  83. data/core/signal.rbs +26 -16
  84. data/core/string.rbs +3234 -1285
  85. data/core/struct.rbs +43 -42
  86. data/core/symbol.rbs +41 -34
  87. data/core/thread.rbs +141 -73
  88. data/core/time.rbs +81 -50
  89. data/core/trace_point.rbs +41 -35
  90. data/core/true_class.rbs +2 -2
  91. data/core/unbound_method.rbs +24 -16
  92. data/core/warning.rbs +7 -7
  93. data/docs/CONTRIBUTING.md +2 -1
  94. data/docs/aliases.md +79 -0
  95. data/docs/collection.md +3 -3
  96. data/docs/config.md +171 -0
  97. data/docs/encoding.md +56 -0
  98. data/docs/gem.md +0 -1
  99. data/docs/inline.md +634 -0
  100. data/docs/rbs_by_example.md +20 -20
  101. data/docs/rust.md +96 -0
  102. data/docs/sigs.md +3 -3
  103. data/docs/syntax.md +48 -18
  104. data/docs/type_fingerprint.md +21 -0
  105. data/docs/wasm_serialization.md +80 -0
  106. data/exe/rbs +1 -1
  107. data/ext/rbs_extension/ast_translation.c +1441 -671
  108. data/ext/rbs_extension/ast_translation.h +7 -0
  109. data/ext/rbs_extension/class_constants.c +18 -2
  110. data/ext/rbs_extension/class_constants.h +9 -0
  111. data/ext/rbs_extension/extconf.rb +6 -1
  112. data/ext/rbs_extension/legacy_location.c +33 -56
  113. data/ext/rbs_extension/legacy_location.h +37 -0
  114. data/ext/rbs_extension/main.c +183 -39
  115. data/include/rbs/ast.h +597 -297
  116. data/include/rbs/defines.h +40 -0
  117. data/include/rbs/lexer.h +31 -11
  118. data/include/rbs/location.h +25 -44
  119. data/include/rbs/parser.h +6 -6
  120. data/include/rbs/serialize.h +39 -0
  121. data/include/rbs/string.h +0 -2
  122. data/include/rbs/util/rbs_allocator.h +34 -13
  123. data/include/rbs/util/rbs_assert.h +12 -1
  124. data/include/rbs/util/rbs_constant_pool.h +0 -3
  125. data/include/rbs/util/rbs_encoding.h +2 -0
  126. data/include/rbs/util/rbs_unescape.h +2 -1
  127. data/include/rbs.h +8 -0
  128. data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
  129. data/lib/rbs/ast/annotation.rb +1 -1
  130. data/lib/rbs/ast/comment.rb +1 -1
  131. data/lib/rbs/ast/declarations.rb +10 -10
  132. data/lib/rbs/ast/members.rb +14 -14
  133. data/lib/rbs/ast/ruby/annotations.rb +335 -3
  134. data/lib/rbs/ast/ruby/comment_block.rb +30 -4
  135. data/lib/rbs/ast/ruby/declarations.rb +209 -4
  136. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  137. data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
  138. data/lib/rbs/ast/ruby/members.rb +571 -22
  139. data/lib/rbs/ast/type_param.rb +24 -4
  140. data/lib/rbs/buffer.rb +66 -24
  141. data/lib/rbs/cli/diff.rb +16 -15
  142. data/lib/rbs/cli/validate.rb +38 -106
  143. data/lib/rbs/cli.rb +55 -24
  144. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  145. data/lib/rbs/collection/sources/git.rb +7 -0
  146. data/lib/rbs/definition.rb +1 -1
  147. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  148. data/lib/rbs/definition_builder/method_builder.rb +32 -6
  149. data/lib/rbs/definition_builder.rb +147 -25
  150. data/lib/rbs/diff.rb +7 -1
  151. data/lib/rbs/environment.rb +235 -75
  152. data/lib/rbs/environment_loader.rb +0 -6
  153. data/lib/rbs/errors.rb +27 -18
  154. data/lib/rbs/inline_parser.rb +377 -15
  155. data/lib/rbs/location_aux.rb +1 -1
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +47 -11
  159. data/lib/rbs/parser_aux.rb +20 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -0
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  166. data/lib/rbs/rewriter.rb +70 -0
  167. data/lib/rbs/subtractor.rb +3 -1
  168. data/lib/rbs/test/type_check.rb +25 -3
  169. data/lib/rbs/type_name.rb +34 -14
  170. data/lib/rbs/types.rb +88 -78
  171. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  172. data/lib/rbs/validator.rb +2 -2
  173. data/lib/rbs/version.rb +1 -1
  174. data/lib/rbs/wasm/deserializer.rb +213 -0
  175. data/lib/rbs/wasm/location.rb +61 -0
  176. data/lib/rbs/wasm/parser.rb +137 -0
  177. data/lib/rbs/wasm/runtime.rb +217 -0
  178. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  179. data/lib/rbs.rb +13 -2
  180. data/lib/rdoc/discover.rb +1 -1
  181. data/lib/rdoc_plugin/parser.rb +1 -1
  182. data/rbs.gemspec +24 -6
  183. data/schema/typeParam.json +17 -1
  184. data/sig/annotate/rdoc_annotater.rbs +12 -9
  185. data/sig/ast/ruby/annotations.rbs +364 -4
  186. data/sig/ast/ruby/comment_block.rbs +8 -0
  187. data/sig/ast/ruby/declarations.rbs +102 -4
  188. data/sig/ast/ruby/members.rbs +128 -2
  189. data/sig/buffer.rbs +19 -1
  190. data/sig/cli/diff.rbs +5 -11
  191. data/sig/cli/validate.rbs +12 -8
  192. data/sig/cli.rbs +18 -18
  193. data/sig/collection/config/lockfile_generator.rbs +2 -0
  194. data/sig/definition.rbs +6 -1
  195. data/sig/definition_builder.rbs +2 -0
  196. data/sig/environment.rbs +70 -12
  197. data/sig/errors.rbs +13 -14
  198. data/sig/inline_parser.rbs +41 -2
  199. data/sig/locator.rbs +0 -2
  200. data/sig/manifest.yaml +0 -2
  201. data/sig/method_builder.rbs +3 -1
  202. data/sig/namespace.rbs +20 -0
  203. data/sig/parser.rbs +41 -13
  204. data/sig/prototype/helpers.rbs +2 -0
  205. data/sig/resolver/type_name_resolver.rbs +36 -10
  206. data/sig/rewriter.rbs +45 -0
  207. data/sig/source.rbs +3 -3
  208. data/sig/type_param.rbs +13 -8
  209. data/sig/typename.rbs +15 -0
  210. data/sig/types.rbs +6 -7
  211. data/sig/unit_test/spy.rbs +0 -8
  212. data/sig/unit_test/type_assertions.rbs +15 -0
  213. data/sig/wasm/deserializer.rbs +66 -0
  214. data/sig/wasm/serialization_schema.rbs +13 -0
  215. data/src/ast.c +443 -162
  216. data/src/lexer.c +1415 -1313
  217. data/src/lexer.re +4 -0
  218. data/src/lexstate.c +63 -37
  219. data/src/location.c +7 -47
  220. data/src/parser.c +1032 -521
  221. data/src/serialize.c +958 -0
  222. data/src/string.c +0 -48
  223. data/src/util/rbs_allocator.c +89 -74
  224. data/src/util/rbs_assert.c +1 -1
  225. data/src/util/rbs_buffer.c +2 -2
  226. data/src/util/rbs_constant_pool.c +10 -14
  227. data/src/util/rbs_encoding.c +4 -8
  228. data/src/util/rbs_unescape.c +56 -20
  229. data/stdlib/abbrev/0/array.rbs +1 -1
  230. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  231. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  232. data/stdlib/cgi/0/core.rbs +9 -393
  233. data/stdlib/cgi/0/manifest.yaml +1 -0
  234. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  235. data/stdlib/coverage/0/coverage.rbs +7 -4
  236. data/stdlib/csv/0/csv.rbs +5 -5
  237. data/stdlib/date/0/date.rbs +92 -79
  238. data/stdlib/date/0/date_time.rbs +25 -24
  239. data/stdlib/delegate/0/delegator.rbs +10 -7
  240. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  241. data/stdlib/digest/0/digest.rbs +111 -1
  242. data/stdlib/erb/0/erb.rbs +748 -347
  243. data/stdlib/etc/0/etc.rbs +73 -54
  244. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  245. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  246. data/stdlib/io-console/0/io-console.rbs +2 -2
  247. data/stdlib/json/0/json.rbs +223 -142
  248. data/stdlib/monitor/0/monitor.rbs +3 -3
  249. data/stdlib/net-http/0/net-http.rbs +162 -134
  250. data/stdlib/objspace/0/objspace.rbs +17 -34
  251. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  252. data/stdlib/open3/0/open3.rbs +469 -10
  253. data/stdlib/openssl/0/openssl.rbs +482 -364
  254. data/stdlib/optparse/0/optparse.rbs +26 -17
  255. data/stdlib/pathname/0/pathname.rbs +11 -1381
  256. data/stdlib/pp/0/pp.rbs +9 -8
  257. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  258. data/stdlib/pstore/0/pstore.rbs +35 -30
  259. data/stdlib/psych/0/psych.rbs +65 -12
  260. data/stdlib/psych/0/store.rbs +2 -4
  261. data/stdlib/pty/0/pty.rbs +9 -6
  262. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  263. data/stdlib/rdoc/0/code_object.rbs +2 -1
  264. data/stdlib/rdoc/0/parser.rbs +1 -1
  265. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  266. data/stdlib/rdoc/0/store.rbs +1 -1
  267. data/stdlib/resolv/0/resolv.rbs +26 -69
  268. data/stdlib/ripper/0/ripper.rbs +22 -19
  269. data/stdlib/securerandom/0/manifest.yaml +2 -0
  270. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  271. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  272. data/stdlib/singleton/0/singleton.rbs +3 -0
  273. data/stdlib/socket/0/addrinfo.rbs +7 -7
  274. data/stdlib/socket/0/basic_socket.rbs +3 -3
  275. data/stdlib/socket/0/ip_socket.rbs +10 -8
  276. data/stdlib/socket/0/socket.rbs +23 -10
  277. data/stdlib/socket/0/tcp_server.rbs +1 -1
  278. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  279. data/stdlib/socket/0/udp_socket.rbs +1 -1
  280. data/stdlib/socket/0/unix_server.rbs +1 -1
  281. data/stdlib/stringio/0/stringio.rbs +1209 -95
  282. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  283. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  284. data/stdlib/time/0/time.rbs +8 -6
  285. data/stdlib/timeout/0/timeout.rbs +63 -7
  286. data/stdlib/tsort/0/cyclic.rbs +4 -1
  287. data/stdlib/tsort/0/interfaces.rbs +8 -8
  288. data/stdlib/tsort/0/tsort.rbs +16 -15
  289. data/stdlib/uri/0/common.rbs +42 -20
  290. data/stdlib/uri/0/file.rbs +3 -3
  291. data/stdlib/uri/0/generic.rbs +26 -18
  292. data/stdlib/uri/0/http.rbs +2 -2
  293. data/stdlib/uri/0/ldap.rbs +2 -2
  294. data/stdlib/uri/0/mailto.rbs +3 -3
  295. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  296. data/stdlib/zlib/0/deflate.rbs +4 -3
  297. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  298. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  299. data/stdlib/zlib/0/inflate.rbs +1 -1
  300. data/stdlib/zlib/0/need_dict.rbs +1 -1
  301. data/stdlib/zlib/0/zstream.rbs +1 -0
  302. data/wasm/README.md +59 -0
  303. data/wasm/rbs_wasm.c +411 -0
  304. metadata +56 -8
  305. data/.vscode/extensions.json +0 -5
  306. data/.vscode/settings.json +0 -19
data/core/rational.rbs CHANGED
@@ -53,15 +53,16 @@ class Rational < Numeric
53
53
 
54
54
  # <!--
55
55
  # rdoc-file=rational.c
56
- # - rat * numeric -> numeric
56
+ # - self * other -> numeric
57
57
  # -->
58
- # Performs multiplication.
58
+ # Returns the numeric product of `self` and `other`:
59
59
  #
60
- # Rational(2, 3) * Rational(2, 3) #=> (4/9)
61
- # Rational(900) * Rational(1) #=> (900/1)
62
- # Rational(-2, 9) * Rational(-9, 2) #=> (1/1)
63
- # Rational(9, 8) * 4 #=> (9/2)
64
- # Rational(20, 9) * 9.8 #=> 21.77777777777778
60
+ # Rational(9, 8) * 4 #=> (9/2)
61
+ # Rational(20, 9) * 9.8 #=> 21.77777777777778
62
+ # Rational(9, 8) * Complex(1, 2) # => ((9/8)+(9/4)*i)
63
+ # Rational(2, 3) * Rational(2, 3) #=> (4/9)
64
+ # Rational(900) * Rational(1) #=> (900/1)
65
+ # Rational(-2, 9) * Rational(-9, 2) #=> (1/1)
65
66
  #
66
67
  def *: (Integer) -> Rational
67
68
  | (Rational) -> Rational
@@ -69,9 +70,9 @@ class Rational < Numeric
69
70
 
70
71
  # <!--
71
72
  # rdoc-file=rational.c
72
- # - rat ** numeric -> numeric
73
+ # - self ** exponent -> numeric
73
74
  # -->
74
- # Performs exponentiation.
75
+ # Returns `self` raised to the power `exponent`:
75
76
  #
76
77
  # Rational(2) ** Rational(3) #=> (8/1)
77
78
  # Rational(10) ** -2 #=> (1/100)
@@ -85,27 +86,35 @@ class Rational < Numeric
85
86
 
86
87
  # <!--
87
88
  # rdoc-file=rational.c
88
- # - rat + numeric -> numeric
89
+ # - self + other -> numeric
89
90
  # -->
90
- # Performs addition.
91
+ # Returns the sum of `self` and `other`:
91
92
  #
92
- # Rational(2, 3) + Rational(2, 3) #=> (4/3)
93
- # Rational(900) + Rational(1) #=> (901/1)
94
- # Rational(-2, 9) + Rational(-9, 2) #=> (-85/18)
95
- # Rational(9, 8) + 4 #=> (41/8)
96
- # Rational(20, 9) + 9.8 #=> 12.022222222222222
93
+ # Rational(2, 3) + 0 # => (2/3)
94
+ # Rational(2, 3) + 1 # => (5/3)
95
+ # Rational(2, 3) + -1 # => (-1/3)
96
+ #
97
+ # Rational(2, 3) + Complex(1, 0) # => ((5/3)+0i)
98
+ #
99
+ # Rational(2, 3) + Rational(1, 1) # => (5/3)
100
+ # Rational(2, 3) + Rational(3, 2) # => (13/6)
101
+ # Rational(2, 3) + Rational(3.0, 2.0) # => (13/6)
102
+ # Rational(2, 3) + Rational(3.1, 2.1) # => (30399297484750849/14186338826217063)
103
+ #
104
+ # For a computation involving Floats, the result may be inexact (see Float#+):
105
+ #
106
+ # Rational(2, 3) + 1.0 # => 1.6666666666666665
107
+ # Rational(2, 3) + Complex(1.0, 0.0) # => (1.6666666666666665+0.0i)
97
108
  #
98
109
  def +: (Float) -> Float
99
110
  | (Complex) -> Complex
100
111
  | (Numeric) -> Rational
101
112
 
102
- def +@: () -> Rational
103
-
104
113
  # <!--
105
114
  # rdoc-file=rational.c
106
- # - rat - numeric -> numeric
115
+ # - self - other -> numeric
107
116
  # -->
108
- # Performs subtraction.
117
+ # Returns the difference of `self` and `other`:
109
118
  #
110
119
  # Rational(2, 3) - Rational(2, 3) #=> (0/1)
111
120
  # Rational(900) - Rational(1) #=> (899/1)
@@ -119,18 +128,20 @@ class Rational < Numeric
119
128
 
120
129
  # <!--
121
130
  # rdoc-file=rational.c
122
- # - -rat -> rational
131
+ # - -self -> rational
123
132
  # -->
124
- # Negates `rat`.
133
+ # Returns `self`, negated:
134
+ #
135
+ # -(1/3r) # => (-1/3)
136
+ # -(-1/3r) # => (1/3)
125
137
  #
126
138
  def -@: () -> Rational
127
139
 
128
140
  # <!--
129
141
  # rdoc-file=rational.c
130
- # - rat / numeric -> numeric
131
- # - rat.quo(numeric) -> numeric
142
+ # - self / other -> numeric
132
143
  # -->
133
- # Performs division.
144
+ # Returns the quotient of `self` and `other`:
134
145
  #
135
146
  # Rational(2, 3) / Rational(2, 3) #=> (1/1)
136
147
  # Rational(900) / Rational(1) #=> (900/1)
@@ -144,20 +155,29 @@ class Rational < Numeric
144
155
 
145
156
  # <!--
146
157
  # rdoc-file=rational.c
147
- # - rational <=> numeric -> -1, 0, +1, or nil
158
+ # - self <=> other -> -1, 0, 1, or nil
148
159
  # -->
149
- # Returns -1, 0, or +1 depending on whether `rational` is less than, equal to,
150
- # or greater than `numeric`.
160
+ # Compares `self` and `other`.
161
+ #
162
+ # Returns:
163
+ #
164
+ # * <code>-1</code>, if `self` is less than `other`.
165
+ # * `0`, if the two values are the same.
166
+ # * `1`, if `self` is greater than `other`.
167
+ # * `nil`, if the two values are incomparable.
151
168
  #
152
- # `nil` is returned if the two values are incomparable.
169
+ # Examples:
153
170
  #
154
- # Rational(2, 3) <=> Rational(2, 3) #=> 0
155
- # Rational(5) <=> 5 #=> 0
156
- # Rational(2, 3) <=> Rational(1, 3) #=> 1
157
- # Rational(1, 3) <=> 1 #=> -1
158
- # Rational(1, 3) <=> 0.3 #=> 1
171
+ # Rational(2, 3) <=> Rational(4, 3) # => -1
172
+ # Rational(2, 1) <=> Rational(2, 1) # => 0
173
+ # Rational(2, 1) <=> 2 # => 0
174
+ # Rational(2, 1) <=> 2.0 # => 0
175
+ # Rational(2, 1) <=> Complex(2, 0) # => 0
176
+ # Rational(4, 3) <=> Rational(2, 3) # => 1
177
+ # Rational(4, 3) <=> :foo # => nil
159
178
  #
160
- # Rational(1, 3) <=> "0.3" #=> nil
179
+ # Class Rational includes module Comparable, each of whose methods uses
180
+ # Rational#<=> for comparison.
161
181
  #
162
182
  def <=>: (Integer | Rational) -> Integer
163
183
  | (untyped) -> Integer?
@@ -188,12 +208,6 @@ class Rational < Numeric
188
208
  #
189
209
  def abs: () -> Rational
190
210
 
191
- def abs2: () -> Rational
192
-
193
- def angle: () -> (Integer | Float)
194
-
195
- alias arg angle
196
-
197
211
  # <!--
198
212
  # rdoc-file=rational.c
199
213
  # - rat.ceil([ndigits]) -> integer or rational
@@ -202,7 +216,7 @@ class Rational < Numeric
202
216
  # `ndigits` decimal digits (default: 0).
203
217
  #
204
218
  # When the precision is negative, the returned value is an integer with at least
205
- # `ndigits.abs` trailing zeros.
219
+ # <code>ndigits.abs</code> trailing zeros.
206
220
  #
207
221
  # Returns a rational when `ndigits` is positive, otherwise returns an integer.
208
222
  #
@@ -222,10 +236,6 @@ class Rational < Numeric
222
236
 
223
237
  def coerce: (Numeric) -> [ Numeric, Numeric ]
224
238
 
225
- def conj: () -> Rational
226
-
227
- def conjugate: () -> Rational
228
-
229
239
  # <!--
230
240
  # rdoc-file=rational.c
231
241
  # - rat.denominator -> integer
@@ -239,15 +249,9 @@ class Rational < Numeric
239
249
  #
240
250
  def denominator: () -> Integer
241
251
 
242
- def div: (Numeric) -> Integer
243
-
244
252
  def divmod: (Integer | Float | Rational) -> [ Integer, Rational ]
245
253
  | (Numeric) -> [ Numeric, Numeric ]
246
254
 
247
- def dup: () -> self
248
-
249
- def eql?: (untyped) -> bool
250
-
251
255
  # <!--
252
256
  # rdoc-file=rational.c
253
257
  # - rat.fdiv(numeric) -> float
@@ -260,8 +264,6 @@ class Rational < Numeric
260
264
  #
261
265
  def fdiv: (Numeric) -> Float
262
266
 
263
- def finite?: () -> bool
264
-
265
267
  # <!--
266
268
  # rdoc-file=rational.c
267
269
  # - rat.floor([ndigits]) -> integer or rational
@@ -270,7 +272,7 @@ class Rational < Numeric
270
272
  # `ndigits` decimal digits (default: 0).
271
273
  #
272
274
  # When the precision is negative, the returned value is an integer with at least
273
- # `ndigits.abs` trailing zeros.
275
+ # <code>ndigits.abs</code> trailing zeros.
274
276
  #
275
277
  # Returns a rational when `ndigits` is positive, otherwise returns an integer.
276
278
  #
@@ -295,14 +297,6 @@ class Rational < Numeric
295
297
  #
296
298
  def hash: () -> Integer
297
299
 
298
- def i: () -> Complex
299
-
300
- def imag: () -> Integer
301
-
302
- def imaginary: () -> Integer
303
-
304
- def infinite?: () -> Integer?
305
-
306
300
  # <!--
307
301
  # rdoc-file=rational.c
308
302
  # - rat.inspect -> string
@@ -315,8 +309,6 @@ class Rational < Numeric
315
309
  #
316
310
  def inspect: () -> String
317
311
 
318
- def integer?: () -> bool
319
-
320
312
  # <!-- rdoc-file=rational.c -->
321
313
  # Returns the absolute value of `rat`.
322
314
  #
@@ -336,8 +328,6 @@ class Rational < Numeric
336
328
  #
337
329
  def negative?: () -> bool
338
330
 
339
- def nonzero?: () -> self?
340
-
341
331
  # <!--
342
332
  # rdoc-file=rational.c
343
333
  # - rat.numerator -> integer
@@ -351,8 +341,6 @@ class Rational < Numeric
351
341
  #
352
342
  def numerator: () -> Integer
353
343
 
354
- alias phase angle
355
-
356
344
  def polar: () -> [ Rational, Integer | Float ]
357
345
 
358
346
  # <!--
@@ -364,7 +352,7 @@ class Rational < Numeric
364
352
  def positive?: () -> bool
365
353
 
366
354
  # <!-- rdoc-file=rational.c -->
367
- # Performs division.
355
+ # Returns the quotient of `self` and `other`:
368
356
  #
369
357
  # Rational(2, 3) / Rational(2, 3) #=> (1/1)
370
358
  # Rational(900) / Rational(1) #=> (900/1)
@@ -391,14 +379,8 @@ class Rational < Numeric
391
379
  #
392
380
  def rationalize: (?Numeric eps) -> Rational
393
381
 
394
- def real: () -> Rational
395
-
396
- def real?: () -> true
397
-
398
382
  def rect: () -> [ Rational, Numeric ]
399
383
 
400
- alias rectangular rect
401
-
402
384
  def remainder: (Float) -> Float
403
385
  | (Numeric) -> Rational
404
386
 
@@ -410,7 +392,7 @@ class Rational < Numeric
410
392
  # decimal digits (default: 0).
411
393
  #
412
394
  # When the precision is negative, the returned value is an integer with at least
413
- # `ndigits.abs` trailing zeros.
395
+ # <code>ndigits.abs</code> trailing zeros.
414
396
  #
415
397
  # Returns a rational when `ndigits` is positive, otherwise returns an integer.
416
398
  #
@@ -440,13 +422,6 @@ class Rational < Numeric
440
422
  def round: (?half: :up | :down | :even) -> Integer
441
423
  | (Integer digits, ?half: :up | :down | :even) -> (Integer | Rational)
442
424
 
443
- def step: (?Numeric limit, ?Numeric step) { (Rational) -> void } -> self
444
- | (?Numeric limit, ?Numeric step) -> Enumerator[Rational, self]
445
- | (?by: Numeric, ?to: Numeric) { (Rational) -> void } -> self
446
- | (?by: Numeric, ?to: Numeric) -> Enumerator[Rational, self]
447
-
448
- def to_c: () -> Complex
449
-
450
425
  # <!--
451
426
  # rdoc-file=rational.c
452
427
  # - rat.to_f -> float
@@ -476,8 +451,6 @@ class Rational < Numeric
476
451
  #
477
452
  def to_i: () -> Integer
478
453
 
479
- alias to_int to_i
480
-
481
454
  # <!--
482
455
  # rdoc-file=rational.c
483
456
  # - rat.to_r -> self
@@ -509,7 +482,7 @@ class Rational < Numeric
509
482
  # digits (default: 0).
510
483
  #
511
484
  # When the precision is negative, the returned value is an integer with at least
512
- # `ndigits.abs` trailing zeros.
485
+ # <code>ndigits.abs</code> trailing zeros.
513
486
  #
514
487
  # Returns a rational when `ndigits` is positive, otherwise returns an integer.
515
488
  #
@@ -526,6 +499,4 @@ class Rational < Numeric
526
499
  #
527
500
  def truncate: () -> Integer
528
501
  | (Integer ndigits) -> (Integer | Rational)
529
-
530
- def zero?: () -> bool
531
502
  end
data/core/rbs/ops.rbs ADDED
@@ -0,0 +1,154 @@
1
+ module RBS
2
+ module Ops
3
+ # An interface for types implementing the `+` operator
4
+ interface _Add[O, R]
5
+ # Perform the `+` operation
6
+ def +: (O other) -> R
7
+ end
8
+
9
+ # An interface for types implementing the `-` operator
10
+ interface _Subtract[O, R]
11
+ # Perform the `-` operation
12
+ def -: (O other) -> R
13
+ end
14
+
15
+ # An interface for types implementing the `*` operator
16
+ interface _Times[O, R]
17
+ # Perform the `*` operation
18
+ def *: (O other) -> R
19
+ end
20
+
21
+ # An interface for types implementing the `/` operator
22
+ interface _Divide[O, R]
23
+ # Perform the `/` operation
24
+ def /: (O other) -> R
25
+ end
26
+
27
+ # An interface for types implementing the `%` operator
28
+ interface _Modulo[O, R]
29
+ # Perform the `%` operation
30
+ def %: (O other) -> R
31
+ end
32
+
33
+ # An interface for types implementing the `**` operator
34
+ interface _Power[O, R]
35
+ # Perform the `**` operation
36
+ def **: (O other) -> R
37
+ end
38
+
39
+ # An interface for types implementing the `<` operator
40
+ interface _LessThan[O, R = bool]
41
+ # Perform the `<` operation
42
+ def <: (O other) -> R
43
+ end
44
+
45
+ # An interface for types implementing the `>` operator
46
+ interface _GreaterThan[O, R = bool]
47
+ # Perform the `>` operation
48
+ def >: (O other) -> R
49
+ end
50
+
51
+ # An interface for types implementing the `<=` operator
52
+ interface _LessThanOrEqual[O, R = bool]
53
+ # Perform the `<=` operation
54
+ def <=: (O other) -> R
55
+ end
56
+
57
+ # An interface for types implementing the `>=` operator
58
+ interface _GreaterThanOrEqual[O, R = bool]
59
+ # Perform the `>=` operation
60
+ def >=: (O other) -> R
61
+ end
62
+
63
+ # An interface for types implementing the `<=>` operator
64
+ interface _Compare[O = untyped, R = (-1 | 0 | 1)?]
65
+ # Perform the `<=>` operation
66
+ def <=>: (O other) -> R
67
+ end
68
+
69
+ # An interface for types implementing the `&` operator
70
+ interface _And[O, R]
71
+ # Perform the `&` operation
72
+ def &: (O other) -> R
73
+ end
74
+
75
+ # An interface for types implementing the `|` operator
76
+ interface _Or[O, R]
77
+ # Perform the `|` operation
78
+ def |: (O other) -> R
79
+ end
80
+
81
+ # An interface for types implementing the `^` operator
82
+ interface _Xor[O, R]
83
+ # Perform the `^` operation
84
+ def ^: (O other) -> R
85
+ end
86
+
87
+ # An interface for types implementing the `<<` operator
88
+ interface _LeftShift[O, R]
89
+ # Perform the `<<` operation
90
+ def <<: (O other) -> R
91
+ end
92
+
93
+ # An interface for types implementing the `>>` operator
94
+ interface _RightShift[O, R]
95
+ # Perform the `>>` operation
96
+ def >>: (O other) -> R
97
+ end
98
+
99
+ # An interface for types implementing the `~` operator
100
+ interface _Not[R]
101
+ # Perform the `~` operation
102
+ def ~: () -> R
103
+ end
104
+
105
+ # An interface for types implementing the `+@` operator
106
+ interface _UnaryPos[R]
107
+ # Perform the `+@` operation
108
+ def +@: () -> R
109
+ end
110
+
111
+ # An interface for types implementing the `-@` operator
112
+ interface _UnaryNeg[R]
113
+ # Perform the `-@` operation
114
+ def -@: () -> R
115
+ end
116
+
117
+ # An interface for types implementing the `!` operator
118
+ interface _LogicalNot[R = bool]
119
+ # Perform the `!` operation
120
+ def !: () -> R
121
+ end
122
+
123
+ # An interface for types implementing the `==` operator
124
+ interface _Equal[O = untyped, R = bool]
125
+ # Perform the `==` operation
126
+ def ==: (O other) -> R
127
+ end
128
+
129
+ # An interface for types implementing the `===` operator
130
+ interface _CaseEqual[O, R = bool]
131
+ # Perform the `===` operation
132
+ def ===: (O other) -> R
133
+ end
134
+
135
+ # An interface for types implementing the `=~` operator
136
+ interface _Matches[O, R]
137
+ # Perform the `=~` operation
138
+ def =~: (O other) -> R
139
+ end
140
+
141
+ # An interface for types implementing the `!=` operator
142
+ interface _NotEqual[O = untyped, R = bool]
143
+ # Perform the `!=` operation
144
+ def !=: (O other) -> R
145
+ end
146
+
147
+ # An interface for types implementing the `!~` operator
148
+ interface _NotMatches[O, R = bool]
149
+ # Perform the `!~` operation
150
+ def !~: (O other) -> R
151
+ end
152
+ end
153
+ end
154
+