rbs 0.13.1 → 0.14.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 (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
@@ -3,152 +3,152 @@
3
3
  # [Proc](Proc), and can be called.
4
4
  # [Proc](Proc) is an essential concept in Ruby and a
5
5
  # core of its functional programming features.
6
- #
6
+ #
7
7
  # ```ruby
8
8
  # square = Proc.new {|x| x**2 }
9
- #
9
+ #
10
10
  # square.call(3) #=> 9
11
11
  # # shorthands:
12
12
  # square.(3) #=> 9
13
13
  # square[3] #=> 9
14
14
  # ```
15
- #
15
+ #
16
16
  # [Proc](Proc) objects are *closures* , meaning they
17
17
  # remember and can use the entire context in which they were created.
18
- #
18
+ #
19
19
  # ```ruby
20
20
  # def gen_times(factor)
21
21
  # Proc.new {|n| n*factor } # remembers the value of factor at the moment of creation
22
22
  # end
23
- #
23
+ #
24
24
  # times3 = gen_times(3)
25
25
  # times5 = gen_times(5)
26
- #
26
+ #
27
27
  # times3.call(12) #=> 36
28
28
  # times5.call(5) #=> 25
29
29
  # times3.call(times5.call(4)) #=> 60
30
30
  # ```
31
- #
32
- #
31
+ #
32
+ #
33
33
  # There are several methods to create a [Proc](Proc)
34
- #
34
+ #
35
35
  # - Use the [Proc](Proc) class constructor:
36
- #
36
+ #
37
37
  # ```ruby
38
38
  # proc1 = Proc.new {|x| x**2 }
39
39
  # ```
40
- #
40
+ #
41
41
  # - Use the
42
42
  # [Kernel\#proc](https://ruby-doc.org/core-2.6.3/Kernel.html#method-i-proc)
43
43
  # method as a shorthand of
44
44
  # [::new](Proc#method-c-new):
45
- #
45
+ #
46
46
  # ```ruby
47
47
  # proc2 = proc {|x| x**2 }
48
48
  # ```
49
- #
49
+ #
50
50
  # - Receiving a block of code into proc argument (note the `&` ):
51
- #
51
+ #
52
52
  # ```ruby
53
53
  # def make_proc(&block)
54
54
  # block
55
55
  # end
56
- #
56
+ #
57
57
  # proc3 = make_proc {|x| x**2 }
58
58
  # ```
59
- #
59
+ #
60
60
  # - Construct a proc with lambda semantics using the
61
61
  # [Kernel\#lambda](https://ruby-doc.org/core-2.6.3/Kernel.html#method-i-lambda)
62
62
  # method (see below for explanations about lambdas):
63
- #
63
+ #
64
64
  # ```ruby
65
65
  # lambda1 = lambda {|x| x**2 }
66
66
  # ```
67
- #
67
+ #
68
68
  # - Use the Lambda literal syntax (also constructs a proc with lambda
69
69
  # semantics):
70
- #
70
+ #
71
71
  # ```ruby
72
72
  # lambda2 = ->(x) { x**2 }
73
73
  # ```
74
- #
75
- #
74
+ #
75
+ #
76
76
  # Procs are coming in two flavors: lambda and non-lambda (regular procs).
77
77
  # Differences are:
78
- #
78
+ #
79
79
  # - In lambdas, `return` means exit from this lambda;
80
- #
80
+ #
81
81
  # - In regular procs, `return` means exit from embracing method (and
82
82
  # will throw `LocalJumpError` if invoked outside the method);
83
- #
83
+ #
84
84
  # - In lambdas, arguments are treated in the same way as in methods:
85
85
  # strict, with `ArgumentError` for mismatching argument number, and no
86
86
  # additional argument processing;
87
- #
87
+ #
88
88
  # - Regular procs accept arguments more generously: missing arguments
89
89
  # are filled with `nil`, single
90
90
  # [Array](https://ruby-doc.org/core-2.6.3/Array.html) arguments are
91
91
  # deconstructed if the proc has multiple arguments, and there is no
92
92
  # error raised on extra arguments.
93
- #
93
+ #
94
94
  # Examples:
95
- #
95
+ #
96
96
  # ```ruby
97
97
  # p = proc {|x, y| "x=#{x}, y=#{y}" }
98
98
  # p.call(1, 2) #=> "x=1, y=2"
99
99
  # p.call([1, 2]) #=> "x=1, y=2", array deconstructed
100
100
  # p.call(1, 2, 8) #=> "x=1, y=2", extra argument discarded
101
101
  # p.call(1) #=> "x=1, y=", nil substituted instead of error
102
- #
102
+ #
103
103
  # l = lambda {|x, y| "x=#{x}, y=#{y}" }
104
104
  # l.call(1, 2) #=> "x=1, y=2"
105
105
  # l.call([1, 2]) # ArgumentError: wrong number of arguments (given 1, expected 2)
106
106
  # l.call(1, 2, 8) # ArgumentError: wrong number of arguments (given 3, expected 2)
107
107
  # l.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
108
- #
108
+ #
109
109
  # def test_return
110
110
  # -> { return 3 }.call # just returns from lambda into method body
111
111
  # proc { return 4 }.call # returns from method
112
112
  # return 5
113
113
  # end
114
- #
114
+ #
115
115
  # test_return # => 4, return from proc
116
116
  # ```
117
- #
117
+ #
118
118
  # Lambdas are useful as self-sufficient functions, in particular useful as
119
119
  # arguments to higher-order functions, behaving exactly like Ruby methods.
120
- #
120
+ #
121
121
  # Procs are useful for implementing iterators:
122
- #
122
+ #
123
123
  # ```ruby
124
124
  # def test
125
125
  # [[1, 2], [3, 4], [5, 6]].map {|a, b| return a if a + b > 10 }
126
126
  # # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
127
127
  # end
128
128
  # ```
129
- #
129
+ #
130
130
  # Inside `map`, the block of code is treated as a regular (non-lambda)
131
131
  # proc, which means that the internal arrays will be deconstructed to
132
132
  # pairs of arguments, and `return` will exit from the method `test` . That
133
133
  # would not be possible with a stricter lambda.
134
- #
134
+ #
135
135
  # You can tell a lambda from a regular proc by using the
136
136
  # [lambda?](Proc#method-i-lambda-3F) instance method.
137
- #
137
+ #
138
138
  # Lambda semantics is typically preserved during the proc lifetime,
139
139
  # including `&` -deconstruction to a block of code:
140
- #
140
+ #
141
141
  # ```ruby
142
142
  # p = proc {|x, y| x }
143
143
  # l = lambda {|x, y| x }
144
144
  # [[1, 2], [3, 4]].map(&p) #=> [1, 2]
145
145
  # [[1, 2], [3, 4]].map(&l) # ArgumentError: wrong number of arguments (given 1, expected 2)
146
146
  # ```
147
- #
147
+ #
148
148
  # The only exception is dynamic method definition: even if defined by
149
149
  # passing a non-lambda proc, methods still have normal semantics of
150
150
  # argument checking.
151
- #
151
+ #
152
152
  # ```ruby
153
153
  # class C
154
154
  # define_method(:e, &proc {})
@@ -156,57 +156,57 @@
156
156
  # C.new.e(1,2) #=> ArgumentError
157
157
  # C.new.method(:e).to_proc.lambda? #=> true
158
158
  # ```
159
- #
159
+ #
160
160
  # This exception ensures that methods never have unusual argument passing
161
161
  # conventions, and makes it easy to have wrappers defining methods that
162
162
  # behave as usual.
163
- #
163
+ #
164
164
  # ```ruby
165
165
  # class C
166
166
  # def self.def2(name, &body)
167
167
  # define_method(name, &body)
168
168
  # end
169
- #
169
+ #
170
170
  # def2(:f) {}
171
171
  # end
172
172
  # C.new.f(1,2) #=> ArgumentError
173
173
  # ```
174
- #
174
+ #
175
175
  # The wrapper *def2* receives `body` as a non-lambda proc, yet defines a
176
176
  # method which has normal semantics.
177
- #
178
- #
177
+ #
178
+ #
179
179
  # Any object that implements the `to_proc` method can be converted into a
180
180
  # proc by the `&` operator, and therefore con be consumed by iterators.
181
- #
181
+ #
182
182
  # ```ruby
183
183
  # class Greater
184
184
  # def initialize(greating)
185
185
  # @greating = greating
186
186
  # end
187
- #
187
+ #
188
188
  # def to_proc
189
189
  # proc {|name| "#{@greating}, #{name}!" }
190
190
  # end
191
191
  # end
192
- #
192
+ #
193
193
  # hi = Greater.new("Hi")
194
194
  # hey = Greater.new("Hey")
195
195
  # ["Bob", "Jane"].map(&hi) #=> ["Hi, Bob!", "Hi, Jane!"]
196
196
  # ["Bob", "Jane"].map(&hey) #=> ["Hey, Bob!", "Hey, Jane!"]
197
197
  # ```
198
- #
198
+ #
199
199
  # Of the Ruby core classes, this method is implemented by
200
200
  # [Symbol](https://ruby-doc.org/core-2.6.3/Symbol.html),
201
201
  # [Method](https://ruby-doc.org/core-2.6.3/Method.html), and
202
202
  # [Hash](https://ruby-doc.org/core-2.6.3/Hash.html).
203
- #
203
+ #
204
204
  # :to_s.to_proc.call(1) #=> "1"
205
205
  # [1, 2].map(&:to_s) #=> ["1", "2"]
206
- #
206
+ #
207
207
  # method(:puts).to_proc.call(1) # prints 1
208
208
  # [1, 2].each(&method(:puts)) # prints 1, 2
209
- #
209
+ #
210
210
  # {test: 1}.to_proc.call(:test) #=> 1
211
211
  # %i[test many keys].map(&{test: 1}) #=> [1, nil, nil]
212
212
  class Proc < Object
@@ -220,7 +220,7 @@ class Proc < Object
220
220
  # mandatory if any keyword argument is mandatory. A `proc` with no
221
221
  # argument declarations is the same as a block declaring `||` as its
222
222
  # arguments.
223
- #
223
+ #
224
224
  # proc {}.arity #=> 0
225
225
  # proc { || }.arity #=> 0
226
226
  # proc { |a| }.arity #=> 1
@@ -231,7 +231,7 @@ class Proc < Object
231
231
  # proc { |a, *b, c| }.arity #=> -3
232
232
  # proc { |x:, y:, z:0| }.arity #=> 1
233
233
  # proc { |*a, x:, y:0| }.arity #=> -2
234
- #
234
+ #
235
235
  # proc { |a=0| }.arity #=> 0
236
236
  # lambda { |a=0| }.arity #=> -1
237
237
  # proc { |a=0, b| }.arity #=> 1
@@ -247,12 +247,12 @@ class Proc < Object
247
247
  def arity: () -> Integer
248
248
 
249
249
  # Returns the binding associated with *prc* .
250
- #
250
+ #
251
251
  # ```ruby
252
252
  # def fred(param)
253
253
  # proc {}
254
254
  # end
255
- #
255
+ #
256
256
  # b = fred(99)
257
257
  # eval("param", b.binding) #=> 99
258
258
  # ```
@@ -265,7 +265,7 @@ class Proc < Object
265
265
  def curry: (?Integer arity) -> Proc
266
266
 
267
267
  # Returns a hash value corresponding to proc body.
268
- #
268
+ #
269
269
  # See also Object\#hash.
270
270
  def hash: () -> Integer
271
271
 
@@ -274,94 +274,94 @@ class Proc < Object
274
274
  # Returns `true` for a [Proc](Proc.downloaded.ruby_doc) object for which
275
275
  # argument handling is rigid. Such procs are typically generated by
276
276
  # `lambda` .
277
- #
277
+ #
278
278
  # A [Proc](Proc.downloaded.ruby_doc) object generated by `proc` ignores
279
279
  # extra arguments.
280
- #
280
+ #
281
281
  # ```ruby
282
282
  # proc {|a,b| [a,b] }.call(1,2,3) #=> [1,2]
283
283
  # ```
284
- #
284
+ #
285
285
  # It provides `nil` for missing arguments.
286
- #
286
+ #
287
287
  # ```ruby
288
288
  # proc {|a,b| [a,b] }.call(1) #=> [1,nil]
289
289
  # ```
290
- #
290
+ #
291
291
  # It expands a single array argument.
292
- #
292
+ #
293
293
  # ```ruby
294
294
  # proc {|a,b| [a,b] }.call([1,2]) #=> [1,2]
295
295
  # ```
296
- #
296
+ #
297
297
  # A [Proc](Proc.downloaded.ruby_doc) object generated by `lambda` doesn’t
298
298
  # have such tricks.
299
- #
299
+ #
300
300
  # ```ruby
301
301
  # lambda {|a,b| [a,b] }.call(1,2,3) #=> ArgumentError
302
302
  # lambda {|a,b| [a,b] }.call(1) #=> ArgumentError
303
303
  # lambda {|a,b| [a,b] }.call([1,2]) #=> ArgumentError
304
304
  # ```
305
- #
305
+ #
306
306
  # [\#lambda?](Proc.downloaded.ruby_doc#method-i-lambda-3F) is a predicate
307
307
  # for the tricks. It returns `true` if no tricks apply.
308
- #
308
+ #
309
309
  # ```ruby
310
310
  # lambda {}.lambda? #=> true
311
311
  # proc {}.lambda? #=> false
312
312
  # ```
313
- #
313
+ #
314
314
  # [::new](Proc.downloaded.ruby_doc#method-c-new) is the same as `proc` .
315
- #
315
+ #
316
316
  # ```ruby
317
317
  # Proc.new {}.lambda? #=> false
318
318
  # ```
319
- #
319
+ #
320
320
  # `lambda`, `proc` and [::new](Proc.downloaded.ruby_doc#method-c-new)
321
321
  # preserve the tricks of a [Proc](Proc.downloaded.ruby_doc) object given
322
322
  # by `&` argument.
323
- #
323
+ #
324
324
  # ```ruby
325
325
  # lambda(&lambda {}).lambda? #=> true
326
326
  # proc(&lambda {}).lambda? #=> true
327
327
  # Proc.new(&lambda {}).lambda? #=> true
328
- #
328
+ #
329
329
  # lambda(&proc {}).lambda? #=> false
330
330
  # proc(&proc {}).lambda? #=> false
331
331
  # Proc.new(&proc {}).lambda? #=> false
332
332
  # ```
333
- #
333
+ #
334
334
  # A [Proc](Proc.downloaded.ruby_doc) object generated by `&` argument has
335
335
  # the tricks
336
- #
336
+ #
337
337
  # ```ruby
338
338
  # def n(&b) b.lambda? end
339
339
  # n {} #=> false
340
340
  # ```
341
- #
341
+ #
342
342
  # The `&` argument preserves the tricks if a
343
343
  # [Proc](Proc.downloaded.ruby_doc) object is given by `&` argument.
344
- #
344
+ #
345
345
  # ```ruby
346
346
  # n(&lambda {}) #=> true
347
347
  # n(&proc {}) #=> false
348
348
  # n(&Proc.new {}) #=> false
349
349
  # ```
350
- #
350
+ #
351
351
  # A [Proc](Proc.downloaded.ruby_doc) object converted from a method has no
352
352
  # tricks.
353
- #
353
+ #
354
354
  # ```ruby
355
355
  # def m() end
356
356
  # method(:m).to_proc.lambda? #=> true
357
- #
357
+ #
358
358
  # n(&method(:m)) #=> true
359
359
  # n(&method(:m).to_proc) #=> true
360
360
  # ```
361
- #
361
+ #
362
362
  # `define_method` is treated the same as method definition. The defined
363
363
  # method has no tricks.
364
- #
364
+ #
365
365
  # ```ruby
366
366
  # class C
367
367
  # define_method(:d) {}
@@ -369,11 +369,11 @@ class Proc < Object
369
369
  # C.new.d(1,2) #=> ArgumentError
370
370
  # C.new.method(:d).to_proc.lambda? #=> true
371
371
  # ```
372
- #
372
+ #
373
373
  # `define_method` always defines a method without the tricks, even if a
374
374
  # non-lambda [Proc](Proc.downloaded.ruby_doc) object is given. This is the
375
375
  # only exception for which the tricks are not preserved.
376
- #
376
+ #
377
377
  # ```ruby
378
378
  # class C
379
379
  # define_method(:e, &proc {})
@@ -381,26 +381,26 @@ class Proc < Object
381
381
  # C.new.e(1,2) #=> ArgumentError
382
382
  # C.new.method(:e).to_proc.lambda? #=> true
383
383
  # ```
384
- #
384
+ #
385
385
  # This exception ensures that methods never have tricks and makes it easy
386
386
  # to have wrappers to define methods that behave as usual.
387
- #
387
+ #
388
388
  # ```ruby
389
389
  # class C
390
390
  # def self.def2(name, &body)
391
391
  # define_method(name, &body)
392
392
  # end
393
- #
393
+ #
394
394
  # def2(:f) {}
395
395
  # end
396
396
  # C.new.f(1,2) #=> ArgumentError
397
397
  # ```
398
- #
398
+ #
399
399
  # The wrapper *def2* defines a method which has no tricks.
400
400
  def lambda?: () -> bool
401
401
 
402
402
  # Returns the parameter information of this proc.
403
- #
403
+ #
404
404
  # ```ruby
405
405
  # prc = lambda{|x, y=42, *other|}
406
406
  # prc.parameters #=> [[:req, :x], [:opt, :y], [:rest, :other]]
@@ -417,9 +417,9 @@ class Proc < Object
417
417
 
418
418
  # Returns the unique identifier for this proc, along with an indication of
419
419
  # where the proc was defined.
420
- #
421
- #
422
- #
420
+ #
421
+ #
422
+ #
423
423
  # Also aliased as: [inspect](Proc.downloaded.ruby_doc#method-i-inspect)
424
424
  def to_s: () -> String
425
425