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,267 @@
1
+ # Random provides an interface to Ruby's pseudo-random number generator, or
2
+ # PRNG. The PRNG produces a deterministic sequence of bits which approximate
3
+ # true randomness. The sequence may be represented by integers, floats, or
4
+ # binary strings.
5
+ #
6
+ # The generator may be initialized with either a system-generated or
7
+ # user-supplied seed value by using Random.srand.
8
+ #
9
+ # The class method Random.rand provides the base functionality of Kernel.rand
10
+ # along with better handling of floating point values. These are both interfaces
11
+ # to Random::DEFAULT, the Ruby system PRNG.
12
+ #
13
+ # Random.new will create a new PRNG with a state independent of Random::DEFAULT,
14
+ # allowing multiple generators with different seed values or sequence positions
15
+ # to exist simultaneously. Random objects can be marshaled, allowing sequences
16
+ # to be saved and resumed.
17
+ #
18
+ # PRNGs are currently implemented as a modified Mersenne Twister with a period
19
+ # of 2**19937-1.
20
+ #
21
+ class Random < Object
22
+ include Random::Formatter
23
+
24
+ # Returns true if the two generators have the same internal state, otherwise
25
+ # false. Equivalent generators will return the same sequence of pseudo-random
26
+ # numbers. Two generators will generally have the same state only if they were
27
+ # initialized with the same seed
28
+ #
29
+ # Random.new == Random.new # => false
30
+ # Random.new(1234) == Random.new(1234) # => true
31
+ #
32
+ # and have the same invocation history.
33
+ #
34
+ # prng1 = Random.new(1234)
35
+ # prng2 = Random.new(1234)
36
+ # prng1 == prng2 # => true
37
+ #
38
+ # prng1.rand # => 0.1915194503788923
39
+ # prng1 == prng2 # => false
40
+ #
41
+ # prng2.rand # => 0.1915194503788923
42
+ # prng1 == prng2 # => true
43
+ #
44
+ def ==: (untyped arg0) -> bool
45
+
46
+ # Returns a random binary string containing `size` bytes.
47
+ #
48
+ # random_string = Random.new.bytes(10) # => "\xD7:R\xAB?\x83\xCE\xFAkO"
49
+ # random_string.size # => 10
50
+ #
51
+ def bytes: (Integer size) -> String
52
+
53
+ # Creates a new PRNG using `seed` to set the initial state. If `seed` is
54
+ # omitted, the generator is initialized with Random.new_seed.
55
+ #
56
+ # See Random.srand for more information on the use of seed values.
57
+ #
58
+ def initialize: (?Integer seed) -> void
59
+
60
+ # When `max` is an Integer, `rand` returns a random integer greater than or
61
+ # equal to zero and less than `max`. Unlike Kernel.rand, when `max` is a
62
+ # negative integer or zero, `rand` raises an ArgumentError.
63
+ #
64
+ # prng = Random.new
65
+ # prng.rand(100) # => 42
66
+ #
67
+ # When `max` is a Float, `rand` returns a random floating point number between
68
+ # 0.0 and `max`, including 0.0 and excluding `max`.
69
+ #
70
+ # prng.rand(1.5) # => 1.4600282860034115
71
+ #
72
+ # When `max` is a Range, `rand` returns a random number where
73
+ # range.member?(number) == true.
74
+ #
75
+ # prng.rand(5..9) # => one of [5, 6, 7, 8, 9]
76
+ # prng.rand(5...9) # => one of [5, 6, 7, 8]
77
+ # prng.rand(5.0..9.0) # => between 5.0 and 9.0, including 9.0
78
+ # prng.rand(5.0...9.0) # => between 5.0 and 9.0, excluding 9.0
79
+ #
80
+ # Both the beginning and ending values of the range must respond to subtract
81
+ # (`-`) and add (`+`)methods, or rand will raise an ArgumentError.
82
+ #
83
+ def rand: () -> Float
84
+ | (Integer | ::Range[Integer] max) -> Integer
85
+ | (Float | ::Range[Float] max) -> Float
86
+
87
+ # Returns the seed value used to initialize the generator. This may be used to
88
+ # initialize another generator with the same state at a later time, causing it
89
+ # to produce the same sequence of numbers.
90
+ #
91
+ # prng1 = Random.new(1234)
92
+ # prng1.seed #=> 1234
93
+ # prng1.rand(100) #=> 47
94
+ #
95
+ # prng2 = Random.new(prng1.seed)
96
+ # prng2.rand(100) #=> 47
97
+ #
98
+ def seed: () -> Integer
99
+
100
+ # Returns an arbitrary seed value. This is used by Random.new when no seed value
101
+ # is specified as an argument.
102
+ #
103
+ # Random.new_seed #=> 115032730400174366788466674494640623225
104
+ #
105
+ def self.new_seed: () -> Integer
106
+
107
+ # Alias of Random::DEFAULT.rand.
108
+ #
109
+ def self.rand: (?Integer max) -> Numeric
110
+
111
+ # Seeds the system pseudo-random number generator, Random::DEFAULT, with
112
+ # `number`. The previous seed value is returned.
113
+ #
114
+ # If `number` is omitted, seeds the generator using a source of entropy provided
115
+ # by the operating system, if available (/dev/urandom on Unix systems or the RSA
116
+ # cryptographic provider on Windows), which is then combined with the time, the
117
+ # process id, and a sequence number.
118
+ #
119
+ # srand may be used to ensure repeatable sequences of pseudo-random numbers
120
+ # between different runs of the program. By setting the seed to a known value,
121
+ # programs can be made deterministic during testing.
122
+ #
123
+ # srand 1234 # => 268519324636777531569100071560086917274
124
+ # [ rand, rand ] # => [0.1915194503788923, 0.6221087710398319]
125
+ # [ rand(10), rand(1000) ] # => [4, 664]
126
+ # srand 1234 # => 1234
127
+ # [ rand, rand ] # => [0.1915194503788923, 0.6221087710398319]
128
+ #
129
+ def self.srand: (?Integer number) -> Numeric
130
+ end
131
+
132
+ # The default Pseudorandom number generator. Used by class methods of Random.
133
+ #
134
+ #
135
+ Random::DEFAULT: Random
136
+
137
+ # Format raw random number as Random does
138
+ #
139
+ #
140
+ module Random::Formatter
141
+ # SecureRandom.base64 generates a random base64 string.
142
+ #
143
+ # The argument *n* specifies the length, in bytes, of the random number to be
144
+ # generated. The length of the result string is about 4/3 of *n*.
145
+ #
146
+ # If *n* is not specified or is nil, 16 is assumed. It may be larger in the
147
+ # future.
148
+ #
149
+ # The result may contain A-Z, a-z, 0-9, "+", "/" and "=".
150
+ #
151
+ # require 'securerandom'
152
+ #
153
+ # SecureRandom.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A=="
154
+ # SecureRandom.base64 #=> "6BbW0pxO0YENxn38HMUbcQ=="
155
+ #
156
+ # If a secure random number generator is not available, `NotImplementedError` is
157
+ # raised.
158
+ #
159
+ # See RFC 3548 for the definition of base64.
160
+ #
161
+ def base64: (?Integer? n) -> String
162
+
163
+ # SecureRandom.hex generates a random hexadecimal string.
164
+ #
165
+ # The argument *n* specifies the length, in bytes, of the random number to be
166
+ # generated. The length of the resulting hexadecimal string is twice of *n*.
167
+ #
168
+ # If *n* is not specified or is nil, 16 is assumed. It may be larger in the
169
+ # future.
170
+ #
171
+ # The result may contain 0-9 and a-f.
172
+ #
173
+ # require 'securerandom'
174
+ #
175
+ # SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
176
+ # SecureRandom.hex #=> "91dc3bfb4de5b11d029d376634589b61"
177
+ #
178
+ # If a secure random number generator is not available, `NotImplementedError` is
179
+ # raised.
180
+ #
181
+ def hex: (?Integer? n) -> String
182
+
183
+ # Generates formatted random number from raw random bytes. See Random#rand.
184
+ #
185
+ def rand: () -> Float
186
+ | (?Float? n) -> Float
187
+ | (?Integer? n) -> Integer
188
+ | (?Numeric? n) -> Numeric
189
+ | (?::Range[Float]? n) -> Float
190
+ | (?::Range[Integer]? n) -> Integer
191
+ | (?::Range[Numeric]? n) -> Numeric
192
+
193
+ # SecureRandom.random_bytes generates a random binary string.
194
+ #
195
+ # The argument *n* specifies the length of the result string.
196
+ #
197
+ # If *n* is not specified or is nil, 16 is assumed. It may be larger in future.
198
+ #
199
+ # The result may contain any byte: "x00" - "xff".
200
+ #
201
+ # require 'securerandom'
202
+ #
203
+ # SecureRandom.random_bytes #=> "\xD8\\\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6"
204
+ # SecureRandom.random_bytes #=> "m\xDC\xFC/\a\x00Uf\xB2\xB2P\xBD\xFF6S\x97"
205
+ #
206
+ # If a secure random number generator is not available, `NotImplementedError` is
207
+ # raised.
208
+ #
209
+ def random_bytes: (?Integer? n) -> String
210
+
211
+ # Generates formatted random number from raw random bytes. See Random#rand.
212
+ #
213
+ def random_number: () -> Float
214
+ | (?Float? n) -> Float
215
+ | (?Integer? n) -> Integer
216
+ | (?Numeric? n) -> Numeric
217
+ | (?::Range[Float]? n) -> Float
218
+ | (?::Range[Integer]? n) -> Integer
219
+ | (?::Range[Numeric]? n) -> Numeric
220
+
221
+ # SecureRandom.urlsafe_base64 generates a random URL-safe base64 string.
222
+ #
223
+ # The argument *n* specifies the length, in bytes, of the random number to be
224
+ # generated. The length of the result string is about 4/3 of *n*.
225
+ #
226
+ # If *n* is not specified or is nil, 16 is assumed. It may be larger in the
227
+ # future.
228
+ #
229
+ # The boolean argument *padding* specifies the padding. If it is false or nil,
230
+ # padding is not generated. Otherwise padding is generated. By default, padding
231
+ # is not generated because "=" may be used as a URL delimiter.
232
+ #
233
+ # The result may contain A-Z, a-z, 0-9, "-" and "_". "=" is also used if
234
+ # *padding* is true.
235
+ #
236
+ # require 'securerandom'
237
+ #
238
+ # SecureRandom.urlsafe_base64 #=> "b4GOKm4pOYU_-BOXcrUGDg"
239
+ # SecureRandom.urlsafe_base64 #=> "UZLdOkzop70Ddx-IJR0ABg"
240
+ #
241
+ # SecureRandom.urlsafe_base64(nil, true) #=> "i0XQ-7gglIsHGV2_BNPrdQ=="
242
+ # SecureRandom.urlsafe_base64(nil, true) #=> "-M8rLhr7JEpJlqFGUMmOxg=="
243
+ #
244
+ # If a secure random number generator is not available, `NotImplementedError` is
245
+ # raised.
246
+ #
247
+ # See RFC 3548 for the definition of URL-safe base64.
248
+ #
249
+ def urlsafe_base64: (?Integer? n, ?bool padding) -> String
250
+
251
+ # SecureRandom.uuid generates a random v4 UUID (Universally Unique IDentifier).
252
+ #
253
+ # require 'securerandom'
254
+ #
255
+ # SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
256
+ # SecureRandom.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
257
+ # SecureRandom.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b"
258
+ #
259
+ # The version 4 UUID is purely random (except the version). It doesn't contain
260
+ # meaningful information such as MAC addresses, timestamps, etc.
261
+ #
262
+ # The result contains 122 random bits (15.25 random bytes).
263
+ #
264
+ # See RFC 4122 for details of UUID.
265
+ #
266
+ def uuid: () -> String
267
+ end
@@ -0,0 +1,226 @@
1
+ # A `Range` represents an interval—a set of values with a beginning and an
2
+ # end. Ranges may be constructed using the *s* `..` *e* and *s* `...` *e*
3
+ # literals, or with [::new](Range#method-c-new).
4
+ # Ranges constructed using `..` run from the beginning to the end
5
+ # inclusively. Those created using `...` exclude the end value. When used
6
+ # as an iterator, ranges return each value in the sequence.
7
+ #
8
+ # ```ruby
9
+ # (-1..-5).to_a #=> []
10
+ # (-5..-1).to_a #=> [-5, -4, -3, -2, -1]
11
+ # ('a'..'e').to_a #=> ["a", "b", "c", "d", "e"]
12
+ # ('a'...'e').to_a #=> ["a", "b", "c", "d"]
13
+ # ```
14
+ #
15
+ #
16
+ # An “endless range” represents a semi-infinite range. Literal notation
17
+ # for an endless range is:
18
+ #
19
+ # (1..)
20
+ # # or similarly
21
+ # (1...)
22
+ #
23
+ # Which is equivalent to
24
+ #
25
+ # ```ruby
26
+ # (1..nil) # or similarly (1...nil)
27
+ # Range.new(1, nil) # or Range.new(1, nil, true)
28
+ # ```
29
+ #
30
+ # Endless ranges are useful, for example, for idiomatic slicing of arrays:
31
+ #
32
+ # [1, 2, 3, 4, 5][2...] # => [3, 4, 5]
33
+ #
34
+ # Some implementation details:
35
+ #
36
+ # - `end` of endless range is `nil` ;
37
+ #
38
+ # - `each` of endless range enumerates infinite sequence (may be useful
39
+ # in combination with
40
+ # [Enumerable\#take\_while](https://ruby-doc.org/core-2.6.3/Enumerable.html#method-i-take_while)
41
+ # or similar methods);
42
+ #
43
+ # - `(1..)` and `(1...)` are not equal, although technically
44
+ # representing the same sequence.
45
+ #
46
+ #
47
+ # Ranges can be constructed using any objects that can be compared using
48
+ # the `<=>` operator. Methods that treat the range as a sequence (\#each
49
+ # and methods inherited from
50
+ # [Enumerable](https://ruby-doc.org/core-2.6.3/Enumerable.html) ) expect
51
+ # the begin object to implement a `succ` method to return the next object
52
+ # in sequence. The [step](Range#method-i-step) and
53
+ # [include?](Range#method-i-include-3F) methods
54
+ # require the begin object to implement `succ` or to be numeric.
55
+ #
56
+ # In the `Xs` class below both `<=>` and `succ` are implemented so `Xs`
57
+ # can be used to construct ranges. Note that the
58
+ # [Comparable](https://ruby-doc.org/core-2.6.3/Comparable.html) module is
59
+ # included so the `==` method is defined in terms of `<=>` .
60
+ #
61
+ # ```ruby
62
+ # class Xs # represent a string of 'x's
63
+ # include Comparable
64
+ # attr :length
65
+ # def initialize(n)
66
+ # @length = n
67
+ # end
68
+ # def succ
69
+ # Xs.new(@length + 1)
70
+ # end
71
+ # def <=>(other)
72
+ # @length <=> other.length
73
+ # end
74
+ # def to_s
75
+ # sprintf "%2d #{inspect}", @length
76
+ # end
77
+ # def inspect
78
+ # 'x' * @length
79
+ # end
80
+ # end
81
+ # ```
82
+ #
83
+ # An example of using `Xs` to construct a range:
84
+ #
85
+ # ```ruby
86
+ # r = Xs.new(3)..Xs.new(6) #=> xxx..xxxxxx
87
+ # r.to_a #=> [xxx, xxxx, xxxxx, xxxxxx]
88
+ # r.member?(Xs.new(5)) #=> true
89
+ # ```
90
+ class Range[Elem] < Object
91
+ include Enumerable[Elem, Range[Elem]]
92
+
93
+ def self.new: [U] (U from, U to, ?bool exclude_end) -> ::Range[U]
94
+
95
+ def ==: (untyped obj) -> bool
96
+
97
+ def ===: (untyped obj) -> bool
98
+
99
+ # Returns the object that defines the beginning of the range.
100
+ #
101
+ # ```ruby
102
+ # (1..10).begin #=> 1
103
+ # ```
104
+ def begin: () -> Elem
105
+
106
+ def bsearch: [U] () { (Elem arg0) -> bool } -> U?
107
+
108
+ def cover?: (untyped obj) -> bool
109
+
110
+ def each: () { (Elem arg0) -> untyped } -> self
111
+ | () -> ::Enumerator[Elem, self]
112
+
113
+ # Returns the object that defines the end of the range.
114
+ #
115
+ # ```ruby
116
+ # (1..10).end #=> 10
117
+ # (1...10).end #=> 10
118
+ # ```
119
+ def `end`: () -> Elem
120
+
121
+ # Returns `true` if the range excludes its end value.
122
+ #
123
+ # ```ruby
124
+ # (1..5).exclude_end? #=> false
125
+ # (1...5).exclude_end? #=> true
126
+ # ```
127
+ def `exclude_end?`: () -> bool
128
+
129
+ # Returns the first object in the range, or an array of the first `n`
130
+ # elements.
131
+ #
132
+ # ```ruby
133
+ # (10..20).first #=> 10
134
+ # (10..20).first(3) #=> [10, 11, 12]
135
+ # ```
136
+ def first: () -> Elem
137
+ | (?Integer n) -> ::Array[Elem]
138
+
139
+ # Compute a hash-code for this range. Two ranges with equal begin and end
140
+ # points (using `eql?` ), and the same
141
+ # [exclude\_end?](Range.downloaded.ruby_doc#method-i-exclude_end-3F) value
142
+ # will generate the same hash-code.
143
+ #
144
+ # See also Object\#hash.
145
+ def hash: () -> Integer
146
+
147
+ def `include?`: (untyped obj) -> bool
148
+
149
+ def initialize: (Elem _begin, Elem _end, ?bool exclude_end) -> void
150
+
151
+ # Convert this range object to a printable form (using `inspect` to
152
+ # convert the begin and end objects).
153
+ def inspect: () -> String
154
+
155
+ # Returns the last object in the range, or an array of the last `n`
156
+ # elements.
157
+ #
158
+ # Note that with no arguments `last` will return the object that defines
159
+ # the end of the range even if
160
+ # [exclude\_end?](Range.downloaded.ruby_doc#method-i-exclude_end-3F) is
161
+ # `true` .
162
+ #
163
+ # ```ruby
164
+ # (10..20).last #=> 20
165
+ # (10...20).last #=> 20
166
+ # (10..20).last(3) #=> [18, 19, 20]
167
+ # (10...20).last(3) #=> [17, 18, 19]
168
+ # ```
169
+ def last: () -> Elem
170
+ | (?Integer n) -> ::Array[Elem]
171
+
172
+ # Returns the maximum value in the range. Returns `nil` if the begin value
173
+ # of the range larger than the end value. Returns `nil` if the begin value
174
+ # of an exclusive range is equal to the end value.
175
+ #
176
+ # Can be given an optional block to override the default comparison method
177
+ # `a <=> b` .
178
+ #
179
+ # ```ruby
180
+ # (10..20).max #=> 20
181
+ # ```
182
+ def max: () -> Elem
183
+ | () { (Elem arg0, Elem arg1) -> Integer } -> Elem
184
+ | (?Integer n) -> ::Array[Elem]
185
+ | (?Integer n) { (Elem arg0, Elem arg1) -> Integer } -> ::Array[Elem]
186
+
187
+ # Returns the minimum value in the range. Returns `nil` if the begin value
188
+ # of the range is larger than the end value. Returns `nil` if the begin
189
+ # value of an exclusive range is equal to the end value.
190
+ #
191
+ # Can be given an optional block to override the default comparison method
192
+ # `a <=> b` .
193
+ #
194
+ # ```ruby
195
+ # (10..20).min #=> 10
196
+ # ```
197
+ def min: () -> Elem
198
+ | () { (Elem arg0, Elem arg1) -> Integer } -> Elem
199
+ | (?Integer n) -> ::Array[Elem]
200
+ | (?Integer n) { (Elem arg0, Elem arg1) -> Integer } -> ::Array[Elem]
201
+
202
+ # Returns the number of elements in the range. Both the begin and the end
203
+ # of the [Range](Range.downloaded.ruby_doc) must be
204
+ # [Numeric](https://ruby-doc.org/core-2.6.3/Numeric.html), otherwise nil
205
+ # is returned.
206
+ #
207
+ # ```ruby
208
+ # (10..20).size #=> 11
209
+ # ('a'..'z').size #=> nil
210
+ # (-Float::INFINITY..Float::INFINITY).size #=> Infinity
211
+ # ```
212
+ def size: () -> Integer?
213
+ | () -> Float?
214
+
215
+ def step: (?Integer n) { (Elem arg0) -> untyped } -> self
216
+ | (?Integer n) -> ::Enumerator[Elem, void]
217
+
218
+ # Convert this range object to a printable form (using
219
+ # [to\_s](Range.downloaded.ruby_doc#method-i-to_s) to convert the begin
220
+ # and end objects).
221
+ def to_s: () -> String
222
+
223
+ def eql?: (untyped obj) -> bool
224
+
225
+ def member?: (untyped obj) -> bool
226
+ end