typeprof 0.9.1 → 0.13.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 +4 -4
- data/.github/workflows/main.yml +1 -1
- data/Gemfile.lock +6 -5
- data/doc/demo.md +2 -2
- data/doc/todo.md +133 -0
- data/lib/typeprof/analyzer.rb +163 -77
- data/lib/typeprof/block.rb +39 -4
- data/lib/typeprof/builtin.rb +195 -70
- data/lib/typeprof/cli.rb +7 -0
- data/lib/typeprof/config.rb +30 -14
- data/lib/typeprof/container-type.rb +24 -0
- data/lib/typeprof/export.rb +134 -74
- data/lib/typeprof/import.rb +87 -39
- data/lib/typeprof/iseq.rb +23 -4
- data/lib/typeprof/method.rb +29 -7
- data/lib/typeprof/type.rb +75 -13
- data/lib/typeprof/version.rb +1 -1
- data/smoke/alias.rb +4 -4
- data/smoke/alias2.rb +3 -1
- data/smoke/arguments.rb +2 -2
- data/smoke/arguments2.rb +5 -5
- data/smoke/array-each.rb +1 -1
- data/smoke/array-each3.rb +1 -1
- data/smoke/array-map.rb +1 -1
- data/smoke/array-map2.rb +1 -1
- data/smoke/array-map3.rb +3 -3
- data/smoke/array-mul.rb +2 -2
- data/smoke/array-plus1.rb +1 -1
- data/smoke/array-plus2.rb +1 -0
- data/smoke/array-range-aref.rb +11 -11
- data/smoke/array-replace.rb +1 -1
- data/smoke/array1.rb +5 -5
- data/smoke/array10.rb +1 -1
- data/smoke/array11.rb +1 -1
- data/smoke/array12.rb +1 -1
- data/smoke/array14.rb +1 -1
- data/smoke/array15.rb +1 -1
- data/smoke/array2.rb +2 -2
- data/smoke/array3.rb +1 -0
- data/smoke/array6.rb +2 -1
- data/smoke/array8.rb +1 -1
- data/smoke/array9.rb +1 -1
- data/smoke/attr-module.rb +1 -0
- data/smoke/attr-vis.rb +43 -0
- data/smoke/attr-vis.rbs +4 -0
- data/smoke/attr.rb +2 -2
- data/smoke/block-ambiguous.rb +4 -4
- data/smoke/block-args1-rest.rb +6 -5
- data/smoke/block-args1.rb +5 -5
- data/smoke/block-args2-rest.rb +6 -5
- data/smoke/block-args2.rb +5 -5
- data/smoke/block-args3-rest.rb +7 -6
- data/smoke/block-args3.rb +6 -6
- data/smoke/block-blockarg.rb +3 -3
- data/smoke/block-kwarg.rb +4 -4
- data/smoke/block1.rb +1 -1
- data/smoke/block10.rb +1 -1
- data/smoke/block11.rb +2 -2
- data/smoke/block2.rb +1 -1
- data/smoke/block3.rb +1 -1
- data/smoke/block5.rb +1 -0
- data/smoke/block_given.rb +37 -0
- data/smoke/class_eval.rb +22 -0
- data/smoke/class_method.rb +2 -2
- data/smoke/class_method2.rb +2 -2
- data/smoke/constant2.rb +3 -2
- data/smoke/context-sensitive1.rb +1 -1
- data/smoke/cvar.rb +3 -2
- data/smoke/define_method.rb +2 -2
- data/smoke/define_method3.rb +1 -0
- data/smoke/define_method4.rb +1 -1
- data/smoke/define_method6.rb +19 -0
- data/smoke/define_method7.rb +18 -0
- data/smoke/demo.rb +6 -6
- data/smoke/demo1.rb +1 -1
- data/smoke/demo11.rb +1 -1
- data/smoke/demo2.rb +1 -1
- data/smoke/demo3.rb +1 -1
- data/smoke/demo4.rb +3 -3
- data/smoke/demo5.rb +1 -1
- data/smoke/demo6.rb +2 -1
- data/smoke/demo7.rb +1 -1
- data/smoke/demo9.rb +1 -0
- data/smoke/dummy-execution1.rb +1 -1
- data/smoke/dummy-execution2.rb +1 -1
- data/smoke/dummy_element.rb +1 -1
- data/smoke/ensure1.rb +1 -1
- data/smoke/enum_for.rb +15 -0
- data/smoke/enum_for2.rb +17 -0
- data/smoke/extended.rb +38 -0
- data/smoke/fib.rb +2 -2
- data/smoke/flow1.rb +1 -1
- data/smoke/flow10.rb +17 -0
- data/smoke/flow2.rb +1 -1
- data/smoke/flow3.rb +1 -1
- data/smoke/flow5.rb +1 -1
- data/smoke/flow6.rb +1 -1
- data/smoke/flow7.rb +1 -1
- data/smoke/flow8.rb +1 -1
- data/smoke/flow9.rb +1 -1
- data/smoke/function.rb +1 -1
- data/smoke/gvar.rb +1 -1
- data/smoke/gvar2.rb +1 -1
- data/smoke/hash-fetch.rb +3 -3
- data/smoke/included.rb +38 -0
- data/smoke/inheritance.rb +4 -4
- data/smoke/inherited.rb +26 -0
- data/smoke/initialize.rb +3 -2
- data/smoke/instance_eval.rb +2 -2
- data/smoke/instance_eval4.rb +12 -0
- data/smoke/int_times.rb +1 -1
- data/smoke/integer.rb +1 -1
- data/smoke/ivar.rb +3 -2
- data/smoke/ivar2.rb +2 -2
- data/smoke/ivar3.rb +2 -1
- data/smoke/ivar4.rb +1 -0
- data/smoke/kernel-class.rb +1 -1
- data/smoke/keyword4.rb +1 -1
- data/smoke/kwrest.rb +1 -0
- data/smoke/kwsplat1.rb +2 -2
- data/smoke/kwsplat2.rb +1 -1
- data/smoke/manual-rbs.rb +2 -1
- data/smoke/manual-rbs3.rb +1 -0
- data/smoke/method_in_branch.rb +1 -1
- data/smoke/method_missing.rb +4 -3
- data/smoke/module3.rb +1 -1
- data/smoke/module4.rb +1 -0
- data/smoke/module5.rb +1 -1
- data/smoke/module_function1.rb +3 -2
- data/smoke/module_function2.rb +3 -2
- data/smoke/multiple-include.rb +1 -0
- data/smoke/next1.rb +1 -1
- data/smoke/object-send1.rb +3 -3
- data/smoke/optional1.rb +1 -1
- data/smoke/optional2.rb +1 -1
- data/smoke/optional3.rb +1 -1
- data/smoke/parameterizedd-self.rb +2 -1
- data/smoke/prepend1.rb +33 -0
- data/smoke/prepend2.rb +10 -0
- data/smoke/prepend2.rbs +9 -0
- data/smoke/primitive_method.rb +19 -0
- data/smoke/proc4.rb +1 -1
- data/smoke/public.rb +4 -0
- data/smoke/range.rb +1 -1
- data/smoke/rbs-attr.rb +2 -2
- data/smoke/rbs-proc2.rb +1 -1
- data/smoke/rbs-proc3.rb +1 -1
- data/smoke/rbs-tyvar4.rb +3 -2
- data/smoke/rbs-tyvar6.rb +3 -3
- data/smoke/redo1.rb +1 -1
- data/smoke/redo2.rb +1 -1
- data/smoke/rescue1.rb +1 -1
- data/smoke/rescue2.rb +1 -1
- data/smoke/rescue3.rb +1 -0
- data/smoke/rescue4.rb +1 -1
- data/smoke/respond_to.rb +1 -1
- data/smoke/rest1.rb +2 -2
- data/smoke/rest2.rb +1 -1
- data/smoke/rest3.rb +6 -6
- data/smoke/rest4.rb +2 -2
- data/smoke/rest5.rb +1 -1
- data/smoke/rest6.rb +1 -1
- data/smoke/retry1.rb +2 -2
- data/smoke/simple.rb +12 -0
- data/smoke/step.rb +3 -3
- data/smoke/struct-keyword_init.rb +6 -16
- data/smoke/struct.rb +1 -1
- data/smoke/struct2.rb +1 -1
- data/smoke/struct3.rb +1 -1
- data/smoke/struct4.rb +1 -1
- data/smoke/struct5.rb +2 -2
- data/smoke/struct6.rb +2 -2
- data/smoke/struct7.rb +1 -1
- data/smoke/super1.rb +4 -4
- data/smoke/super3.rb +3 -2
- data/smoke/super4.rb +7 -5
- data/smoke/super5.rb +6 -4
- data/smoke/symbol-proc-attr.rb +1 -1
- data/smoke/tap1.rb +2 -2
- data/smoke/toplevel.rb +1 -1
- data/smoke/type_var.rb +3 -3
- data/smoke/user-demo.rb +1 -1
- data/smoke/wrong-extend.rb +1 -0
- data/smoke/wrong-include.rb +1 -0
- data/smoke/wrong-include2.rb +1 -1
- data/testbed/goodcheck-Gemfile.lock +1 -1
- data/typeprof.gemspec +1 -1
- metadata +24 -5
data/smoke/rest4.rb
CHANGED
data/smoke/rest5.rb
CHANGED
data/smoke/rest6.rb
CHANGED
data/smoke/retry1.rb
CHANGED
|
@@ -16,6 +16,6 @@ __END__
|
|
|
16
16
|
# Classes
|
|
17
17
|
class Object
|
|
18
18
|
private
|
|
19
|
-
def bar: (Integer | String) -> (Integer | String)
|
|
20
|
-
def foo: (Integer | String) -> (Integer | String)
|
|
19
|
+
def bar: (Integer | String x) -> (Integer | String)
|
|
20
|
+
def foo: (Integer | String x) -> (Integer | String)
|
|
21
21
|
end
|
data/smoke/simple.rb
ADDED
data/smoke/step.rb
CHANGED
|
@@ -12,7 +12,7 @@ __END__
|
|
|
12
12
|
# Classes
|
|
13
13
|
class Object
|
|
14
14
|
private
|
|
15
|
-
def log1: (Integer | Numeric) -> nil
|
|
16
|
-
def log2: (void) -> nil
|
|
17
|
-
def log3: (Enumerator[Integer | Numeric]) -> nil
|
|
15
|
+
def log1: (Integer | Numeric x) -> nil
|
|
16
|
+
def log2: (void x) -> nil
|
|
17
|
+
def log3: (Enumerator[Integer | Numeric] x) -> nil
|
|
18
18
|
end
|
|
@@ -1,20 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
Foo
|
|
3
|
-
|
|
4
|
-
class Foo
|
|
5
|
-
def initialize(foo:)
|
|
6
|
-
super(foo: foo.to_s)
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
Foo.new(42)
|
|
1
|
+
Foo = Struct.new(:a, :b, :c, keyword_init: true)
|
|
2
|
+
Foo[a: 1, b: "str", c: 1.0]
|
|
11
3
|
|
|
12
4
|
__END__
|
|
13
|
-
# Errors
|
|
14
|
-
smoke/struct-keyword_init.rb:10: [error] wrong number of arguments (given 1, expected 0)
|
|
15
|
-
|
|
16
5
|
# Classes
|
|
17
|
-
class Foo < Struct
|
|
18
|
-
attr_accessor
|
|
19
|
-
|
|
6
|
+
class Foo < Struct[untyped]
|
|
7
|
+
attr_accessor a(): Integer
|
|
8
|
+
attr_accessor b(): String
|
|
9
|
+
attr_accessor c(): Float
|
|
20
10
|
end
|
data/smoke/struct.rb
CHANGED
data/smoke/struct2.rb
CHANGED
data/smoke/struct3.rb
CHANGED
data/smoke/struct4.rb
CHANGED
data/smoke/struct5.rb
CHANGED
data/smoke/struct6.rb
CHANGED
|
@@ -6,10 +6,10 @@ end
|
|
|
6
6
|
|
|
7
7
|
__END__
|
|
8
8
|
# Classes
|
|
9
|
-
class AnonymousStruct_generated_1 < Struct
|
|
9
|
+
class AnonymousStruct_generated_1 < Struct[untyped]
|
|
10
10
|
attr_accessor foo(): untyped
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
class Foo < AnonymousStruct_generated_1
|
|
14
|
-
def initialize: (untyped) -> Foo
|
|
14
|
+
def initialize: (untyped foo) -> Foo
|
|
15
15
|
end
|
data/smoke/struct7.rb
CHANGED
data/smoke/super1.rb
CHANGED
|
@@ -35,7 +35,7 @@ __END__
|
|
|
35
35
|
# Classes
|
|
36
36
|
class Object
|
|
37
37
|
private
|
|
38
|
-
def log: (Baz) -> nil
|
|
38
|
+
def log: (Baz x) -> nil
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
class A
|
|
@@ -57,13 +57,13 @@ class Z
|
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
class Foo
|
|
60
|
-
def f: (C) -> X
|
|
60
|
+
def f: (C x) -> X
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
class Bar < Foo
|
|
64
|
-
def f: (B) -> Y
|
|
64
|
+
def f: (B x) -> Y
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
class Baz < Bar
|
|
68
|
-
def f: (A) -> Z
|
|
68
|
+
def f: (A x) -> Z
|
|
69
69
|
end
|
data/smoke/super3.rb
CHANGED
data/smoke/super4.rb
CHANGED
|
@@ -21,23 +21,25 @@ E.new.f(:top)
|
|
|
21
21
|
__END__
|
|
22
22
|
# Classes
|
|
23
23
|
module M1
|
|
24
|
-
def f: (:D) -> nil
|
|
24
|
+
def f: (:D m) -> nil
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
module M2
|
|
28
|
-
def f: (:E) -> nil
|
|
28
|
+
def f: (:E m) -> nil
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
class C
|
|
32
|
-
def f: (:M1) -> nil
|
|
32
|
+
def f: (:M1 m) -> nil
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
class D < C
|
|
36
36
|
include M1
|
|
37
|
-
|
|
37
|
+
|
|
38
|
+
def f: (:M2 m) -> nil
|
|
38
39
|
end
|
|
39
40
|
|
|
40
41
|
class E < D
|
|
41
42
|
include M2
|
|
42
|
-
|
|
43
|
+
|
|
44
|
+
def f: (:top m) -> nil
|
|
43
45
|
end
|
data/smoke/super5.rb
CHANGED
|
@@ -18,19 +18,21 @@ E.new.f(:top)
|
|
|
18
18
|
__END__
|
|
19
19
|
# Classes
|
|
20
20
|
module M
|
|
21
|
-
def f: (:D | :E) -> nil
|
|
21
|
+
def f: (:D | :E m) -> nil
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
class C
|
|
25
|
-
def f: (:M) -> nil
|
|
25
|
+
def f: (:M m) -> nil
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
class D < C
|
|
29
29
|
include M
|
|
30
|
-
|
|
30
|
+
|
|
31
|
+
def f: (:M m) -> nil
|
|
31
32
|
end
|
|
32
33
|
|
|
33
34
|
class E < D
|
|
34
35
|
include M
|
|
35
|
-
|
|
36
|
+
|
|
37
|
+
def f: (:top m) -> nil
|
|
36
38
|
end
|
data/smoke/symbol-proc-attr.rb
CHANGED
data/smoke/tap1.rb
CHANGED
data/smoke/toplevel.rb
CHANGED
data/smoke/type_var.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
def number?(
|
|
2
|
-
%w[integer float].include?(
|
|
1
|
+
def number?(ty)
|
|
2
|
+
%w[integer float].include?(ty).then { puts 1 }
|
|
3
3
|
end
|
|
4
4
|
number?('string')
|
|
5
5
|
|
|
@@ -7,5 +7,5 @@ __END__
|
|
|
7
7
|
# Classes
|
|
8
8
|
class Object
|
|
9
9
|
private
|
|
10
|
-
def number?: (String) -> nil
|
|
10
|
+
def number?: (String ty) -> nil
|
|
11
11
|
end
|
data/smoke/user-demo.rb
CHANGED
|
@@ -9,7 +9,7 @@ end
|
|
|
9
9
|
__END__
|
|
10
10
|
# Classes
|
|
11
11
|
class User
|
|
12
|
+
def foo: (?name: String | untyped, ?age: Integer | untyped) -> ([String | untyped, Integer | untyped])
|
|
12
13
|
attr_reader name: String | untyped
|
|
13
14
|
attr_reader age: Integer | untyped
|
|
14
|
-
def foo: (?name: String | untyped, ?age: Integer | untyped) -> ([String | untyped, Integer | untyped])
|
|
15
15
|
end
|
data/smoke/wrong-extend.rb
CHANGED
data/smoke/wrong-include.rb
CHANGED
data/smoke/wrong-include2.rb
CHANGED
data/typeprof.gemspec
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: typeprof
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.13.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yusuke Endoh
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-03-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rbs
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
19
|
+
version: 1.0.0
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.
|
|
26
|
+
version: 1.0.0
|
|
27
27
|
description: |
|
|
28
28
|
TypeProf performs a type analysis of non-annotated Ruby code.
|
|
29
29
|
|
|
@@ -48,6 +48,7 @@ files:
|
|
|
48
48
|
- doc/doc.ja.md
|
|
49
49
|
- doc/doc.md
|
|
50
50
|
- doc/ppl2019.pdf
|
|
51
|
+
- doc/todo.md
|
|
51
52
|
- exe/typeprof
|
|
52
53
|
- lib/typeprof.rb
|
|
53
54
|
- lib/typeprof/analyzer.rb
|
|
@@ -103,6 +104,8 @@ files:
|
|
|
103
104
|
- smoke/array8.rb
|
|
104
105
|
- smoke/array9.rb
|
|
105
106
|
- smoke/attr-module.rb
|
|
107
|
+
- smoke/attr-vis.rb
|
|
108
|
+
- smoke/attr-vis.rbs
|
|
106
109
|
- smoke/attr.rb
|
|
107
110
|
- smoke/autoload.rb
|
|
108
111
|
- smoke/backtrace.rb
|
|
@@ -130,6 +133,7 @@ files:
|
|
|
130
133
|
- smoke/block7.rb
|
|
131
134
|
- smoke/block8.rb
|
|
132
135
|
- smoke/block9.rb
|
|
136
|
+
- smoke/block_given.rb
|
|
133
137
|
- smoke/blown.rb
|
|
134
138
|
- smoke/break1.rb
|
|
135
139
|
- smoke/break2.rb
|
|
@@ -141,6 +145,7 @@ files:
|
|
|
141
145
|
- smoke/class-hierarchy2.rb
|
|
142
146
|
- smoke/class-new.rb
|
|
143
147
|
- smoke/class.rb
|
|
148
|
+
- smoke/class_eval.rb
|
|
144
149
|
- smoke/class_instance_var.rb
|
|
145
150
|
- smoke/class_method.rb
|
|
146
151
|
- smoke/class_method2.rb
|
|
@@ -159,6 +164,8 @@ files:
|
|
|
159
164
|
- smoke/define_method4.rb
|
|
160
165
|
- smoke/define_method4.rbs
|
|
161
166
|
- smoke/define_method5.rb
|
|
167
|
+
- smoke/define_method6.rb
|
|
168
|
+
- smoke/define_method7.rb
|
|
162
169
|
- smoke/demo.rb
|
|
163
170
|
- smoke/demo1.rb
|
|
164
171
|
- smoke/demo10.rb
|
|
@@ -175,12 +182,16 @@ files:
|
|
|
175
182
|
- smoke/dummy-execution2.rb
|
|
176
183
|
- smoke/dummy_element.rb
|
|
177
184
|
- smoke/ensure1.rb
|
|
185
|
+
- smoke/enum_for.rb
|
|
186
|
+
- smoke/enum_for2.rb
|
|
178
187
|
- smoke/enumerator.rb
|
|
179
188
|
- smoke/expandarray1.rb
|
|
180
189
|
- smoke/expandarray2.rb
|
|
190
|
+
- smoke/extended.rb
|
|
181
191
|
- smoke/fib.rb
|
|
182
192
|
- smoke/flip-flop.rb
|
|
183
193
|
- smoke/flow1.rb
|
|
194
|
+
- smoke/flow10.rb
|
|
184
195
|
- smoke/flow2.rb
|
|
185
196
|
- smoke/flow3.rb
|
|
186
197
|
- smoke/flow4.rb
|
|
@@ -203,12 +214,15 @@ files:
|
|
|
203
214
|
- smoke/hash3.rb
|
|
204
215
|
- smoke/hash4.rb
|
|
205
216
|
- smoke/hash5.rb
|
|
217
|
+
- smoke/included.rb
|
|
206
218
|
- smoke/inheritance.rb
|
|
207
219
|
- smoke/inheritance2.rb
|
|
220
|
+
- smoke/inherited.rb
|
|
208
221
|
- smoke/initialize.rb
|
|
209
222
|
- smoke/instance_eval.rb
|
|
210
223
|
- smoke/instance_eval2.rb
|
|
211
224
|
- smoke/instance_eval3.rb
|
|
225
|
+
- smoke/instance_eval4.rb
|
|
212
226
|
- smoke/int_times.rb
|
|
213
227
|
- smoke/integer.rb
|
|
214
228
|
- smoke/ivar.rb
|
|
@@ -264,6 +278,10 @@ files:
|
|
|
264
278
|
- smoke/pathname2.rb
|
|
265
279
|
- smoke/pattern-match1.rb
|
|
266
280
|
- smoke/pattern-match2.rb
|
|
281
|
+
- smoke/prepend1.rb
|
|
282
|
+
- smoke/prepend2.rb
|
|
283
|
+
- smoke/prepend2.rbs
|
|
284
|
+
- smoke/primitive_method.rb
|
|
267
285
|
- smoke/printf.rb
|
|
268
286
|
- smoke/proc.rb
|
|
269
287
|
- smoke/proc2.rb
|
|
@@ -327,6 +345,7 @@ files:
|
|
|
327
345
|
- smoke/retry1.rb
|
|
328
346
|
- smoke/return.rb
|
|
329
347
|
- smoke/reveal.rb
|
|
348
|
+
- smoke/simple.rb
|
|
330
349
|
- smoke/singleton_class.rb
|
|
331
350
|
- smoke/singleton_method.rb
|
|
332
351
|
- smoke/step.rb
|
|
@@ -390,7 +409,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
390
409
|
- !ruby/object:Gem::Version
|
|
391
410
|
version: '0'
|
|
392
411
|
requirements: []
|
|
393
|
-
rubygems_version: 3.
|
|
412
|
+
rubygems_version: 3.2.3
|
|
394
413
|
signing_key:
|
|
395
414
|
specification_version: 4
|
|
396
415
|
summary: TypeProf is a type analysis tool for Ruby code based on abstract interpretation
|