rbs 2.0.0 → 2.2.2

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 (208) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +34 -0
  3. data/.github/workflows/ruby.yml +5 -0
  4. data/CHANGELOG.md +82 -0
  5. data/README.md +6 -1
  6. data/Rakefile +56 -21
  7. data/core/array.rbs +2866 -1086
  8. data/core/basic_object.rbs +150 -30
  9. data/core/binding.rbs +33 -0
  10. data/core/builtin.rbs +4 -4
  11. data/core/class.rbs +43 -5
  12. data/core/comparable.rbs +57 -0
  13. data/core/complex.rbs +170 -4
  14. data/core/constants.rbs +51 -0
  15. data/core/deprecated.rbs +7 -0
  16. data/core/dir.rbs +305 -20
  17. data/core/encoding.rbs +1214 -77
  18. data/core/enumerable.rbs +2173 -234
  19. data/core/enumerator.rbs +448 -182
  20. data/core/env.rbs +448 -1
  21. data/core/errno.rbs +1 -10
  22. data/core/errors.rbs +152 -2
  23. data/core/exception.rbs +201 -127
  24. data/core/false_class.rbs +27 -0
  25. data/core/fiber.rbs +118 -37
  26. data/core/fiber_error.rbs +8 -9
  27. data/core/file.rbs +1060 -142
  28. data/core/file_test.rbs +287 -32
  29. data/core/float.rbs +776 -300
  30. data/core/gc.rbs +185 -34
  31. data/core/global_variables.rbs +5 -1
  32. data/core/hash.rbs +1582 -649
  33. data/core/integer.rbs +974 -204
  34. data/core/io/buffer.rbs +710 -0
  35. data/core/io/wait.rbs +29 -8
  36. data/core/io.rbs +2438 -417
  37. data/core/kernel.rbs +2319 -318
  38. data/core/marshal.rbs +37 -2
  39. data/core/match_data.rbs +123 -6
  40. data/core/math.rbs +126 -6
  41. data/core/method.rbs +226 -102
  42. data/core/module.rbs +421 -45
  43. data/core/nil_class.rbs +64 -0
  44. data/core/numeric.rbs +620 -142
  45. data/core/object.rbs +453 -81
  46. data/core/object_space.rbs +92 -2
  47. data/core/proc.rbs +482 -285
  48. data/core/process.rbs +443 -34
  49. data/core/ractor.rbs +232 -9
  50. data/core/random.rbs +151 -52
  51. data/core/range.rbs +885 -160
  52. data/core/rational.rbs +122 -6
  53. data/core/rb_config.rbs +14 -4
  54. data/core/refinement.rbs +44 -0
  55. data/core/regexp.rbs +156 -14
  56. data/core/ruby_vm.rbs +42 -3
  57. data/core/signal.rbs +78 -39
  58. data/core/string.rbs +2123 -567
  59. data/core/string_io.rbs +204 -0
  60. data/core/struct.rbs +283 -28
  61. data/core/symbol.rbs +304 -30
  62. data/core/thread.rbs +1288 -688
  63. data/core/thread_group.rbs +66 -10
  64. data/core/time.rbs +643 -217
  65. data/core/trace_point.rbs +100 -12
  66. data/core/true_class.rbs +24 -0
  67. data/core/unbound_method.rbs +73 -7
  68. data/core/warning.rbs +37 -12
  69. data/docs/CONTRIBUTING.md +40 -34
  70. data/docs/stdlib.md +3 -102
  71. data/docs/syntax.md +54 -11
  72. data/ext/rbs_extension/extconf.rb +1 -0
  73. data/ext/rbs_extension/lexer.h +5 -0
  74. data/ext/rbs_extension/lexstate.c +6 -0
  75. data/ext/rbs_extension/parser.c +85 -10
  76. data/ext/rbs_extension/ruby_objs.c +4 -2
  77. data/ext/rbs_extension/ruby_objs.h +2 -2
  78. data/goodcheck.yml +0 -11
  79. data/lib/rbs/annotate/annotations.rb +197 -0
  80. data/lib/rbs/annotate/formatter.rb +80 -0
  81. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  82. data/lib/rbs/annotate/rdoc_source.rb +120 -0
  83. data/lib/rbs/annotate.rb +6 -0
  84. data/lib/rbs/ast/members.rb +21 -13
  85. data/lib/rbs/buffer.rb +17 -11
  86. data/lib/rbs/cli.rb +48 -1
  87. data/lib/rbs/definition_builder/method_builder.rb +28 -16
  88. data/lib/rbs/definition_builder.rb +6 -2
  89. data/lib/rbs/environment.rb +8 -4
  90. data/lib/rbs/location_aux.rb +12 -0
  91. data/lib/rbs/namespace.rb +1 -1
  92. data/lib/rbs/prototype/rb.rb +12 -0
  93. data/lib/rbs/type_alias_regularity.rb +6 -4
  94. data/lib/rbs/type_name.rb +1 -1
  95. data/lib/rbs/types.rb +1 -1
  96. data/lib/rbs/validator.rb +6 -0
  97. data/lib/rbs/version.rb +1 -1
  98. data/lib/rbs/writer.rb +54 -4
  99. data/lib/rbs.rb +0 -2
  100. data/schema/typeParam.json +3 -3
  101. data/sig/annotate/annotations.rbs +102 -0
  102. data/sig/annotate/formatter.rbs +24 -0
  103. data/sig/annotate/rdoc_annotater.rbs +82 -0
  104. data/sig/annotate/rdoc_source.rbs +30 -0
  105. data/sig/buffer.rbs +6 -2
  106. data/sig/cli.rbs +2 -0
  107. data/sig/collection/{collections.rbs → sources.rbs} +0 -0
  108. data/sig/location.rbs +6 -0
  109. data/sig/members.rbs +24 -18
  110. data/sig/method_builder.rbs +5 -4
  111. data/sig/method_types.rbs +5 -1
  112. data/sig/polyfill.rbs +78 -0
  113. data/sig/validator.rbs +3 -1
  114. data/sig/writer.rbs +79 -2
  115. data/stdlib/abbrev/0/abbrev.rbs +6 -0
  116. data/stdlib/abbrev/0/array.rbs +26 -0
  117. data/stdlib/base64/0/base64.rbs +31 -0
  118. data/stdlib/benchmark/0/benchmark.rbs +74 -3
  119. data/stdlib/bigdecimal/0/big_decimal.rbs +614 -165
  120. data/stdlib/bigdecimal-math/0/big_math.rbs +41 -64
  121. data/stdlib/cgi/0/core.rbs +649 -21
  122. data/stdlib/coverage/0/coverage.rbs +164 -2
  123. data/stdlib/csv/0/csv.rbs +2862 -398
  124. data/stdlib/date/0/date.rbs +483 -25
  125. data/stdlib/date/0/date_time.rbs +187 -12
  126. data/stdlib/dbm/0/dbm.rbs +152 -17
  127. data/stdlib/digest/0/digest.rbs +146 -0
  128. data/stdlib/erb/0/erb.rbs +65 -245
  129. data/stdlib/fiber/0/fiber.rbs +73 -91
  130. data/stdlib/fileutils/0/fileutils.rbs +301 -1
  131. data/stdlib/find/0/find.rbs +9 -0
  132. data/stdlib/forwardable/0/forwardable.rbs +65 -1
  133. data/stdlib/io-console/0/io-console.rbs +227 -15
  134. data/stdlib/ipaddr/0/ipaddr.rbs +161 -0
  135. data/stdlib/json/0/json.rbs +1147 -145
  136. data/stdlib/logger/0/formatter.rbs +24 -0
  137. data/stdlib/logger/0/log_device.rbs +64 -0
  138. data/stdlib/logger/0/logger.rbs +165 -13
  139. data/stdlib/logger/0/period.rbs +10 -0
  140. data/stdlib/logger/0/severity.rbs +26 -0
  141. data/stdlib/monitor/0/monitor.rbs +163 -0
  142. data/stdlib/mutex_m/0/mutex_m.rbs +35 -6
  143. data/stdlib/net-http/0/manifest.yaml +1 -0
  144. data/stdlib/net-http/0/net-http.rbs +1513 -683
  145. data/stdlib/nkf/0/nkf.rbs +372 -0
  146. data/stdlib/objspace/0/objspace.rbs +149 -90
  147. data/stdlib/openssl/0/openssl.rbs +8108 -71
  148. data/stdlib/optparse/0/optparse.rbs +487 -19
  149. data/stdlib/pathname/0/pathname.rbs +425 -124
  150. data/stdlib/prettyprint/0/prettyprint.rbs +120 -99
  151. data/stdlib/prime/0/integer-extension.rbs +20 -2
  152. data/stdlib/prime/0/prime.rbs +88 -21
  153. data/stdlib/pstore/0/pstore.rbs +102 -0
  154. data/stdlib/pty/0/pty.rbs +64 -14
  155. data/stdlib/resolv/0/resolv.rbs +420 -31
  156. data/stdlib/rubygems/0/basic_specification.rbs +4 -1
  157. data/stdlib/rubygems/0/config_file.rbs +33 -1
  158. data/stdlib/rubygems/0/dependency_installer.rbs +4 -3
  159. data/stdlib/rubygems/0/installer.rbs +13 -1
  160. data/stdlib/rubygems/0/path_support.rbs +4 -1
  161. data/stdlib/rubygems/0/platform.rbs +5 -1
  162. data/stdlib/rubygems/0/request_set.rbs +44 -2
  163. data/stdlib/rubygems/0/requirement.rbs +65 -2
  164. data/stdlib/rubygems/0/rubygems.rbs +407 -0
  165. data/stdlib/rubygems/0/source_list.rbs +13 -0
  166. data/stdlib/rubygems/0/specification.rbs +21 -1
  167. data/stdlib/rubygems/0/stream_ui.rbs +3 -1
  168. data/stdlib/rubygems/0/uninstaller.rbs +8 -1
  169. data/stdlib/rubygems/0/version.rbs +60 -157
  170. data/stdlib/securerandom/0/securerandom.rbs +44 -0
  171. data/stdlib/set/0/set.rbs +423 -109
  172. data/stdlib/shellwords/0/shellwords.rbs +55 -77
  173. data/stdlib/singleton/0/singleton.rbs +20 -0
  174. data/stdlib/socket/0/addrinfo.rbs +210 -9
  175. data/stdlib/socket/0/basic_socket.rbs +103 -11
  176. data/stdlib/socket/0/ip_socket.rbs +31 -9
  177. data/stdlib/socket/0/socket.rbs +586 -38
  178. data/stdlib/socket/0/tcp_server.rbs +22 -2
  179. data/stdlib/socket/0/tcp_socket.rbs +12 -1
  180. data/stdlib/socket/0/udp_socket.rbs +25 -2
  181. data/stdlib/socket/0/unix_server.rbs +22 -2
  182. data/stdlib/socket/0/unix_socket.rbs +45 -5
  183. data/stdlib/strscan/0/string_scanner.rbs +210 -9
  184. data/stdlib/tempfile/0/tempfile.rbs +58 -10
  185. data/stdlib/time/0/time.rbs +208 -116
  186. data/stdlib/timeout/0/timeout.rbs +10 -0
  187. data/stdlib/tmpdir/0/tmpdir.rbs +13 -4
  188. data/stdlib/tsort/0/cyclic.rbs +1 -0
  189. data/stdlib/tsort/0/interfaces.rbs +1 -0
  190. data/stdlib/tsort/0/tsort.rbs +42 -0
  191. data/stdlib/uri/0/common.rbs +57 -8
  192. data/stdlib/uri/0/file.rbs +55 -109
  193. data/stdlib/uri/0/ftp.rbs +6 -3
  194. data/stdlib/uri/0/generic.rbs +558 -329
  195. data/stdlib/uri/0/http.rbs +60 -114
  196. data/stdlib/uri/0/https.rbs +8 -102
  197. data/stdlib/uri/0/ldap.rbs +143 -137
  198. data/stdlib/uri/0/ldaps.rbs +8 -102
  199. data/stdlib/uri/0/mailto.rbs +3 -0
  200. data/stdlib/uri/0/rfc2396_parser.rbs +66 -26
  201. data/stdlib/uri/0/ws.rbs +6 -3
  202. data/stdlib/uri/0/wss.rbs +5 -3
  203. data/stdlib/yaml/0/dbm.rbs +151 -87
  204. data/stdlib/yaml/0/store.rbs +6 -0
  205. data/stdlib/zlib/0/zlib.rbs +90 -31
  206. metadata +18 -6
  207. data/lib/rbs/location.rb +0 -221
  208. data/sig/char_scanner.rbs +0 -9
data/core/struct.rbs CHANGED
@@ -1,40 +1,295 @@
1
- # A [Struct](Struct) is a convenient way to bundle a
2
- # number of attributes together, using accessor methods, without having to
3
- # write an explicit class.
4
- #
5
- # The [Struct](Struct) class generates new subclasses
6
- # that hold a set of members and their values. For each member a reader
7
- # and writer method is created similar to
8
- # [Module\#attr\_accessor](https://ruby-doc.org/core-2.6.3/Module.html#method-i-attr_accessor)
9
- # .
10
- #
11
- # ```ruby
12
- # Customer = Struct.new(:name, :address) do
13
- # def greeting
14
- # "Hello #{name}!"
15
- # end
16
- # end
17
- #
18
- # dave = Customer.new("Dave", "123 Main")
19
- # dave.name #=> "Dave"
20
- # dave.greeting #=> "Hello Dave!"
21
- # ```
22
- #
23
- # See [::new](Struct#method-c-new) for further
24
- # examples of creating struct subclasses and instances.
25
- #
26
- # In the method descriptions that follow, a "member" parameter refers to a
27
- # struct member which is either a quoted string ( `"name"` ) or a
28
- # [Symbol](https://ruby-doc.org/core-2.6.3/Symbol.html) ( `:name` ).
1
+ # <!-- rdoc-file=struct.c -->
2
+ # Class Struct provides a convenient way to create a simple class that can store
3
+ # and fetch values.
4
+ #
5
+ # This example creates a subclass of `Struct`, `Struct::Customer`; the first
6
+ # argument, a string, is the name of the subclass; the other arguments, symbols,
7
+ # determine the *members* of the new subclass.
8
+ #
9
+ # Customer = Struct.new('Customer', :name, :address, :zip)
10
+ # Customer.name # => "Struct::Customer"
11
+ # Customer.class # => Class
12
+ # Customer.superclass # => Struct
13
+ #
14
+ # Corresponding to each member are two methods, a writer and a reader, that
15
+ # store and fetch values:
16
+ #
17
+ # methods = Customer.instance_methods false
18
+ # methods # => [:zip, :address=, :zip=, :address, :name, :name=]
19
+ #
20
+ # An instance of the subclass may be created, and its members assigned values,
21
+ # via method `::new`:
22
+ #
23
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
24
+ # joe # => #<struct Struct::Customer name="Joe Smith", address="123 Maple, Anytown NC", zip=12345>
25
+ #
26
+ # The member values may be managed thus:
27
+ #
28
+ # joe.name # => "Joe Smith"
29
+ # joe.name = 'Joseph Smith'
30
+ # joe.name # => "Joseph Smith"
31
+ #
32
+ # And thus; note that member name may be expressed as either a string or a
33
+ # symbol:
34
+ #
35
+ # joe[:name] # => "Joseph Smith"
36
+ # joe[:name] = 'Joseph Smith, Jr.'
37
+ # joe['name'] # => "Joseph Smith, Jr."
38
+ #
39
+ # See Struct::new.
40
+ #
41
+ # ## What's Here
42
+ #
43
+ # First, what's elsewhere. Class Struct:
44
+ #
45
+ # * Inherits from [class
46
+ # Object](Object.html#class-Object-label-What-27s+Here).
47
+ # * Includes [module
48
+ # Enumerable](Enumerable.html#module-Enumerable-label-What-27s+Here), which
49
+ # provides dozens of additional methods.
50
+ #
51
+ #
52
+ # Here, class Struct provides methods that are useful for:
53
+ #
54
+ # * [Creating a Struct
55
+ # Subclass](#class-Struct-label-Methods+for+Creating+a+Struct+Subclass)
56
+ # * [Querying](#class-Struct-label-Methods+for+Querying)
57
+ # * [Comparing](#class-Struct-label-Methods+for+Comparing)
58
+ # * [Fetching](#class-Struct-label-Methods+for+Fetching)
59
+ # * [Assigning](#class-Struct-label-Methods+for+Assigning)
60
+ # * [Iterating](#class-Struct-label-Methods+for+Iterating)
61
+ # * [Converting](#class-Struct-label-Methods+for+Converting)
62
+ #
63
+ #
64
+ # ### Methods for Creating a Struct Subclass
65
+ #
66
+ # ::new
67
+ # : Returns a new subclass of Struct.
68
+ #
69
+ #
70
+ # ### Methods for Querying
71
+ #
72
+ # #hash
73
+ # : Returns the integer hash code.
74
+ # #length, #size
75
+ # : Returns the number of members.
76
+ #
77
+ #
78
+ # ### Methods for Comparing
79
+ #
80
+ # [#==](#method-i-3D-3D)
81
+ # : Returns whether a given object is equal to `self`, using `==` to compare
82
+ # member values.
83
+ # #eql?
84
+ # : Returns whether a given object is equal to `self`, using `eql?` to compare
85
+ # member values.
86
+ #
87
+ #
88
+ # ### Methods for Fetching
89
+ #
90
+ # #[]
91
+ # : Returns the value associated with a given member name.
92
+ # #to_a, #values, #deconstruct
93
+ # : Returns the member values in `self` as an array.
94
+ # #deconstruct_keys
95
+ # : Returns a hash of the name/value pairs for given member names.
96
+ # #dig
97
+ # : Returns the object in nested objects that is specified by a given member
98
+ # name and additional arguments.
99
+ # #members
100
+ # : Returns an array of the member names.
101
+ # #select, #filter
102
+ # : Returns an array of member values from `self`, as selected by the given
103
+ # block.
104
+ # #values_at
105
+ # : Returns an array containing values for given member names.
106
+ #
107
+ #
108
+ # ### Methods for Assigning
109
+ #
110
+ # #[]=
111
+ # : Assigns a given value to a given member name.
112
+ #
113
+ #
114
+ # ### Methods for Iterating
115
+ #
116
+ # #each
117
+ # : Calls a given block with each member name.
118
+ # #each_pair
119
+ # : Calls a given block with each member name/value pair.
120
+ #
121
+ #
122
+ # ### Methods for Converting
123
+ #
124
+ # #inspect, #to_s
125
+ # : Returns a string representation of `self`.
126
+ # #to_h
127
+ # : Returns a hash of the member name/value pairs in `self`.
128
+ #
29
129
  class Struct[Elem] < Object
30
130
  include Enumerable[Elem?]
31
131
 
32
132
  type attribute_name = Symbol | String
33
133
 
134
+ # <!--
135
+ # rdoc-file=struct.c
136
+ # - Struct.new(*member_names, keyword_init: false){|Struct_subclass| ... } -> Struct_subclass
137
+ # - Struct.new(class_name, *member_names, keyword_init: false){|Struct_subclass| ... } -> Struct_subclass
138
+ # - Struct_subclass.new(*member_names) -> Struct_subclass_instance
139
+ # - Struct_subclass.new(**member_names) -> Struct_subclass_instance
140
+ # -->
141
+ # `Struct.new` returns a new subclass of `Struct`. The new subclass:
142
+ #
143
+ # * May be anonymous, or may have the name given by `class_name`.
144
+ # * May have members as given by `member_names`.
145
+ # * May have initialization via ordinary arguments (the default) or via
146
+ # keyword arguments (if `keyword_init: true` is given).
147
+ #
148
+ #
149
+ # The new subclass has its own method `::new`; thus:
150
+ #
151
+ # Foo = Struct.new('Foo', :foo, :bar) # => Struct::Foo
152
+ # f = Foo.new(0, 1) # => #<struct Struct::Foo foo=0, bar=1>
153
+ #
154
+ # **\Class Name**
155
+ #
156
+ # With string argument `class_name`, returns a new subclass of `Struct` named
157
+ # `Struct::*class_name`*:
158
+ #
159
+ # Foo = Struct.new('Foo', :foo, :bar) # => Struct::Foo
160
+ # Foo.name # => "Struct::Foo"
161
+ # Foo.superclass # => Struct
162
+ #
163
+ # Without string argument `class_name`, returns a new anonymous subclass of
164
+ # `Struct`:
165
+ #
166
+ # Struct.new(:foo, :bar).name # => nil
167
+ #
168
+ # **Block**
169
+ #
170
+ # With a block given, the created subclass is yielded to the block:
171
+ #
172
+ # Customer = Struct.new('Customer', :name, :address) do |new_class|
173
+ # p "The new subclass is #{new_class}"
174
+ # def greeting
175
+ # "Hello #{name} at #{address}"
176
+ # end
177
+ # end # => Struct::Customer
178
+ # dave = Customer.new('Dave', '123 Main')
179
+ # dave # => #<struct Struct::Customer name="Dave", address="123 Main">
180
+ # dave.greeting # => "Hello Dave at 123 Main"
181
+ #
182
+ # Output, from `Struct.new`:
183
+ #
184
+ # "The new subclass is Struct::Customer"
185
+ #
186
+ # **Member Names**
187
+ #
188
+ # Symbol arguments `member_names` determines the members of the new subclass:
189
+ #
190
+ # Struct.new(:foo, :bar).members # => [:foo, :bar]
191
+ # Struct.new('Foo', :foo, :bar).members # => [:foo, :bar]
192
+ #
193
+ # The new subclass has instance methods corresponding to `member_names`:
194
+ #
195
+ # Foo = Struct.new('Foo', :foo, :bar)
196
+ # Foo.instance_methods(false) # => [:foo, :bar, :foo=, :bar=]
197
+ # f = Foo.new # => #<struct Struct::Foo foo=nil, bar=nil>
198
+ # f.foo # => nil
199
+ # f.foo = 0 # => 0
200
+ # f.bar # => nil
201
+ # f.bar = 1 # => 1
202
+ # f # => #<struct Struct::Foo foo=0, bar=1>
203
+ #
204
+ # **Singleton Methods**
205
+ #
206
+ # A subclass returned by Struct.new has these singleton methods:
207
+ #
208
+ # * Method `::new ` creates an instance of the subclass:
209
+ #
210
+ # Foo.new # => #<struct Struct::Foo foo=nil, bar=nil>
211
+ # Foo.new(0) # => #<struct Struct::Foo foo=0, bar=nil>
212
+ # Foo.new(0, 1) # => #<struct Struct::Foo foo=0, bar=1>
213
+ # Foo.new(0, 1, 2) # Raises ArgumentError: struct size differs
214
+ #
215
+ # Method `::[]` is an alias for method `::new`.
216
+ #
217
+ # * Method `:inspect` returns a string representation of the subclass:
218
+ #
219
+ # Foo.inspect
220
+ # # => "Struct::Foo"
221
+ #
222
+ # * Method `::members` returns an array of the member names:
223
+ #
224
+ # Foo.members # => [:foo, :bar]
225
+ #
226
+ #
227
+ # **Keyword Argument**
228
+ #
229
+ # By default, the arguments for initializing an instance of the new subclass are
230
+ # ordinary arguments (not keyword arguments). With optional keyword argument
231
+ # `keyword_init: true`, the new subclass is initialized with keyword arguments:
232
+ #
233
+ # # Without keyword_init: true.
234
+ # Foo = Struct.new('Foo', :foo, :bar)
235
+ # Foo # => Struct::Foo
236
+ # Foo.new(0, 1) # => #<struct Struct::Foo foo=0, bar=1>
237
+ # # With keyword_init: true.
238
+ # Bar = Struct.new(:foo, :bar, keyword_init: true)
239
+ # Bar # => # => Bar(keyword_init: true)
240
+ # Bar.new(bar: 1, foo: 0) # => #<struct Bar foo=0, bar=1>
241
+ #
34
242
  def initialize: (attribute_name, *attribute_name, ?keyword_init: boolish) ?{ () -> void } -> void
35
243
 
244
+ # <!--
245
+ # rdoc-file=struct.c
246
+ # - each {|value| ... } -> self
247
+ # - each -> enumerator
248
+ # -->
249
+ # Calls the given block with the value of each member; returns `self`:
250
+ #
251
+ # Customer = Struct.new(:name, :address, :zip)
252
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
253
+ # joe.each {|value| p value }
254
+ #
255
+ # Output:
256
+ #
257
+ # "Joe Smith"
258
+ # "123 Maple, Anytown NC"
259
+ # 12345
260
+ #
261
+ # Returns an Enumerator if no block is given.
262
+ #
263
+ # Related: #each_pair.
264
+ #
36
265
  def each: () -> ::Enumerator[Elem?, self]
37
266
  | () { (Elem? item) -> void } -> self
38
267
 
268
+ # <!--
269
+ # rdoc-file=struct.c
270
+ # - StructClass::members -> array_of_symbols
271
+ # -->
272
+ # Returns the member names of the Struct descendant as an array:
273
+ #
274
+ # Customer = Struct.new(:name, :address, :zip)
275
+ # Customer.members # => [:name, :address, :zip]
276
+ #
39
277
  def self.members: () -> ::Array[Symbol]
278
+
279
+ # <!--
280
+ # rdoc-file=struct.c
281
+ # - StructClass::keyword_init? -> true or falsy value
282
+ # -->
283
+ # Returns `true` if the class was initialized with `keyword_init: true`.
284
+ # Otherwise returns `nil` or `false`.
285
+ #
286
+ # Examples:
287
+ # Foo = Struct.new(:a)
288
+ # Foo.keyword_init? # => nil
289
+ # Bar = Struct.new(:a, keyword_init: true)
290
+ # Bar.keyword_init? # => true
291
+ # Baz = Struct.new(:a, keyword_init: false)
292
+ # Baz.keyword_init? # => false
293
+ #
294
+ def self.keyword_init?: () -> (true | false | nil)
40
295
  end