rbs 0.13.1 → 0.14.0

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