steep 0.14.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/exe/rbs +1 -1
  4. data/lib/steep/annotation_parser.rb +4 -4
  5. data/lib/steep/ast/buffer.rb +11 -7
  6. data/lib/steep/ast/builtin.rb +8 -0
  7. data/lib/steep/ast/types/factory.rb +55 -55
  8. data/lib/steep/drivers/check.rb +20 -4
  9. data/lib/steep/drivers/langserver.rb +6 -1
  10. data/lib/steep/drivers/vendor.rb +2 -2
  11. data/lib/steep/project/completion_provider.rb +5 -11
  12. data/lib/steep/project/dsl.rb +14 -0
  13. data/lib/steep/project/file.rb +42 -46
  14. data/lib/steep/project/hover_content.rb +11 -5
  15. data/lib/steep/project/options.rb +25 -3
  16. data/lib/steep/project/target.rb +10 -4
  17. data/lib/steep/signature/errors.rb +1 -1
  18. data/lib/steep/signature/validator.rb +8 -8
  19. data/lib/steep/source.rb +1 -1
  20. data/lib/steep/type_construction.rb +987 -711
  21. data/lib/steep/type_inference/constant_env.rb +1 -1
  22. data/lib/steep/type_inference/context.rb +7 -3
  23. data/lib/steep/type_inference/context_array.rb +111 -0
  24. data/lib/steep/type_inference/local_variable_type_env.rb +226 -0
  25. data/lib/steep/type_inference/logic.rb +130 -0
  26. data/lib/steep/type_inference/type_env.rb +5 -69
  27. data/lib/steep/typing.rb +79 -22
  28. data/lib/steep/version.rb +1 -1
  29. data/lib/steep.rb +6 -1
  30. data/smoke/alias/Steepfile +1 -0
  31. data/smoke/and/Steepfile +1 -0
  32. data/smoke/array/Steepfile +1 -0
  33. data/smoke/array/b.rb +0 -2
  34. data/smoke/block/Steepfile +1 -0
  35. data/smoke/case/Steepfile +1 -0
  36. data/smoke/class/Steepfile +1 -0
  37. data/smoke/const/Steepfile +1 -0
  38. data/smoke/dstr/Steepfile +1 -0
  39. data/smoke/ensure/Steepfile +1 -0
  40. data/smoke/enumerator/Steepfile +1 -0
  41. data/smoke/extension/Steepfile +1 -0
  42. data/smoke/extension/c.rb +1 -0
  43. data/smoke/hash/Steepfile +1 -0
  44. data/smoke/hello/Steepfile +1 -0
  45. data/smoke/if/Steepfile +1 -0
  46. data/smoke/if/a.rb +1 -1
  47. data/smoke/implements/Steepfile +1 -0
  48. data/smoke/initialize/Steepfile +1 -0
  49. data/smoke/integer/Steepfile +1 -0
  50. data/smoke/interface/Steepfile +1 -0
  51. data/smoke/kwbegin/Steepfile +1 -0
  52. data/smoke/lambda/Steepfile +1 -0
  53. data/smoke/literal/Steepfile +1 -0
  54. data/smoke/map/Steepfile +1 -0
  55. data/smoke/method/Steepfile +1 -0
  56. data/smoke/module/Steepfile +1 -0
  57. data/smoke/regexp/Steepfile +1 -0
  58. data/smoke/regression/Steepfile +1 -0
  59. data/smoke/rescue/Steepfile +1 -0
  60. data/smoke/rescue/a.rb +1 -1
  61. data/smoke/self/Steepfile +1 -0
  62. data/smoke/skip/Steepfile +1 -0
  63. data/smoke/stdout/Steepfile +1 -0
  64. data/smoke/super/Steepfile +1 -0
  65. data/smoke/type_case/Steepfile +1 -0
  66. data/smoke/yield/Steepfile +1 -0
  67. data/steep.gemspec +1 -1
  68. data/vendor/ruby-signature/.gitignore +2 -2
  69. data/vendor/ruby-signature/README.md +2 -2
  70. data/vendor/ruby-signature/Rakefile +2 -2
  71. data/vendor/ruby-signature/bin/annotate-with-rdoc +14 -13
  72. data/vendor/ruby-signature/bin/console +1 -1
  73. data/vendor/ruby-signature/bin/sort +7 -6
  74. data/vendor/ruby-signature/bin/test_runner.rb +0 -1
  75. data/vendor/ruby-signature/docs/CONTRIBUTING.md +1 -1
  76. data/vendor/ruby-signature/docs/sigs.md +3 -3
  77. data/vendor/ruby-signature/docs/stdlib.md +1 -1
  78. data/vendor/ruby-signature/docs/syntax.md +9 -9
  79. data/vendor/ruby-signature/exe/rbs +5 -1
  80. data/vendor/ruby-signature/lib/rbs/ast/annotation.rb +27 -0
  81. data/vendor/ruby-signature/lib/rbs/ast/comment.rb +27 -0
  82. data/vendor/ruby-signature/lib/rbs/ast/declarations.rb +395 -0
  83. data/vendor/ruby-signature/lib/rbs/ast/members.rb +362 -0
  84. data/vendor/ruby-signature/lib/rbs/buffer.rb +50 -0
  85. data/vendor/ruby-signature/lib/rbs/builtin_names.rb +55 -0
  86. data/vendor/ruby-signature/lib/rbs/cli.rb +558 -0
  87. data/vendor/ruby-signature/lib/rbs/constant.rb +26 -0
  88. data/vendor/ruby-signature/lib/rbs/constant_table.rb +150 -0
  89. data/vendor/ruby-signature/lib/rbs/definition.rb +170 -0
  90. data/vendor/ruby-signature/lib/rbs/definition_builder.rb +919 -0
  91. data/vendor/ruby-signature/lib/rbs/environment.rb +281 -0
  92. data/vendor/ruby-signature/lib/rbs/environment_loader.rb +136 -0
  93. data/vendor/ruby-signature/lib/rbs/environment_walker.rb +124 -0
  94. data/vendor/ruby-signature/lib/rbs/errors.rb +187 -0
  95. data/vendor/ruby-signature/lib/rbs/location.rb +102 -0
  96. data/vendor/ruby-signature/lib/rbs/method_type.rb +123 -0
  97. data/vendor/ruby-signature/lib/rbs/namespace.rb +91 -0
  98. data/vendor/ruby-signature/lib/{ruby/signature → rbs}/parser.rb +21 -23
  99. data/vendor/ruby-signature/lib/{ruby/signature → rbs}/parser.y +18 -18
  100. data/vendor/ruby-signature/lib/rbs/prototype/rb.rb +553 -0
  101. data/vendor/ruby-signature/lib/rbs/prototype/rbi.rb +587 -0
  102. data/vendor/ruby-signature/lib/rbs/prototype/runtime.rb +381 -0
  103. data/vendor/ruby-signature/lib/rbs/substitution.rb +46 -0
  104. data/vendor/ruby-signature/lib/rbs/test/errors.rb +61 -0
  105. data/vendor/ruby-signature/lib/rbs/test/hook.rb +294 -0
  106. data/vendor/ruby-signature/lib/{ruby/signature → rbs}/test/setup.rb +7 -7
  107. data/vendor/ruby-signature/lib/rbs/test/spy.rb +325 -0
  108. data/vendor/ruby-signature/lib/rbs/test/test_helper.rb +183 -0
  109. data/vendor/ruby-signature/lib/rbs/test/type_check.rb +254 -0
  110. data/vendor/ruby-signature/lib/rbs/test.rb +26 -0
  111. data/vendor/ruby-signature/lib/rbs/type_name.rb +70 -0
  112. data/vendor/ruby-signature/lib/rbs/types.rb +936 -0
  113. data/vendor/ruby-signature/lib/rbs/variance_calculator.rb +138 -0
  114. data/vendor/ruby-signature/lib/rbs/vendorer.rb +47 -0
  115. data/vendor/ruby-signature/lib/rbs/version.rb +3 -0
  116. data/vendor/ruby-signature/lib/rbs/writer.rb +269 -0
  117. data/vendor/ruby-signature/lib/rbs.rb +64 -0
  118. data/vendor/ruby-signature/lib/ruby/signature.rb +4 -61
  119. data/vendor/ruby-signature/{ruby-signature.gemspec → rbs.gemspec} +4 -4
  120. data/vendor/ruby-signature/stdlib/abbrev/abbrev.rbs +58 -1
  121. data/vendor/ruby-signature/stdlib/base64/base64.rbs +69 -13
  122. data/vendor/ruby-signature/stdlib/benchmark/benchmark.rbs +372 -0
  123. data/vendor/ruby-signature/stdlib/builtin/builtin.rbs +9 -0
  124. data/vendor/ruby-signature/stdlib/builtin/dir.rbs +1 -7
  125. data/vendor/ruby-signature/stdlib/builtin/encoding.rbs +2 -1
  126. data/vendor/ruby-signature/stdlib/builtin/exception.rbs +3 -2
  127. data/vendor/ruby-signature/stdlib/builtin/file.rbs +902 -302
  128. data/vendor/ruby-signature/stdlib/builtin/gc.rbs +190 -68
  129. data/vendor/ruby-signature/stdlib/builtin/integer.rbs +3 -6
  130. data/vendor/ruby-signature/stdlib/builtin/kernel.rbs +6 -4
  131. data/vendor/ruby-signature/stdlib/builtin/marshal.rbs +146 -120
  132. data/vendor/ruby-signature/stdlib/builtin/math.rbs +310 -7
  133. data/vendor/ruby-signature/stdlib/builtin/method.rbs +11 -8
  134. data/vendor/ruby-signature/stdlib/builtin/module.rbs +959 -103
  135. data/vendor/ruby-signature/stdlib/builtin/proc.rbs +3 -0
  136. data/vendor/ruby-signature/stdlib/builtin/process.rbs +981 -108
  137. data/vendor/ruby-signature/stdlib/builtin/random.rbs +215 -41
  138. data/vendor/ruby-signature/stdlib/builtin/rb_config.rbs +47 -0
  139. data/vendor/ruby-signature/stdlib/builtin/string.rbs +9 -2
  140. data/vendor/ruby-signature/stdlib/builtin/string_io.rbs +282 -11
  141. data/vendor/ruby-signature/stdlib/builtin/symbol.rbs +11 -13
  142. data/vendor/ruby-signature/stdlib/builtin/thread.rbs +25 -29
  143. data/vendor/ruby-signature/stdlib/builtin/thread_group.rbs +1 -1
  144. data/vendor/ruby-signature/stdlib/builtin/time.rbs +875 -567
  145. data/vendor/ruby-signature/stdlib/builtin/trace_point.rbs +243 -44
  146. data/vendor/ruby-signature/stdlib/builtin/unbound_method.rbs +103 -109
  147. data/vendor/ruby-signature/stdlib/coverage/coverage.rbs +62 -0
  148. data/vendor/ruby-signature/stdlib/csv/csv.rbs +773 -0
  149. data/vendor/ruby-signature/stdlib/erb/erb.rbs +375 -1
  150. data/vendor/ruby-signature/stdlib/find/find.rbs +0 -4
  151. data/vendor/ruby-signature/stdlib/ipaddr/ipaddr.rbs +247 -0
  152. data/vendor/ruby-signature/stdlib/pathname/pathname.rbs +1088 -16
  153. data/vendor/ruby-signature/stdlib/set/set.rbs +251 -27
  154. metadata +49 -44
  155. data/exe/ruby-signature +0 -3
  156. data/vendor/ruby-signature/exe/ruby-signature +0 -7
  157. data/vendor/ruby-signature/lib/ruby/signature/ast/annotation.rb +0 -29
  158. data/vendor/ruby-signature/lib/ruby/signature/ast/comment.rb +0 -29
  159. data/vendor/ruby-signature/lib/ruby/signature/ast/declarations.rb +0 -391
  160. data/vendor/ruby-signature/lib/ruby/signature/ast/members.rb +0 -364
  161. data/vendor/ruby-signature/lib/ruby/signature/buffer.rb +0 -52
  162. data/vendor/ruby-signature/lib/ruby/signature/builtin_names.rb +0 -54
  163. data/vendor/ruby-signature/lib/ruby/signature/cli.rb +0 -555
  164. data/vendor/ruby-signature/lib/ruby/signature/constant.rb +0 -28
  165. data/vendor/ruby-signature/lib/ruby/signature/constant_table.rb +0 -152
  166. data/vendor/ruby-signature/lib/ruby/signature/definition.rb +0 -172
  167. data/vendor/ruby-signature/lib/ruby/signature/definition_builder.rb +0 -921
  168. data/vendor/ruby-signature/lib/ruby/signature/environment.rb +0 -283
  169. data/vendor/ruby-signature/lib/ruby/signature/environment_loader.rb +0 -138
  170. data/vendor/ruby-signature/lib/ruby/signature/environment_walker.rb +0 -126
  171. data/vendor/ruby-signature/lib/ruby/signature/errors.rb +0 -189
  172. data/vendor/ruby-signature/lib/ruby/signature/location.rb +0 -104
  173. data/vendor/ruby-signature/lib/ruby/signature/method_type.rb +0 -125
  174. data/vendor/ruby-signature/lib/ruby/signature/namespace.rb +0 -93
  175. data/vendor/ruby-signature/lib/ruby/signature/prototype/rb.rb +0 -444
  176. data/vendor/ruby-signature/lib/ruby/signature/prototype/rbi.rb +0 -579
  177. data/vendor/ruby-signature/lib/ruby/signature/prototype/runtime.rb +0 -383
  178. data/vendor/ruby-signature/lib/ruby/signature/substitution.rb +0 -48
  179. data/vendor/ruby-signature/lib/ruby/signature/test/errors.rb +0 -63
  180. data/vendor/ruby-signature/lib/ruby/signature/test/hook.rb +0 -290
  181. data/vendor/ruby-signature/lib/ruby/signature/test/spy.rb +0 -327
  182. data/vendor/ruby-signature/lib/ruby/signature/test/test_helper.rb +0 -185
  183. data/vendor/ruby-signature/lib/ruby/signature/test/type_check.rb +0 -256
  184. data/vendor/ruby-signature/lib/ruby/signature/test.rb +0 -28
  185. data/vendor/ruby-signature/lib/ruby/signature/type_name.rb +0 -72
  186. data/vendor/ruby-signature/lib/ruby/signature/types.rb +0 -932
  187. data/vendor/ruby-signature/lib/ruby/signature/variance_calculator.rb +0 -140
  188. data/vendor/ruby-signature/lib/ruby/signature/vendorer.rb +0 -49
  189. data/vendor/ruby-signature/lib/ruby/signature/version.rb +0 -5
  190. data/vendor/ruby-signature/lib/ruby/signature/writer.rb +0 -271
@@ -1,77 +1,301 @@
1
+ # Set implements a collection of unordered values with no duplicates. This is a
2
+ # hybrid of Array's intuitive inter-operation facilities and Hash's fast lookup.
3
+ #
4
+ # Set is easy to use with Enumerable objects (implementing `each`). Most of the
5
+ # initializer methods and binary operators accept generic Enumerable objects
6
+ # besides sets and arrays. An Enumerable object can be converted to Set using
7
+ # the `to_set` method.
8
+ #
9
+ # Set uses Hash as storage, so you must note the following points:
10
+ #
11
+ # * Equality of elements is determined according to Object#eql? and
12
+ # Object#hash. Use Set#compare_by_identity to make a set compare its
13
+ # elements by their identity.
14
+ # * Set assumes that the identity of each element does not change while it is
15
+ # stored. Modifying an element of a set will render the set to an
16
+ # unreliable state.
17
+ # * When a string is to be stored, a frozen copy of the string is stored
18
+ # instead unless the original string is already frozen.
19
+ #
20
+ #
21
+ # ## Comparison
22
+ #
23
+ # The comparison operators <, >, <=, and >= are implemented as shorthand for the
24
+ # {proper_,}{subset?,superset?} methods. However, the <=> operator is
25
+ # intentionally left out because not every pair of sets is comparable ({x, y}
26
+ # vs. {x, z} for example).
27
+ #
28
+ # ## Example
29
+ #
30
+ # require 'set'
31
+ # s1 = Set[1, 2] #=> #<Set: {1, 2}>
32
+ # s2 = [1, 2].to_set #=> #<Set: {1, 2}>
33
+ # s1 == s2 #=> true
34
+ # s1.add("foo") #=> #<Set: {1, 2, "foo"}>
35
+ # s1.merge([2, 6]) #=> #<Set: {1, 2, "foo", 6}>
36
+ # s1.subset?(s2) #=> false
37
+ # s2.subset?(s1) #=> true
38
+ #
39
+ # ## Contact
40
+ #
41
+ # - Akinori MUSHA <knu@iDaemons.org> (current maintainer)
42
+ #
1
43
  class Set[A]
2
- def self.`[]`: [X] (*X) -> Set[X]
3
-
44
+ # Creates a new set containing the elements of the given enumerable object.
45
+ #
46
+ # If a block is given, the elements of enum are preprocessed by the given block.
47
+ #
48
+ # Set.new([1, 2]) #=> #<Set: {1, 2}>
49
+ # Set.new([1, 2, 1]) #=> #<Set: {1, 2}>
50
+ # Set.new([1, 'c', :s]) #=> #<Set: {1, "c", :s}>
51
+ # Set.new(1..5) #=> #<Set: {1, 2, 3, 4, 5}>
52
+ # Set.new([1, 2, 3]) { |x| x * x } #=> #<Set: {1, 4, 9}>
53
+ #
4
54
  def initialize: (_Each[A, untyped]) -> untyped
5
55
  | [X] (_Each[X, untyped]) { (X) -> A } -> untyped
6
56
  | (?nil) -> untyped
7
57
 
8
- def intersection: (_Each[A, untyped]) -> self
58
+ # Creates a new set containing the given objects.
59
+ #
60
+ # Set[1, 2] # => #<Set: {1, 2}>
61
+ # Set[1, 2, 1] # => #<Set: {1, 2}>
62
+ # Set[1, 'c', :s] # => #<Set: {1, "c", :s}>
63
+ #
64
+ def self.[]: [X] (*X) -> Set[X]
65
+
66
+ # Returns a new set containing elements common to the set and the given
67
+ # enumerable object.
68
+ #
69
+ # Set[1, 3, 5] & Set[3, 2, 1] #=> #<Set: {3, 1}>
70
+ # Set['a', 'b', 'z'] & ['a', 'b', 'c'] #=> #<Set: {"a", "b"}>
71
+ #
9
72
  def &: (_Each[A, untyped]) -> self
10
73
 
11
- def union: (_Each[A, untyped]) -> self
12
- def `+`: (_Each[A, untyped]) -> self
13
- def `|`: (_Each[A, untyped]) -> self
74
+ alias intersection &
75
+
76
+ # Returns a new set built by merging the set and the elements of the given
77
+ # enumerable object.
78
+ #
79
+ # Set[1, 2, 3] | Set[2, 4, 5] #=> #<Set: {1, 2, 3, 4, 5}>
80
+ # Set[1, 5, 'z'] | (1..6) #=> #<Set: {1, 5, "z", 2, 3, 4, 6}>
81
+ #
82
+ def |: (_Each[A, untyped]) -> self
83
+
84
+ alias union |
14
85
 
15
- def difference: (_Each[A, untyped]) -> self
16
- def `-`: (_Each[A, untyped]) -> self
86
+ alias + |
17
87
 
88
+ # Returns a new set built by duplicating the set, removing every element that
89
+ # appears in the given enumerable object.
90
+ #
91
+ # Set[1, 3, 5] - Set[1, 5] #=> #<Set: {3}>
92
+ # Set['a', 'b', 'z'] - ['a', 'c'] #=> #<Set: {"b", "z"}>
93
+ #
94
+ def -: (_Each[A, untyped]) -> self
95
+
96
+ alias difference -
97
+
98
+ # Adds the given object to the set and returns self. Use `merge` to add many
99
+ # elements at once.
100
+ #
101
+ # Set[1, 2].add(3) #=> #<Set: {1, 2, 3}>
102
+ # Set[1, 2].add([3, 4]) #=> #<Set: {1, 2, [3, 4]}>
103
+ # Set[1, 2].add(2) #=> #<Set: {1, 2}>
104
+ #
18
105
  def add: (A) -> self
19
- def `<<`: (A) -> self
106
+
107
+ alias << add
108
+
109
+ # Adds the given object to the set and returns self. If the object is already
110
+ # in the set, returns nil.
111
+ #
112
+ # Set[1, 2].add?(3) #=> #<Set: {1, 2, 3}>
113
+ # Set[1, 2].add?([3, 4]) #=> #<Set: {1, 2, [3, 4]}>
114
+ # Set[1, 2].add?(2) #=> nil
115
+ #
20
116
  def add?: (A) -> self?
21
117
 
22
- def member?: (untyped) -> bool
118
+ # Returns true if the set contains the given object.
119
+ #
120
+ # Note that `include?` and `member?` do not test member equality using `==` as
121
+ # do other Enumerables.
122
+ #
123
+ # See also Enumerable#include?
124
+ #
23
125
  def include?: (untyped) -> bool
24
126
 
25
- def `^`: (_Each[A, untyped]) -> self
127
+ alias member? include?
26
128
 
27
- def classify: [X] { (A) -> X } -> Hash[X, self]
129
+ # Returns a new set containing elements exclusive between the set and the given
130
+ # enumerable object. (set ^ enum) is equivalent to ((set | enum) - (set &
131
+ # enum)).
132
+ #
133
+ # Set[1, 2] ^ Set[2, 3] #=> #<Set: {3, 1}>
134
+ # Set[1, 'b', 'c'] ^ ['b', 'd'] #=> #<Set: {"d", 1, "c"}>
135
+ #
136
+ def ^: (_Each[A, untyped]) -> self
28
137
 
29
- def clear: -> self
138
+ # Classifies the set by the return value of the given block and returns a hash
139
+ # of {value => set of elements} pairs. The block is called once for each
140
+ # element of the set, passing the element as parameter.
141
+ #
142
+ # require 'set'
143
+ # files = Set.new(Dir.glob("*.rb"))
144
+ # hash = files.classify { |f| File.mtime(f).year }
145
+ # hash #=> {2000=>#<Set: {"a.rb", "b.rb"}>,
146
+ # # 2001=>#<Set: {"c.rb", "d.rb", "e.rb"}>,
147
+ # # 2002=>#<Set: {"f.rb"}>}
148
+ #
149
+ # Returns an enumerator if no block is given.
150
+ #
151
+ def classify: [X] () { (A) -> X } -> Hash[X, self]
152
+
153
+ # Removes all elements and returns self.
154
+ #
155
+ # set = Set[1, 'c', :s] #=> #<Set: {1, "c", :s}>
156
+ # set.clear #=> #<Set: {}>
157
+ # set #=> #<Set: {}>
158
+ #
159
+ def clear: () -> self
160
+
161
+ # Replaces the elements with ones returned by collect(). Returns an enumerator
162
+ # if no block is given.
163
+ #
164
+ def collect!: () { (A) -> A } -> self
30
165
 
31
- def collect!: { (A) -> A } -> self
32
166
  alias map! collect!
33
167
 
168
+ # Deletes the given object from the set and returns self. Use `subtract` to
169
+ # delete many items at once.
170
+ #
34
171
  def delete: (untyped) -> self
172
+
173
+ # Deletes the given object from the set and returns self. If the object is not
174
+ # in the set, returns nil.
175
+ #
35
176
  def delete?: (untyped) -> self?
36
177
 
37
- def delete_if: { (A) -> untyped } -> self
38
- def reject!: { (A) -> untyped } -> self
178
+ # Deletes every element of the set for which block evaluates to true, and
179
+ # returns self. Returns an enumerator if no block is given.
180
+ #
181
+ def delete_if: () { (A) -> untyped } -> self
182
+
183
+ # Equivalent to Set#delete_if, but returns nil if no changes were made. Returns
184
+ # an enumerator if no block is given.
185
+ #
186
+ def reject!: () { (A) -> untyped } -> self
39
187
 
188
+ # Returns true if the set and the given set have no element in common. This
189
+ # method is the opposite of `intersect?`.
190
+ #
191
+ # Set[1, 2, 3].disjoint? Set[3, 4] #=> false
192
+ # Set[1, 2, 3].disjoint? Set[4, 5] #=> true
193
+ #
40
194
  def disjoint?: (self) -> bool
41
195
 
42
- def divide: { (A, A) -> untyped } -> Set[self]
43
- | { (A) -> untyped } -> Set[self]
196
+ # Divides the set into a set of subsets according to the commonality defined by
197
+ # the given block.
198
+ #
199
+ # If the arity of the block is 2, elements o1 and o2 are in common if
200
+ # block.call(o1, o2) is true. Otherwise, elements o1 and o2 are in common if
201
+ # block.call(o1) == block.call(o2).
202
+ #
203
+ # require 'set'
204
+ # numbers = Set[1, 3, 4, 6, 9, 10, 11]
205
+ # set = numbers.divide { |i,j| (i - j).abs == 1 }
206
+ # set #=> #<Set: {#<Set: {1}>,
207
+ # # #<Set: {11, 9, 10}>,
208
+ # # #<Set: {3, 4}>,
209
+ # # #<Set: {6}>}>
210
+ #
211
+ # Returns an enumerator if no block is given.
212
+ #
213
+ def divide: () { (A, A) -> untyped } -> Set[self]
214
+ | () { (A) -> untyped } -> Set[self]
44
215
 
45
- def each: { (A) -> void } -> self
216
+ # Calls the given block once for each element in the set, passing the element as
217
+ # parameter. Returns an enumerator if no block is given.
218
+ #
219
+ def each: () { (A) -> void } -> self
46
220
 
47
- def empty?: -> bool
221
+ # Returns true if the set contains no elements.
222
+ #
223
+ def empty?: () -> bool
48
224
 
49
- def flatten: -> Set[untyped]
225
+ # Returns a new set that is a copy of the set, flattening each containing set
226
+ # recursively.
227
+ #
228
+ def flatten: () -> Set[untyped]
50
229
 
51
- def intersect?: -> bool
230
+ # Returns true if the set and the given set have at least one element in common.
231
+ #
232
+ # Set[1, 2, 3].intersect? Set[4, 5] #=> false
233
+ # Set[1, 2, 3].intersect? Set[3, 4] #=> true
234
+ #
235
+ def intersect?: () -> bool
52
236
 
53
- def keep_if: { (A) -> untyped } -> self
237
+ # Deletes every element of the set for which block evaluates to false, and
238
+ # returns self. Returns an enumerator if no block is given.
239
+ #
240
+ def keep_if: () { (A) -> untyped } -> self
241
+
242
+ # Returns the number of elements.
243
+ #
244
+ def size: () -> Integer
54
245
 
55
- def size: -> Integer
56
246
  alias length size
57
247
 
248
+ # Merges the elements of the given enumerable object to the set and returns
249
+ # self.
250
+ #
58
251
  def merge: (_Each[A, untyped]) -> self
59
252
 
253
+ # Returns true if the set is a subset of the given set.
254
+ #
60
255
  def subset?: (self) -> bool
256
+
61
257
  def proper_subst?: (self) -> bool
62
258
 
259
+ # Returns true if the set is a superset of the given set.
260
+ #
63
261
  def superset?: (self) -> bool
262
+
263
+ # Returns true if the set is a proper superset of the given set.
264
+ #
64
265
  def proper_superset?: (self) -> bool
65
266
 
267
+ # Replaces the contents of the set with the contents of the given enumerable
268
+ # object and returns self.
269
+ #
270
+ # set = Set[1, 'c', :s] #=> #<Set: {1, "c", :s}>
271
+ # set.replace([1, 2]) #=> #<Set: {1, 2}>
272
+ # set #=> #<Set: {1, 2}>
273
+ #
66
274
  def replace: (_Each[A, untyped]) -> self
67
275
 
68
- def reset: -> self
276
+ # Resets the internal state after modification to existing elements and returns
277
+ # self.
278
+ #
279
+ # Elements will be reindexed and deduplicated.
280
+ #
281
+ def reset: () -> self
69
282
 
70
- def select!: { (A) -> untyped } -> self?
283
+ # Equivalent to Set#keep_if, but returns nil if no changes were made. Returns an
284
+ # enumerator if no block is given.
285
+ #
286
+ def select!: () { (A) -> untyped } -> self?
71
287
 
288
+ # Deletes every element that appears in the given enumerable object and returns
289
+ # self.
290
+ #
72
291
  def subtract: (_Each[A, untyped]) -> self
73
292
 
74
- def to_a: -> Array[A]
293
+ # Converts the set to an array. The order of elements is uncertain.
294
+ #
295
+ # Set[1, 2].to_a #=> [1, 2]
296
+ # Set[1, 'c', :s].to_a #=> [1, "c", :s]
297
+ #
298
+ def to_a: () -> Array[A]
75
299
 
76
300
  include Enumerable[A, self]
77
301
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: steep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-24 00:00:00.000000000 Z
11
+ date: 2020-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -203,7 +203,6 @@ email:
203
203
  - matsumoto@soutaro.com
204
204
  executables:
205
205
  - rbs
206
- - ruby-signature
207
206
  - steep
208
207
  extensions: []
209
208
  extra_rdoc_files: []
@@ -221,7 +220,6 @@ files:
221
220
  - bin/setup
222
221
  - bin/smoke_runner.rb
223
222
  - exe/rbs
224
- - exe/ruby-signature
225
223
  - exe/steep
226
224
  - lib/steep.rb
227
225
  - lib/steep/annotation_parser.rb
@@ -294,6 +292,9 @@ files:
294
292
  - lib/steep/type_inference/block_params.rb
295
293
  - lib/steep/type_inference/constant_env.rb
296
294
  - lib/steep/type_inference/context.rb
295
+ - lib/steep/type_inference/context_array.rb
296
+ - lib/steep/type_inference/local_variable_type_env.rb
297
+ - lib/steep/type_inference/logic.rb
297
298
  - lib/steep/type_inference/send_args.rb
298
299
  - lib/steep/type_inference/type_env.rb
299
300
  - lib/steep/typing.rb
@@ -447,48 +448,49 @@ files:
447
448
  - vendor/ruby-signature/docs/stdlib.md
448
449
  - vendor/ruby-signature/docs/syntax.md
449
450
  - vendor/ruby-signature/exe/rbs
450
- - vendor/ruby-signature/exe/ruby-signature
451
+ - vendor/ruby-signature/lib/rbs.rb
452
+ - vendor/ruby-signature/lib/rbs/ast/annotation.rb
453
+ - vendor/ruby-signature/lib/rbs/ast/comment.rb
454
+ - vendor/ruby-signature/lib/rbs/ast/declarations.rb
455
+ - vendor/ruby-signature/lib/rbs/ast/members.rb
456
+ - vendor/ruby-signature/lib/rbs/buffer.rb
457
+ - vendor/ruby-signature/lib/rbs/builtin_names.rb
458
+ - vendor/ruby-signature/lib/rbs/cli.rb
459
+ - vendor/ruby-signature/lib/rbs/constant.rb
460
+ - vendor/ruby-signature/lib/rbs/constant_table.rb
461
+ - vendor/ruby-signature/lib/rbs/definition.rb
462
+ - vendor/ruby-signature/lib/rbs/definition_builder.rb
463
+ - vendor/ruby-signature/lib/rbs/environment.rb
464
+ - vendor/ruby-signature/lib/rbs/environment_loader.rb
465
+ - vendor/ruby-signature/lib/rbs/environment_walker.rb
466
+ - vendor/ruby-signature/lib/rbs/errors.rb
467
+ - vendor/ruby-signature/lib/rbs/location.rb
468
+ - vendor/ruby-signature/lib/rbs/method_type.rb
469
+ - vendor/ruby-signature/lib/rbs/namespace.rb
470
+ - vendor/ruby-signature/lib/rbs/parser.rb
471
+ - vendor/ruby-signature/lib/rbs/parser.y
472
+ - vendor/ruby-signature/lib/rbs/prototype/rb.rb
473
+ - vendor/ruby-signature/lib/rbs/prototype/rbi.rb
474
+ - vendor/ruby-signature/lib/rbs/prototype/runtime.rb
475
+ - vendor/ruby-signature/lib/rbs/substitution.rb
476
+ - vendor/ruby-signature/lib/rbs/test.rb
477
+ - vendor/ruby-signature/lib/rbs/test/errors.rb
478
+ - vendor/ruby-signature/lib/rbs/test/hook.rb
479
+ - vendor/ruby-signature/lib/rbs/test/setup.rb
480
+ - vendor/ruby-signature/lib/rbs/test/spy.rb
481
+ - vendor/ruby-signature/lib/rbs/test/test_helper.rb
482
+ - vendor/ruby-signature/lib/rbs/test/type_check.rb
483
+ - vendor/ruby-signature/lib/rbs/type_name.rb
484
+ - vendor/ruby-signature/lib/rbs/types.rb
485
+ - vendor/ruby-signature/lib/rbs/variance_calculator.rb
486
+ - vendor/ruby-signature/lib/rbs/vendorer.rb
487
+ - vendor/ruby-signature/lib/rbs/version.rb
488
+ - vendor/ruby-signature/lib/rbs/writer.rb
451
489
  - vendor/ruby-signature/lib/ruby/signature.rb
452
- - vendor/ruby-signature/lib/ruby/signature/ast/annotation.rb
453
- - vendor/ruby-signature/lib/ruby/signature/ast/comment.rb
454
- - vendor/ruby-signature/lib/ruby/signature/ast/declarations.rb
455
- - vendor/ruby-signature/lib/ruby/signature/ast/members.rb
456
- - vendor/ruby-signature/lib/ruby/signature/buffer.rb
457
- - vendor/ruby-signature/lib/ruby/signature/builtin_names.rb
458
- - vendor/ruby-signature/lib/ruby/signature/cli.rb
459
- - vendor/ruby-signature/lib/ruby/signature/constant.rb
460
- - vendor/ruby-signature/lib/ruby/signature/constant_table.rb
461
- - vendor/ruby-signature/lib/ruby/signature/definition.rb
462
- - vendor/ruby-signature/lib/ruby/signature/definition_builder.rb
463
- - vendor/ruby-signature/lib/ruby/signature/environment.rb
464
- - vendor/ruby-signature/lib/ruby/signature/environment_loader.rb
465
- - vendor/ruby-signature/lib/ruby/signature/environment_walker.rb
466
- - vendor/ruby-signature/lib/ruby/signature/errors.rb
467
- - vendor/ruby-signature/lib/ruby/signature/location.rb
468
- - vendor/ruby-signature/lib/ruby/signature/method_type.rb
469
- - vendor/ruby-signature/lib/ruby/signature/namespace.rb
470
- - vendor/ruby-signature/lib/ruby/signature/parser.rb
471
- - vendor/ruby-signature/lib/ruby/signature/parser.y
472
- - vendor/ruby-signature/lib/ruby/signature/prototype/rb.rb
473
- - vendor/ruby-signature/lib/ruby/signature/prototype/rbi.rb
474
- - vendor/ruby-signature/lib/ruby/signature/prototype/runtime.rb
475
- - vendor/ruby-signature/lib/ruby/signature/substitution.rb
476
- - vendor/ruby-signature/lib/ruby/signature/test.rb
477
- - vendor/ruby-signature/lib/ruby/signature/test/errors.rb
478
- - vendor/ruby-signature/lib/ruby/signature/test/hook.rb
479
- - vendor/ruby-signature/lib/ruby/signature/test/setup.rb
480
- - vendor/ruby-signature/lib/ruby/signature/test/spy.rb
481
- - vendor/ruby-signature/lib/ruby/signature/test/test_helper.rb
482
- - vendor/ruby-signature/lib/ruby/signature/test/type_check.rb
483
- - vendor/ruby-signature/lib/ruby/signature/type_name.rb
484
- - vendor/ruby-signature/lib/ruby/signature/types.rb
485
- - vendor/ruby-signature/lib/ruby/signature/variance_calculator.rb
486
- - vendor/ruby-signature/lib/ruby/signature/vendorer.rb
487
- - vendor/ruby-signature/lib/ruby/signature/version.rb
488
- - vendor/ruby-signature/lib/ruby/signature/writer.rb
489
- - vendor/ruby-signature/ruby-signature.gemspec
490
+ - vendor/ruby-signature/rbs.gemspec
490
491
  - vendor/ruby-signature/stdlib/abbrev/abbrev.rbs
491
492
  - vendor/ruby-signature/stdlib/base64/base64.rbs
493
+ - vendor/ruby-signature/stdlib/benchmark/benchmark.rbs
492
494
  - vendor/ruby-signature/stdlib/builtin/array.rbs
493
495
  - vendor/ruby-signature/stdlib/builtin/basic_object.rbs
494
496
  - vendor/ruby-signature/stdlib/builtin/binding.rbs
@@ -545,8 +547,11 @@ files:
545
547
  - vendor/ruby-signature/stdlib/builtin/true_class.rbs
546
548
  - vendor/ruby-signature/stdlib/builtin/unbound_method.rbs
547
549
  - vendor/ruby-signature/stdlib/builtin/warning.rbs
550
+ - vendor/ruby-signature/stdlib/coverage/coverage.rbs
551
+ - vendor/ruby-signature/stdlib/csv/csv.rbs
548
552
  - vendor/ruby-signature/stdlib/erb/erb.rbs
549
553
  - vendor/ruby-signature/stdlib/find/find.rbs
554
+ - vendor/ruby-signature/stdlib/ipaddr/ipaddr.rbs
550
555
  - vendor/ruby-signature/stdlib/pathname/pathname.rbs
551
556
  - vendor/ruby-signature/stdlib/prime/integer-extension.rbs
552
557
  - vendor/ruby-signature/stdlib/prime/prime.rbs
@@ -572,7 +577,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
572
577
  - !ruby/object:Gem::Version
573
578
  version: '0'
574
579
  requirements: []
575
- rubygems_version: 3.0.6
580
+ rubygems_version: 3.0.3
576
581
  signing_key:
577
582
  specification_version: 4
578
583
  summary: Gradual Typing for Ruby
data/exe/ruby-signature DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- load File.join(__dir__, "../vendor/ruby-signature/exe/ruby-signature")
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $LOAD_PATH << File.join(__dir__, "../lib")
4
- require "ruby/signature"
5
- require "ruby/signature/cli"
6
-
7
- Ruby::Signature::CLI.new(stdout: STDOUT, stderr: STDERR).run(ARGV.dup)
@@ -1,29 +0,0 @@
1
- module Ruby
2
- module Signature
3
- module AST
4
- class Annotation
5
- attr_reader :string
6
- attr_reader :location
7
-
8
- def initialize(string:, location:)
9
- @string = string
10
- @location = location
11
- end
12
-
13
- def ==(other)
14
- other.is_a?(Annotation) && other.string == string
15
- end
16
-
17
- alias eql? ==
18
-
19
- def hash
20
- self.class.hash ^ string.hash
21
- end
22
-
23
- def to_json(*a)
24
- { string: string, location: location }.to_json(*a)
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,29 +0,0 @@
1
- module Ruby
2
- module Signature
3
- module AST
4
- class Comment
5
- attr_reader :string
6
- attr_reader :location
7
-
8
- def initialize(string:, location:)
9
- @string = string
10
- @location = location
11
- end
12
-
13
- def ==(other)
14
- other.is_a?(Comment) && other.string == string
15
- end
16
-
17
- alias eql? ==
18
-
19
- def hash
20
- self.class.hash ^ string.hash
21
- end
22
-
23
- def to_json(*a)
24
- { string: string, location: location }.to_json(*a)
25
- end
26
- end
27
- end
28
- end
29
- end