rbs 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +28 -0
  3. data/.gitignore +12 -0
  4. data/.rubocop.yml +15 -0
  5. data/BSDL +22 -0
  6. data/CHANGELOG.md +9 -0
  7. data/COPYING +56 -0
  8. data/Gemfile +6 -0
  9. data/README.md +93 -0
  10. data/Rakefile +142 -0
  11. data/bin/annotate-with-rdoc +157 -0
  12. data/bin/console +14 -0
  13. data/bin/query-rdoc +103 -0
  14. data/bin/setup +10 -0
  15. data/bin/sort +89 -0
  16. data/bin/test_runner.rb +16 -0
  17. data/docs/CONTRIBUTING.md +97 -0
  18. data/docs/sigs.md +148 -0
  19. data/docs/stdlib.md +152 -0
  20. data/docs/syntax.md +528 -0
  21. data/exe/rbs +7 -0
  22. data/lib/rbs.rb +64 -0
  23. data/lib/rbs/ast/annotation.rb +27 -0
  24. data/lib/rbs/ast/comment.rb +27 -0
  25. data/lib/rbs/ast/declarations.rb +395 -0
  26. data/lib/rbs/ast/members.rb +362 -0
  27. data/lib/rbs/buffer.rb +50 -0
  28. data/lib/rbs/builtin_names.rb +55 -0
  29. data/lib/rbs/cli.rb +558 -0
  30. data/lib/rbs/constant.rb +26 -0
  31. data/lib/rbs/constant_table.rb +150 -0
  32. data/lib/rbs/definition.rb +170 -0
  33. data/lib/rbs/definition_builder.rb +919 -0
  34. data/lib/rbs/environment.rb +281 -0
  35. data/lib/rbs/environment_loader.rb +136 -0
  36. data/lib/rbs/environment_walker.rb +124 -0
  37. data/lib/rbs/errors.rb +187 -0
  38. data/lib/rbs/location.rb +102 -0
  39. data/lib/rbs/method_type.rb +123 -0
  40. data/lib/rbs/namespace.rb +91 -0
  41. data/lib/rbs/parser.y +1344 -0
  42. data/lib/rbs/prototype/rb.rb +553 -0
  43. data/lib/rbs/prototype/rbi.rb +587 -0
  44. data/lib/rbs/prototype/runtime.rb +381 -0
  45. data/lib/rbs/substitution.rb +46 -0
  46. data/lib/rbs/test.rb +26 -0
  47. data/lib/rbs/test/errors.rb +61 -0
  48. data/lib/rbs/test/hook.rb +294 -0
  49. data/lib/rbs/test/setup.rb +58 -0
  50. data/lib/rbs/test/spy.rb +325 -0
  51. data/lib/rbs/test/test_helper.rb +183 -0
  52. data/lib/rbs/test/type_check.rb +254 -0
  53. data/lib/rbs/type_name.rb +70 -0
  54. data/lib/rbs/types.rb +936 -0
  55. data/lib/rbs/variance_calculator.rb +138 -0
  56. data/lib/rbs/vendorer.rb +47 -0
  57. data/lib/rbs/version.rb +3 -0
  58. data/lib/rbs/writer.rb +269 -0
  59. data/lib/ruby/signature.rb +7 -0
  60. data/rbs.gemspec +46 -0
  61. data/stdlib/abbrev/abbrev.rbs +60 -0
  62. data/stdlib/base64/base64.rbs +71 -0
  63. data/stdlib/benchmark/benchmark.rbs +372 -0
  64. data/stdlib/builtin/array.rbs +1997 -0
  65. data/stdlib/builtin/basic_object.rbs +280 -0
  66. data/stdlib/builtin/binding.rbs +177 -0
  67. data/stdlib/builtin/builtin.rbs +45 -0
  68. data/stdlib/builtin/class.rbs +145 -0
  69. data/stdlib/builtin/comparable.rbs +116 -0
  70. data/stdlib/builtin/complex.rbs +400 -0
  71. data/stdlib/builtin/constants.rbs +37 -0
  72. data/stdlib/builtin/data.rbs +5 -0
  73. data/stdlib/builtin/deprecated.rbs +2 -0
  74. data/stdlib/builtin/dir.rbs +413 -0
  75. data/stdlib/builtin/encoding.rbs +607 -0
  76. data/stdlib/builtin/enumerable.rbs +404 -0
  77. data/stdlib/builtin/enumerator.rbs +260 -0
  78. data/stdlib/builtin/errno.rbs +781 -0
  79. data/stdlib/builtin/errors.rbs +582 -0
  80. data/stdlib/builtin/exception.rbs +194 -0
  81. data/stdlib/builtin/false_class.rbs +40 -0
  82. data/stdlib/builtin/fiber.rbs +68 -0
  83. data/stdlib/builtin/fiber_error.rbs +12 -0
  84. data/stdlib/builtin/file.rbs +1076 -0
  85. data/stdlib/builtin/file_test.rbs +59 -0
  86. data/stdlib/builtin/float.rbs +696 -0
  87. data/stdlib/builtin/gc.rbs +243 -0
  88. data/stdlib/builtin/hash.rbs +1029 -0
  89. data/stdlib/builtin/integer.rbs +707 -0
  90. data/stdlib/builtin/io.rbs +683 -0
  91. data/stdlib/builtin/kernel.rbs +576 -0
  92. data/stdlib/builtin/marshal.rbs +161 -0
  93. data/stdlib/builtin/match_data.rbs +271 -0
  94. data/stdlib/builtin/math.rbs +369 -0
  95. data/stdlib/builtin/method.rbs +185 -0
  96. data/stdlib/builtin/module.rbs +1104 -0
  97. data/stdlib/builtin/nil_class.rbs +82 -0
  98. data/stdlib/builtin/numeric.rbs +409 -0
  99. data/stdlib/builtin/object.rbs +824 -0
  100. data/stdlib/builtin/proc.rbs +429 -0
  101. data/stdlib/builtin/process.rbs +1227 -0
  102. data/stdlib/builtin/random.rbs +267 -0
  103. data/stdlib/builtin/range.rbs +226 -0
  104. data/stdlib/builtin/rational.rbs +424 -0
  105. data/stdlib/builtin/rb_config.rbs +57 -0
  106. data/stdlib/builtin/regexp.rbs +1083 -0
  107. data/stdlib/builtin/ruby_vm.rbs +14 -0
  108. data/stdlib/builtin/signal.rbs +55 -0
  109. data/stdlib/builtin/string.rbs +1901 -0
  110. data/stdlib/builtin/string_io.rbs +284 -0
  111. data/stdlib/builtin/struct.rbs +40 -0
  112. data/stdlib/builtin/symbol.rbs +228 -0
  113. data/stdlib/builtin/thread.rbs +1108 -0
  114. data/stdlib/builtin/thread_group.rbs +23 -0
  115. data/stdlib/builtin/time.rbs +1047 -0
  116. data/stdlib/builtin/trace_point.rbs +290 -0
  117. data/stdlib/builtin/true_class.rbs +46 -0
  118. data/stdlib/builtin/unbound_method.rbs +153 -0
  119. data/stdlib/builtin/warning.rbs +17 -0
  120. data/stdlib/coverage/coverage.rbs +62 -0
  121. data/stdlib/csv/csv.rbs +773 -0
  122. data/stdlib/erb/erb.rbs +392 -0
  123. data/stdlib/find/find.rbs +40 -0
  124. data/stdlib/ipaddr/ipaddr.rbs +247 -0
  125. data/stdlib/json/json.rbs +335 -0
  126. data/stdlib/pathname/pathname.rbs +1093 -0
  127. data/stdlib/prime/integer-extension.rbs +23 -0
  128. data/stdlib/prime/prime.rbs +188 -0
  129. data/stdlib/securerandom/securerandom.rbs +9 -0
  130. data/stdlib/set/set.rbs +301 -0
  131. data/stdlib/tmpdir/tmpdir.rbs +53 -0
  132. metadata +292 -0
@@ -0,0 +1,82 @@
1
+ # The class of the singleton object `nil`.
2
+ #
3
+ class NilClass
4
+ public
5
+
6
+ # And---Returns `false`. *obj* is always evaluated as it is the argument to a
7
+ # method call---there is no short-circuit evaluation in this case.
8
+ #
9
+ def &: (untyped obj) -> bool
10
+
11
+ # Case Equality -- For class Object, effectively the same as calling `#==`, but
12
+ # typically overridden by descendants to provide meaningful semantics in `case`
13
+ # statements.
14
+ #
15
+ def ===: (nil) -> true
16
+ | (untyped obj) -> bool
17
+
18
+ # Dummy pattern matching -- always returns nil.
19
+ #
20
+ def =~: (untyped obj) -> nil
21
+
22
+ # Exclusive Or---If *obj* is `nil` or `false`, returns `false`; otherwise,
23
+ # returns `true`.
24
+ #
25
+ def ^: (nil) -> false
26
+ | (false) -> false
27
+ | (untyped obj) -> bool
28
+
29
+ # Always returns the string "nil".
30
+ #
31
+ def inspect: () -> "nil"
32
+
33
+ # Only the object *nil* responds `true` to `nil?`.
34
+ #
35
+ def nil?: () -> bool
36
+
37
+ # Returns zero as a rational. The optional argument `eps` is always ignored.
38
+ #
39
+ def rationalize: (?untyped eps) -> Rational
40
+
41
+ # Always returns an empty array.
42
+ #
43
+ # nil.to_a #=> []
44
+ #
45
+ def to_a: () -> [ ]
46
+
47
+ # Returns zero as a complex.
48
+ #
49
+ def to_c: () -> Complex
50
+
51
+ # Always returns zero.
52
+ #
53
+ # nil.to_f #=> 0.0
54
+ #
55
+ def to_f: () -> Float
56
+
57
+ # Always returns an empty hash.
58
+ #
59
+ # nil.to_h #=> {}
60
+ #
61
+ def to_h: () -> ::Hash[untyped, untyped]
62
+
63
+ # Always returns zero.
64
+ #
65
+ # nil.to_i #=> 0
66
+ #
67
+ def to_i: () -> 0
68
+
69
+ # Returns zero as a rational.
70
+ #
71
+ def to_r: () -> Rational
72
+
73
+ # Always returns the empty string.
74
+ #
75
+ def to_s: () -> ""
76
+
77
+ # Or---Returns `false` if *obj* is `nil` or `false`; `true` otherwise.
78
+ #
79
+ def |: (nil) -> false
80
+ | (false) -> false
81
+ | (untyped obj) -> bool
82
+ end
@@ -0,0 +1,409 @@
1
+ # Numeric is the class from which all higher-level numeric classes should
2
+ # inherit.
3
+ #
4
+ # Numeric allows instantiation of heap-allocated objects. Other core numeric
5
+ # classes such as Integer are implemented as immediates, which means that each
6
+ # Integer is a single immutable object which is always passed by value.
7
+ #
8
+ # a = 1
9
+ # 1.object_id == a.object_id #=> true
10
+ #
11
+ # There can only ever be one instance of the integer `1`, for example. Ruby
12
+ # ensures this by preventing instantiation. If duplication is attempted, the
13
+ # same instance is returned.
14
+ #
15
+ # Integer.new(1) #=> NoMethodError: undefined method `new' for Integer:Class
16
+ # 1.dup #=> 1
17
+ # 1.object_id == 1.dup.object_id #=> true
18
+ #
19
+ # For this reason, Numeric should be used when defining other numeric classes.
20
+ #
21
+ # Classes which inherit from Numeric must implement `coerce`, which returns a
22
+ # two-member Array containing an object that has been coerced into an instance
23
+ # of the new class and `self` (see #coerce).
24
+ #
25
+ # Inheriting classes should also implement arithmetic operator methods (`+`,
26
+ # `-`, `*` and `/`) and the `<=>` operator (see Comparable). These methods may
27
+ # rely on `coerce` to ensure interoperability with instances of other numeric
28
+ # classes.
29
+ #
30
+ # class Tally < Numeric
31
+ # def initialize(string)
32
+ # @string = string
33
+ # end
34
+ #
35
+ # def to_s
36
+ # @string
37
+ # end
38
+ #
39
+ # def to_i
40
+ # @string.size
41
+ # end
42
+ #
43
+ # def coerce(other)
44
+ # [self.class.new('|' * other.to_i), self]
45
+ # end
46
+ #
47
+ # def <=>(other)
48
+ # to_i <=> other.to_i
49
+ # end
50
+ #
51
+ # def +(other)
52
+ # self.class.new('|' * (to_i + other.to_i))
53
+ # end
54
+ #
55
+ # def -(other)
56
+ # self.class.new('|' * (to_i - other.to_i))
57
+ # end
58
+ #
59
+ # def *(other)
60
+ # self.class.new('|' * (to_i * other.to_i))
61
+ # end
62
+ #
63
+ # def /(other)
64
+ # self.class.new('|' * (to_i / other.to_i))
65
+ # end
66
+ # end
67
+ #
68
+ # tally = Tally.new('||')
69
+ # puts tally * 2 #=> "||||"
70
+ # puts tally > 1 #=> true
71
+ #
72
+ class Numeric
73
+ include Comparable
74
+
75
+ public
76
+
77
+ # `x.modulo(y)` means `x-y*(x/y).floor`.
78
+ #
79
+ # Equivalent to `num.divmod(numeric)[1]`.
80
+ #
81
+ # See Numeric#divmod.
82
+ #
83
+ def %: (Numeric) -> Numeric
84
+
85
+ # Unary Plus---Returns the receiver.
86
+ #
87
+ def +@: () -> Numeric
88
+
89
+ # Unary Minus---Returns the receiver, negated.
90
+ #
91
+ def -@: () -> Numeric
92
+
93
+ # Returns zero if `number` equals `other`, otherwise returns `nil`.
94
+ #
95
+ def <=>: (Numeric other) -> Integer
96
+
97
+ # Returns the absolute value of `num`.
98
+ #
99
+ # 12.abs #=> 12
100
+ # (-34.56).abs #=> 34.56
101
+ # -34.56.abs #=> 34.56
102
+ #
103
+ # Numeric#magnitude is an alias for Numeric#abs.
104
+ #
105
+ def abs: () -> Numeric
106
+
107
+ # Returns square of self.
108
+ #
109
+ def abs2: () -> Numeric
110
+
111
+ # Returns 0 if the value is positive, pi otherwise.
112
+ #
113
+ def angle: () -> Numeric
114
+
115
+ # Returns 0 if the value is positive, pi otherwise.
116
+ #
117
+ alias arg angle
118
+
119
+ # Returns the smallest number greater than or equal to `num` with a precision of
120
+ # `ndigits` decimal digits (default: 0).
121
+ #
122
+ # Numeric implements this by converting its value to a Float and invoking
123
+ # Float#ceil.
124
+ #
125
+ def ceil: () -> Integer
126
+ | (Integer digits) -> (Integer | Numeric)
127
+
128
+ # If `numeric` is the same type as `num`, returns an array `[numeric, num]`.
129
+ # Otherwise, returns an array with both `numeric` and `num` represented as Float
130
+ # objects.
131
+ #
132
+ # This coercion mechanism is used by Ruby to handle mixed-type numeric
133
+ # operations: it is intended to find a compatible common type between the two
134
+ # operands of the operator.
135
+ #
136
+ # 1.coerce(2.5) #=> [2.5, 1.0]
137
+ # 1.2.coerce(3) #=> [3.0, 1.2]
138
+ # 1.coerce(2) #=> [2, 1]
139
+ #
140
+ def coerce: (Numeric) -> [ Numeric, Numeric ]
141
+
142
+ # Returns self.
143
+ #
144
+ def conj: () -> Numeric
145
+
146
+ # Returns self.
147
+ #
148
+ def conjugate: () -> Numeric
149
+
150
+ # Returns the denominator (always positive).
151
+ #
152
+ def denominator: () -> Integer
153
+
154
+ # Uses `/` to perform division, then converts the result to an integer. Numeric
155
+ # does not define the `/` operator; this is left to subclasses.
156
+ #
157
+ # Equivalent to `num.divmod(numeric)[0]`.
158
+ #
159
+ # See Numeric#divmod.
160
+ #
161
+ def div: (Numeric) -> Integer
162
+
163
+ # Returns an array containing the quotient and modulus obtained by dividing
164
+ # `num` by `numeric`.
165
+ #
166
+ # If `q, r = x.divmod(y)`, then
167
+ #
168
+ # q = floor(x/y)
169
+ # x = q*y + r
170
+ #
171
+ # The quotient is rounded toward negative infinity, as shown in the following
172
+ # table:
173
+ #
174
+ # a | b | a.divmod(b) | a/b | a.modulo(b) | a.remainder(b)
175
+ # ------+-----+---------------+---------+-------------+---------------
176
+ # 13 | 4 | 3, 1 | 3 | 1 | 1
177
+ # ------+-----+---------------+---------+-------------+---------------
178
+ # 13 | -4 | -4, -3 | -4 | -3 | 1
179
+ # ------+-----+---------------+---------+-------------+---------------
180
+ # -13 | 4 | -4, 3 | -4 | 3 | -1
181
+ # ------+-----+---------------+---------+-------------+---------------
182
+ # -13 | -4 | 3, -1 | 3 | -1 | -1
183
+ # ------+-----+---------------+---------+-------------+---------------
184
+ # 11.5 | 4 | 2, 3.5 | 2.875 | 3.5 | 3.5
185
+ # ------+-----+---------------+---------+-------------+---------------
186
+ # 11.5 | -4 | -3, -0.5 | -2.875 | -0.5 | 3.5
187
+ # ------+-----+---------------+---------+-------------+---------------
188
+ # -11.5 | 4 | -3, 0.5 | -2.875 | 0.5 | -3.5
189
+ # ------+-----+---------------+---------+-------------+---------------
190
+ # -11.5 | -4 | 2, -3.5 | 2.875 | -3.5 | -3.5
191
+ #
192
+ # Examples
193
+ #
194
+ # 11.divmod(3) #=> [3, 2]
195
+ # 11.divmod(-3) #=> [-4, -1]
196
+ # 11.divmod(3.5) #=> [3, 0.5]
197
+ # (-11).divmod(3.5) #=> [-4, 3.0]
198
+ # 11.5.divmod(3.5) #=> [3, 1.0]
199
+ #
200
+ def divmod: (Numeric) -> [ Numeric, Numeric ]
201
+
202
+ # Returns `true` if `num` and `numeric` are the same type and have equal values.
203
+ # Contrast this with Numeric#==, which performs type conversions.
204
+ #
205
+ # 1 == 1.0 #=> true
206
+ # 1.eql?(1.0) #=> false
207
+ # 1.0.eql?(1.0) #=> true
208
+ #
209
+ def eql?: (untyped) -> bool
210
+
211
+ # Returns float division.
212
+ #
213
+ def fdiv: (Numeric) -> Numeric
214
+
215
+ # Returns `true` if `num` is a finite number, otherwise returns `false`.
216
+ #
217
+ def finite?: () -> bool
218
+
219
+ # Returns the largest number less than or equal to `num` with a precision of
220
+ # `ndigits` decimal digits (default: 0).
221
+ #
222
+ # Numeric implements this by converting its value to a Float and invoking
223
+ # Float#floor.
224
+ #
225
+ def floor: () -> Integer
226
+ | (Integer digits) -> Numeric
227
+
228
+ # Returns the corresponding imaginary number. Not available for complex numbers.
229
+ #
230
+ # -42.i #=> (0-42i)
231
+ # 2.0.i #=> (0+2.0i)
232
+ #
233
+ def i: () -> Complex
234
+
235
+ # Returns zero.
236
+ #
237
+ def imag: () -> Numeric
238
+
239
+ # Returns zero.
240
+ #
241
+ def imaginary: () -> Numeric
242
+
243
+ # Returns `nil`, -1, or 1 depending on whether the value is finite, `-Infinity`,
244
+ # or `+Infinity`.
245
+ #
246
+ def infinite?: () -> Integer?
247
+
248
+ # Returns `true` if `num` is an Integer.
249
+ #
250
+ # 1.0.integer? #=> false
251
+ # 1.integer? #=> true
252
+ #
253
+ def integer?: () -> bool
254
+
255
+ # Returns the absolute value of `num`.
256
+ #
257
+ # 12.abs #=> 12
258
+ # (-34.56).abs #=> 34.56
259
+ # -34.56.abs #=> 34.56
260
+ #
261
+ # Numeric#magnitude is an alias for Numeric#abs.
262
+ #
263
+ alias magnitude abs
264
+
265
+ # `x.modulo(y)` means `x-y*(x/y).floor`.
266
+ #
267
+ # Equivalent to `num.divmod(numeric)[1]`.
268
+ #
269
+ # See Numeric#divmod.
270
+ #
271
+ def modulo: (Numeric) -> Numeric
272
+
273
+ # Returns `true` if `num` is less than 0.
274
+ #
275
+ def negative?: () -> bool
276
+
277
+ # Returns `self` if `num` is not zero, `nil` otherwise.
278
+ #
279
+ # This behavior is useful when chaining comparisons:
280
+ #
281
+ # a = %w( z Bb bB bb BB a aA Aa AA A )
282
+ # b = a.sort {|a,b| (a.downcase <=> b.downcase).nonzero? || a <=> b }
283
+ # b #=> ["A", "a", "AA", "Aa", "aA", "BB", "Bb", "bB", "bb", "z"]
284
+ #
285
+ def nonzero?: () -> self?
286
+
287
+ # Returns the numerator.
288
+ #
289
+ def numerator: () -> Numeric
290
+
291
+ # Returns 0 if the value is positive, pi otherwise.
292
+ #
293
+ alias phase angle
294
+
295
+ # Returns an array; [num.abs, num.arg].
296
+ #
297
+ def polar: () -> [ Numeric, Numeric ]
298
+
299
+ # Returns `true` if `num` is greater than 0.
300
+ #
301
+ def positive?: () -> bool
302
+
303
+ # Returns the most exact division (rational for integers, float for floats).
304
+ #
305
+ def quo: (Numeric) -> Numeric
306
+
307
+ # Returns self.
308
+ #
309
+ def real: () -> Numeric
310
+
311
+ # Returns `true` if `num` is a real number (i.e. not Complex).
312
+ #
313
+ def real?: () -> bool
314
+
315
+ # Returns an array; [num, 0].
316
+ #
317
+ def rect: () -> [ Numeric, Numeric ]
318
+
319
+ # Returns an array; [num, 0].
320
+ #
321
+ alias rectangular rect
322
+
323
+ # `x.remainder(y)` means `x-y*(x/y).truncate`.
324
+ #
325
+ # See Numeric#divmod.
326
+ #
327
+ def remainder: (Numeric) -> Numeric
328
+
329
+ # Returns `num` rounded to the nearest value with a precision of `ndigits`
330
+ # decimal digits (default: 0).
331
+ #
332
+ # Numeric implements this by converting its value to a Float and invoking
333
+ # Float#round.
334
+ #
335
+ def round: () -> Integer
336
+ | (Integer digits) -> Numeric
337
+
338
+ # Invokes the given block with the sequence of numbers starting at `num`,
339
+ # incremented by `step` (defaulted to `1`) on each call.
340
+ #
341
+ # The loop finishes when the value to be passed to the block is greater than
342
+ # `limit` (if `step` is positive) or less than `limit` (if `step` is negative),
343
+ # where `limit` is defaulted to infinity.
344
+ #
345
+ # In the recommended keyword argument style, either or both of `step` and
346
+ # `limit` (default infinity) can be omitted. In the fixed position argument
347
+ # style, zero as a step (i.e. `num.step(limit, 0)`) is not allowed for
348
+ # historical compatibility reasons.
349
+ #
350
+ # If all the arguments are integers, the loop operates using an integer counter.
351
+ #
352
+ # If any of the arguments are floating point numbers, all are converted to
353
+ # floats, and the loop is executed *floor(n + n*Float::EPSILON) + 1* times,
354
+ # where *n = (limit - num)/step*.
355
+ #
356
+ # Otherwise, the loop starts at `num`, uses either the less-than (`<`) or
357
+ # greater-than (`>`) operator to compare the counter against `limit`, and
358
+ # increments itself using the `+` operator.
359
+ #
360
+ # If no block is given, an Enumerator is returned instead. Especially, the
361
+ # enumerator is an Enumerator::ArithmeticSequence if both `limit` and `step` are
362
+ # kind of Numeric or `nil`.
363
+ #
364
+ # For example:
365
+ #
366
+ # p 1.step.take(4)
367
+ # p 10.step(by: -1).take(4)
368
+ # 3.step(to: 5) {|i| print i, " " }
369
+ # 1.step(10, 2) {|i| print i, " " }
370
+ # Math::E.step(to: Math::PI, by: 0.2) {|f| print f, " " }
371
+ #
372
+ # Will produce:
373
+ #
374
+ # [1, 2, 3, 4]
375
+ # [10, 9, 8, 7]
376
+ # 3 4 5
377
+ # 1 3 5 7 9
378
+ # 2.718281828459045 2.9182818284590453 3.118281828459045
379
+ #
380
+ def step: (?Numeric limit, ?Numeric step) { (Numeric) -> void } -> self
381
+ | (?Numeric limit, ?Numeric step) -> Enumerator[Numeric, self]
382
+ | (?by: Numeric, ?to: Numeric) { (Numeric) -> void } -> self
383
+ | (?by: Numeric, ?to: Numeric) -> Enumerator[Numeric, self]
384
+
385
+ # Returns the value as a complex.
386
+ #
387
+ def to_c: () -> Complex
388
+
389
+ # Invokes the child class's `to_i` method to convert `num` to an integer.
390
+ #
391
+ # 1.0.class #=> Float
392
+ # 1.0.to_int.class #=> Integer
393
+ # 1.0.to_i.class #=> Integer
394
+ #
395
+ def to_int: () -> Integer
396
+
397
+ # Returns `num` truncated (toward zero) to a precision of `ndigits` decimal
398
+ # digits (default: 0).
399
+ #
400
+ # Numeric implements this by converting its value to a Float and invoking
401
+ # Float#truncate.
402
+ #
403
+ def truncate: () -> Integer
404
+ | (Integer ndigits) -> (Integer | Numeric)
405
+
406
+ # Returns `true` if `num` has a zero value.
407
+ #
408
+ def zero?: () -> bool
409
+ end