typeprof 0.3.0 → 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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/doc/demo.md +398 -0
  4. data/doc/doc.ja.md +4 -0
  5. data/doc/doc.md +4 -0
  6. data/lib/typeprof.rb +8 -0
  7. data/lib/typeprof/analyzer.rb +229 -245
  8. data/lib/typeprof/arguments.rb +397 -0
  9. data/lib/typeprof/block.rb +133 -0
  10. data/lib/typeprof/builtin.rb +14 -10
  11. data/lib/typeprof/container-type.rb +94 -17
  12. data/lib/typeprof/export.rb +185 -108
  13. data/lib/typeprof/import.rb +76 -54
  14. data/lib/typeprof/iseq.rb +27 -2
  15. data/lib/typeprof/method.rb +87 -73
  16. data/lib/typeprof/type.rb +125 -309
  17. data/lib/typeprof/version.rb +1 -1
  18. data/smoke/arguments2.rb +1 -1
  19. data/smoke/array-each3.rb +1 -4
  20. data/smoke/array12.rb +1 -1
  21. data/smoke/array6.rb +1 -0
  22. data/smoke/block-ambiguous.rb +36 -0
  23. data/smoke/block-args1-rest.rb +62 -0
  24. data/smoke/block-args1.rb +59 -0
  25. data/smoke/block-args2-rest.rb +62 -0
  26. data/smoke/block-args2.rb +59 -0
  27. data/smoke/block-args3-rest.rb +73 -0
  28. data/smoke/block-args3.rb +70 -0
  29. data/smoke/block-blockarg.rb +27 -0
  30. data/smoke/block-kwarg.rb +52 -0
  31. data/smoke/block11.rb +1 -1
  32. data/smoke/block14.rb +17 -0
  33. data/smoke/block4.rb +2 -2
  34. data/smoke/block5.rb +1 -0
  35. data/smoke/block6.rb +1 -1
  36. data/smoke/block7.rb +0 -2
  37. data/smoke/block8.rb +2 -2
  38. data/smoke/block9.rb +1 -1
  39. data/smoke/blown.rb +1 -1
  40. data/smoke/class-hierarchy.rb +54 -0
  41. data/smoke/class-hierarchy2.rb +27 -0
  42. data/smoke/constant1.rb +11 -6
  43. data/smoke/constant2.rb +2 -0
  44. data/smoke/cvar.rb +1 -0
  45. data/smoke/demo10.rb +1 -1
  46. data/smoke/demo8.rb +2 -2
  47. data/smoke/demo9.rb +1 -3
  48. data/smoke/flow7.rb +1 -7
  49. data/smoke/flow8.rb +13 -0
  50. data/smoke/instance_eval.rb +1 -1
  51. data/smoke/int_times.rb +1 -1
  52. data/smoke/multiple-superclass.rb +4 -0
  53. data/smoke/next2.rb +1 -1
  54. data/smoke/optional3.rb +10 -0
  55. data/smoke/proc4.rb +1 -1
  56. data/smoke/rbs-proc1.rb +9 -0
  57. data/smoke/rbs-proc1.rbs +3 -0
  58. data/smoke/rbs-proc2.rb +20 -0
  59. data/smoke/rbs-proc2.rbs +3 -0
  60. data/smoke/rbs-proc3.rb +13 -0
  61. data/smoke/rbs-proc3.rbs +4 -0
  62. data/smoke/rbs-record.rb +17 -0
  63. data/smoke/rbs-record.rbs +4 -0
  64. data/smoke/rbs-tyvar3.rb +25 -0
  65. data/smoke/rbs-tyvar3.rbs +4 -0
  66. data/smoke/rest2.rb +1 -1
  67. data/smoke/rest5.rb +1 -1
  68. data/smoke/return.rb +1 -1
  69. data/smoke/singleton_method.rb +3 -0
  70. data/smoke/struct.rb +4 -3
  71. data/smoke/struct3.rb +14 -0
  72. data/smoke/symbol-proc.rb +24 -0
  73. metadata +31 -3
  74. data/smoke/variadic1.rb.notyet +0 -5
@@ -1,3 +1,3 @@
1
1
  module TypeProf
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -37,7 +37,7 @@ f9(k: :kk)
37
37
  def f10(&blk)
38
38
  blk.call(1)
39
39
  end
40
- f10 {}
40
+ f10 {|n| }
41
41
 
42
42
  __END__
43
43
  # Classes
@@ -2,14 +2,11 @@ def log(x)
2
2
  end
3
3
 
4
4
  [].each do |x|
5
- # Currently, x is bot. But, [].each is rarely useful.
6
- # It would be a good guess to assume a empty receiver of Array#each means a wrong guess.
7
- # So, it would be good to assume x as any
8
5
  log(x)
9
6
  end
10
7
 
11
8
  __END__
12
9
  # Classes
13
10
  class Object
14
- def log : (bot) -> nil
11
+ def log : (untyped) -> nil
15
12
  end
@@ -19,6 +19,6 @@ __END__
19
19
  # Classes
20
20
  class Object
21
21
  def bar : ([Integer]) -> nil
22
- def test_yield : { () -> nil } -> nil
22
+ def test_yield : { -> nil } -> nil
23
23
  def foo : -> [Integer]
24
24
  end
@@ -10,5 +10,6 @@ foo(1, "str")
10
10
  __END__
11
11
  # Classes
12
12
  class Object
13
+ ARY : []
13
14
  def foo : (Integer, String) -> []
14
15
  end
@@ -0,0 +1,36 @@
1
+ def f1
2
+ yield :a, :b, :c
3
+ end
4
+ def log1(x); end
5
+ f1 {|x| log1(x) }
6
+
7
+ def f2
8
+ yield :a, :b, :c
9
+ end
10
+ def log2(x); end
11
+ f2 {|x,| log2(x) }
12
+
13
+ def f3
14
+ yield [:a, :b, :c]
15
+ end
16
+ def log3(x); end
17
+ f3 {|x| log3(x) }
18
+
19
+ def f4
20
+ yield [:a, :b, :c]
21
+ end
22
+ def log4(x); end
23
+ f4 {|x,| log4(x) }
24
+
25
+ __END__
26
+ # Classes
27
+ class Object
28
+ def f1 : { (:a, :b, :c) -> nil } -> nil
29
+ def log1 : (:a) -> nil
30
+ def f2 : { (:a, :b, :c) -> nil } -> nil
31
+ def log2 : (:a) -> nil
32
+ def f3 : { ([:a, :b, :c]) -> nil } -> nil
33
+ def log3 : ([:a, :b, :c]) -> nil
34
+ def f4 : { ([:a, :b, :c]) -> nil } -> nil
35
+ def log4 : (:a) -> nil
36
+ end
@@ -0,0 +1,62 @@
1
+ StringArray = ["str"] + ["str"]
2
+
3
+ def f1(&blk)
4
+ yield *StringArray
5
+ blk
6
+ end
7
+ def log1(a, o, c); end
8
+ f1 do |a, o=:opt, c|
9
+ log1(a, o, c)
10
+ end
11
+
12
+ def f2(&blk)
13
+ yield :a, *StringArray
14
+ blk
15
+ end
16
+ def log2(a, o, c); end
17
+ f2 do |a, o=:opt, c|
18
+ log2(a, o, c)
19
+ end
20
+
21
+ def f3(&blk)
22
+ yield :a, :b, *StringArray
23
+ blk
24
+ end
25
+ def log3(a, o, c); end
26
+ f3 do |a, o=:opt, c|
27
+ log3(a, o, c)
28
+ end
29
+
30
+ def f4(&blk)
31
+ yield :a, :b, :c, *StringArray
32
+ blk
33
+ end
34
+ def log4(a, o, c); end
35
+ f4 do |a, o=:opt, c|
36
+ log4(a, o, c)
37
+ end
38
+
39
+ def f5(&blk)
40
+ yield :a, :b, :c, :d, *StringArray
41
+ blk
42
+ end
43
+ def log5(a, o, c); end
44
+ f5 do |a, o=:opt, c|
45
+ log5(a, o, c)
46
+ end
47
+
48
+ __END__
49
+ # Classes
50
+ class Object
51
+ StringArray : Array[String]
52
+ def f1 : { (*String) -> nil } -> (^(String, ?:opt | String, String) -> nil)
53
+ def log1 : (String, :opt | String, String) -> nil
54
+ def f2 : { (:a, *String) -> nil } -> (^(:a, ?:opt | String, String) -> nil)
55
+ def log2 : (:a, :opt | String, String) -> nil
56
+ def f3 : { (:a, :b, *String) -> nil } -> (^(:a, ?:b | :opt, :b | String) -> nil)
57
+ def log3 : (:a, :b | :opt, :b | String) -> nil
58
+ def f4 : { (:a, :b, :c, *String) -> nil } -> (^(:a, ?:b | :opt, :b | :c) -> nil)
59
+ def log4 : (:a, :b | :opt, :b | :c) -> nil
60
+ def f5 : { (:a, :b, :c, :d, *String) -> nil } -> (^(:a, ?:b | :opt, :b | :c) -> nil)
61
+ def log5 : (:a, :b | :opt, :b | :c) -> nil
62
+ end
@@ -0,0 +1,59 @@
1
+ def f1(&blk)
2
+ yield
3
+ blk
4
+ end
5
+ def log1(a, o, c); end
6
+ f1 do |a, o=:opt, c|
7
+ log1(a, o, c)
8
+ end
9
+
10
+ def f2(&blk)
11
+ yield :a
12
+ blk
13
+ end
14
+ def log2(a, o, c); end
15
+ f2 do |a, o=:opt, c|
16
+ log2(a, o, c)
17
+ end
18
+
19
+ def f3(&blk)
20
+ yield :a, :b
21
+ blk
22
+ end
23
+ def log3(a, o, c); end
24
+ f3 do |a, o=:opt, c|
25
+ log3(a, o, c)
26
+ end
27
+
28
+ def f4(&blk)
29
+ yield :a, :b, :c
30
+ blk
31
+ end
32
+ def log4(a, o, c); end
33
+ f4 do |a, o=:opt, c|
34
+ log4(a, o, c)
35
+ end
36
+
37
+ def f5(&blk)
38
+ yield :a, :b, :c, :d
39
+ blk
40
+ end
41
+ def log5(a, o, c); end
42
+ f5 do |a, o=:opt, c|
43
+ log5(a, o, c)
44
+ end
45
+
46
+ __END__
47
+ # Classes
48
+ class Object
49
+ def f1 : { -> nil } -> ^(nil, ?:opt, nil) -> nil
50
+ def log1 : (nil, :opt, nil) -> nil
51
+ def f2 : { (:a) -> nil } -> ^(:a, ?:opt, nil) -> nil
52
+ def log2 : (:a, :opt, nil) -> nil
53
+ def f3 : { (:a, :b) -> nil } -> ^(:a, ?:opt, :b) -> nil
54
+ def log3 : (:a, :opt, :b) -> nil
55
+ def f4 : { (:a, :b, :c) -> nil } -> (^(:a, ?:b | :opt, :c) -> nil)
56
+ def log4 : (:a, :b | :opt, :c) -> nil
57
+ def f5 : { (:a, :b, :c, :d) -> nil } -> (^(:a, ?:b | :opt, :c) -> nil)
58
+ def log5 : (:a, :b | :opt, :c) -> nil
59
+ end
@@ -0,0 +1,62 @@
1
+ StringArray = ["str"] + ["str"]
2
+
3
+ def f1(&blk)
4
+ yield *StringArray
5
+ blk
6
+ end
7
+ def log1(a, r, c); end
8
+ f1 do |a, *r, c|
9
+ log1(a, r, c)
10
+ end
11
+
12
+ def f2(&blk)
13
+ yield :a, *StringArray
14
+ blk
15
+ end
16
+ def log2(a, r, c); end
17
+ f2 do |a, *r, c|
18
+ log2(a, r, c)
19
+ end
20
+
21
+ def f3(&blk)
22
+ yield :a, :b, *StringArray
23
+ blk
24
+ end
25
+ def log3(a, r, c); end
26
+ f3 do |a, *r, c|
27
+ log3(a, r, c)
28
+ end
29
+
30
+ def f4(&blk)
31
+ yield :a, :b, :c, *StringArray
32
+ blk
33
+ end
34
+ def log4(a, r, c); end
35
+ f4 do |a, *r, c|
36
+ log4(a, r, c)
37
+ end
38
+
39
+ def f5(&blk)
40
+ yield :a, :b, :c, :d, *StringArray
41
+ blk
42
+ end
43
+ def log5(a, r, c); end
44
+ f5 do |a, *r, c|
45
+ log5(a, r, c)
46
+ end
47
+
48
+ __END__
49
+ # Classes
50
+ class Object
51
+ StringArray : Array[String]
52
+ def f1 : { (*String) -> nil } -> ^(String, *String, String) -> nil
53
+ def log1 : (String, Array[String], String) -> nil
54
+ def f2 : { (:a, *String) -> nil } -> ^(:a, *String, String) -> nil
55
+ def log2 : (:a, Array[String], String) -> nil
56
+ def f3 : { (:a, :b, *String) -> nil } -> (^(:a, *:b | String, :b | String) -> nil)
57
+ def log3 : (:a, Array[:b | String], :b | String) -> nil
58
+ def f4 : { (:a, :b, :c, *String) -> nil } -> (^(:a, *:b | :c | String, :c | String) -> nil)
59
+ def log4 : (:a, Array[:b | :c | String], :c | String) -> nil
60
+ def f5 : { (:a, :b, :c, :d, *String) -> nil } -> (^(:a, *:b | :c | :d | String, :d | String) -> nil)
61
+ def log5 : (:a, Array[:b | :c | :d | String], :d | String) -> nil
62
+ end
@@ -0,0 +1,59 @@
1
+ def f1(&blk)
2
+ yield
3
+ blk
4
+ end
5
+ def log1(a, r, c); end
6
+ f1 do |a, *r, c|
7
+ log1(a, r, c)
8
+ end
9
+
10
+ def f2(&blk)
11
+ yield :a
12
+ blk
13
+ end
14
+ def log2(a, r, c); end
15
+ f2 do |a, *r, c|
16
+ log2(a, r, c)
17
+ end
18
+
19
+ def f3(&blk)
20
+ yield :a, :b
21
+ blk
22
+ end
23
+ def log3(a, r, c); end
24
+ f3 do |a, *r, c|
25
+ log3(a, r, c)
26
+ end
27
+
28
+ def f4(&blk)
29
+ yield :a, :b, :c
30
+ blk
31
+ end
32
+ def log4(a, r, c); end
33
+ f4 do |a, *r, c|
34
+ log4(a, r, c)
35
+ end
36
+
37
+ def f5(&blk)
38
+ yield :a, :b, :c, :d
39
+ blk
40
+ end
41
+ def log5(a, r, c); end
42
+ f5 do |a, *r, c|
43
+ log5(a, r, c)
44
+ end
45
+
46
+ __END__
47
+ # Classes
48
+ class Object
49
+ def f1 : { -> nil } -> ^(nil, *bot, nil) -> nil
50
+ def log1 : (nil, [], nil) -> nil
51
+ def f2 : { (:a) -> nil } -> ^(:a, *bot, nil) -> nil
52
+ def log2 : (:a, [], nil) -> nil
53
+ def f3 : { (:a, :b) -> nil } -> ^(:a, *bot, :b) -> nil
54
+ def log3 : (:a, [], :b) -> nil
55
+ def f4 : { (:a, :b, :c) -> nil } -> ^(:a, *:b, :c) -> nil
56
+ def log4 : (:a, [:b], :c) -> nil
57
+ def f5 : { (:a, :b, :c, :d) -> nil } -> (^(:a, *:b | :c, :d) -> nil)
58
+ def log5 : (:a, [:b, :c], :d) -> nil
59
+ end
@@ -0,0 +1,73 @@
1
+ StringArray = ["str"] + ["str"]
2
+
3
+ def f1(&blk)
4
+ yield *StringArray
5
+ blk
6
+ end
7
+ def log1(a, o, r, c); end
8
+ f1 do |a, o=:opt, *r, c|
9
+ log1(a, o, r, c)
10
+ end
11
+
12
+ def f2(&blk)
13
+ yield :a, *StringArray
14
+ blk
15
+ end
16
+ def log2(a, o, r, c); end
17
+ f2 do |a, o=:opt, *r, c|
18
+ log2(a, o, r, c)
19
+ end
20
+
21
+ def f3(&blk)
22
+ yield :a, :b, *StringArray
23
+ blk
24
+ end
25
+ def log3(a, o, r, c); end
26
+ f3 do |a, o=:opt, *r, c|
27
+ log3(a, o, r, c)
28
+ end
29
+
30
+ def f4(&blk)
31
+ yield :a, :b, :c, *StringArray
32
+ blk
33
+ end
34
+ def log4(a, o, r, c); end
35
+ f4 do |a, o=:opt, *r, c|
36
+ log4(a, o, r, c)
37
+ end
38
+
39
+ def f5(&blk)
40
+ yield :a, :b, :c, :d, *StringArray
41
+ blk
42
+ end
43
+ def log5(a, o, r, c); end
44
+ f5 do |a, o=:opt, *r, c|
45
+ log5(a, o, r, c)
46
+ end
47
+
48
+ def f6(&blk)
49
+ yield :a, :b, :c, :d, :e, *StringArray
50
+ blk
51
+ end
52
+ def log6(a, o, r, c); end
53
+ f6 do |a, o=:opt, *r, c|
54
+ log6(a, o, r, c)
55
+ end
56
+
57
+ __END__
58
+ # Classes
59
+ class Object
60
+ StringArray : Array[String]
61
+ def f1 : { (*String) -> nil } -> (^(String, ?:opt | String, *String, String) -> nil)
62
+ def log1 : (String, :opt | String, Array[String], String) -> nil
63
+ def f2 : { (:a, *String) -> nil } -> (^(:a, ?:opt | String, *String, String) -> nil)
64
+ def log2 : (:a, :opt | String, Array[String], String) -> nil
65
+ def f3 : { (:a, :b, *String) -> nil } -> (^(:a, ?:b | :opt, *String, :b | String) -> nil)
66
+ def log3 : (:a, :b | :opt, Array[String], :b | String) -> nil
67
+ def f4 : { (:a, :b, :c, *String) -> nil } -> (^(:a, ?:b | :opt, *:c | String, :c | String) -> nil)
68
+ def log4 : (:a, :b | :opt, Array[:c | String], :c | String) -> nil
69
+ def f5 : { (:a, :b, :c, :d, *String) -> nil } -> (^(:a, ?:b | :opt, *:c | :d | String, :d | String) -> nil)
70
+ def log5 : (:a, :b | :opt, Array[:c | :d | String], :d | String) -> nil
71
+ def f6 : { (:a, :b, :c, :d, :e, *String) -> nil } -> (^(:a, ?:b | :opt, *:c | :d | :e | String, :e | String) -> nil)
72
+ def log6 : (:a, :b | :opt, Array[:c | :d | :e | String], :e | String) -> nil
73
+ end
@@ -0,0 +1,70 @@
1
+ def f1(&blk)
2
+ yield
3
+ blk
4
+ end
5
+ def log1(a, o, r, c); end
6
+ f1 do |a, o=:opt, *r, c|
7
+ log1(a, o, r, c)
8
+ end
9
+
10
+ def f2(&blk)
11
+ yield :a
12
+ blk
13
+ end
14
+ def log2(a, o, r, c); end
15
+ f2 do |a, o=:opt, *r, c|
16
+ log2(a, o, r, c)
17
+ end
18
+
19
+ def f3(&blk)
20
+ yield :a, :b
21
+ blk
22
+ end
23
+ def log3(a, o, r, c); end
24
+ f3 do |a, o=:opt, *r, c|
25
+ log3(a, o, r, c)
26
+ end
27
+
28
+ def f4(&blk)
29
+ yield :a, :b, :c
30
+ blk
31
+ end
32
+ def log4(a, o, r, c); end
33
+ f4 do |a, o=:opt, *r, c|
34
+ log4(a, o, r, c)
35
+ end
36
+
37
+ def f5(&blk)
38
+ yield :a, :b, :c, :d
39
+ blk
40
+ end
41
+ def log5(a, o, r, c); end
42
+ f5 do |a, o=:opt, *r, c|
43
+ log5(a, o, r, c)
44
+ end
45
+
46
+ def f6(&blk)
47
+ yield :a, :b, :c, :d, :e
48
+ blk
49
+ end
50
+ def log6(a, o, r, c); end
51
+ f6 do |a, o=:opt, *r, c|
52
+ log6(a, o, r, c)
53
+ end
54
+
55
+ __END__
56
+ # Classes
57
+ class Object
58
+ def f1 : { -> nil } -> ^(nil, ?:opt, *bot, nil) -> nil
59
+ def log1 : (nil, :opt, [], nil) -> nil
60
+ def f2 : { (:a) -> nil } -> ^(:a, ?:opt, *bot, nil) -> nil
61
+ def log2 : (:a, :opt, [], nil) -> nil
62
+ def f3 : { (:a, :b) -> nil } -> ^(:a, ?:opt, *bot, :b) -> nil
63
+ def log3 : (:a, :opt, [], :b) -> nil
64
+ def f4 : { (:a, :b, :c) -> nil } -> (^(:a, ?:b | :opt, *bot, :c) -> nil)
65
+ def log4 : (:a, :b | :opt, [], :c) -> nil
66
+ def f5 : { (:a, :b, :c, :d) -> nil } -> (^(:a, ?:b | :opt, *:c, :d) -> nil)
67
+ def log5 : (:a, :b | :opt, [:c], :d) -> nil
68
+ def f6 : { (:a, :b, :c, :d, :e) -> nil } -> (^(:a, ?:b | :opt, *:c | :d, :e) -> nil)
69
+ def log6 : (:a, :b | :opt, [:c, :d], :e) -> nil
70
+ end