rbs 3.9.5 → 3.10.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 (189) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +74 -0
  3. data/.clangd +2 -0
  4. data/.github/workflows/c-check.yml +54 -0
  5. data/.github/workflows/comments.yml +3 -3
  6. data/.github/workflows/ruby.yml +34 -19
  7. data/.github/workflows/typecheck.yml +1 -1
  8. data/.github/workflows/windows.yml +1 -1
  9. data/.gitignore +4 -0
  10. data/CHANGELOG.md +49 -0
  11. data/README.md +38 -1
  12. data/Rakefile +152 -23
  13. data/config.yml +190 -62
  14. data/core/array.rbs +100 -46
  15. data/core/complex.rbs +32 -21
  16. data/core/dir.rbs +2 -2
  17. data/core/encoding.rbs +6 -9
  18. data/core/enumerable.rbs +90 -3
  19. data/core/enumerator.rbs +18 -1
  20. data/core/errno.rbs +8 -0
  21. data/core/errors.rbs +28 -1
  22. data/core/exception.rbs +2 -2
  23. data/core/fiber.rbs +5 -4
  24. data/core/file.rbs +27 -12
  25. data/core/file_test.rbs +1 -1
  26. data/core/float.rbs +209 -22
  27. data/core/gc.rbs +417 -281
  28. data/core/hash.rbs +1024 -727
  29. data/core/integer.rbs +78 -38
  30. data/core/io/buffer.rbs +18 -7
  31. data/core/io/wait.rbs +11 -33
  32. data/core/io.rbs +14 -12
  33. data/core/kernel.rbs +57 -51
  34. data/core/marshal.rbs +1 -1
  35. data/core/match_data.rbs +1 -1
  36. data/core/math.rbs +42 -3
  37. data/core/method.rbs +14 -6
  38. data/core/module.rbs +88 -17
  39. data/core/nil_class.rbs +3 -3
  40. data/core/numeric.rbs +16 -16
  41. data/core/object.rbs +3 -3
  42. data/core/object_space.rbs +21 -15
  43. data/{stdlib/pathname/0 → core}/pathname.rbs +255 -355
  44. data/core/proc.rbs +15 -8
  45. data/core/process.rbs +2 -2
  46. data/core/ractor.rbs +278 -437
  47. data/core/range.rbs +7 -8
  48. data/core/rational.rbs +37 -24
  49. data/core/rbs/unnamed/argf.rbs +2 -2
  50. data/core/rbs/unnamed/env_class.rbs +1 -1
  51. data/core/rbs/unnamed/random.rbs +4 -2
  52. data/core/regexp.rbs +25 -20
  53. data/core/ruby.rbs +53 -0
  54. data/core/ruby_vm.rbs +6 -4
  55. data/core/rubygems/errors.rbs +3 -70
  56. data/core/rubygems/rubygems.rbs +11 -79
  57. data/core/rubygems/version.rbs +2 -3
  58. data/core/set.rbs +488 -359
  59. data/core/string.rbs +3145 -1231
  60. data/core/struct.rbs +1 -1
  61. data/core/symbol.rbs +4 -4
  62. data/core/thread.rbs +92 -29
  63. data/core/time.rbs +35 -9
  64. data/core/trace_point.rbs +7 -4
  65. data/core/unbound_method.rbs +14 -6
  66. data/docs/aliases.md +79 -0
  67. data/docs/collection.md +2 -2
  68. data/docs/encoding.md +56 -0
  69. data/docs/gem.md +0 -1
  70. data/docs/sigs.md +3 -3
  71. data/ext/rbs_extension/ast_translation.c +1016 -0
  72. data/ext/rbs_extension/ast_translation.h +37 -0
  73. data/ext/rbs_extension/class_constants.c +155 -0
  74. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +7 -1
  75. data/ext/rbs_extension/compat.h +10 -0
  76. data/ext/rbs_extension/extconf.rb +25 -1
  77. data/ext/rbs_extension/legacy_location.c +317 -0
  78. data/ext/rbs_extension/legacy_location.h +45 -0
  79. data/ext/rbs_extension/main.c +357 -14
  80. data/ext/rbs_extension/rbs_extension.h +6 -21
  81. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  82. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  83. data/include/rbs/ast.h +687 -0
  84. data/include/rbs/defines.h +86 -0
  85. data/include/rbs/lexer.h +199 -0
  86. data/include/rbs/location.h +59 -0
  87. data/include/rbs/parser.h +135 -0
  88. data/include/rbs/string.h +47 -0
  89. data/include/rbs/util/rbs_allocator.h +59 -0
  90. data/include/rbs/util/rbs_assert.h +20 -0
  91. data/include/rbs/util/rbs_buffer.h +83 -0
  92. data/include/rbs/util/rbs_constant_pool.h +6 -67
  93. data/include/rbs/util/rbs_encoding.h +282 -0
  94. data/include/rbs/util/rbs_unescape.h +24 -0
  95. data/include/rbs.h +1 -2
  96. data/lib/rbs/annotate/formatter.rb +3 -13
  97. data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
  98. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  99. data/lib/rbs/cli/validate.rb +2 -2
  100. data/lib/rbs/cli.rb +1 -1
  101. data/lib/rbs/collection/config/lockfile_generator.rb +1 -0
  102. data/lib/rbs/definition_builder/ancestor_builder.rb +5 -5
  103. data/lib/rbs/environment.rb +64 -59
  104. data/lib/rbs/environment_loader.rb +1 -1
  105. data/lib/rbs/errors.rb +1 -1
  106. data/lib/rbs/parser_aux.rb +5 -0
  107. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  108. data/lib/rbs/resolver/type_name_resolver.rb +124 -38
  109. data/lib/rbs/test/type_check.rb +14 -0
  110. data/lib/rbs/types.rb +3 -1
  111. data/lib/rbs/version.rb +1 -1
  112. data/lib/rbs.rb +1 -1
  113. data/lib/rdoc/discover.rb +1 -1
  114. data/lib/rdoc_plugin/parser.rb +3 -3
  115. data/sig/annotate/formatter.rbs +2 -2
  116. data/sig/annotate/rdoc_annotater.rbs +1 -1
  117. data/sig/environment.rbs +57 -6
  118. data/sig/manifest.yaml +0 -1
  119. data/sig/parser.rbs +20 -0
  120. data/sig/resolver/type_name_resolver.rbs +38 -7
  121. data/sig/types.rbs +4 -1
  122. data/src/ast.c +1256 -0
  123. data/src/lexer.c +2956 -0
  124. data/src/lexer.re +147 -0
  125. data/src/lexstate.c +205 -0
  126. data/src/location.c +71 -0
  127. data/src/parser.c +3507 -0
  128. data/src/string.c +41 -0
  129. data/src/util/rbs_allocator.c +152 -0
  130. data/src/util/rbs_assert.c +19 -0
  131. data/src/util/rbs_buffer.c +54 -0
  132. data/src/util/rbs_constant_pool.c +18 -88
  133. data/src/util/rbs_encoding.c +21308 -0
  134. data/src/util/rbs_unescape.c +167 -0
  135. data/stdlib/bigdecimal/0/big_decimal.rbs +100 -82
  136. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  137. data/stdlib/cgi/0/core.rbs +2 -396
  138. data/stdlib/cgi/0/manifest.yaml +1 -0
  139. data/stdlib/cgi-escape/0/escape.rbs +153 -0
  140. data/stdlib/coverage/0/coverage.rbs +3 -1
  141. data/stdlib/date/0/date.rbs +67 -59
  142. data/stdlib/date/0/date_time.rbs +1 -1
  143. data/stdlib/delegate/0/delegator.rbs +10 -7
  144. data/stdlib/erb/0/erb.rbs +737 -347
  145. data/stdlib/fileutils/0/fileutils.rbs +18 -13
  146. data/stdlib/forwardable/0/forwardable.rbs +3 -0
  147. data/stdlib/json/0/json.rbs +68 -48
  148. data/stdlib/net-http/0/net-http.rbs +3 -0
  149. data/stdlib/objspace/0/objspace.rbs +9 -4
  150. data/stdlib/open-uri/0/open-uri.rbs +40 -0
  151. data/stdlib/openssl/0/openssl.rbs +331 -228
  152. data/stdlib/optparse/0/optparse.rbs +3 -3
  153. data/stdlib/psych/0/psych.rbs +3 -3
  154. data/stdlib/rdoc/0/code_object.rbs +2 -2
  155. data/stdlib/rdoc/0/comment.rbs +2 -0
  156. data/stdlib/rdoc/0/options.rbs +76 -0
  157. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  158. data/stdlib/rdoc/0/store.rbs +1 -1
  159. data/stdlib/resolv/0/resolv.rbs +25 -68
  160. data/stdlib/ripper/0/ripper.rbs +5 -2
  161. data/stdlib/singleton/0/singleton.rbs +3 -0
  162. data/stdlib/socket/0/socket.rbs +13 -1
  163. data/stdlib/socket/0/tcp_socket.rbs +10 -2
  164. data/stdlib/stringio/0/stringio.rbs +1176 -85
  165. data/stdlib/strscan/0/string_scanner.rbs +31 -31
  166. data/stdlib/tempfile/0/tempfile.rbs +3 -3
  167. data/stdlib/time/0/time.rbs +1 -1
  168. data/stdlib/timeout/0/timeout.rbs +63 -7
  169. data/stdlib/tsort/0/cyclic.rbs +3 -0
  170. data/stdlib/uri/0/common.rbs +11 -2
  171. data/stdlib/uri/0/file.rbs +1 -1
  172. data/stdlib/uri/0/generic.rbs +17 -16
  173. data/stdlib/uri/0/rfc2396_parser.rbs +6 -7
  174. data/stdlib/zlib/0/zstream.rbs +1 -0
  175. metadata +43 -18
  176. data/ext/rbs_extension/lexer.c +0 -2728
  177. data/ext/rbs_extension/lexer.h +0 -179
  178. data/ext/rbs_extension/lexer.re +0 -147
  179. data/ext/rbs_extension/lexstate.c +0 -175
  180. data/ext/rbs_extension/location.c +0 -325
  181. data/ext/rbs_extension/location.h +0 -85
  182. data/ext/rbs_extension/parser.c +0 -2982
  183. data/ext/rbs_extension/parser.h +0 -18
  184. data/ext/rbs_extension/parserstate.c +0 -411
  185. data/ext/rbs_extension/parserstate.h +0 -163
  186. data/ext/rbs_extension/unescape.c +0 -32
  187. data/include/rbs/ruby_objs.h +0 -72
  188. data/src/constants.c +0 -153
  189. data/src/ruby_objs.c +0 -799
data/core/set.rbs CHANGED
@@ -1,425 +1,507 @@
1
- # <!-- rdoc-file=lib/set.rb -->
2
- # This library provides the Set class, which implements a collection
3
- # of unordered values with no duplicates. It is a hybrid of Array's
4
- # intuitive inter-operation facilities and Hash's fast lookup.
5
- # The method `to_set` is added to Enumerable for convenience.
6
- # Set is easy to use with Enumerable objects (implementing `each`).
7
- # Most of the initializer methods and binary operators accept generic
8
- # Enumerable objects besides sets and arrays. An Enumerable object
9
- # can be converted to Set using the `to_set` method.
10
- # Set uses Hash as storage, so you must note the following points:
1
+ # <!-- rdoc-file=set.c -->
2
+ # The Set class implements a collection of unordered values with no duplicates.
3
+ # It is a hybrid of Array's intuitive inter-operation facilities and Hash's fast
4
+ # lookup.
5
+ #
6
+ # Set is easy to use with Enumerable objects (implementing #each). Most of the
7
+ # initializer methods and binary operators accept generic Enumerable objects
8
+ # besides sets and arrays. An Enumerable object can be converted to Set using
9
+ # the `to_set` method.
10
+ #
11
+ # Set uses a data structure similar to Hash for storage, except that it only has
12
+ # keys and no values.
13
+ #
11
14
  # * Equality of elements is determined according to Object#eql? and
12
- # Object#hash. Use Set#compare_by_identity to make a set compare
13
- # its elements by their identity.
14
- # * Set assumes that the identity of each element does not change
15
- # while it is stored. Modifying an element of a set will render the
16
- # set to an unreliable state.
17
- # * When a string is to be stored, a frozen copy of the string is
18
- # stored instead unless the original string is already frozen.
15
+ # Object#hash. Use Set#compare_by_identity to make a set compare its
16
+ # elements by their identity.
17
+ # * Set assumes that the identity of each element does not change while it is
18
+ # stored. Modifying an element of a set will render the set to an
19
+ # unreliable state.
20
+ # * When a string is to be stored, a frozen copy of the string is stored
21
+ # instead unless the original string is already frozen.
22
+ #
19
23
  # ## Comparison
20
- # The comparison operators `<`, `>`, `<=`, and `>=` are implemented as
21
- # shorthand for the {proper_,}{subset?,superset?} methods. The `<=>`
22
- # operator reflects this order, or return `nil` for sets that both
23
- # have distinct elements (`{x, y}` vs. `{x, z}` for example).
24
+ #
25
+ # The comparison operators `<`, `>`, `<=`, and `>=` are implemented as shorthand
26
+ # for the {proper_,}{subset?,superset?} methods. The `<=>` operator reflects
27
+ # this order, or returns `nil` for sets that both have distinct elements (`{x,
28
+ # y}` vs. `{x, z}` for example).
29
+ #
24
30
  # ## Example
25
- # require 'set'
26
- # s1 = Set[1, 2] #=> #<Set: {1, 2}>
27
- # s2 = [1, 2].to_set #=> #<Set: {1, 2}>
28
- # s1 == s2 #=> true
29
- # s1.add("foo") #=> #<Set: {1, 2, "foo"}>
30
- # s1.merge([2, 6]) #=> #<Set: {1, 2, "foo", 6}>
31
- # s1.subset?(s2) #=> false
32
- # s2.subset?(s1) #=> true
31
+ #
32
+ # s1 = Set[1, 2] #=> Set[1, 2]
33
+ # s2 = [1, 2].to_set #=> Set[1, 2]
34
+ # s1 == s2 #=> true
35
+ # s1.add("foo") #=> Set[1, 2, "foo"]
36
+ # s1.merge([2, 6]) #=> Set[1, 2, "foo", 6]
37
+ # s1.subset?(s2) #=> false
38
+ # s2.subset?(s1) #=> true
33
39
  #
34
40
  # ## Contact
35
- # * Akinori MUSHA <mailto:knu@iDaemons.org> (current maintainer)
36
- # ## What's Here
41
+ #
42
+ # * Akinori MUSHA <knu@iDaemons.org> (current maintainer)
43
+ #
44
+ # ## Inheriting from Set
45
+ #
46
+ # Before Ruby 4.0 (released December 2025), Set had a different, less efficient
47
+ # implementation. It was reimplemented in C, and the behavior of some of the
48
+ # core methods were adjusted.
49
+ #
50
+ # To keep backward compatibility, when a class is inherited from Set, additional
51
+ # module `Set::SubclassCompatible` is included, which makes the inherited class
52
+ # behavior, as well as internal method names, closer to what it was before Ruby
53
+ # 4.0.
54
+ #
55
+ # It can be easily seen, for example, in the #inspect method behavior:
56
+ #
57
+ # p Set[1, 2, 3]
58
+ # # prints "Set[1, 2, 3]"
59
+ #
60
+ # class MySet < Set
61
+ # end
62
+ # p MySet[1, 2, 3]
63
+ # # prints "#<MySet: {1, 2, 3}>", like it was in Ruby 3.4
64
+ #
65
+ # For new code, if backward compatibility is not necessary, it is recommended to
66
+ # instead inherit from `Set::CoreSet`, which avoids including the
67
+ # "compatibility" layer:
68
+ #
69
+ # class MyCoreSet < Set::CoreSet
70
+ # end
71
+ # p MyCoreSet[1, 2, 3]
72
+ # # prints "MyCoreSet[1, 2, 3]"
73
+ #
74
+ # ## Set's methods
75
+ #
37
76
  # First, what's elsewhere. Class Set:
77
+ #
38
78
  # * Inherits from [class Object](rdoc-ref:Object@What-27s+Here).
39
- # * Includes [module Enumerable](rdoc-ref:Enumerable@What-27s+Here),
40
- # which provides dozens of additional methods.
41
- # In particular, class Set does not have many methods of its own
42
- # for fetching or for iterating.
43
- # Instead, it relies on those in Enumerable.
79
+ # * Includes [module Enumerable](rdoc-ref:Enumerable@What-27s+Here), which
80
+ # provides dozens of additional methods.
81
+ #
82
+ # In particular, class Set does not have many methods of its own for fetching or
83
+ # for iterating. Instead, it relies on those in Enumerable.
84
+ #
44
85
  # Here, class Set provides methods that are useful for:
45
- # * [Creating a Set](#class-Set-label-Methods+for+Creating+a+Set)
46
- # * [Set Operations](#class-Set-label-Methods+for+Set+Operations)
47
- # * [Comparing](#class-Set-label-Methods+for+Comparing)
48
- # * [Querying](#class-Set-label-Methods+for+Querying)
49
- # * [Assigning](#class-Set-label-Methods+for+Assigning)
50
- # * [Deleting](#class-Set-label-Methods+for+Deleting)
51
- # * [Converting](#class-Set-label-Methods+for+Converting)
52
- # * [Iterating](#class-Set-label-Methods+for+Iterating)
53
- # * [And more....](#class-Set-label-Other+Methods)
86
+ #
87
+ # * [Creating a Set](rdoc-ref:Set@Methods+for+Creating+a+Set)
88
+ # * [Set Operations](rdoc-ref:Set@Methods+for+Set+Operations)
89
+ # * [Comparing](rdoc-ref:Set@Methods+for+Comparing)
90
+ # * [Querying](rdoc-ref:Set@Methods+for+Querying)
91
+ # * [Assigning](rdoc-ref:Set@Methods+for+Assigning)
92
+ # * [Deleting](rdoc-ref:Set@Methods+for+Deleting)
93
+ # * [Converting](rdoc-ref:Set@Methods+for+Converting)
94
+ # * [Iterating](rdoc-ref:Set@Methods+for+Iterating)
95
+ # * [And more....](rdoc-ref:Set@Other+Methods)
96
+ #
54
97
  # ### Methods for Creating a Set
55
- # * ::[]:
56
- # Returns a new set containing the given objects.
57
- # * ::new:
58
- # Returns a new set containing either the given objects
59
- # (if no block given) or the return values from the called block
60
- # (if a block given).
98
+ #
99
+ # * ::[]: Returns a new set containing the given objects.
100
+ # * ::new: Returns a new set containing either the given objects (if no block
101
+ # given) or the return values from the called block (if a block given).
102
+ #
61
103
  # ### Methods for Set Operations
62
- # * [|](#method-i-7C) (aliased as #union and #+):
63
- # Returns a new set containing all elements from `self`
64
- # and all elements from a given enumerable (no duplicates).
65
- # * [&](#method-i-26) (aliased as #intersection):
66
- # Returns a new set containing all elements common to `self`
67
- # and a given enumerable.
68
- # * [-](#method-i-2D) (aliased as #difference):
69
- # Returns a copy of `self` with all elements
70
- # in a given enumerable removed.
71
- # * [\^](#method-i-5E):
72
- # Returns a new set containing all elements from `self`
73
- # and a given enumerable except those common to both.
104
+ #
105
+ # * #| (aliased as #union and #+): Returns a new set containing all elements
106
+ # from `self` and all elements from a given enumerable (no duplicates).
107
+ # * #& (aliased as #intersection): Returns a new set containing all elements
108
+ # common to `self` and a given enumerable.
109
+ # * #- (aliased as #difference): Returns a copy of `self` with all elements in
110
+ # a given enumerable removed.
111
+ # * #^: Returns a new set containing all elements from `self` and a given
112
+ # enumerable except those common to both.
113
+ #
74
114
  # ### Methods for Comparing
75
- # * [<=>](#method-i-3C-3D-3E):
76
- # Returns -1, 0, or 1 as `self` is less than, equal to,
77
- # or greater than a given object.
78
- # * [==](#method-i-3D-3D):
79
- # Returns whether `self` and a given enumerable are equal,
80
- # as determined by Object#eql?.
81
- # * #compare_by_identity?:
82
- # Returns whether the set considers only identity
83
- # when comparing elements.
115
+ #
116
+ # * #<=>: Returns -1, 0, or 1 as `self` is less than, equal to, or greater
117
+ # than a given object.
118
+ # * #==: Returns whether `self` and a given enumerable are equal, as
119
+ # determined by Object#eql?.
120
+ # * #compare_by_identity?: Returns whether the set considers only identity
121
+ # when comparing elements.
122
+ #
84
123
  # ### Methods for Querying
85
- # * #length (aliased as #size):
86
- # Returns the count of elements.
87
- # * #empty?:
88
- # Returns whether the set has no elements.
89
- # * #include? (aliased as #member? and #===):
90
- # Returns whether a given object is an element in the set.
91
- # * #subset? (aliased as [<=](#method-i-3C-3D)):
92
- # Returns whether a given object is a subset of the set.
93
- # * #proper_subset? (aliased as [<](#method-i-3C)):
94
- # Returns whether a given enumerable is a proper subset of the set.
95
- # * #superset? (aliased as [>=](#method-i-3E-3D)]):
96
- # Returns whether a given enumerable is a superset of the set.
97
- # * #proper_superset? (aliased as [>](#method-i-3E)):
98
- # Returns whether a given enumerable is a proper superset of the set.
99
- # * #disjoint?:
100
- # Returns `true` if the set and a given enumerable
101
- # have no common elements, `false` otherwise.
102
- # * #intersect?:
103
- # Returns `true` if the set and a given enumerable:
104
- # have any common elements, `false` otherwise.
105
- # * #compare_by_identity?:
106
- # Returns whether the set considers only identity
107
- # when comparing elements.
124
+ #
125
+ # * #length (aliased as #size): Returns the count of elements.
126
+ # * #empty?: Returns whether the set has no elements.
127
+ # * #include? (aliased as #member? and #===): Returns whether a given object
128
+ # is an element in the set.
129
+ # * #subset? (aliased as #<=): Returns whether a given object is a subset of
130
+ # the set.
131
+ # * #proper_subset? (aliased as #<): Returns whether a given enumerable is a
132
+ # proper subset of the set.
133
+ # * #superset? (aliased as #>=): Returns whether a given enumerable is a
134
+ # superset of the set.
135
+ # * #proper_superset? (aliased as #>): Returns whether a given enumerable is a
136
+ # proper superset of the set.
137
+ # * #disjoint?: Returns `true` if the set and a given enumerable have no
138
+ # common elements, `false` otherwise.
139
+ # * #intersect?: Returns `true` if the set and a given enumerable: have any
140
+ # common elements, `false` otherwise.
141
+ # * #compare_by_identity?: Returns whether the set considers only identity
142
+ # when comparing elements.
143
+ #
108
144
  # ### Methods for Assigning
109
- # * #add (aliased as #<<):
110
- # Adds a given object to the set; returns `self`.
111
- # * #add?:
112
- # If the given object is not an element in the set,
113
- # adds it and returns `self`; otherwise, returns `nil`.
114
- # * #merge:
115
- # Merges the elements of each given enumerable object to the set; returns
116
- # `self`.
117
- # * #replace:
118
- # Replaces the contents of the set with the contents
119
- # of a given enumerable.
145
+ #
146
+ # * #add (aliased as #<<): Adds a given object to the set; returns `self`.
147
+ # * #add?: If the given object is not an element in the set, adds it and
148
+ # returns `self`; otherwise, returns `nil`.
149
+ # * #merge: Merges the elements of each given enumerable object to the set;
150
+ # returns `self`.
151
+ # * #replace: Replaces the contents of the set with the contents of a given
152
+ # enumerable.
153
+ #
120
154
  # ### Methods for Deleting
121
- # * #clear:
122
- # Removes all elements in the set; returns `self`.
123
- # * #delete:
124
- # Removes a given object from the set; returns `self`.
125
- # * #delete?:
126
- # If the given object is an element in the set,
127
- # removes it and returns `self`; otherwise, returns `nil`.
128
- # * #subtract:
129
- # Removes each given object from the set; returns `self`.
155
+ #
156
+ # * #clear: Removes all elements in the set; returns `self`.
157
+ # * #delete: Removes a given object from the set; returns `self`.
158
+ # * #delete?: If the given object is an element in the set, removes it and
159
+ # returns `self`; otherwise, returns `nil`.
160
+ # * #subtract: Removes each given object from the set; returns `self`.
130
161
  # * #delete_if - Removes elements specified by a given block.
131
- # * #select! (aliased as #filter!):
132
- # Removes elements not specified by a given block.
133
- # * #keep_if:
134
- # Removes elements not specified by a given block.
135
- # * #reject!
136
- # Removes elements specified by a given block.
162
+ # * #select! (aliased as #filter!): Removes elements not specified by a given
163
+ # block.
164
+ # * #keep_if: Removes elements not specified by a given block.
165
+ # * #reject! Removes elements specified by a given block.
166
+ #
137
167
  # ### Methods for Converting
138
- # * #classify:
139
- # Returns a hash that classifies the elements,
140
- # as determined by the given block.
141
- # * #collect! (aliased as #map!):
142
- # Replaces each element with a block return-value.
143
- # * #divide:
144
- # Returns a hash that classifies the elements,
145
- # as determined by the given block;
146
- # differs from #classify in that the block may accept
147
- # either one or two arguments.
148
- # * #flatten:
149
- # Returns a new set that is a recursive flattening of `self`.
150
- # #flatten!:
151
- # Replaces each nested set in `self` with the elements from that set.
152
- # * #inspect (aliased as #to_s):
153
- # Returns a string displaying the elements.
154
- # * #join:
155
- # Returns a string containing all elements, converted to strings
156
- # as needed, and joined by the given record separator.
157
- # * #to_a:
158
- # Returns an array containing all set elements.
159
- # * #to_set:
160
- # Returns `self` if given no arguments and no block;
161
- # with a block given, returns a new set consisting of block
162
- # return values.
168
+ #
169
+ # * #classify: Returns a hash that classifies the elements, as determined by
170
+ # the given block.
171
+ # * #collect! (aliased as #map!): Replaces each element with a block
172
+ # return-value.
173
+ # * #divide: Returns a hash that classifies the elements, as determined by the
174
+ # given block; differs from #classify in that the block may accept either
175
+ # one or two arguments.
176
+ # * #flatten: Returns a new set that is a recursive flattening of `self`.
177
+ # * #flatten!: Replaces each nested set in `self` with the elements from that
178
+ # set.
179
+ # * #inspect (aliased as #to_s): Returns a string displaying the elements.
180
+ # * #join: Returns a string containing all elements, converted to strings as
181
+ # needed, and joined by the given record separator.
182
+ # * #to_a: Returns an array containing all set elements.
183
+ # * #to_set: Returns `self` if given no arguments and no block; with a block
184
+ # given, returns a new set consisting of block return values.
185
+ #
163
186
  # ### Methods for Iterating
164
- # * #each:
165
- # Calls the block with each successive element; returns `self`.
187
+ #
188
+ # * #each: Calls the block with each successive element; returns `self`.
189
+ #
166
190
  # ### Other Methods
167
- # * #reset:
168
- # Resets the internal state; useful if an object
169
- # has been modified while an element in the set.
191
+ #
192
+ # * #reset: Resets the internal state; useful if an object has been modified
193
+ # while an element in the set.
170
194
  #
171
195
  class Set[unchecked out A]
172
196
  include Enumerable[A]
173
197
 
174
198
  # <!--
175
- # rdoc-file=lib/set.rb
176
- # - new(enum = nil) { |o| ... }
199
+ # rdoc-file=set.c
200
+ # - Set.new -> new_set
201
+ # - Set.new(enum) -> new_set
202
+ # - Set.new(enum) { |elem| ... } -> new_set
177
203
  # -->
178
- # Creates a new set containing the elements of the given enumerable
179
- # object.
180
- # If a block is given, the elements of enum are preprocessed by the
181
- # given block.
182
- # Set.new([1, 2]) #=> #<Set: {1, 2}>
183
- # Set.new([1, 2, 1]) #=> #<Set: {1, 2}>
184
- # Set.new([1, 'c', :s]) #=> #<Set: {1, "c", :s}>
185
- # Set.new(1..5) #=> #<Set: {1, 2, 3, 4, 5}>
186
- # Set.new([1, 2, 3]) { |x| x * x } #=> #<Set: {1, 4, 9}>
204
+ # Creates a new set containing the elements of the given enumerable object.
205
+ #
206
+ # If a block is given, the elements of enum are preprocessed by the given block.
207
+ #
208
+ # Set.new([1, 2]) #=> Set[1, 2]
209
+ # Set.new([1, 2, 1]) #=> Set[1, 2]
210
+ # Set.new([1, 'c', :s]) #=> Set[1, "c", :s]
211
+ # Set.new(1..5) #=> Set[1, 2, 3, 4, 5]
212
+ # Set.new([1, 2, 3]) { |x| x * x } #=> Set[1, 4, 9]
187
213
  #
188
214
  def initialize: (_Each[A]) -> untyped
189
215
  | [X] (_Each[X]) { (X) -> A } -> untyped
190
216
  | (?nil) -> untyped
191
217
 
192
218
  # <!--
193
- # rdoc-file=lib/set.rb
194
- # - [](*ary)
219
+ # rdoc-file=set.c
220
+ # - Set[*objects] -> new_set
195
221
  # -->
196
- # Creates a new set containing the given objects.
197
- # Set[1, 2] # => #<Set: {1, 2}>
198
- # Set[1, 2, 1] # => #<Set: {1, 2}>
199
- # Set[1, 'c', :s] # => #<Set: {1, "c", :s}>
222
+ # Returns a new Set object populated with the given objects, See Set::new.
200
223
  #
201
224
  def self.[]: [X] (*X) -> Set[X]
202
225
 
203
226
  # <!--
204
- # rdoc-file=lib/set.rb
205
- # - &(enum)
227
+ # rdoc-file=set.c
228
+ # - set & enum -> new_set
206
229
  # -->
207
- # Returns a new set containing elements common to the set and the
208
- # given enumerable object.
209
- # Set[1, 3, 5] & Set[3, 2, 1] #=> #<Set: {3, 1}>
210
- # Set['a', 'b', 'z'] & ['a', 'b', 'c'] #=> #<Set: {"a", "b"}>
230
+ # Returns a new set containing elements common to the set and the given
231
+ # enumerable object.
232
+ #
233
+ # Set[1, 3, 5] & Set[3, 2, 1] #=> Set[3, 1]
234
+ # Set['a', 'b', 'z'] & ['a', 'b', 'c'] #=> Set["a", "b"]
211
235
  #
212
236
  def &: (_Each[A]) -> self
213
237
 
214
- # <!--
215
- # rdoc-file=lib/set.rb
216
- # - intersection(enum)
217
- # -->
238
+ # <!-- rdoc-file=set.c -->
239
+ # Returns a new set containing elements common to the set and the given
240
+ # enumerable object.
241
+ #
242
+ # Set[1, 3, 5] & Set[3, 2, 1] #=> Set[3, 1]
243
+ # Set['a', 'b', 'z'] & ['a', 'b', 'c'] #=> Set["a", "b"]
218
244
  #
219
245
  alias intersection &
220
246
 
221
247
  # <!--
222
- # rdoc-file=lib/set.rb
223
- # - |(enum)
248
+ # rdoc-file=set.c
249
+ # - set | enum -> new_set
224
250
  # -->
225
- # Returns a new set built by merging the set and the elements of the
226
- # given enumerable object.
227
- # Set[1, 2, 3] | Set[2, 4, 5] #=> #<Set: {1, 2, 3, 4, 5}>
228
- # Set[1, 5, 'z'] | (1..6) #=> #<Set: {1, 5, "z", 2, 3, 4, 6}>
251
+ # Returns a new set built by merging the set and the elements of the given
252
+ # enumerable object.
253
+ #
254
+ # Set[1, 2, 3] | Set[2, 4, 5] #=> Set[1, 2, 3, 4, 5]
255
+ # Set[1, 5, 'z'] | (1..6) #=> Set[1, 5, "z", 2, 3, 4, 6]
229
256
  #
230
257
  def |: (_Each[A]) -> self
231
258
 
232
- # <!--
233
- # rdoc-file=lib/set.rb
234
- # - union(enum)
235
- # -->
259
+ # <!-- rdoc-file=set.c -->
260
+ # Returns a new set built by merging the set and the elements of the given
261
+ # enumerable object.
262
+ #
263
+ # Set[1, 2, 3] | Set[2, 4, 5] #=> Set[1, 2, 3, 4, 5]
264
+ # Set[1, 5, 'z'] | (1..6) #=> Set[1, 5, "z", 2, 3, 4, 6]
236
265
  #
237
266
  alias union |
238
267
 
239
- # <!--
240
- # rdoc-file=lib/set.rb
241
- # - +(enum)
242
- # -->
268
+ # <!-- rdoc-file=set.c -->
269
+ # Returns a new set built by merging the set and the elements of the given
270
+ # enumerable object.
271
+ #
272
+ # Set[1, 2, 3] | Set[2, 4, 5] #=> Set[1, 2, 3, 4, 5]
273
+ # Set[1, 5, 'z'] | (1..6) #=> Set[1, 5, "z", 2, 3, 4, 6]
243
274
  #
244
275
  alias + |
245
276
 
246
277
  # <!--
247
- # rdoc-file=lib/set.rb
248
- # - -(enum)
278
+ # rdoc-file=set.c
279
+ # - set - enum -> new_set
249
280
  # -->
250
- # Returns a new set built by duplicating the set, removing every
251
- # element that appears in the given enumerable object.
252
- # Set[1, 3, 5] - Set[1, 5] #=> #<Set: {3}>
253
- # Set['a', 'b', 'z'] - ['a', 'c'] #=> #<Set: {"b", "z"}>
281
+ # Returns a new set built by duplicating the set, removing every element that
282
+ # appears in the given enumerable object.
283
+ #
284
+ # Set[1, 3, 5] - Set[1, 5] #=> Set[3]
285
+ # Set['a', 'b', 'z'] - ['a', 'c'] #=> Set["b", "z"]
254
286
  #
255
287
  def -: (_Each[A]) -> self
256
288
 
257
- # <!--
258
- # rdoc-file=lib/set.rb
259
- # - difference(enum)
260
- # -->
289
+ # <!-- rdoc-file=set.c -->
290
+ # Returns a new set built by duplicating the set, removing every element that
291
+ # appears in the given enumerable object.
292
+ #
293
+ # Set[1, 3, 5] - Set[1, 5] #=> Set[3]
294
+ # Set['a', 'b', 'z'] - ['a', 'c'] #=> Set["b", "z"]
261
295
  #
262
296
  alias difference -
263
297
 
264
298
  # <!--
265
- # rdoc-file=lib/set.rb
266
- # - add(o)
299
+ # rdoc-file=set.c
300
+ # - add(obj) -> self
267
301
  # -->
268
- # Adds the given object to the set and returns self. Use `merge` to
269
- # add many elements at once.
270
- # Set[1, 2].add(3) #=> #<Set: {1, 2, 3}>
271
- # Set[1, 2].add([3, 4]) #=> #<Set: {1, 2, [3, 4]}>
272
- # Set[1, 2].add(2) #=> #<Set: {1, 2}>
302
+ # Adds the given object to the set and returns self. Use `merge` to add many
303
+ # elements at once.
304
+ #
305
+ # Set[1, 2].add(3) #=> Set[1, 2, 3]
306
+ # Set[1, 2].add([3, 4]) #=> Set[1, 2, [3, 4]]
307
+ # Set[1, 2].add(2) #=> Set[1, 2]
273
308
  #
274
309
  def add: (A) -> self
275
310
 
276
- # <!--
277
- # rdoc-file=lib/set.rb
278
- # - <<(o)
279
- # -->
311
+ # <!-- rdoc-file=set.c -->
312
+ # Adds the given object to the set and returns self. Use `merge` to add many
313
+ # elements at once.
314
+ #
315
+ # Set[1, 2].add(3) #=> Set[1, 2, 3]
316
+ # Set[1, 2].add([3, 4]) #=> Set[1, 2, [3, 4]]
317
+ # Set[1, 2].add(2) #=> Set[1, 2]
280
318
  #
281
319
  alias << add
282
320
 
283
321
  # <!--
284
- # rdoc-file=lib/set.rb
285
- # - add?(o)
322
+ # rdoc-file=set.c
323
+ # - add?(obj) -> self or nil
286
324
  # -->
287
- # Adds the given object to the set and returns self. If the
288
- # object is already in the set, returns nil.
289
- # Set[1, 2].add?(3) #=> #<Set: {1, 2, 3}>
290
- # Set[1, 2].add?([3, 4]) #=> #<Set: {1, 2, [3, 4]}>
325
+ # Adds the given object to the set and returns self. If the object is already in
326
+ # the set, returns nil.
327
+ #
328
+ # Set[1, 2].add?(3) #=> Set[1, 2, 3]
329
+ # Set[1, 2].add?([3, 4]) #=> Set[1, 2, [3, 4]]
291
330
  # Set[1, 2].add?(2) #=> nil
292
331
  #
293
332
  def add?: (A) -> self?
294
333
 
295
334
  # <!--
296
- # rdoc-file=lib/set.rb
297
- # - include?(o)
335
+ # rdoc-file=set.c
336
+ # - include?(item) -> true or false
298
337
  # -->
299
- # Returns true if the set contains the given object.
300
- # Note that `include?` and `member?` do not test member
301
- # equality using `==` as do other Enumerables.
338
+ # Returns true if the set contains the given object:
339
+ #
340
+ # Set[1, 2, 3].include? 2 #=> true
341
+ # Set[1, 2, 3].include? 4 #=> false
342
+ #
343
+ # Note that `include?` and `member?` do not test member equality using `==` as
344
+ # do other Enumerables.
345
+ #
346
+ # This is aliased to #===, so it is usable in `case` expressions:
347
+ #
348
+ # case :apple
349
+ # when Set[:potato, :carrot]
350
+ # "vegetable"
351
+ # when Set[:apple, :banana]
352
+ # "fruit"
353
+ # end
354
+ # # => "fruit"
355
+ #
302
356
  # See also Enumerable#include?
303
357
  #
304
358
  def include?: (A) -> bool
305
359
 
306
- # <!--
307
- # rdoc-file=lib/set.rb
308
- # - member?(o)
309
- # -->
360
+ # <!-- rdoc-file=set.c -->
361
+ # Returns true if the set contains the given object:
362
+ #
363
+ # Set[1, 2, 3].include? 2 #=> true
364
+ # Set[1, 2, 3].include? 4 #=> false
365
+ #
366
+ # Note that `include?` and `member?` do not test member equality using `==` as
367
+ # do other Enumerables.
368
+ #
369
+ # This is aliased to #===, so it is usable in `case` expressions:
370
+ #
371
+ # case :apple
372
+ # when Set[:potato, :carrot]
373
+ # "vegetable"
374
+ # when Set[:apple, :banana]
375
+ # "fruit"
376
+ # end
377
+ # # => "fruit"
378
+ #
379
+ # See also Enumerable#include?
310
380
  #
311
381
  alias member? include?
312
382
 
313
383
  # <!--
314
- # rdoc-file=lib/set.rb
315
- # - ^(enum)
384
+ # rdoc-file=set.c
385
+ # - set ^ enum -> new_set
316
386
  # -->
317
- # Returns a new set containing elements exclusive between the set
318
- # and the given enumerable object. `(set ^ enum)` is equivalent to
319
- # `((set | enum) - (set & enum))`.
320
- # Set[1, 2] ^ Set[2, 3] #=> #<Set: {3, 1}>
321
- # Set[1, 'b', 'c'] ^ ['b', 'd'] #=> #<Set: {"d", 1, "c"}>
387
+ # Returns a new set containing elements exclusive between the set and the given
388
+ # enumerable object. `(set ^ enum)` is equivalent to `((set | enum) - (set &
389
+ # enum))`.
390
+ #
391
+ # Set[1, 2] ^ Set[2, 3] #=> Set[3, 1]
392
+ # Set[1, 'b', 'c'] ^ ['b', 'd'] #=> Set["d", 1, "c"]
322
393
  #
323
394
  def ^: (_Each[A]) -> self
324
395
 
325
396
  # <!--
326
- # rdoc-file=lib/set.rb
327
- # - classify() { |o| ... }
397
+ # rdoc-file=set.c
398
+ # - classify { |o| ... } -> hash
399
+ # - classify -> enumerator
328
400
  # -->
329
- # Classifies the set by the return value of the given block and
330
- # returns a hash of {value => set of elements} pairs. The block is
331
- # called once for each element of the set, passing the element as
332
- # parameter.
333
- # require 'set'
401
+ # Classifies the set by the return value of the given block and returns a hash
402
+ # of {value => set of elements} pairs. The block is called once for each
403
+ # element of the set, passing the element as parameter.
404
+ #
334
405
  # files = Set.new(Dir.glob("*.rb"))
335
406
  # hash = files.classify { |f| File.mtime(f).year }
336
- # hash #=> {2000=>#<Set: {"a.rb", "b.rb"}>,
337
- # # 2001=>#<Set: {"c.rb", "d.rb", "e.rb"}>,
338
- # # 2002=>#<Set: {"f.rb"}>}
407
+ # hash #=> {2000 => Set["a.rb", "b.rb"],
408
+ # # 2001 => Set["c.rb", "d.rb", "e.rb"],
409
+ # # 2002 => Set["f.rb"]}
339
410
  #
340
411
  # Returns an enumerator if no block is given.
341
412
  #
342
413
  def classify: [X] () { (A) -> X } -> Hash[X, self]
343
414
 
344
415
  # <!--
345
- # rdoc-file=lib/set.rb
346
- # - clear()
416
+ # rdoc-file=set.c
417
+ # - clear -> self
347
418
  # -->
348
419
  # Removes all elements and returns self.
349
- # set = Set[1, 'c', :s] #=> #<Set: {1, "c", :s}>
350
- # set.clear #=> #<Set: {}>
351
- # set #=> #<Set: {}>
420
+ #
421
+ # set = Set[1, 'c', :s] #=> Set[1, "c", :s]
422
+ # set.clear #=> Set[]
423
+ # set #=> Set[]
352
424
  #
353
425
  def clear: () -> self
354
426
 
355
427
  # <!--
356
- # rdoc-file=lib/set.rb
357
- # - collect!() { |o| ... }
428
+ # rdoc-file=set.c
429
+ # - collect! { |o| ... } -> self
430
+ # - collect! -> enumerator
358
431
  # -->
359
- # Replaces the elements with ones returned by `collect()`.
360
- # Returns an enumerator if no block is given.
432
+ # Replaces the elements with ones returned by `collect`. Returns an enumerator
433
+ # if no block is given.
361
434
  #
362
435
  def collect!: () { (A) -> A } -> self
363
436
 
364
- # <!--
365
- # rdoc-file=lib/set.rb
366
- # - map!()
367
- # -->
437
+ # <!-- rdoc-file=set.c -->
438
+ # Replaces the elements with ones returned by `collect`. Returns an enumerator
439
+ # if no block is given.
368
440
  #
369
441
  alias map! collect!
370
442
 
371
443
  # <!--
372
- # rdoc-file=lib/set.rb
373
- # - delete(o)
444
+ # rdoc-file=set.c
445
+ # - delete(obj) -> self
374
446
  # -->
375
- # Deletes the given object from the set and returns self. Use
376
- # `subtract` to delete many items at once.
447
+ # Deletes the given object from the set and returns self. Use subtract to delete
448
+ # many items at once.
377
449
  #
378
450
  def delete: (A) -> self
379
451
 
380
452
  # <!--
381
- # rdoc-file=lib/set.rb
382
- # - delete?(o)
453
+ # rdoc-file=set.c
454
+ # - delete?(obj) -> self or nil
383
455
  # -->
384
- # Deletes the given object from the set and returns self. If the
385
- # object is not in the set, returns nil.
456
+ # Deletes the given object from the set and returns self. If the object is not
457
+ # in the set, returns nil.
386
458
  #
387
459
  def delete?: (A) -> self?
388
460
 
389
461
  # <!--
390
- # rdoc-file=lib/set.rb
391
- # - delete_if(&block)
462
+ # rdoc-file=set.c
463
+ # - delete_if { |o| ... } -> self
464
+ # - delete_if -> enumerator
392
465
  # -->
393
- # Deletes every element of the set for which block evaluates to
394
- # true, and returns self. Returns an enumerator if no block is
395
- # given.
466
+ # Deletes every element of the set for which block evaluates to true, and
467
+ # returns self. Returns an enumerator if no block is given.
396
468
  #
397
469
  def delete_if: () { (A) -> untyped } -> self
398
470
 
399
471
  # <!--
400
- # rdoc-file=lib/set.rb
401
- # - reject!(&block)
472
+ # rdoc-file=set.c
473
+ # - reject! { |o| ... } -> self
474
+ # - reject! -> enumerator
402
475
  # -->
403
- # Equivalent to Set#delete_if, but returns nil if no changes were
404
- # made. Returns an enumerator if no block is given.
476
+ # Equivalent to Set#delete_if, but returns nil if no changes were made. Returns
477
+ # an enumerator if no block is given.
405
478
  #
406
479
  def reject!: () { (A) -> untyped } -> self?
407
480
 
408
481
  # <!--
409
- # rdoc-file=lib/set.rb
410
- # - compare_by_identity()
482
+ # rdoc-file=set.c
483
+ # - compare_by_identity -> self
411
484
  # -->
412
- # Makes the set compare its elements by their identity and returns
413
- # self. This method may not be supported by all subclasses of Set.
485
+ # Makes the set compare its elements by their identity and returns self.
414
486
  #
415
487
  def compare_by_identity: () -> self
416
488
 
417
489
  # <!--
418
- # rdoc-file=lib/set.rb
419
- # - disjoint?(set)
490
+ # rdoc-file=set.c
491
+ # - compare_by_identity? -> true or false
420
492
  # -->
421
- # Returns true if the set and the given enumerable have
422
- # no element in common. This method is the opposite of `intersect?`.
493
+ # Returns true if the set will compare its elements by their identity. Also see
494
+ # Set#compare_by_identity.
495
+ #
496
+ def compare_by_identity?: () -> bool
497
+
498
+ # <!--
499
+ # rdoc-file=set.c
500
+ # - disjoint?(set) -> true or false
501
+ # -->
502
+ # Returns true if the set and the given enumerable have no element in common.
503
+ # This method is the opposite of `intersect?`.
504
+ #
423
505
  # Set[1, 2, 3].disjoint? Set[3, 4] #=> false
424
506
  # Set[1, 2, 3].disjoint? Set[4, 5] #=> true
425
507
  # Set[1, 2, 3].disjoint? [3, 4] #=> false
@@ -428,21 +510,24 @@ class Set[unchecked out A]
428
510
  def disjoint?: (Set[A] | Enumerable[A]) -> bool
429
511
 
430
512
  # <!--
431
- # rdoc-file=lib/set.rb
432
- # - divide(&func)
513
+ # rdoc-file=set.c
514
+ # - divide { |o1, o2| ... } -> set
515
+ # - divide { |o| ... } -> set
516
+ # - divide -> enumerator
433
517
  # -->
434
- # Divides the set into a set of subsets according to the commonality
435
- # defined by the given block.
436
- # If the arity of the block is 2, elements o1 and o2 are in common
437
- # if block.call(o1, o2) is true. Otherwise, elements o1 and o2 are
438
- # in common if block.call(o1) == block.call(o2).
439
- # require 'set'
518
+ # Divides the set into a set of subsets according to the commonality defined by
519
+ # the given block.
520
+ #
521
+ # If the arity of the block is 2, elements o1 and o2 are in common if both
522
+ # block.call(o1, o2) and block.call(o2, o1) are true. Otherwise, elements o1 and
523
+ # o2 are in common if block.call(o1) == block.call(o2).
524
+ #
440
525
  # numbers = Set[1, 3, 4, 6, 9, 10, 11]
441
526
  # set = numbers.divide { |i,j| (i - j).abs == 1 }
442
- # set #=> #<Set: {#<Set: {1}>,
443
- # # #<Set: {11, 9, 10}>,
444
- # # #<Set: {3, 4}>,
445
- # # #<Set: {6}>}>
527
+ # set #=> Set[Set[1],
528
+ # # Set[3, 4],
529
+ # # Set[6],
530
+ # # Set[9, 10, 11]]
446
531
  #
447
532
  # Returns an enumerator if no block is given.
448
533
  #
@@ -450,39 +535,49 @@ class Set[unchecked out A]
450
535
  | () { (A) -> Hash::_Key } -> Set[self]
451
536
 
452
537
  # <!--
453
- # rdoc-file=lib/set.rb
454
- # - each(&block)
538
+ # rdoc-file=set.c
539
+ # - each { |o| ... } -> self
540
+ # - each -> enumerator
455
541
  # -->
456
- # Calls the given block once for each element in the set, passing
457
- # the element as parameter. Returns an enumerator if no block is
458
- # given.
542
+ # Calls the given block once for each element in the set, passing the element as
543
+ # parameter. Returns an enumerator if no block is given.
459
544
  #
460
545
  def each: () { (A) -> void } -> self
461
546
  | () -> Enumerator[A, self]
462
547
 
463
548
  # <!--
464
- # rdoc-file=lib/set.rb
465
- # - empty?()
549
+ # rdoc-file=set.c
550
+ # - empty? -> true or false
466
551
  # -->
467
552
  # Returns true if the set contains no elements.
468
553
  #
469
554
  def empty?: () -> bool
470
555
 
471
556
  # <!--
472
- # rdoc-file=lib/set.rb
473
- # - flatten()
557
+ # rdoc-file=set.c
558
+ # - flatten -> set
474
559
  # -->
475
- # Returns a new set that is a copy of the set, flattening each
476
- # containing set recursively.
560
+ # Returns a new set that is a copy of the set, flattening each containing set
561
+ # recursively.
477
562
  #
478
563
  def flatten: () -> Set[untyped]
479
564
 
480
565
  # <!--
481
- # rdoc-file=lib/set.rb
482
- # - intersect?(set)
566
+ # rdoc-file=set.c
567
+ # - flatten! -> self
568
+ # -->
569
+ # Equivalent to Set#flatten, but replaces the receiver with the result in place.
570
+ # Returns nil if no modifications were made.
571
+ #
572
+ def flatten!: () -> self?
573
+
574
+ # <!--
575
+ # rdoc-file=set.c
576
+ # - intersect?(set) -> true or false
483
577
  # -->
484
- # Returns true if the set and the given enumerable have at least one
485
- # element in common.
578
+ # Returns true if the set and the given enumerable have at least one element in
579
+ # common.
580
+ #
486
581
  # Set[1, 2, 3].intersect? Set[4, 5] #=> false
487
582
  # Set[1, 2, 3].intersect? Set[3, 4] #=> true
488
583
  # Set[1, 2, 3].intersect? 4..5 #=> false
@@ -491,130 +586,164 @@ class Set[unchecked out A]
491
586
  def intersect?: (Set[A] | Enumerable[A]) -> bool
492
587
 
493
588
  # <!--
494
- # rdoc-file=lib/set.rb
495
- # - keep_if(&block)
589
+ # rdoc-file=set.c
590
+ # - keep_if { |o| ... } -> self
591
+ # - keep_if -> enumerator
496
592
  # -->
497
- # Deletes every element of the set for which block evaluates to
498
- # false, and returns self. Returns an enumerator if no block is
499
- # given.
593
+ # Deletes every element of the set for which block evaluates to false, and
594
+ # returns self. Returns an enumerator if no block is given.
500
595
  #
501
596
  def keep_if: () { (A) -> untyped } -> self
502
597
 
503
598
  # <!--
504
- # rdoc-file=lib/set.rb
505
- # - size()
599
+ # rdoc-file=set.c
600
+ # - size -> integer
506
601
  # -->
507
602
  # Returns the number of elements.
508
603
  #
509
604
  def size: () -> Integer
510
605
 
511
- # <!--
512
- # rdoc-file=lib/set.rb
513
- # - length()
514
- # -->
606
+ # <!-- rdoc-file=set.c -->
607
+ # Returns the number of elements.
515
608
  #
516
609
  alias length size
517
610
 
518
611
  # <!--
519
- # rdoc-file=lib/set.rb
520
- # - merge(*enums, **nil)
612
+ # rdoc-file=set.c
613
+ # - merge(*enums, **nil) -> self
521
614
  # -->
522
- # Merges the elements of the given enumerable objects to the set and
523
- # returns self.
615
+ # Merges the elements of the given enumerable objects to the set and returns
616
+ # self.
524
617
  #
525
618
  def merge: (*_Each[A]) -> self
526
619
 
527
620
  # <!--
528
- # rdoc-file=lib/set.rb
529
- # - subset?(set)
621
+ # rdoc-file=set.c
622
+ # - subset?(set) -> true or false
530
623
  # -->
531
624
  # Returns true if the set is a subset of the given set.
532
625
  #
533
626
  def subset?: (self) -> bool
534
627
 
628
+ # <!-- rdoc-file=set.c -->
629
+ # Returns true if the set is a subset of the given set.
630
+ #
631
+ alias <= subset?
632
+
535
633
  # <!--
536
- # rdoc-file=lib/set.rb
537
- # - proper_subset?(set)
634
+ # rdoc-file=set.c
635
+ # - proper_subset?(set) -> true or false
538
636
  # -->
539
637
  # Returns true if the set is a proper subset of the given set.
540
638
  #
541
639
  def proper_subset?: (self) -> bool
542
640
 
641
+ # <!-- rdoc-file=set.c -->
642
+ # Returns true if the set is a proper subset of the given set.
643
+ #
644
+ alias < proper_subset?
645
+
543
646
  # <!--
544
- # rdoc-file=lib/set.rb
545
- # - superset?(set)
647
+ # rdoc-file=set.c
648
+ # - superset?(set) -> true or false
546
649
  # -->
547
650
  # Returns true if the set is a superset of the given set.
548
651
  #
549
652
  def superset?: (self) -> bool
550
653
 
654
+ # <!-- rdoc-file=set.c -->
655
+ # Returns true if the set is a superset of the given set.
656
+ #
657
+ alias >= superset?
658
+
551
659
  # <!--
552
- # rdoc-file=lib/set.rb
553
- # - proper_superset?(set)
660
+ # rdoc-file=set.c
661
+ # - proper_superset?(set) -> true or false
554
662
  # -->
555
663
  # Returns true if the set is a proper superset of the given set.
556
664
  #
557
665
  def proper_superset?: (self) -> bool
558
666
 
667
+ # <!-- rdoc-file=set.c -->
668
+ # Returns true if the set is a proper superset of the given set.
669
+ #
670
+ alias > proper_superset?
671
+
559
672
  # <!--
560
- # rdoc-file=lib/set.rb
561
- # - replace(enum)
673
+ # rdoc-file=set.c
674
+ # - replace(enum) -> self
562
675
  # -->
563
- # Replaces the contents of the set with the contents of the given
564
- # enumerable object and returns self.
565
- # set = Set[1, 'c', :s] #=> #<Set: {1, "c", :s}>
566
- # set.replace([1, 2]) #=> #<Set: {1, 2}>
567
- # set #=> #<Set: {1, 2}>
676
+ # Replaces the contents of the set with the contents of the given enumerable
677
+ # object and returns self.
678
+ #
679
+ # set = Set[1, 'c', :s] #=> Set[1, "c", :s]
680
+ # set.replace([1, 2]) #=> Set[1, 2]
681
+ # set #=> Set[1, 2]
568
682
  #
569
683
  def replace: (_Each[A]) -> self
570
684
 
571
685
  # <!--
572
- # rdoc-file=lib/set.rb
573
- # - reset()
686
+ # rdoc-file=set.c
687
+ # - reset -> self
574
688
  # -->
575
- # Resets the internal state after modification to existing elements
576
- # and returns self.
577
- # Elements will be reindexed and deduplicated.
689
+ # Resets the internal state after modification to existing elements and returns
690
+ # self. Elements will be reindexed and deduplicated.
578
691
  #
579
692
  def reset: () -> self
580
693
 
581
694
  # <!--
582
- # rdoc-file=lib/set.rb
583
- # - select!(&block)
695
+ # rdoc-file=set.c
696
+ # - select! { |o| ... } -> self
697
+ # - select! -> enumerator
584
698
  # -->
585
- # Equivalent to Set#keep_if, but returns nil if no changes were
586
- # made. Returns an enumerator if no block is given.
699
+ # Equivalent to Set#keep_if, but returns nil if no changes were made. Returns an
700
+ # enumerator if no block is given.
587
701
  #
588
702
  def select!: () { (A) -> untyped } -> self?
589
703
 
704
+ # <!-- rdoc-file=set.c -->
705
+ # Equivalent to Set#keep_if, but returns nil if no changes were made. Returns an
706
+ # enumerator if no block is given.
707
+ #
708
+ alias filter! select!
709
+
590
710
  # <!--
591
- # rdoc-file=lib/set.rb
592
- # - subtract(enum)
711
+ # rdoc-file=set.c
712
+ # - subtract(enum) -> self
593
713
  # -->
594
- # Deletes every element that appears in the given enumerable object
595
- # and returns self.
714
+ # Deletes every element that appears in the given enumerable object and returns
715
+ # self.
596
716
  #
597
717
  def subtract: (_Each[A]) -> self
598
718
 
599
719
  # <!--
600
- # rdoc-file=lib/set.rb
601
- # - to_a()
720
+ # rdoc-file=set.c
721
+ # - to_a -> array
602
722
  # -->
603
723
  # Returns an array containing all elements in the set.
724
+ #
604
725
  # Set[1, 2].to_a #=> [1, 2]
605
726
  # Set[1, 'c', :s].to_a #=> [1, "c", :s]
606
727
  #
607
728
  def to_a: () -> Array[A]
729
+
730
+ # <!--
731
+ # rdoc-file=set.c
732
+ # - join(separator=nil)-> new_string
733
+ # -->
734
+ # Returns a string created by converting each element of the set to a string.
735
+ #
736
+ def join: (?string separator) -> String
608
737
  end
609
738
 
610
739
  %a{annotate:rdoc:skip}
611
740
  module Enumerable[unchecked out Elem]
612
741
  # <!--
613
- # rdoc-file=lib/set.rb
614
- # - to_set(klass = Set, *args, &block)
742
+ # rdoc-file=prelude.rb
743
+ # - to_set(*args, &block)
615
744
  # -->
616
- # Makes a set from the enumerable object with given arguments.
617
- # Needs to `require "set"` to use this method.
745
+ # Makes a set from the enumerable object with given arguments. Passing arguments
746
+ # to this method is deprecated.
618
747
  #
619
748
  def to_set: () -> Set[Elem]
620
749
  | [T] () { (Elem) -> T } -> Set[T]