steep 0.1.0.pre2 → 0.1.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.
- checksums.yaml +5 -5
- data/.travis.yml +1 -1
- data/README.md +146 -33
- data/bin/smoke_runner.rb +43 -10
- data/lib/steep/ast/annotation/collection.rb +93 -0
- data/lib/steep/ast/annotation.rb +131 -0
- data/lib/steep/ast/buffer.rb +47 -0
- data/lib/steep/ast/location.rb +82 -0
- data/lib/steep/ast/method_type.rb +116 -0
- data/lib/steep/ast/signature/class.rb +33 -0
- data/lib/steep/ast/signature/const.rb +17 -0
- data/lib/steep/ast/signature/env.rb +123 -0
- data/lib/steep/ast/signature/extension.rb +21 -0
- data/lib/steep/ast/signature/gvar.rb +17 -0
- data/lib/steep/ast/signature/interface.rb +31 -0
- data/lib/steep/ast/signature/members.rb +71 -0
- data/lib/steep/ast/signature/module.rb +21 -0
- data/lib/steep/ast/type_params.rb +13 -0
- data/lib/steep/ast/types/any.rb +39 -0
- data/lib/steep/ast/types/bot.rb +39 -0
- data/lib/steep/ast/types/class.rb +35 -0
- data/lib/steep/ast/types/helper.rb +21 -0
- data/lib/steep/ast/types/instance.rb +39 -0
- data/lib/steep/ast/types/intersection.rb +74 -0
- data/lib/steep/ast/types/name.rb +124 -0
- data/lib/steep/ast/types/self.rb +39 -0
- data/lib/steep/ast/types/top.rb +39 -0
- data/lib/steep/ast/types/union.rb +74 -0
- data/lib/steep/ast/types/var.rb +57 -0
- data/lib/steep/ast/types/void.rb +35 -0
- data/lib/steep/cli.rb +28 -1
- data/lib/steep/drivers/annotations.rb +32 -0
- data/lib/steep/drivers/check.rb +53 -77
- data/lib/steep/drivers/scaffold.rb +303 -0
- data/lib/steep/drivers/utils/each_signature.rb +66 -0
- data/lib/steep/drivers/utils/validator.rb +115 -0
- data/lib/steep/drivers/validate.rb +39 -0
- data/lib/steep/errors.rb +291 -19
- data/lib/steep/interface/abstract.rb +44 -0
- data/lib/steep/interface/builder.rb +470 -0
- data/lib/steep/interface/instantiated.rb +126 -0
- data/lib/steep/interface/ivar_chain.rb +26 -0
- data/lib/steep/interface/method.rb +60 -0
- data/lib/steep/{interface.rb → interface/method_type.rb} +111 -100
- data/lib/steep/interface/substitution.rb +65 -0
- data/lib/steep/module_name.rb +116 -0
- data/lib/steep/parser.rb +1314 -814
- data/lib/steep/parser.y +536 -175
- data/lib/steep/source.rb +220 -25
- data/lib/steep/subtyping/check.rb +673 -0
- data/lib/steep/subtyping/constraints.rb +275 -0
- data/lib/steep/subtyping/relation.rb +41 -0
- data/lib/steep/subtyping/result.rb +126 -0
- data/lib/steep/subtyping/trace.rb +48 -0
- data/lib/steep/subtyping/variable_occurrence.rb +49 -0
- data/lib/steep/subtyping/variable_variance.rb +69 -0
- data/lib/steep/type_construction.rb +1630 -524
- data/lib/steep/type_inference/block_params.rb +100 -0
- data/lib/steep/type_inference/constant_env.rb +55 -0
- data/lib/steep/type_inference/send_args.rb +222 -0
- data/lib/steep/type_inference/type_env.rb +226 -0
- data/lib/steep/type_name.rb +27 -7
- data/lib/steep/typing.rb +4 -0
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +71 -16
- data/smoke/and/a.rb +4 -2
- data/smoke/array/a.rb +4 -5
- data/smoke/array/b.rb +4 -4
- data/smoke/block/a.rb +2 -2
- data/smoke/block/a.rbi +2 -0
- data/smoke/block/b.rb +15 -0
- data/smoke/case/a.rb +3 -3
- data/smoke/class/a.rb +3 -3
- data/smoke/class/b.rb +0 -2
- data/smoke/class/d.rb +2 -2
- data/smoke/class/e.rb +1 -1
- data/smoke/class/f.rb +2 -2
- data/smoke/class/g.rb +8 -0
- data/smoke/const/a.rb +3 -3
- data/smoke/dstr/a.rb +1 -1
- data/smoke/ensure/a.rb +22 -0
- data/smoke/enumerator/a.rb +6 -6
- data/smoke/enumerator/b.rb +22 -0
- data/smoke/extension/a.rb +2 -2
- data/smoke/extension/b.rb +3 -3
- data/smoke/extension/c.rb +1 -1
- data/smoke/hello/hello.rb +2 -2
- data/smoke/if/a.rb +4 -2
- data/smoke/kwbegin/a.rb +8 -0
- data/smoke/literal/a.rb +5 -5
- data/smoke/method/a.rb +5 -5
- data/smoke/method/a.rbi +4 -0
- data/smoke/method/b.rb +29 -0
- data/smoke/module/a.rb +3 -3
- data/smoke/module/a.rbi +9 -0
- data/smoke/module/b.rb +2 -2
- data/smoke/module/c.rb +1 -1
- data/smoke/module/d.rb +5 -0
- data/smoke/module/e.rb +13 -0
- data/smoke/module/f.rb +13 -0
- data/smoke/rescue/a.rb +62 -0
- data/smoke/super/a.rb +2 -2
- data/smoke/type_case/a.rb +35 -0
- data/smoke/yield/a.rb +2 -2
- data/stdlib/builtin.rbi +463 -24
- data/steep.gemspec +3 -2
- metadata +91 -29
- data/lib/steep/annotation.rb +0 -223
- data/lib/steep/signature/class.rb +0 -450
- data/lib/steep/signature/extension.rb +0 -51
- data/lib/steep/signature/interface.rb +0 -49
- data/lib/steep/types/any.rb +0 -31
- data/lib/steep/types/class.rb +0 -27
- data/lib/steep/types/instance.rb +0 -27
- data/lib/steep/types/merge.rb +0 -32
- data/lib/steep/types/name.rb +0 -57
- data/lib/steep/types/union.rb +0 -42
- data/lib/steep/types/var.rb +0 -38
- data/lib/steep/types.rb +0 -4
data/smoke/module/f.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# !expects@+2 MethodDefinitionMissing: module=::Palette, method=self.nestopia_palette
|
2
|
+
# !expects@+1 UnexpectedDynamicMethod: module=::Palette, method=nestopia_palette
|
3
|
+
module Palette
|
4
|
+
module_function
|
5
|
+
|
6
|
+
# @dynamic self.defacto_palette
|
7
|
+
|
8
|
+
def defacto_palette
|
9
|
+
[]
|
10
|
+
end
|
11
|
+
|
12
|
+
# @dynamic nestopia_palette
|
13
|
+
end
|
data/smoke/rescue/a.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# @type var a: Integer
|
2
|
+
|
3
|
+
# !expects IncompatibleAssignment: lhs_type=::Integer, rhs_type=(::Integer | ::String)
|
4
|
+
a = begin
|
5
|
+
'foo'
|
6
|
+
rescue
|
7
|
+
1
|
8
|
+
end
|
9
|
+
|
10
|
+
# @type var b: Integer
|
11
|
+
|
12
|
+
# !expects IncompatibleAssignment: lhs_type=::Integer, rhs_type=(::Integer | ::String)
|
13
|
+
b = 'foo' rescue 1
|
14
|
+
|
15
|
+
# @type var c: Integer
|
16
|
+
|
17
|
+
# !expects IncompatibleAssignment: lhs_type=::Integer, rhs_type=(::Integer | ::String | ::Symbol)
|
18
|
+
c = begin
|
19
|
+
'foo'
|
20
|
+
rescue RuntimeError
|
21
|
+
:sym
|
22
|
+
rescue StandardError
|
23
|
+
1
|
24
|
+
end
|
25
|
+
|
26
|
+
# @type var d: Integer
|
27
|
+
|
28
|
+
# !expects IncompatibleAssignment: lhs_type=::Integer, rhs_type=::String
|
29
|
+
d = begin
|
30
|
+
1
|
31
|
+
else
|
32
|
+
'foo'
|
33
|
+
end
|
34
|
+
|
35
|
+
# @type var e: Integer
|
36
|
+
|
37
|
+
# !expects IncompatibleAssignment: lhs_type=::Integer, rhs_type=(::Array<::Integer> | ::Integer | ::String | ::Symbol)
|
38
|
+
e = begin
|
39
|
+
'foo'
|
40
|
+
rescue RuntimeError
|
41
|
+
:sym
|
42
|
+
rescue StandardError
|
43
|
+
1
|
44
|
+
else
|
45
|
+
[1]
|
46
|
+
end
|
47
|
+
|
48
|
+
# @type method foo: (String) -> String
|
49
|
+
|
50
|
+
# !expects MethodBodyTypeMismatch: method=foo, expected=::String, actual=(::Integer | ::String)
|
51
|
+
def foo(a)
|
52
|
+
10
|
53
|
+
rescue
|
54
|
+
'foo'
|
55
|
+
end
|
56
|
+
|
57
|
+
# when empty
|
58
|
+
begin
|
59
|
+
rescue
|
60
|
+
else
|
61
|
+
ensure
|
62
|
+
end
|
data/smoke/super/a.rb
CHANGED
@@ -3,9 +3,9 @@ class A
|
|
3
3
|
# @type self: A
|
4
4
|
|
5
5
|
# @type var a: Integer
|
6
|
-
# !expects IncompatibleAssignment: lhs_type
|
6
|
+
# !expects IncompatibleAssignment: lhs_type=::Integer, rhs_type=::Object
|
7
7
|
a = super(x)
|
8
|
-
# !expects IncompatibleAssignment: lhs_type
|
8
|
+
# !expects IncompatibleAssignment: lhs_type=::Integer, rhs_type=::Object
|
9
9
|
a = super
|
10
10
|
|
11
11
|
# @type var b: Object
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# @type var x: Integer | String | Symbol
|
2
|
+
|
3
|
+
x = (_ = nil)
|
4
|
+
|
5
|
+
case x
|
6
|
+
when Integer, String
|
7
|
+
# !expects NoMethodError: type=(::Integer | ::String), method=foobar
|
8
|
+
x.foobar()
|
9
|
+
end
|
10
|
+
|
11
|
+
case x == 1
|
12
|
+
when Integer
|
13
|
+
# !expects NoMethodError: type=(::Integer | ::String | ::Symbol), method=foobar
|
14
|
+
x.foobar
|
15
|
+
end
|
16
|
+
|
17
|
+
case x
|
18
|
+
when 1
|
19
|
+
# !expects NoMethodError: type=(::Integer | ::String | ::Symbol), method=foobar
|
20
|
+
x.foobar
|
21
|
+
end
|
22
|
+
|
23
|
+
case x
|
24
|
+
when String
|
25
|
+
# !expects@+2 IncompatibleAnnotation: var_name=x, ::Integer <: ::String
|
26
|
+
# @type var x: Integer
|
27
|
+
x + 1
|
28
|
+
end
|
29
|
+
|
30
|
+
case x
|
31
|
+
when Object
|
32
|
+
# !expects@+2 IncompatibleTypeCase: var_name=x, ::Object <: (::Integer | ::String | ::Symbol)
|
33
|
+
# !expects NoMethodError: type=::Object, method=foobar
|
34
|
+
x.foobar
|
35
|
+
end
|
data/smoke/yield/a.rb
CHANGED
@@ -3,10 +3,10 @@ class A
|
|
3
3
|
def foo()
|
4
4
|
# @type var x: String
|
5
5
|
|
6
|
-
# !expects IncompatibleAssignment: lhs_type
|
6
|
+
# !expects IncompatibleAssignment: lhs_type=::String, rhs_type=::Integer
|
7
7
|
x = yield(3)
|
8
8
|
|
9
|
-
# !expects IncompatibleAssignment: lhs_type
|
9
|
+
# !expects IncompatibleAssignment: lhs_type=::Integer, rhs_type=::String
|
10
10
|
yield(x)
|
11
11
|
end
|
12
12
|
|
data/stdlib/builtin.rbi
CHANGED
@@ -4,7 +4,7 @@ end
|
|
4
4
|
|
5
5
|
class Object <: BasicObject
|
6
6
|
include Kernel
|
7
|
-
def tap: { (
|
7
|
+
def tap: { (self) -> any } -> self
|
8
8
|
def to_s: -> String
|
9
9
|
def hash: -> Integer
|
10
10
|
def eql?: (any) -> _Boolean
|
@@ -15,61 +15,230 @@ class Object <: BasicObject
|
|
15
15
|
def to_i: -> Integer
|
16
16
|
def is_a?: (Module) -> _Boolean
|
17
17
|
def inspect: -> String
|
18
|
+
def freeze: -> self
|
19
|
+
def method: (Symbol) -> Method
|
20
|
+
def yield_self: <'a>{ (self) -> 'a } -> 'a
|
21
|
+
def dup: -> self
|
22
|
+
def send: (Symbol, *any) -> any
|
23
|
+
def instance_variable_get: (Symbol) -> any
|
18
24
|
end
|
19
25
|
|
20
26
|
class Module
|
21
27
|
def attr_reader: (*any) -> any
|
22
|
-
def class: ->
|
23
|
-
def
|
28
|
+
def class: -> any
|
29
|
+
def module_function: (*Symbol) -> any
|
30
|
+
| -> any
|
31
|
+
def extend: (Module) -> any
|
32
|
+
def attr_accessor: (*Symbol) -> any
|
33
|
+
def attr_writer: (*Symbol) -> any
|
34
|
+
def include: (Module) -> _Boolean
|
35
|
+
def prepend: (Module) -> _Boolean
|
36
|
+
end
|
37
|
+
|
38
|
+
class Method
|
24
39
|
end
|
25
40
|
|
26
41
|
class Class<'instance> <: Module
|
27
|
-
def
|
28
|
-
def
|
29
|
-
def
|
42
|
+
def new: (*any, **any) -> 'instance
|
43
|
+
def class: -> Class.class
|
44
|
+
def allocate: -> any
|
30
45
|
end
|
31
46
|
|
32
47
|
module Kernel
|
33
48
|
def raise: () -> any
|
34
49
|
| (String) -> any
|
50
|
+
| (*any) -> any
|
35
51
|
|
36
52
|
def block_given?: -> _Boolean
|
37
|
-
def include: (Module) -> _Boolean
|
38
|
-
def prepend: (Module) -> _Boolean
|
39
53
|
def enum_for: (Symbol, *any) -> any
|
54
|
+
def require_relative: (*String) -> void
|
55
|
+
def require: (*String) -> void
|
56
|
+
def loop: { () -> void } -> void
|
57
|
+
def puts: (*any) -> void
|
58
|
+
def eval: (String, ? Integer | nil, ?String) -> any
|
40
59
|
end
|
41
60
|
|
42
61
|
class Array<'a>
|
62
|
+
include Enumerable<'a, self>
|
63
|
+
|
64
|
+
def initialize: (?Integer, ?'a) -> any
|
65
|
+
| (self) -> any
|
66
|
+
| (Integer) { (Integer) -> 'a } -> any
|
67
|
+
|
68
|
+
def *: (Integer) -> self
|
69
|
+
| (String) -> String
|
70
|
+
def -: (self) -> self
|
71
|
+
def +: (self) -> self
|
72
|
+
def <<: ('a) -> self
|
73
|
+
|
43
74
|
def []: (Integer) -> 'a
|
75
|
+
| (Range<Integer>) -> (self | nil)
|
76
|
+
| (Integer, Integer) -> (self | nil)
|
77
|
+
def at: (Integer) -> 'a
|
78
|
+
| (Range<Integer>) -> (self | nil)
|
79
|
+
| (Integer, Integer) -> (self | nil)
|
44
80
|
def []=: (Integer, 'a) -> 'a
|
81
|
+
| (Integer, Integer, 'a) -> 'a
|
82
|
+
| (Integer, Integer, self) -> self
|
83
|
+
| (Range<Integer>, 'a) -> 'a
|
84
|
+
| (Range<Integer>, self) -> self
|
85
|
+
|
86
|
+
def push: (*'a) -> self
|
87
|
+
def append: (*'a) -> self
|
88
|
+
|
89
|
+
def clear: -> self
|
90
|
+
|
91
|
+
def collect!: { ('a) -> 'a } -> self
|
92
|
+
| -> Enumerator<'a, self>
|
93
|
+
def map!: { ('a) -> 'a } -> self
|
94
|
+
| -> Enumerator<'a, self>
|
95
|
+
|
96
|
+
def combination: (?Integer) { (self) -> any } -> Array<self>
|
97
|
+
| (?Integer) -> Enumerator<self, Array<self>>
|
98
|
+
|
45
99
|
def empty?: -> _Boolean
|
46
|
-
def
|
47
|
-
def
|
100
|
+
def compact: -> self
|
101
|
+
def compact!: -> (self | nil)
|
102
|
+
def concat: (*Array<'a>) -> self
|
103
|
+
| (*'a) -> self
|
104
|
+
def delete: ('a) -> ('a | nil)
|
105
|
+
| <'x> ('a) { ('a) -> any } -> ('a | 'x)
|
106
|
+
def delete_at: (Integer) -> ('a | nil)
|
107
|
+
def delete_if: { ('a) -> any } -> self
|
108
|
+
| -> Enumerator<'a, self>
|
109
|
+
def reject!: { ('a) -> any } -> (self | nil)
|
110
|
+
| -> Enumerator<'a, self | nil>
|
111
|
+
def dig: (Integer, any) -> any
|
112
|
+
def each: { ('a) -> any } -> self
|
113
|
+
| -> Enumerator<'a, self>
|
114
|
+
def each_index: { (Integer) -> any } -> self
|
115
|
+
| -> Enumerator<Integer, self>
|
116
|
+
def fetch: (Integer) -> 'a
|
117
|
+
| (Integer, 'a) -> 'a
|
118
|
+
| (Integer) { (Integer) -> 'a } -> 'a
|
119
|
+
def fill: ('a) -> self
|
120
|
+
| { (Integer) -> 'a } -> self
|
121
|
+
| ('a, Integer, ?Integer|nil) -> self
|
122
|
+
| ('a, Range<Integer>) -> self
|
123
|
+
| (Integer, ?Integer|nil) { (Integer) -> 'a} -> self
|
124
|
+
| (Range<Integer>) { (Integer) -> 'a } -> self
|
125
|
+
|
126
|
+
def find_index: ('a) -> (Integer | nil)
|
127
|
+
| { ('a) -> any } -> (Integer | nil)
|
128
|
+
| -> Enumerator<'a, Integer | nil>
|
129
|
+
|
130
|
+
def index: ('a) -> (Integer | nil)
|
131
|
+
| { ('a) -> any } -> (Integer | nil)
|
132
|
+
| -> Enumerator<'a, Integer | nil>
|
133
|
+
|
134
|
+
def flatten: (?Integer | nil) -> Array<any>
|
135
|
+
def flatten!: (?Integer | nil) -> (self | nil)
|
136
|
+
|
137
|
+
def insert: (Integer, *'a) -> self
|
138
|
+
|
48
139
|
def join: (any) -> String
|
49
|
-
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
def
|
140
|
+
|
141
|
+
def keep_if: { ('a) -> any } -> self
|
142
|
+
| -> Enumerator<'a, self>
|
143
|
+
|
144
|
+
def last: -> ('a | nil)
|
145
|
+
| (Integer) -> self
|
146
|
+
|
147
|
+
def length: -> Integer
|
148
|
+
def size: -> Integer
|
149
|
+
|
150
|
+
def pack: (String, ?buffer: String) -> String
|
151
|
+
|
152
|
+
def permutation: (?Integer) { (self) -> any } -> Array<self>
|
153
|
+
| (?Integer) -> Enumerator<self, Array<self>>
|
154
|
+
|
155
|
+
def pop: -> ('a | nil)
|
156
|
+
| (Integer) -> self
|
157
|
+
|
158
|
+
def unshift: (*'a) -> self
|
159
|
+
def prepend: (*'a) -> self
|
160
|
+
|
161
|
+
def product: (*Array<'a>) -> Array<Array<'a>>
|
162
|
+
| (*Array<'a>) { (Array<'a>) -> any } -> self
|
163
|
+
|
164
|
+
def rassoc: (any) -> any
|
165
|
+
|
166
|
+
def repeated_combination: (Integer) { (self) -> any } -> self
|
167
|
+
| (Integer) -> Enumerator<self, self>
|
168
|
+
|
169
|
+
def repeated_permutation: (Integer) { (self) -> any } -> self
|
170
|
+
| (Integer) -> Enumerator<self, self>
|
171
|
+
|
172
|
+
def replace: (self) -> self
|
173
|
+
|
174
|
+
def reverse: -> self
|
175
|
+
def reverse!: -> self
|
176
|
+
|
177
|
+
def rindex: ('a) -> (Integer | nil)
|
178
|
+
| { ('a) -> any } -> (Integer | nil)
|
179
|
+
| -> Enumerator<'a, Integer | nil>
|
180
|
+
|
181
|
+
def rotate: (?Integer) -> self
|
182
|
+
|
183
|
+
def rotate!: (?Integer) -> self
|
184
|
+
|
185
|
+
def sample: (?random: any) -> ('a | nil)
|
186
|
+
| (Integer, ?random: any) -> self
|
187
|
+
|
188
|
+
def select!: -> Enumerator<'a, self>
|
189
|
+
| { ('a) -> any } -> self
|
190
|
+
|
191
|
+
def shift: -> ('a | nil)
|
192
|
+
| (Integer) -> self
|
193
|
+
|
194
|
+
def shuffle: (?random: any) -> self
|
195
|
+
|
196
|
+
def shuffle!: (?random: any) -> self
|
197
|
+
|
198
|
+
def slice: (Integer) -> ('a | nil)
|
199
|
+
| (Integer, Integer) -> (self | nil)
|
200
|
+
| (Range<Integer>) -> (self | nil)
|
201
|
+
|
202
|
+
def slice!: (Integer) -> ('a | nil)
|
203
|
+
| (Integer, Integer) -> (self | nil)
|
204
|
+
| (Range<Integer>) -> (self | nil)
|
205
|
+
|
206
|
+
def to_h: -> Hash<any, any>
|
207
|
+
|
208
|
+
def transpose: -> self
|
209
|
+
|
210
|
+
def uniq!: -> (self | nil)
|
211
|
+
| { ('a) -> any } -> (self | nil)
|
212
|
+
|
213
|
+
def values_at: (*Integer | Range<Integer>) -> self
|
214
|
+
|
215
|
+
def zip: <'x> (Array<'x>) -> Array<any>
|
216
|
+
| <'x, 'y> (Array<'x>) { ('a, 'x) -> 'y }-> Array<'y>
|
57
217
|
end
|
58
218
|
|
59
219
|
class Hash<'key, 'value>
|
60
|
-
def []: ('key) -> 'value
|
220
|
+
def []: ('key) -> ('value | nil)
|
61
221
|
def []=: ('key, 'value) -> 'value
|
62
222
|
def size: -> Integer
|
63
223
|
def transform_values: <'a> { ('value) -> 'a } -> Hash<'key, 'a>
|
64
224
|
def each_key: { ('key) -> any } -> instance
|
65
|
-
| -> Enumerator<'a,
|
225
|
+
| -> Enumerator<'a, self>
|
66
226
|
def self.[]: (Array<any>) -> Hash<'key, 'value>
|
227
|
+
def keys: () -> Array<'key>
|
67
228
|
end
|
68
229
|
|
69
230
|
class Symbol
|
231
|
+
def self.all_symbols: -> Array<Symbol>
|
232
|
+
end
|
233
|
+
|
234
|
+
interface _ToS
|
235
|
+
def to_s: -> String
|
70
236
|
end
|
71
237
|
|
72
238
|
interface _Boolean
|
239
|
+
def !: -> _Boolean
|
240
|
+
def to_s: -> String
|
241
|
+
def ==: (any) -> _Boolean
|
73
242
|
end
|
74
243
|
|
75
244
|
class NilClass
|
@@ -77,28 +246,298 @@ end
|
|
77
246
|
|
78
247
|
class Numeric
|
79
248
|
def +: (Numeric) -> Numeric
|
249
|
+
def /: (Numeric) -> Numeric
|
250
|
+
def <=: (any) -> _Boolean
|
251
|
+
def >=: (any) -> _Boolean
|
252
|
+
def < : (any) -> _Boolean
|
253
|
+
def >: (any) -> _Boolean
|
80
254
|
end
|
81
255
|
|
82
256
|
class Integer <: Numeric
|
83
257
|
def to_int: -> Integer
|
84
|
-
def +: (
|
258
|
+
def +: (Integer) -> Integer
|
85
259
|
| (Numeric) -> Numeric
|
86
260
|
def ^: (Numeric) -> Integer
|
261
|
+
def *: (Integer) -> Integer
|
262
|
+
| (Float) -> Float
|
263
|
+
| (Numeric) -> Numeric
|
264
|
+
def >>: (Integer) -> Integer
|
265
|
+
def step: (Integer, ?Integer) { (Integer) -> any } -> self
|
266
|
+
| (Integer, ?Integer) -> Enumerator<Integer, self>
|
267
|
+
def times: { (Integer) -> any } -> self
|
268
|
+
def %: (Integer) -> Integer
|
269
|
+
def -: (Integer) -> Integer
|
270
|
+
| (Float) -> Float
|
271
|
+
| (Numeric) -> Numeric
|
272
|
+
def &: (Integer) -> Integer
|
273
|
+
def |: (Integer) -> Integer
|
274
|
+
def []: (Integer) -> Integer
|
275
|
+
def <<: (Integer) -> Integer
|
276
|
+
def floor: (Integer) -> Integer
|
277
|
+
def **: (Integer) -> Integer
|
278
|
+
def /: (Integer) -> Integer
|
279
|
+
| (Float) -> Float
|
280
|
+
| (Numeric) -> Numeric
|
281
|
+
def ~: () -> Integer
|
87
282
|
end
|
88
283
|
|
89
284
|
class Float <: Numeric
|
285
|
+
def *: (Float) -> Float
|
286
|
+
| (Integer) -> Float
|
287
|
+
| (Numeric) -> Numeric
|
288
|
+
def -: (Float) -> Float
|
289
|
+
def +: (Float) -> Float
|
290
|
+
| (Numeric) -> Numeric
|
291
|
+
def round: (Integer) -> (Float | Integer)
|
292
|
+
| () -> Integer
|
293
|
+
def floor: -> Integer
|
294
|
+
def /: (Float) -> Float
|
295
|
+
| (Integer) -> Float
|
296
|
+
| (Numeric) -> Numeric
|
297
|
+
end
|
298
|
+
|
299
|
+
Math::PI: Float
|
300
|
+
|
301
|
+
class Complex <: Numeric
|
302
|
+
def self.polar: (Numeric, Numeric) -> instance
|
303
|
+
def +: (Complex) -> Complex
|
304
|
+
| (Numeric) -> Numeric
|
305
|
+
def conjugate: -> Complex
|
306
|
+
def *: (Complex) -> Complex
|
307
|
+
| (Numeric) -> Numeric
|
308
|
+
def real: -> Float
|
90
309
|
end
|
91
310
|
|
92
311
|
class Range<'a>
|
312
|
+
def begin: -> 'a
|
313
|
+
def end: -> 'a
|
314
|
+
def map: <'b> { ('a) -> 'b } -> Array<'b>
|
315
|
+
def all?: { ('a) -> any } -> any
|
316
|
+
def max_by: { ('a) -> any } -> 'a
|
317
|
+
def to_a: -> Array<'a>
|
93
318
|
end
|
94
319
|
|
95
320
|
class String
|
321
|
+
def []: (Range<Integer>) -> String
|
322
|
+
def to_sym: -> Symbol
|
96
323
|
def +: (String) -> String
|
97
324
|
def to_str: -> String
|
98
325
|
def size: -> Integer
|
326
|
+
def bytes: -> Array<Integer>
|
327
|
+
def %: (any) -> String
|
328
|
+
def <<: (String) -> self
|
329
|
+
def chars: -> Array<String>
|
330
|
+
def slice!: (Integer) -> String
|
331
|
+
| (Integer, Integer) -> String
|
332
|
+
| (String) -> String
|
333
|
+
| (Regexp, ?Integer) -> String
|
334
|
+
| (Range<Integer>) -> String
|
335
|
+
def unpack: (String) -> Array<any>
|
336
|
+
def b: -> String
|
337
|
+
def downcase: -> String
|
338
|
+
def bytes: -> Array<Integer>
|
339
|
+
def split: (String) -> Array<String>
|
340
|
+
| (Regexp) -> Array<String>
|
341
|
+
def gsub: (Regexp, String) -> self
|
342
|
+
| (String, String) -> self
|
343
|
+
| (Regexp) { (String) -> _ToS } -> String
|
344
|
+
def gsub!: (Regexp, String) -> self
|
345
|
+
| (String, String) -> self
|
346
|
+
| (Regexp) { (String) -> _ToS } -> String
|
347
|
+
def sub: (Regexp | String, String) -> self
|
348
|
+
| (Regexp | String) { (String) -> _ToS } -> String
|
349
|
+
def chomp: -> String
|
350
|
+
def *: (Integer) -> String
|
351
|
+
def scan: (Regexp) { (Array<String>) -> void } -> String
|
352
|
+
| (Regexp) -> Array<String>
|
353
|
+
end
|
354
|
+
|
355
|
+
interface _Iteratable<'a, 'b>
|
356
|
+
def each: () { ('a) -> void } -> 'b
|
357
|
+
end
|
358
|
+
|
359
|
+
module Enumerable<'a, 'b> : _Iteratable<'a, 'b>
|
360
|
+
def all?: -> _Boolean
|
361
|
+
| { ('a) -> any } -> _Boolean
|
362
|
+
| (any) -> _Boolean
|
363
|
+
|
364
|
+
def any?: -> _Boolean
|
365
|
+
| { ('a) -> any } -> _Boolean
|
366
|
+
| (any) -> _Boolean
|
367
|
+
|
368
|
+
def chunk: { ('a) -> any } -> Enumerator<'a, self>
|
369
|
+
|
370
|
+
def chunk_while: { ('a, 'a) -> any } -> Enumerator<'a, 'b>
|
371
|
+
|
372
|
+
def collect: <'x> { ('a) -> 'x } -> Array<'x>
|
373
|
+
| <'x> -> Enumerator<'a, Array<'x>>
|
374
|
+
|
375
|
+
def map: <'x> { ('a) -> 'x } -> Array<'x>
|
376
|
+
| <'x> -> Enumerator<'a, Array<'x>>
|
377
|
+
|
378
|
+
def flat_map: <'x> { ('a) -> Array<'x> } -> Array<'x>
|
379
|
+
| <'x> -> Enumerator<'a, Array<'x>>
|
380
|
+
|
381
|
+
def collect_concat: <'x> { ('a) -> Array<'x> } -> Array<'x>
|
382
|
+
| <'x> -> Enumerator<'a, Array<'x>>
|
383
|
+
|
384
|
+
def count: -> Integer
|
385
|
+
| (any) -> Integer
|
386
|
+
| { ('a) -> any } -> Integer
|
387
|
+
|
388
|
+
def cycle: (?Integer) -> Enumerator<'a, nil>
|
389
|
+
| (?Integer) { ('a) -> any } -> nil
|
390
|
+
|
391
|
+
def detect: ('a) { ('a) -> any } -> 'a
|
392
|
+
| { ('a) -> any } -> ('a | nil)
|
393
|
+
| -> Enumerator<'a, 'a | nil>
|
394
|
+
| ('a) -> Enumerator<'a, 'a>
|
395
|
+
|
396
|
+
def find: ('a) { ('a) -> any } -> 'a
|
397
|
+
| { ('a) -> any } -> ('a | nil)
|
398
|
+
| -> Enumerator<'a, 'a | nil>
|
399
|
+
| ('a) -> Enumerator<'a, 'a>
|
400
|
+
|
401
|
+
def drop: (Integer) -> Array<'a>
|
402
|
+
|
403
|
+
def drop_while: -> Enumerator<'a, Array<'a>>
|
404
|
+
| { ('a) -> any } -> Array<'a>
|
405
|
+
|
406
|
+
def each_cons: (Integer) -> Enumerator<Array<'a>, nil>
|
407
|
+
| (Integer) { (Array<'a>) -> any } -> nil
|
408
|
+
|
409
|
+
def each_entry: -> Enumerator<'a, self>
|
410
|
+
| { ('a) -> any } -> self
|
411
|
+
|
412
|
+
def each_slice: (Integer) -> Enumerator<Array<'a>, nil>
|
413
|
+
| (Integer) { (Array<'a>) -> any } -> nil
|
414
|
+
|
415
|
+
def each_with_index: { ('a, Integer) -> any } -> self
|
416
|
+
|
417
|
+
def each_with_object: <'x> ('x) { ('a, 'x) -> any } -> 'x
|
418
|
+
|
419
|
+
def to_a: -> Array<'a>
|
420
|
+
def entries: -> Array<'a>
|
421
|
+
|
422
|
+
def find_all: -> Enumerator<'a, Array<'a>>
|
423
|
+
| { ('a) -> any } -> Array<'a>
|
424
|
+
def select: -> Enumerator<'a, Array<'a>>
|
425
|
+
| { ('a) -> any } -> Array<'a>
|
426
|
+
|
427
|
+
def find_index: (any) -> (Integer | nil)
|
428
|
+
| { ('a) -> any } -> (Integer | nil)
|
429
|
+
| -> Enumerator<'a, Integer | nil>
|
430
|
+
|
431
|
+
def first: () -> ('a | nil)
|
432
|
+
| (Integer) -> Array<'a>
|
433
|
+
|
434
|
+
def grep: (any) -> Array<'a>
|
435
|
+
| <'x> (any) { ('a) -> 'x } -> Array<'x>
|
436
|
+
|
437
|
+
def grep_v: (any) -> Array<'a>
|
438
|
+
| <'x> (any) { ('a) -> 'x } -> Array<'x>
|
439
|
+
|
440
|
+
def group_by: <'x> { ('a) -> 'x } -> Hash<'x, Array<'a>>
|
441
|
+
|
442
|
+
def member?: (any) -> _Boolean
|
443
|
+
def include?: (any) -> _Boolean
|
444
|
+
|
445
|
+
def inject: <'x> ('x) { ('x, 'a) -> 'x } -> 'x
|
446
|
+
| (Symbol) -> any
|
447
|
+
| (any, Symbol) -> any
|
448
|
+
| { ('a, 'a) -> 'a } -> 'a
|
449
|
+
|
450
|
+
|
451
|
+
def reduce: <'x> ('x) { ('x, 'a) -> 'x } -> 'x
|
452
|
+
| (Symbol) -> any
|
453
|
+
| (any, Symbol) -> any
|
454
|
+
| { ('a, 'a) -> 'a } -> 'a
|
455
|
+
|
456
|
+
def max: -> ('a | nil)
|
457
|
+
| (Integer) -> Array<'a>
|
458
|
+
| { ('a, 'a) -> Integer } -> ('a | nil)
|
459
|
+
| (Integer) { ('a, 'a) -> Integer } -> Array<'a>
|
460
|
+
|
461
|
+
def max_by: { ('a, 'a) -> Integer } -> ('a | nil)
|
462
|
+
| (Integer) { ('a, 'a) -> Integer } -> Array<'a>
|
463
|
+
|
464
|
+
def min: -> ('a | nil)
|
465
|
+
| (Integer) -> Array<'a>
|
466
|
+
| { ('a, 'a) -> Integer } -> ('a | nil)
|
467
|
+
| (Integer) { ('a, 'a) -> Integer } -> Array<'a>
|
468
|
+
|
469
|
+
def min_by: { ('a, 'a) -> Integer } -> ('a | nil)
|
470
|
+
| (Integer) { ('a, 'a) -> Integer } -> Array<'a>
|
471
|
+
|
472
|
+
def min_max: -> Array<'a>
|
473
|
+
| { ('a, 'a) -> Integer } -> Array<'a>
|
474
|
+
|
475
|
+
def min_max_by: { ('a, 'a) -> Integer } -> Array<'a>
|
476
|
+
|
477
|
+
def none?: -> _Boolean
|
478
|
+
| { ('a) -> any } -> _Boolean
|
479
|
+
| (any) -> _Boolean
|
480
|
+
|
481
|
+
def one?: -> _Boolean
|
482
|
+
| { ('a) -> any } -> _Boolean
|
483
|
+
| (any) -> _Boolean
|
484
|
+
|
485
|
+
def partition: { ('a) -> any } -> Array<Array<'a>>
|
486
|
+
| -> Enumerator<'a, Array<Array<'a>>>
|
487
|
+
|
488
|
+
def reject: { ('a) -> any } -> Array<'a>
|
489
|
+
| -> Enumerator<'a, Array<'a>>
|
490
|
+
|
491
|
+
def reverse_each: { ('a) -> void } -> self
|
492
|
+
| -> Enumerator<'a, self>
|
493
|
+
|
494
|
+
def slice_after: (any) -> Enumerator<Array<'a>, nil>
|
495
|
+
| { ('a) -> any } -> Enumerator<Array<'a>, nil>
|
496
|
+
|
497
|
+
def slice_before: (any) -> Enumerator<Array<'a>, nil>
|
498
|
+
| { ('a) -> any } -> Enumerator<Array<'a>, nil>
|
499
|
+
|
500
|
+
def slice_when: { ('a, 'a) -> any } -> Enumerator<Array<'a>, nil>
|
501
|
+
|
502
|
+
def sort: -> Array<'a>
|
503
|
+
| { ('a, 'a) -> Integer } -> Array<'a>
|
504
|
+
|
505
|
+
def sort_by: { ('a) -> any } -> Array<'a>
|
506
|
+
| -> Enumerator<'a, Array<'a>>
|
507
|
+
|
508
|
+
def sum: () -> Numeric
|
509
|
+
| (Numeric) -> Numeric
|
510
|
+
| (any) -> any
|
511
|
+
| (?any) { ('a) -> any } -> any
|
512
|
+
|
513
|
+
def take: (Integer) -> Array<'a>
|
514
|
+
|
515
|
+
def take_while: { ('a) -> any } -> Array<'a>
|
516
|
+
| -> Enumerator<'a, Array<'a>>
|
517
|
+
|
518
|
+
|
519
|
+
def to_h: -> Hash<any, any>
|
520
|
+
|
521
|
+
def uniq: -> Array<'a>
|
522
|
+
| { ('a) -> any } -> Array<'a>
|
523
|
+
end
|
524
|
+
|
525
|
+
class Enumerator<'a, 'b>
|
526
|
+
include Enumerable<'a, 'b>
|
527
|
+
def each: { ('a) -> any } -> 'b
|
528
|
+
def with_object: <'x> ('x) { ('a, 'x) -> any } -> 'x
|
529
|
+
def with_index: { ('a, Integer) -> any } -> 'b
|
530
|
+
end
|
531
|
+
|
532
|
+
class Regexp
|
99
533
|
end
|
100
534
|
|
101
|
-
class
|
102
|
-
def
|
103
|
-
def
|
535
|
+
class File
|
536
|
+
def self.binread: (String) -> String
|
537
|
+
def self.extname: (String) -> String
|
538
|
+
def self.basename: (String) -> String
|
539
|
+
def self.readable?: (String) -> _Boolean
|
540
|
+
def self.binwrite: (String, String) -> void
|
541
|
+
def self.read: (String) -> String
|
542
|
+
| (String, Integer | nil) -> (String | nil)
|
104
543
|
end
|