typeprof 0.1.2 → 0.4.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/.gitignore +3 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +10 -21
- data/LICENSE +21 -0
- data/README.md +1 -1
- data/doc/demo.md +398 -0
- data/doc/doc.ja.md +11 -1
- data/doc/doc.md +16 -7
- data/exe/typeprof +2 -1
- data/lib/typeprof.rb +9 -0
- data/lib/typeprof/analyzer.rb +455 -364
- data/lib/typeprof/arguments.rb +397 -0
- data/lib/typeprof/block.rb +133 -0
- data/lib/typeprof/builtin.rb +125 -116
- data/lib/typeprof/cli.rb +62 -71
- data/lib/typeprof/config.rb +114 -0
- data/lib/typeprof/container-type.rb +208 -27
- data/lib/typeprof/export.rb +201 -96
- data/lib/typeprof/import.rb +451 -365
- data/lib/typeprof/iseq.rb +43 -2
- data/lib/typeprof/method.rb +139 -100
- data/lib/typeprof/type.rb +138 -297
- data/lib/typeprof/utils.rb +4 -18
- data/lib/typeprof/version.rb +3 -0
- data/smoke/arguments2.rb +55 -0
- data/smoke/array-each3.rb +1 -4
- data/smoke/array12.rb +1 -1
- data/smoke/array6.rb +1 -0
- data/smoke/block-ambiguous.rb +36 -0
- data/smoke/block-args1-rest.rb +62 -0
- data/smoke/block-args1.rb +59 -0
- data/smoke/block-args2-rest.rb +62 -0
- data/smoke/block-args2.rb +59 -0
- data/smoke/block-args3-rest.rb +73 -0
- data/smoke/block-args3.rb +70 -0
- data/smoke/block-blockarg.rb +27 -0
- data/smoke/block-kwarg.rb +52 -0
- data/smoke/block11.rb +1 -1
- data/smoke/block13.rb +9 -0
- data/smoke/block13.rbs +3 -0
- data/smoke/block14.rb +17 -0
- data/smoke/block4.rb +2 -2
- data/smoke/block5.rb +1 -0
- data/smoke/block6.rb +1 -1
- data/smoke/block7.rb +0 -2
- data/smoke/block8.rb +2 -2
- data/smoke/block9.rb +1 -1
- data/smoke/blown.rb +1 -1
- data/smoke/class-hierarchy.rb +54 -0
- data/smoke/class-hierarchy2.rb +27 -0
- data/smoke/class.rb +2 -0
- data/smoke/constant1.rb +13 -5
- data/smoke/constant2.rb +2 -0
- data/smoke/cvar.rb +1 -0
- data/smoke/demo10.rb +1 -1
- data/smoke/demo5.rb +3 -0
- data/smoke/demo8.rb +2 -2
- data/smoke/demo9.rb +1 -3
- data/smoke/flow7.rb +1 -7
- data/smoke/flow8.rb +13 -0
- data/smoke/gvar.rb +1 -1
- data/smoke/gvar2.rb +17 -0
- data/smoke/gvar2.rbs +1 -0
- data/smoke/hash4.rb +1 -1
- data/smoke/inheritance2.rb +6 -0
- data/smoke/instance_eval.rb +1 -1
- data/smoke/int_times.rb +1 -1
- data/smoke/ivar3.rb +16 -0
- data/smoke/ivar3.rbs +3 -0
- data/smoke/keyword3.rb +1 -2
- data/smoke/keyword4.rb +1 -1
- data/smoke/manual-rbs2.rb +1 -1
- data/smoke/manual-rbs3.rb +12 -0
- data/smoke/manual-rbs3.rbs +3 -0
- data/smoke/module4.rb +5 -0
- data/smoke/multiple-superclass.rb +12 -0
- data/smoke/next2.rb +1 -1
- data/smoke/optional1.rb +1 -1
- data/smoke/optional2.rb +1 -1
- data/smoke/optional3.rb +10 -0
- data/smoke/proc4.rb +1 -1
- data/smoke/rbs-alias.rb +9 -0
- data/smoke/rbs-alias.rbs +4 -0
- data/smoke/rbs-attr.rb +26 -0
- data/smoke/rbs-attr.rbs +5 -0
- data/smoke/rbs-extend.rb +9 -0
- data/smoke/rbs-extend.rbs +7 -0
- data/smoke/rbs-interface.rb +24 -0
- data/smoke/rbs-interface.rbs +12 -0
- data/smoke/rbs-proc1.rb +9 -0
- data/smoke/rbs-proc1.rbs +3 -0
- data/smoke/rbs-proc2.rb +20 -0
- data/smoke/rbs-proc2.rbs +3 -0
- data/smoke/rbs-proc3.rb +13 -0
- data/smoke/rbs-proc3.rbs +4 -0
- data/smoke/rbs-record.rb +17 -0
- data/smoke/rbs-record.rbs +4 -0
- data/smoke/rbs-tyvar.rb +18 -0
- data/smoke/rbs-tyvar.rbs +5 -0
- data/smoke/rbs-tyvar2.rb +20 -0
- data/smoke/rbs-tyvar2.rbs +9 -0
- data/smoke/rbs-tyvar3.rb +25 -0
- data/smoke/rbs-tyvar3.rbs +4 -0
- data/smoke/rbs-vars.rb +39 -0
- data/smoke/rbs-vars.rbs +7 -0
- data/smoke/rest1.rb +1 -1
- data/smoke/rest2.rb +1 -1
- data/smoke/rest3.rb +1 -1
- data/smoke/rest5.rb +1 -1
- data/smoke/rest6.rb +1 -1
- data/smoke/retry1.rb +1 -1
- data/smoke/return.rb +1 -1
- data/smoke/singleton_method.rb +3 -0
- data/smoke/step.rb +1 -1
- data/smoke/struct.rb +6 -2
- data/smoke/struct3.rb +14 -0
- data/smoke/super1.rb +18 -0
- data/smoke/symbol-proc.rb +24 -0
- data/smoke/union-recv.rb +6 -0
- data/smoke/user-demo.rb +15 -0
- data/smoke/wrong-extend.rb +1 -0
- data/tools/setup-insns-def.rb +1 -1
- data/tools/stackprof-wrapper.rb +1 -1
- data/typeprof.gemspec +12 -4
- metadata +68 -10
- data/.gitmodules +0 -6
- data/run.sh +0 -3
- data/smoke/variadic1.rb.notyet +0 -5
data/smoke/flow8.rb
ADDED
data/smoke/gvar.rb
CHANGED
data/smoke/gvar2.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
$foo = 1
|
|
2
|
+
|
|
3
|
+
def log
|
|
4
|
+
$foo
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
__END__
|
|
8
|
+
# Errors
|
|
9
|
+
smoke/gvar2.rb:1: [warning] inconsistent assignment to RBS-declared global variable
|
|
10
|
+
|
|
11
|
+
# Global variables
|
|
12
|
+
#$foo : String
|
|
13
|
+
|
|
14
|
+
# Classes
|
|
15
|
+
class Object
|
|
16
|
+
def log : -> String
|
|
17
|
+
end
|
data/smoke/gvar2.rbs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$foo : String
|
data/smoke/hash4.rb
CHANGED
data/smoke/inheritance2.rb
CHANGED
data/smoke/instance_eval.rb
CHANGED
data/smoke/int_times.rb
CHANGED
data/smoke/ivar3.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class Foo
|
|
2
|
+
def initialize
|
|
3
|
+
@foo = "str"
|
|
4
|
+
@bar = "str"
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
__END__
|
|
9
|
+
# Errors
|
|
10
|
+
smoke/ivar3.rb:3: [warning] inconsistent assignment to RBS-declared global variable
|
|
11
|
+
|
|
12
|
+
# Classes
|
|
13
|
+
class Foo
|
|
14
|
+
@bar : String
|
|
15
|
+
def initialize : -> String
|
|
16
|
+
end
|
data/smoke/ivar3.rbs
ADDED
data/smoke/keyword3.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# TODO: foo should accept "s: String | [Integer]"?
|
|
2
1
|
def foo(n: 42, s: [n])
|
|
3
2
|
[n, s]
|
|
4
3
|
end
|
|
@@ -8,5 +7,5 @@ foo(n: 42, s: "str")
|
|
|
8
7
|
__END__
|
|
9
8
|
# Classes
|
|
10
9
|
class Object
|
|
11
|
-
def foo : (?n: Integer, ?s: String) -> ([Integer, String | [Integer]])
|
|
10
|
+
def foo : (?n: Integer, ?s: String | [Integer]) -> ([Integer, String | [Integer]])
|
|
12
11
|
end
|
data/smoke/keyword4.rb
CHANGED
data/smoke/manual-rbs2.rb
CHANGED
data/smoke/module4.rb
CHANGED
data/smoke/next2.rb
CHANGED
data/smoke/optional1.rb
CHANGED
|
@@ -9,5 +9,5 @@ foo("A", "B", "C", "Z")
|
|
|
9
9
|
__END__
|
|
10
10
|
# Classes
|
|
11
11
|
class Object
|
|
12
|
-
def foo : (String, ?String, ?String, String) -> ([String, Integer | String, Integer | String, String])
|
|
12
|
+
def foo : (String, ?Integer | String, ?Integer | String, String) -> ([String, Integer | String, Integer | String, String])
|
|
13
13
|
end
|
data/smoke/optional2.rb
CHANGED
|
@@ -11,5 +11,5 @@ foo("A", "B", "C", "D", "E", "Z")
|
|
|
11
11
|
__END__
|
|
12
12
|
# Classes
|
|
13
13
|
class Object
|
|
14
|
-
def foo : (String, ?String, ?String, *String, String) -> ([String, Integer | String, Integer | String, Array[String], String])
|
|
14
|
+
def foo : (String, ?Integer | String, ?Integer | String, *String, String) -> ([String, Integer | String, Integer | String, Array[String], String])
|
|
15
15
|
end
|
data/smoke/optional3.rb
ADDED
data/smoke/proc4.rb
CHANGED
data/smoke/rbs-alias.rb
ADDED
data/smoke/rbs-alias.rbs
ADDED
data/smoke/rbs-attr.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
def read_test_1
|
|
2
|
+
Foo.new.reader_example
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
def read_test_2
|
|
6
|
+
Foo.new.accessor_example
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def write_test
|
|
10
|
+
Foo.new.writer_example = 1
|
|
11
|
+
Foo.new.writer_example = "str"
|
|
12
|
+
Foo.new.accessor_example = 1
|
|
13
|
+
Foo.new.accessor_example = "str"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
__END__
|
|
17
|
+
# Errors
|
|
18
|
+
smoke/rbs-attr.rb:11: [error] failed to resolve overload: Foo#writer_example=
|
|
19
|
+
smoke/rbs-attr.rb:13: [error] failed to resolve overload: Foo#accessor_example=
|
|
20
|
+
|
|
21
|
+
# Classes
|
|
22
|
+
class Object
|
|
23
|
+
def read_test_1 : -> Integer
|
|
24
|
+
def read_test_2 : -> Integer
|
|
25
|
+
def write_test : -> String
|
|
26
|
+
end
|
data/smoke/rbs-attr.rbs
ADDED
data/smoke/rbs-extend.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
def get_module
|
|
2
|
+
C.new.get_module
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
def get_module_foo
|
|
6
|
+
C.new.get_module.foo
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def get_interface
|
|
10
|
+
C.new.get_interface
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def get_interface_foo
|
|
14
|
+
C.new.get_interface.foo
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
__END__
|
|
18
|
+
# Classes
|
|
19
|
+
class Object
|
|
20
|
+
def get_module : -> M
|
|
21
|
+
def get_module_foo : -> Integer
|
|
22
|
+
def get_interface : -> _I
|
|
23
|
+
def get_interface_foo : -> Integer
|
|
24
|
+
end
|
data/smoke/rbs-proc1.rb
ADDED
data/smoke/rbs-proc1.rbs
ADDED
data/smoke/rbs-proc2.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# two issues:
|
|
2
|
+
# (1) TypedProc should call `-> n { log1(n) }` with an Integer, but not implemented yet
|
|
3
|
+
# (2) log1 returns a String, which is inconsistent and should be reported
|
|
4
|
+
|
|
5
|
+
def log1(n)
|
|
6
|
+
n.to_s # XXX: should be reported as "inconsistent with RBS"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def log2
|
|
10
|
+
Foo.new.foo(-> n { log1(n) })
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
log2
|
|
14
|
+
|
|
15
|
+
__END__
|
|
16
|
+
# Classes
|
|
17
|
+
class Object
|
|
18
|
+
def log1 : (untyped) -> untyped
|
|
19
|
+
def log2 : -> String
|
|
20
|
+
end
|
data/smoke/rbs-proc2.rbs
ADDED
data/smoke/rbs-proc3.rb
ADDED
data/smoke/rbs-proc3.rbs
ADDED
data/smoke/rbs-record.rb
ADDED
data/smoke/rbs-tyvar.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
def foo
|
|
2
|
+
cell = Cell.new("str")
|
|
3
|
+
cell.set_elem(42) if rand < 0.5
|
|
4
|
+
cell
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def bar
|
|
8
|
+
foo.get_elem
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
bar
|
|
12
|
+
|
|
13
|
+
__END__
|
|
14
|
+
# Classes
|
|
15
|
+
class Object
|
|
16
|
+
def foo : -> (Cell[Integer | String])
|
|
17
|
+
def bar : -> (Integer | String)
|
|
18
|
+
end
|