rbs 0.2.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 (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