steep 0.13.0 → 0.16.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +0 -3
  3. data/CHANGELOG.md +28 -0
  4. data/Rakefile +0 -13
  5. data/bin/setup +0 -2
  6. data/bin/smoke_runner.rb +0 -1
  7. data/exe/steep +0 -1
  8. data/lib/steep.rb +33 -1
  9. data/lib/steep/annotation_parser.rb +4 -4
  10. data/lib/steep/ast/buffer.rb +11 -7
  11. data/lib/steep/ast/builtin.rb +8 -0
  12. data/lib/steep/ast/types/factory.rb +124 -89
  13. data/lib/steep/cli.rb +16 -1
  14. data/lib/steep/drivers/annotations.rb +1 -1
  15. data/lib/steep/drivers/check.rb +20 -4
  16. data/lib/steep/drivers/init.rb +5 -5
  17. data/lib/steep/drivers/langserver.rb +13 -287
  18. data/lib/steep/drivers/utils/driver_helper.rb +1 -1
  19. data/lib/steep/drivers/vendor.rb +2 -2
  20. data/lib/steep/drivers/watch.rb +97 -85
  21. data/lib/steep/drivers/worker.rb +51 -0
  22. data/lib/steep/project.rb +9 -5
  23. data/lib/steep/project/completion_provider.rb +298 -0
  24. data/lib/steep/project/dsl.rb +14 -0
  25. data/lib/steep/project/file.rb +54 -47
  26. data/lib/steep/project/hover_content.rb +17 -8
  27. data/lib/steep/project/options.rb +25 -3
  28. data/lib/steep/project/target.rb +40 -24
  29. data/lib/steep/server/base_worker.rb +56 -0
  30. data/lib/steep/server/code_worker.rb +151 -0
  31. data/lib/steep/server/interaction_worker.rb +281 -0
  32. data/lib/steep/server/master.rb +196 -0
  33. data/lib/steep/server/signature_worker.rb +148 -0
  34. data/lib/steep/server/utils.rb +36 -0
  35. data/lib/steep/server/worker_process.rb +62 -0
  36. data/lib/steep/signature/errors.rb +1 -1
  37. data/lib/steep/signature/validator.rb +13 -13
  38. data/lib/steep/source.rb +1 -1
  39. data/lib/steep/type_construction.rb +1004 -727
  40. data/lib/steep/type_inference/constant_env.rb +3 -11
  41. data/lib/steep/type_inference/context.rb +8 -3
  42. data/lib/steep/type_inference/context_array.rb +111 -0
  43. data/lib/steep/type_inference/local_variable_type_env.rb +226 -0
  44. data/lib/steep/type_inference/logic.rb +130 -0
  45. data/lib/steep/type_inference/type_env.rb +5 -69
  46. data/lib/steep/typing.rb +91 -23
  47. data/lib/steep/version.rb +1 -1
  48. data/smoke/alias/Steepfile +1 -0
  49. data/smoke/alias/a.rb +1 -1
  50. data/smoke/and/Steepfile +1 -0
  51. data/smoke/array/Steepfile +1 -0
  52. data/smoke/array/b.rb +0 -2
  53. data/smoke/block/Steepfile +1 -0
  54. data/smoke/case/Steepfile +1 -0
  55. data/smoke/class/Steepfile +1 -0
  56. data/smoke/const/Steepfile +1 -0
  57. data/smoke/dstr/Steepfile +1 -0
  58. data/smoke/ensure/Steepfile +1 -0
  59. data/smoke/enumerator/Steepfile +1 -0
  60. data/smoke/extension/Steepfile +1 -0
  61. data/smoke/extension/c.rb +1 -0
  62. data/smoke/hash/Steepfile +1 -0
  63. data/smoke/hello/Steepfile +1 -0
  64. data/smoke/if/Steepfile +1 -0
  65. data/smoke/if/a.rb +1 -1
  66. data/smoke/implements/Steepfile +1 -0
  67. data/smoke/initialize/Steepfile +1 -0
  68. data/smoke/integer/Steepfile +1 -0
  69. data/smoke/interface/Steepfile +1 -0
  70. data/smoke/kwbegin/Steepfile +1 -0
  71. data/smoke/lambda/Steepfile +1 -0
  72. data/smoke/literal/Steepfile +1 -0
  73. data/smoke/map/Steepfile +1 -0
  74. data/smoke/method/Steepfile +1 -0
  75. data/smoke/module/Steepfile +1 -0
  76. data/smoke/regexp/Steepfile +1 -0
  77. data/smoke/regexp/b.rb +4 -4
  78. data/smoke/regression/Steepfile +1 -0
  79. data/smoke/rescue/Steepfile +1 -0
  80. data/smoke/rescue/a.rb +1 -1
  81. data/smoke/self/Steepfile +1 -0
  82. data/smoke/skip/Steepfile +1 -0
  83. data/smoke/stdout/Steepfile +1 -0
  84. data/smoke/super/Steepfile +1 -0
  85. data/smoke/type_case/Steepfile +1 -0
  86. data/smoke/yield/Steepfile +1 -0
  87. data/steep.gemspec +8 -8
  88. metadata +38 -138
  89. data/exe/rbs +0 -3
  90. data/exe/ruby-signature +0 -3
  91. data/vendor/ruby-signature/.github/workflows/ruby.yml +0 -27
  92. data/vendor/ruby-signature/.gitignore +0 -12
  93. data/vendor/ruby-signature/.rubocop.yml +0 -15
  94. data/vendor/ruby-signature/BSDL +0 -22
  95. data/vendor/ruby-signature/COPYING +0 -56
  96. data/vendor/ruby-signature/Gemfile +0 -6
  97. data/vendor/ruby-signature/README.md +0 -93
  98. data/vendor/ruby-signature/Rakefile +0 -66
  99. data/vendor/ruby-signature/bin/annotate-with-rdoc +0 -156
  100. data/vendor/ruby-signature/bin/console +0 -14
  101. data/vendor/ruby-signature/bin/query-rdoc +0 -103
  102. data/vendor/ruby-signature/bin/setup +0 -10
  103. data/vendor/ruby-signature/bin/sort +0 -88
  104. data/vendor/ruby-signature/bin/test_runner.rb +0 -17
  105. data/vendor/ruby-signature/docs/CONTRIBUTING.md +0 -97
  106. data/vendor/ruby-signature/docs/sigs.md +0 -148
  107. data/vendor/ruby-signature/docs/stdlib.md +0 -152
  108. data/vendor/ruby-signature/docs/syntax.md +0 -528
  109. data/vendor/ruby-signature/exe/rbs +0 -3
  110. data/vendor/ruby-signature/exe/ruby-signature +0 -7
  111. data/vendor/ruby-signature/lib/ruby/signature.rb +0 -64
  112. data/vendor/ruby-signature/lib/ruby/signature/ast/annotation.rb +0 -29
  113. data/vendor/ruby-signature/lib/ruby/signature/ast/comment.rb +0 -29
  114. data/vendor/ruby-signature/lib/ruby/signature/ast/declarations.rb +0 -391
  115. data/vendor/ruby-signature/lib/ruby/signature/ast/members.rb +0 -364
  116. data/vendor/ruby-signature/lib/ruby/signature/buffer.rb +0 -52
  117. data/vendor/ruby-signature/lib/ruby/signature/builtin_names.rb +0 -54
  118. data/vendor/ruby-signature/lib/ruby/signature/cli.rb +0 -534
  119. data/vendor/ruby-signature/lib/ruby/signature/constant.rb +0 -28
  120. data/vendor/ruby-signature/lib/ruby/signature/constant_table.rb +0 -152
  121. data/vendor/ruby-signature/lib/ruby/signature/definition.rb +0 -172
  122. data/vendor/ruby-signature/lib/ruby/signature/definition_builder.rb +0 -921
  123. data/vendor/ruby-signature/lib/ruby/signature/environment.rb +0 -283
  124. data/vendor/ruby-signature/lib/ruby/signature/environment_loader.rb +0 -138
  125. data/vendor/ruby-signature/lib/ruby/signature/environment_walker.rb +0 -126
  126. data/vendor/ruby-signature/lib/ruby/signature/errors.rb +0 -189
  127. data/vendor/ruby-signature/lib/ruby/signature/location.rb +0 -104
  128. data/vendor/ruby-signature/lib/ruby/signature/method_type.rb +0 -125
  129. data/vendor/ruby-signature/lib/ruby/signature/namespace.rb +0 -93
  130. data/vendor/ruby-signature/lib/ruby/signature/parser.y +0 -1343
  131. data/vendor/ruby-signature/lib/ruby/signature/prototype/rb.rb +0 -441
  132. data/vendor/ruby-signature/lib/ruby/signature/prototype/rbi.rb +0 -579
  133. data/vendor/ruby-signature/lib/ruby/signature/prototype/runtime.rb +0 -383
  134. data/vendor/ruby-signature/lib/ruby/signature/substitution.rb +0 -48
  135. data/vendor/ruby-signature/lib/ruby/signature/test.rb +0 -28
  136. data/vendor/ruby-signature/lib/ruby/signature/test/errors.rb +0 -63
  137. data/vendor/ruby-signature/lib/ruby/signature/test/hook.rb +0 -290
  138. data/vendor/ruby-signature/lib/ruby/signature/test/setup.rb +0 -58
  139. data/vendor/ruby-signature/lib/ruby/signature/test/spy.rb +0 -324
  140. data/vendor/ruby-signature/lib/ruby/signature/test/test_helper.rb +0 -185
  141. data/vendor/ruby-signature/lib/ruby/signature/test/type_check.rb +0 -256
  142. data/vendor/ruby-signature/lib/ruby/signature/type_name.rb +0 -72
  143. data/vendor/ruby-signature/lib/ruby/signature/types.rb +0 -932
  144. data/vendor/ruby-signature/lib/ruby/signature/variance_calculator.rb +0 -140
  145. data/vendor/ruby-signature/lib/ruby/signature/vendorer.rb +0 -49
  146. data/vendor/ruby-signature/lib/ruby/signature/version.rb +0 -5
  147. data/vendor/ruby-signature/lib/ruby/signature/writer.rb +0 -271
  148. data/vendor/ruby-signature/ruby-signature.gemspec +0 -45
  149. data/vendor/ruby-signature/stdlib/abbrev/abbrev.rbs +0 -3
  150. data/vendor/ruby-signature/stdlib/base64/base64.rbs +0 -15
  151. data/vendor/ruby-signature/stdlib/builtin/array.rbs +0 -1997
  152. data/vendor/ruby-signature/stdlib/builtin/basic_object.rbs +0 -280
  153. data/vendor/ruby-signature/stdlib/builtin/binding.rbs +0 -177
  154. data/vendor/ruby-signature/stdlib/builtin/builtin.rbs +0 -35
  155. data/vendor/ruby-signature/stdlib/builtin/class.rbs +0 -145
  156. data/vendor/ruby-signature/stdlib/builtin/comparable.rbs +0 -116
  157. data/vendor/ruby-signature/stdlib/builtin/complex.rbs +0 -400
  158. data/vendor/ruby-signature/stdlib/builtin/constants.rbs +0 -37
  159. data/vendor/ruby-signature/stdlib/builtin/data.rbs +0 -5
  160. data/vendor/ruby-signature/stdlib/builtin/deprecated.rbs +0 -2
  161. data/vendor/ruby-signature/stdlib/builtin/dir.rbs +0 -419
  162. data/vendor/ruby-signature/stdlib/builtin/encoding.rbs +0 -606
  163. data/vendor/ruby-signature/stdlib/builtin/enumerable.rbs +0 -404
  164. data/vendor/ruby-signature/stdlib/builtin/enumerator.rbs +0 -260
  165. data/vendor/ruby-signature/stdlib/builtin/errno.rbs +0 -781
  166. data/vendor/ruby-signature/stdlib/builtin/errors.rbs +0 -582
  167. data/vendor/ruby-signature/stdlib/builtin/exception.rbs +0 -193
  168. data/vendor/ruby-signature/stdlib/builtin/false_class.rbs +0 -40
  169. data/vendor/ruby-signature/stdlib/builtin/fiber.rbs +0 -68
  170. data/vendor/ruby-signature/stdlib/builtin/fiber_error.rbs +0 -12
  171. data/vendor/ruby-signature/stdlib/builtin/file.rbs +0 -476
  172. data/vendor/ruby-signature/stdlib/builtin/file_test.rbs +0 -59
  173. data/vendor/ruby-signature/stdlib/builtin/float.rbs +0 -696
  174. data/vendor/ruby-signature/stdlib/builtin/gc.rbs +0 -121
  175. data/vendor/ruby-signature/stdlib/builtin/hash.rbs +0 -1029
  176. data/vendor/ruby-signature/stdlib/builtin/integer.rbs +0 -710
  177. data/vendor/ruby-signature/stdlib/builtin/io.rbs +0 -683
  178. data/vendor/ruby-signature/stdlib/builtin/kernel.rbs +0 -574
  179. data/vendor/ruby-signature/stdlib/builtin/marshal.rbs +0 -135
  180. data/vendor/ruby-signature/stdlib/builtin/match_data.rbs +0 -141
  181. data/vendor/ruby-signature/stdlib/builtin/math.rbs +0 -66
  182. data/vendor/ruby-signature/stdlib/builtin/method.rbs +0 -182
  183. data/vendor/ruby-signature/stdlib/builtin/module.rbs +0 -248
  184. data/vendor/ruby-signature/stdlib/builtin/nil_class.rbs +0 -82
  185. data/vendor/ruby-signature/stdlib/builtin/numeric.rbs +0 -409
  186. data/vendor/ruby-signature/stdlib/builtin/object.rbs +0 -824
  187. data/vendor/ruby-signature/stdlib/builtin/proc.rbs +0 -426
  188. data/vendor/ruby-signature/stdlib/builtin/process.rbs +0 -354
  189. data/vendor/ruby-signature/stdlib/builtin/random.rbs +0 -93
  190. data/vendor/ruby-signature/stdlib/builtin/range.rbs +0 -226
  191. data/vendor/ruby-signature/stdlib/builtin/rational.rbs +0 -424
  192. data/vendor/ruby-signature/stdlib/builtin/rb_config.rbs +0 -10
  193. data/vendor/ruby-signature/stdlib/builtin/regexp.rbs +0 -131
  194. data/vendor/ruby-signature/stdlib/builtin/ruby_vm.rbs +0 -14
  195. data/vendor/ruby-signature/stdlib/builtin/signal.rbs +0 -55
  196. data/vendor/ruby-signature/stdlib/builtin/string.rbs +0 -770
  197. data/vendor/ruby-signature/stdlib/builtin/string_io.rbs +0 -13
  198. data/vendor/ruby-signature/stdlib/builtin/struct.rbs +0 -40
  199. data/vendor/ruby-signature/stdlib/builtin/symbol.rbs +0 -230
  200. data/vendor/ruby-signature/stdlib/builtin/thread.rbs +0 -1112
  201. data/vendor/ruby-signature/stdlib/builtin/thread_group.rbs +0 -23
  202. data/vendor/ruby-signature/stdlib/builtin/time.rbs +0 -739
  203. data/vendor/ruby-signature/stdlib/builtin/trace_point.rbs +0 -91
  204. data/vendor/ruby-signature/stdlib/builtin/true_class.rbs +0 -46
  205. data/vendor/ruby-signature/stdlib/builtin/unbound_method.rbs +0 -159
  206. data/vendor/ruby-signature/stdlib/builtin/warning.rbs +0 -17
  207. data/vendor/ruby-signature/stdlib/erb/erb.rbs +0 -18
  208. data/vendor/ruby-signature/stdlib/find/find.rbs +0 -44
  209. data/vendor/ruby-signature/stdlib/pathname/pathname.rbs +0 -21
  210. data/vendor/ruby-signature/stdlib/prime/integer-extension.rbs +0 -23
  211. data/vendor/ruby-signature/stdlib/prime/prime.rbs +0 -188
  212. data/vendor/ruby-signature/stdlib/securerandom/securerandom.rbs +0 -9
  213. data/vendor/ruby-signature/stdlib/set/set.rbs +0 -77
  214. data/vendor/ruby-signature/stdlib/tmpdir/tmpdir.rbs +0 -53
@@ -1,248 +0,0 @@
1
- # A `Module` is a collection of methods and constants. The methods in a
2
- # module may be instance methods or module methods. Instance methods
3
- # appear as methods in a class when the module is included, module methods
4
- # do not. Conversely, module methods may be called without creating an
5
- # encapsulating object, while instance methods may not. (See
6
- # `Module#module_function` .)
7
- #
8
- # In the descriptions that follow, the parameter *sym* refers to a symbol,
9
- # which is either a quoted string or a `Symbol` (such as `:name` ).
10
- #
11
- # ```ruby
12
- # module Mod
13
- # include Math
14
- # CONST = 1
15
- # def meth
16
- # # ...
17
- # end
18
- # end
19
- # Mod.class #=> Module
20
- # Mod.constants #=> [:CONST, :PI, :E]
21
- # Mod.instance_methods #=> [:meth]
22
- # ```
23
- class Module < Object
24
- # In the first form, returns an array of the names of all constants
25
- # accessible from the point of call. This list includes the names of all
26
- # modules and classes defined in the global scope.
27
- #
28
- # ```ruby
29
- # Module.constants.first(4)
30
- # # => [:ARGF, :ARGV, :ArgumentError, :Array]
31
- #
32
- # Module.constants.include?(:SEEK_SET) # => false
33
- #
34
- # class IO
35
- # Module.constants.include?(:SEEK_SET) # => true
36
- # end
37
- # ```
38
- #
39
- # The second form calls the instance method `constants` .
40
- def self.constants: () -> ::Array[Integer]
41
-
42
- # Returns the list of `Modules` nested at the point of call.
43
- #
44
- # ```ruby
45
- # module M1
46
- # module M2
47
- # $a = Module.nesting
48
- # end
49
- # end
50
- # $a #=> [M1::M2, M1]
51
- # $a[0].name #=> "M1::M2"
52
- # ```
53
- def self.nesting: () -> ::Array[Module]
54
-
55
- def self.used_modules: () -> ::Array[Module]
56
-
57
- def <: (Module other) -> bool?
58
-
59
- def <=: (Module other) -> bool?
60
-
61
- def <=>: (Module other) -> Integer?
62
-
63
- def ==: (untyped other) -> bool
64
-
65
- def ===: (untyped other) -> bool
66
-
67
- def >: (Module other) -> bool?
68
-
69
- def >=: (Module other) -> bool?
70
-
71
- def alias_method: (Symbol new_name, Symbol old_name) -> self
72
-
73
- # Returns a list of modules included/prepended in *mod* (including *mod*
74
- # itself).
75
- #
76
- # ```ruby
77
- # module Mod
78
- # include Math
79
- # include Comparable
80
- # prepend Enumerable
81
- # end
82
- #
83
- # Mod.ancestors #=> [Enumerable, Mod, Comparable, Math]
84
- # Math.ancestors #=> [Math]
85
- # Enumerable.ancestors #=> [Enumerable]
86
- # ```
87
- def ancestors: () -> ::Array[Module]
88
-
89
- def append_features: (Module arg0) -> self
90
-
91
- def `attr_accessor`: (*Symbol | String arg0) -> NilClass
92
-
93
- def `attr_reader`: (*Symbol | String arg0) -> NilClass
94
-
95
- def `attr_writer`: (*Symbol | String arg0) -> NilClass
96
-
97
- def autoload: (Symbol _module, String filename) -> NilClass
98
-
99
- def autoload?: (Symbol name) -> String?
100
-
101
- def class_eval: (String arg0, ?String filename, ?Integer lineno) -> untyped
102
- | [U] (untyped arg0) { (untyped m) -> U } -> U
103
-
104
- def class_exec: (*untyped args) { () -> untyped } -> untyped
105
-
106
- def class_variable_defined?: (Symbol | String arg0) -> bool
107
-
108
- def class_variable_get: (Symbol | String arg0) -> untyped
109
-
110
- def class_variable_set: (Symbol | String arg0, untyped arg1) -> untyped
111
-
112
- def class_variables: (?bool inherit) -> ::Array[Symbol]
113
-
114
- def const_defined?: (Symbol | String arg0, ?bool inherit) -> bool
115
-
116
- def const_get: (Symbol | String arg0, ?bool inherit) -> untyped
117
-
118
- def const_missing: (Symbol arg0) -> untyped
119
-
120
- def const_set: (Symbol | String arg0, untyped arg1) -> untyped
121
-
122
- def constants: (?bool inherit) -> ::Array[Symbol]
123
-
124
- def define_method: (Symbol | String arg0, ?Proc | Method | UnboundMethod arg1) -> Symbol
125
- | (Symbol | String arg0) { () -> untyped } -> Symbol
126
-
127
- def eql?: (untyped other) -> bool
128
-
129
- def equal?: (untyped other) -> bool
130
-
131
- def extend_object: (untyped arg0) -> untyped
132
-
133
- def extended: (Module othermod) -> untyped
134
-
135
- # Prevents further modifications to *mod* .
136
- #
137
- # This method returns self.
138
- def freeze: () -> self
139
-
140
- def `include`: (*Module arg0) -> self
141
-
142
- def `include?`: (Module arg0) -> bool
143
-
144
- def included: (Module othermod) -> untyped
145
-
146
- # Returns the list of modules included in *mod* .
147
- #
148
- # ```ruby
149
- # module Mixin
150
- # end
151
- #
152
- # module Outer
153
- # include Mixin
154
- # end
155
- #
156
- # Mixin.included_modules #=> []
157
- # Outer.included_modules #=> [Mixin]
158
- # ```
159
- def included_modules: () -> ::Array[Module]
160
-
161
- def initialize: () -> Object
162
- | () { (Module arg0) -> untyped } -> void
163
-
164
- def instance_method: (Symbol arg0) -> UnboundMethod
165
-
166
- def instance_methods: (?bool include_super) -> ::Array[Symbol]
167
-
168
- def method_added: (Symbol meth) -> untyped
169
-
170
- def method_defined?: (Symbol | String arg0) -> bool
171
-
172
- def method_removed: (Symbol method_name) -> untyped
173
-
174
- def module_eval: (String arg0, ?String filename, ?Integer lineno) -> untyped
175
- | [U] (untyped arg0) { (untyped m) -> U } -> U
176
-
177
- def module_exec: (*untyped args) { () -> untyped } -> untyped
178
-
179
- def module_function: (*Symbol | String arg0) -> self
180
-
181
- # Returns the name of the module *mod* . Returns nil for anonymous
182
- # modules.
183
- def name: () -> String?
184
-
185
- def `prepend`: (*Module arg0) -> self
186
-
187
- def prepend_features: (Module arg0) -> self
188
-
189
- def prepended: (Module othermod) -> untyped
190
-
191
- def `private`: (*Symbol | String arg0) -> self
192
-
193
- def private_class_method: (*Symbol | String arg0) -> self
194
-
195
- def private_constant: (*Symbol arg0) -> self
196
-
197
- def private_instance_methods: (?bool include_super) -> ::Array[Symbol]
198
-
199
- def private_method_defined?: (Symbol | String arg0) -> bool
200
-
201
- def protected: (*Symbol | String arg0) -> self
202
-
203
- def protected_instance_methods: (?bool include_super) -> ::Array[Symbol]
204
-
205
- def protected_method_defined?: (Symbol | String arg0) -> bool
206
-
207
- def `public`: (*Symbol | String arg0) -> self
208
-
209
- def public_class_method: (*Symbol | String arg0) -> self
210
-
211
- def public_constant: (*Symbol arg0) -> self
212
-
213
- def public_instance_method: (Symbol arg0) -> UnboundMethod
214
-
215
- def public_instance_methods: (?bool include_super) -> ::Array[Symbol]
216
-
217
- def public_method_defined?: (Symbol | String arg0) -> bool
218
-
219
- def refine: (Class arg0) { (untyped arg0) -> untyped } -> self
220
-
221
- def remove_class_variable: (Symbol arg0) -> untyped
222
-
223
- def remove_const: (Symbol arg0) -> untyped
224
-
225
- def remove_method: (Symbol | String arg0) -> self
226
-
227
- # Returns `true` if *mod* is a singleton class or `false` if it is an
228
- # ordinary class or module.
229
- #
230
- # ```ruby
231
- # class C
232
- # end
233
- # C.singleton_class? #=> false
234
- # C.singleton_class.singleton_class? #=> true
235
- # ```
236
- def `singleton_class?`: () -> bool
237
-
238
- def to_s: () -> String
239
-
240
- def undefMethod: (Symbol | String arg0) -> self
241
-
242
- def using: (Module arg0) -> self
243
-
244
- # Alias for: [to\_s](Module.downloaded.ruby_doc#method-i-to_s)
245
- def inspect: () -> String
246
-
247
- def attr: (*Symbol | String arg0) -> NilClass
248
- end
@@ -1,82 +0,0 @@
1
- # The class of the singleton object `nil`.
2
- #
3
- class NilClass
4
- public
5
-
6
- # And---Returns `false`. *obj* is always evaluated as it is the argument to a
7
- # method call---there is no short-circuit evaluation in this case.
8
- #
9
- def &: (untyped obj) -> bool
10
-
11
- # Case Equality -- For class Object, effectively the same as calling `#==`, but
12
- # typically overridden by descendants to provide meaningful semantics in `case`
13
- # statements.
14
- #
15
- def ===: (nil) -> true
16
- | (untyped obj) -> bool
17
-
18
- # Dummy pattern matching -- always returns nil.
19
- #
20
- def =~: (untyped obj) -> nil
21
-
22
- # Exclusive Or---If *obj* is `nil` or `false`, returns `false`; otherwise,
23
- # returns `true`.
24
- #
25
- def ^: (nil) -> false
26
- | (false) -> false
27
- | (untyped obj) -> bool
28
-
29
- # Always returns the string "nil".
30
- #
31
- def inspect: () -> "nil"
32
-
33
- # Only the object *nil* responds `true` to `nil?`.
34
- #
35
- def nil?: () -> bool
36
-
37
- # Returns zero as a rational. The optional argument `eps` is always ignored.
38
- #
39
- def rationalize: (?untyped eps) -> Rational
40
-
41
- # Always returns an empty array.
42
- #
43
- # nil.to_a #=> []
44
- #
45
- def to_a: () -> [ ]
46
-
47
- # Returns zero as a complex.
48
- #
49
- def to_c: () -> Complex
50
-
51
- # Always returns zero.
52
- #
53
- # nil.to_f #=> 0.0
54
- #
55
- def to_f: () -> Float
56
-
57
- # Always returns an empty hash.
58
- #
59
- # nil.to_h #=> {}
60
- #
61
- def to_h: () -> ::Hash[untyped, untyped]
62
-
63
- # Always returns zero.
64
- #
65
- # nil.to_i #=> 0
66
- #
67
- def to_i: () -> 0
68
-
69
- # Returns zero as a rational.
70
- #
71
- def to_r: () -> Rational
72
-
73
- # Always returns the empty string.
74
- #
75
- def to_s: () -> ""
76
-
77
- # Or---Returns `false` if *obj* is `nil` or `false`; `true` otherwise.
78
- #
79
- def |: (nil) -> false
80
- | (false) -> false
81
- | (untyped obj) -> bool
82
- end
@@ -1,409 +0,0 @@
1
- # Numeric is the class from which all higher-level numeric classes should
2
- # inherit.
3
- #
4
- # Numeric allows instantiation of heap-allocated objects. Other core numeric
5
- # classes such as Integer are implemented as immediates, which means that each
6
- # Integer is a single immutable object which is always passed by value.
7
- #
8
- # a = 1
9
- # 1.object_id == a.object_id #=> true
10
- #
11
- # There can only ever be one instance of the integer `1`, for example. Ruby
12
- # ensures this by preventing instantiation. If duplication is attempted, the
13
- # same instance is returned.
14
- #
15
- # Integer.new(1) #=> NoMethodError: undefined method `new' for Integer:Class
16
- # 1.dup #=> 1
17
- # 1.object_id == 1.dup.object_id #=> true
18
- #
19
- # For this reason, Numeric should be used when defining other numeric classes.
20
- #
21
- # Classes which inherit from Numeric must implement `coerce`, which returns a
22
- # two-member Array containing an object that has been coerced into an instance
23
- # of the new class and `self` (see #coerce).
24
- #
25
- # Inheriting classes should also implement arithmetic operator methods (`+`,
26
- # `-`, `*` and `/`) and the `<=>` operator (see Comparable). These methods may
27
- # rely on `coerce` to ensure interoperability with instances of other numeric
28
- # classes.
29
- #
30
- # class Tally < Numeric
31
- # def initialize(string)
32
- # @string = string
33
- # end
34
- #
35
- # def to_s
36
- # @string
37
- # end
38
- #
39
- # def to_i
40
- # @string.size
41
- # end
42
- #
43
- # def coerce(other)
44
- # [self.class.new('|' * other.to_i), self]
45
- # end
46
- #
47
- # def <=>(other)
48
- # to_i <=> other.to_i
49
- # end
50
- #
51
- # def +(other)
52
- # self.class.new('|' * (to_i + other.to_i))
53
- # end
54
- #
55
- # def -(other)
56
- # self.class.new('|' * (to_i - other.to_i))
57
- # end
58
- #
59
- # def *(other)
60
- # self.class.new('|' * (to_i * other.to_i))
61
- # end
62
- #
63
- # def /(other)
64
- # self.class.new('|' * (to_i / other.to_i))
65
- # end
66
- # end
67
- #
68
- # tally = Tally.new('||')
69
- # puts tally * 2 #=> "||||"
70
- # puts tally > 1 #=> true
71
- #
72
- class Numeric
73
- include Comparable
74
-
75
- public
76
-
77
- # `x.modulo(y)` means `x-y*(x/y).floor`.
78
- #
79
- # Equivalent to `num.divmod(numeric)[1]`.
80
- #
81
- # See Numeric#divmod.
82
- #
83
- def %: (Numeric) -> Numeric
84
-
85
- # Unary Plus---Returns the receiver.
86
- #
87
- def +@: () -> Numeric
88
-
89
- # Unary Minus---Returns the receiver, negated.
90
- #
91
- def -@: () -> Numeric
92
-
93
- # Returns zero if `number` equals `other`, otherwise returns `nil`.
94
- #
95
- def <=>: (Numeric other) -> Integer
96
-
97
- # Returns the absolute value of `num`.
98
- #
99
- # 12.abs #=> 12
100
- # (-34.56).abs #=> 34.56
101
- # -34.56.abs #=> 34.56
102
- #
103
- # Numeric#magnitude is an alias for Numeric#abs.
104
- #
105
- def abs: () -> Numeric
106
-
107
- # Returns square of self.
108
- #
109
- def abs2: () -> Numeric
110
-
111
- # Returns 0 if the value is positive, pi otherwise.
112
- #
113
- def angle: () -> Numeric
114
-
115
- # Returns 0 if the value is positive, pi otherwise.
116
- #
117
- alias arg angle
118
-
119
- # Returns the smallest number greater than or equal to `num` with a precision of
120
- # `ndigits` decimal digits (default: 0).
121
- #
122
- # Numeric implements this by converting its value to a Float and invoking
123
- # Float#ceil.
124
- #
125
- def ceil: () -> Integer
126
- | (Integer digits) -> (Integer | Numeric)
127
-
128
- # If `numeric` is the same type as `num`, returns an array `[numeric, num]`.
129
- # Otherwise, returns an array with both `numeric` and `num` represented as Float
130
- # objects.
131
- #
132
- # This coercion mechanism is used by Ruby to handle mixed-type numeric
133
- # operations: it is intended to find a compatible common type between the two
134
- # operands of the operator.
135
- #
136
- # 1.coerce(2.5) #=> [2.5, 1.0]
137
- # 1.2.coerce(3) #=> [3.0, 1.2]
138
- # 1.coerce(2) #=> [2, 1]
139
- #
140
- def coerce: (Numeric) -> [ Numeric, Numeric ]
141
-
142
- # Returns self.
143
- #
144
- def conj: () -> Numeric
145
-
146
- # Returns self.
147
- #
148
- def conjugate: () -> Numeric
149
-
150
- # Returns the denominator (always positive).
151
- #
152
- def denominator: () -> Integer
153
-
154
- # Uses `/` to perform division, then converts the result to an integer. Numeric
155
- # does not define the `/` operator; this is left to subclasses.
156
- #
157
- # Equivalent to `num.divmod(numeric)[0]`.
158
- #
159
- # See Numeric#divmod.
160
- #
161
- def div: (Numeric) -> Integer
162
-
163
- # Returns an array containing the quotient and modulus obtained by dividing
164
- # `num` by `numeric`.
165
- #
166
- # If `q, r = x.divmod(y)`, then
167
- #
168
- # q = floor(x/y)
169
- # x = q*y + r
170
- #
171
- # The quotient is rounded toward negative infinity, as shown in the following
172
- # table:
173
- #
174
- # a | b | a.divmod(b) | a/b | a.modulo(b) | a.remainder(b)
175
- # ------+-----+---------------+---------+-------------+---------------
176
- # 13 | 4 | 3, 1 | 3 | 1 | 1
177
- # ------+-----+---------------+---------+-------------+---------------
178
- # 13 | -4 | -4, -3 | -4 | -3 | 1
179
- # ------+-----+---------------+---------+-------------+---------------
180
- # -13 | 4 | -4, 3 | -4 | 3 | -1
181
- # ------+-----+---------------+---------+-------------+---------------
182
- # -13 | -4 | 3, -1 | 3 | -1 | -1
183
- # ------+-----+---------------+---------+-------------+---------------
184
- # 11.5 | 4 | 2, 3.5 | 2.875 | 3.5 | 3.5
185
- # ------+-----+---------------+---------+-------------+---------------
186
- # 11.5 | -4 | -3, -0.5 | -2.875 | -0.5 | 3.5
187
- # ------+-----+---------------+---------+-------------+---------------
188
- # -11.5 | 4 | -3, 0.5 | -2.875 | 0.5 | -3.5
189
- # ------+-----+---------------+---------+-------------+---------------
190
- # -11.5 | -4 | 2, -3.5 | 2.875 | -3.5 | -3.5
191
- #
192
- # Examples
193
- #
194
- # 11.divmod(3) #=> [3, 2]
195
- # 11.divmod(-3) #=> [-4, -1]
196
- # 11.divmod(3.5) #=> [3, 0.5]
197
- # (-11).divmod(3.5) #=> [-4, 3.0]
198
- # 11.5.divmod(3.5) #=> [3, 1.0]
199
- #
200
- def divmod: (Numeric) -> [ Numeric, Numeric ]
201
-
202
- # Returns `true` if `num` and `numeric` are the same type and have equal values.
203
- # Contrast this with Numeric#==, which performs type conversions.
204
- #
205
- # 1 == 1.0 #=> true
206
- # 1.eql?(1.0) #=> false
207
- # 1.0.eql?(1.0) #=> true
208
- #
209
- def eql?: (untyped) -> bool
210
-
211
- # Returns float division.
212
- #
213
- def fdiv: (Numeric) -> Numeric
214
-
215
- # Returns `true` if `num` is a finite number, otherwise returns `false`.
216
- #
217
- def finite?: () -> bool
218
-
219
- # Returns the largest number less than or equal to `num` with a precision of
220
- # `ndigits` decimal digits (default: 0).
221
- #
222
- # Numeric implements this by converting its value to a Float and invoking
223
- # Float#floor.
224
- #
225
- def floor: () -> Integer
226
- | (Integer digits) -> Numeric
227
-
228
- # Returns the corresponding imaginary number. Not available for complex numbers.
229
- #
230
- # -42.i #=> (0-42i)
231
- # 2.0.i #=> (0+2.0i)
232
- #
233
- def i: () -> Complex
234
-
235
- # Returns zero.
236
- #
237
- def imag: () -> Numeric
238
-
239
- # Returns zero.
240
- #
241
- def imaginary: () -> Numeric
242
-
243
- # Returns `nil`, -1, or 1 depending on whether the value is finite, `-Infinity`,
244
- # or `+Infinity`.
245
- #
246
- def infinite?: () -> Integer?
247
-
248
- # Returns `true` if `num` is an Integer.
249
- #
250
- # 1.0.integer? #=> false
251
- # 1.integer? #=> true
252
- #
253
- def integer?: () -> bool
254
-
255
- # Returns the absolute value of `num`.
256
- #
257
- # 12.abs #=> 12
258
- # (-34.56).abs #=> 34.56
259
- # -34.56.abs #=> 34.56
260
- #
261
- # Numeric#magnitude is an alias for Numeric#abs.
262
- #
263
- alias magnitude abs
264
-
265
- # `x.modulo(y)` means `x-y*(x/y).floor`.
266
- #
267
- # Equivalent to `num.divmod(numeric)[1]`.
268
- #
269
- # See Numeric#divmod.
270
- #
271
- def modulo: (Numeric) -> Numeric
272
-
273
- # Returns `true` if `num` is less than 0.
274
- #
275
- def negative?: () -> bool
276
-
277
- # Returns `self` if `num` is not zero, `nil` otherwise.
278
- #
279
- # This behavior is useful when chaining comparisons:
280
- #
281
- # a = %w( z Bb bB bb BB a aA Aa AA A )
282
- # b = a.sort {|a,b| (a.downcase <=> b.downcase).nonzero? || a <=> b }
283
- # b #=> ["A", "a", "AA", "Aa", "aA", "BB", "Bb", "bB", "bb", "z"]
284
- #
285
- def nonzero?: () -> self?
286
-
287
- # Returns the numerator.
288
- #
289
- def numerator: () -> Numeric
290
-
291
- # Returns 0 if the value is positive, pi otherwise.
292
- #
293
- alias phase angle
294
-
295
- # Returns an array; [num.abs, num.arg].
296
- #
297
- def polar: () -> [ Numeric, Numeric ]
298
-
299
- # Returns `true` if `num` is greater than 0.
300
- #
301
- def positive?: () -> bool
302
-
303
- # Returns the most exact division (rational for integers, float for floats).
304
- #
305
- def quo: (Numeric) -> Numeric
306
-
307
- # Returns self.
308
- #
309
- def real: () -> Numeric
310
-
311
- # Returns `true` if `num` is a real number (i.e. not Complex).
312
- #
313
- def real?: () -> bool
314
-
315
- # Returns an array; [num, 0].
316
- #
317
- def rect: () -> [ Numeric, Numeric ]
318
-
319
- # Returns an array; [num, 0].
320
- #
321
- alias rectangular rect
322
-
323
- # `x.remainder(y)` means `x-y*(x/y).truncate`.
324
- #
325
- # See Numeric#divmod.
326
- #
327
- def remainder: (Numeric) -> Numeric
328
-
329
- # Returns `num` rounded to the nearest value with a precision of `ndigits`
330
- # decimal digits (default: 0).
331
- #
332
- # Numeric implements this by converting its value to a Float and invoking
333
- # Float#round.
334
- #
335
- def round: () -> Integer
336
- | (Integer digits) -> Numeric
337
-
338
- # Invokes the given block with the sequence of numbers starting at `num`,
339
- # incremented by `step` (defaulted to `1`) on each call.
340
- #
341
- # The loop finishes when the value to be passed to the block is greater than
342
- # `limit` (if `step` is positive) or less than `limit` (if `step` is negative),
343
- # where `limit` is defaulted to infinity.
344
- #
345
- # In the recommended keyword argument style, either or both of `step` and
346
- # `limit` (default infinity) can be omitted. In the fixed position argument
347
- # style, zero as a step (i.e. `num.step(limit, 0)`) is not allowed for
348
- # historical compatibility reasons.
349
- #
350
- # If all the arguments are integers, the loop operates using an integer counter.
351
- #
352
- # If any of the arguments are floating point numbers, all are converted to
353
- # floats, and the loop is executed *floor(n + n*Float::EPSILON) + 1* times,
354
- # where *n = (limit - num)/step*.
355
- #
356
- # Otherwise, the loop starts at `num`, uses either the less-than (`<`) or
357
- # greater-than (`>`) operator to compare the counter against `limit`, and
358
- # increments itself using the `+` operator.
359
- #
360
- # If no block is given, an Enumerator is returned instead. Especially, the
361
- # enumerator is an Enumerator::ArithmeticSequence if both `limit` and `step` are
362
- # kind of Numeric or `nil`.
363
- #
364
- # For example:
365
- #
366
- # p 1.step.take(4)
367
- # p 10.step(by: -1).take(4)
368
- # 3.step(to: 5) {|i| print i, " " }
369
- # 1.step(10, 2) {|i| print i, " " }
370
- # Math::E.step(to: Math::PI, by: 0.2) {|f| print f, " " }
371
- #
372
- # Will produce:
373
- #
374
- # [1, 2, 3, 4]
375
- # [10, 9, 8, 7]
376
- # 3 4 5
377
- # 1 3 5 7 9
378
- # 2.718281828459045 2.9182818284590453 3.118281828459045
379
- #
380
- def step: (?Numeric limit, ?Numeric step) { (Numeric) -> void } -> self
381
- | (?Numeric limit, ?Numeric step) -> Enumerator[Numeric, self]
382
- | (?by: Numeric, ?to: Numeric) { (Numeric) -> void } -> self
383
- | (?by: Numeric, ?to: Numeric) -> Enumerator[Numeric, self]
384
-
385
- # Returns the value as a complex.
386
- #
387
- def to_c: () -> Complex
388
-
389
- # Invokes the child class's `to_i` method to convert `num` to an integer.
390
- #
391
- # 1.0.class #=> Float
392
- # 1.0.to_int.class #=> Integer
393
- # 1.0.to_i.class #=> Integer
394
- #
395
- def to_int: () -> Integer
396
-
397
- # Returns `num` truncated (toward zero) to a precision of `ndigits` decimal
398
- # digits (default: 0).
399
- #
400
- # Numeric implements this by converting its value to a Float and invoking
401
- # Float#truncate.
402
- #
403
- def truncate: () -> Integer
404
- | (Integer ndigits) -> (Integer | Numeric)
405
-
406
- # Returns `true` if `num` has a zero value.
407
- #
408
- def zero?: () -> bool
409
- end