typeprof 0.9.0 → 0.12.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 (182) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +1 -1
  3. data/Gemfile.lock +6 -5
  4. data/doc/demo.md +2 -2
  5. data/doc/todo.md +133 -0
  6. data/lib/typeprof/analyzer.rb +89 -37
  7. data/lib/typeprof/block.rb +34 -0
  8. data/lib/typeprof/builtin.rb +169 -66
  9. data/lib/typeprof/cli.rb +7 -0
  10. data/lib/typeprof/config.rb +25 -3
  11. data/lib/typeprof/container-type.rb +24 -0
  12. data/lib/typeprof/export.rb +130 -69
  13. data/lib/typeprof/import.rb +82 -38
  14. data/lib/typeprof/iseq.rb +23 -4
  15. data/lib/typeprof/method.rb +29 -7
  16. data/lib/typeprof/type.rb +75 -13
  17. data/lib/typeprof/version.rb +1 -1
  18. data/smoke/alias.rb +4 -4
  19. data/smoke/alias2.rb +3 -1
  20. data/smoke/arguments.rb +2 -2
  21. data/smoke/arguments2.rb +5 -5
  22. data/smoke/array-each.rb +1 -1
  23. data/smoke/array-each3.rb +1 -1
  24. data/smoke/array-map.rb +1 -1
  25. data/smoke/array-map2.rb +1 -1
  26. data/smoke/array-map3.rb +3 -3
  27. data/smoke/array-mul.rb +2 -2
  28. data/smoke/array-plus1.rb +1 -1
  29. data/smoke/array-plus2.rb +1 -0
  30. data/smoke/array-range-aref.rb +11 -11
  31. data/smoke/array-replace.rb +1 -1
  32. data/smoke/array1.rb +5 -5
  33. data/smoke/array10.rb +1 -1
  34. data/smoke/array11.rb +1 -1
  35. data/smoke/array12.rb +1 -1
  36. data/smoke/array14.rb +1 -1
  37. data/smoke/array15.rb +1 -1
  38. data/smoke/array2.rb +2 -2
  39. data/smoke/array3.rb +1 -0
  40. data/smoke/array6.rb +2 -1
  41. data/smoke/array8.rb +1 -1
  42. data/smoke/array9.rb +1 -1
  43. data/smoke/attr-module.rb +1 -0
  44. data/smoke/attr-vis.rb +43 -0
  45. data/smoke/attr-vis.rbs +4 -0
  46. data/smoke/attr.rb +2 -2
  47. data/smoke/block-ambiguous.rb +4 -4
  48. data/smoke/block-args1-rest.rb +6 -5
  49. data/smoke/block-args1.rb +5 -5
  50. data/smoke/block-args2-rest.rb +6 -5
  51. data/smoke/block-args2.rb +5 -5
  52. data/smoke/block-args3-rest.rb +7 -6
  53. data/smoke/block-args3.rb +6 -6
  54. data/smoke/block-blockarg.rb +3 -3
  55. data/smoke/block-kwarg.rb +4 -4
  56. data/smoke/block1.rb +1 -1
  57. data/smoke/block10.rb +1 -1
  58. data/smoke/block11.rb +2 -2
  59. data/smoke/block2.rb +1 -1
  60. data/smoke/block3.rb +1 -1
  61. data/smoke/block5.rb +1 -0
  62. data/smoke/block_given.rb +37 -0
  63. data/smoke/class_method.rb +2 -2
  64. data/smoke/class_method2.rb +2 -2
  65. data/smoke/constant2.rb +3 -2
  66. data/smoke/context-sensitive1.rb +1 -1
  67. data/smoke/cvar.rb +3 -2
  68. data/smoke/define_method.rb +2 -2
  69. data/smoke/define_method3.rb +1 -0
  70. data/smoke/define_method4.rb +1 -1
  71. data/smoke/define_method6.rb +19 -0
  72. data/smoke/demo.rb +6 -6
  73. data/smoke/demo1.rb +1 -1
  74. data/smoke/demo11.rb +1 -1
  75. data/smoke/demo2.rb +1 -1
  76. data/smoke/demo3.rb +1 -1
  77. data/smoke/demo4.rb +3 -3
  78. data/smoke/demo5.rb +1 -1
  79. data/smoke/demo6.rb +2 -1
  80. data/smoke/demo7.rb +1 -1
  81. data/smoke/demo9.rb +1 -0
  82. data/smoke/dummy-execution1.rb +1 -1
  83. data/smoke/dummy-execution2.rb +1 -1
  84. data/smoke/dummy_element.rb +1 -1
  85. data/smoke/ensure1.rb +1 -1
  86. data/smoke/enum_for.rb +15 -0
  87. data/smoke/enum_for2.rb +17 -0
  88. data/smoke/fib.rb +2 -2
  89. data/smoke/flow1.rb +1 -1
  90. data/smoke/flow10.rb +17 -0
  91. data/smoke/flow2.rb +1 -1
  92. data/smoke/flow3.rb +1 -1
  93. data/smoke/flow5.rb +1 -1
  94. data/smoke/flow6.rb +1 -1
  95. data/smoke/flow7.rb +1 -1
  96. data/smoke/flow8.rb +1 -1
  97. data/smoke/flow9.rb +1 -1
  98. data/smoke/function.rb +1 -1
  99. data/smoke/gvar.rb +1 -1
  100. data/smoke/gvar2.rb +1 -1
  101. data/smoke/hash-fetch.rb +3 -3
  102. data/smoke/inheritance.rb +4 -4
  103. data/smoke/initialize.rb +3 -2
  104. data/smoke/instance_eval.rb +1 -1
  105. data/smoke/int_times.rb +1 -1
  106. data/smoke/integer.rb +1 -1
  107. data/smoke/ivar.rb +3 -2
  108. data/smoke/ivar2.rb +2 -2
  109. data/smoke/ivar3.rb +2 -1
  110. data/smoke/ivar4.rb +21 -0
  111. data/smoke/kernel-class.rb +1 -1
  112. data/smoke/keyword4.rb +1 -1
  113. data/smoke/kwrest.rb +1 -0
  114. data/smoke/kwsplat1.rb +2 -2
  115. data/smoke/kwsplat2.rb +1 -1
  116. data/smoke/manual-rbs.rb +2 -1
  117. data/smoke/manual-rbs3.rb +1 -0
  118. data/smoke/method_in_branch.rb +1 -1
  119. data/smoke/method_missing.rb +4 -3
  120. data/smoke/module3.rb +1 -1
  121. data/smoke/module4.rb +1 -0
  122. data/smoke/module5.rb +1 -1
  123. data/smoke/module_function1.rb +3 -2
  124. data/smoke/module_function2.rb +3 -2
  125. data/smoke/multiple-include.rb +1 -0
  126. data/smoke/next1.rb +1 -1
  127. data/smoke/object-send1.rb +3 -3
  128. data/smoke/optional1.rb +1 -1
  129. data/smoke/optional2.rb +1 -1
  130. data/smoke/optional3.rb +1 -1
  131. data/smoke/parameterizedd-self.rb +2 -1
  132. data/smoke/prepend1.rb +33 -0
  133. data/smoke/prepend2.rb +10 -0
  134. data/smoke/prepend2.rbs +9 -0
  135. data/smoke/primitive_method.rb +19 -0
  136. data/smoke/proc4.rb +1 -1
  137. data/smoke/public.rb +4 -0
  138. data/smoke/range.rb +1 -1
  139. data/smoke/rbs-attr.rb +2 -2
  140. data/smoke/rbs-proc2.rb +1 -1
  141. data/smoke/rbs-proc3.rb +1 -1
  142. data/smoke/rbs-tyvar4.rb +3 -2
  143. data/smoke/rbs-tyvar6.rb +3 -3
  144. data/smoke/redo1.rb +1 -1
  145. data/smoke/redo2.rb +1 -1
  146. data/smoke/rescue1.rb +1 -1
  147. data/smoke/rescue2.rb +1 -1
  148. data/smoke/rescue3.rb +1 -0
  149. data/smoke/rescue4.rb +1 -1
  150. data/smoke/respond_to.rb +1 -1
  151. data/smoke/rest1.rb +2 -2
  152. data/smoke/rest2.rb +1 -1
  153. data/smoke/rest3.rb +6 -6
  154. data/smoke/rest4.rb +2 -2
  155. data/smoke/rest5.rb +1 -1
  156. data/smoke/rest6.rb +1 -1
  157. data/smoke/retry1.rb +2 -2
  158. data/smoke/simple.rb +12 -0
  159. data/smoke/step.rb +3 -3
  160. data/smoke/struct-keyword_init.rb +6 -16
  161. data/smoke/struct.rb +1 -1
  162. data/smoke/struct2.rb +1 -1
  163. data/smoke/struct3.rb +1 -1
  164. data/smoke/struct4.rb +1 -1
  165. data/smoke/struct5.rb +2 -2
  166. data/smoke/struct6.rb +2 -2
  167. data/smoke/struct7.rb +1 -1
  168. data/smoke/super1.rb +4 -4
  169. data/smoke/super3.rb +3 -2
  170. data/smoke/super4.rb +7 -5
  171. data/smoke/super5.rb +6 -4
  172. data/smoke/symbol-proc-attr.rb +1 -1
  173. data/smoke/tap1.rb +2 -2
  174. data/smoke/toplevel.rb +1 -1
  175. data/smoke/type_var.rb +3 -3
  176. data/smoke/user-demo.rb +1 -1
  177. data/smoke/wrong-extend.rb +1 -0
  178. data/smoke/wrong-include.rb +1 -0
  179. data/smoke/wrong-include2.rb +1 -1
  180. data/testbed/goodcheck-Gemfile.lock +1 -1
  181. data/typeprof.gemspec +1 -1
  182. metadata +19 -5
@@ -17,6 +17,6 @@ __END__
17
17
  # Classes
18
18
  class Object
19
19
  private
20
- def bar: (Integer | String) -> (Integer | String)
20
+ def bar: (Integer | String x) -> (Integer | String)
21
21
  def foo: { (Integer) -> String } -> String
22
22
  end
@@ -18,6 +18,6 @@ __END__
18
18
  # Classes
19
19
  class Object
20
20
  private
21
- def bar: (Integer | String) -> (Integer | String)
21
+ def bar: (Integer | String x) -> (Integer | String)
22
22
  def foo: { (Integer) -> (Integer | String) } -> (Integer | String)
23
23
  end
@@ -16,6 +16,6 @@ __END__
16
16
  # Classes
17
17
  class Object
18
18
  private
19
- def foo: ((:sym | Integer | String)?) -> Integer
19
+ def foo: ((:sym | Integer | String)? x) -> Integer
20
20
  def bar: -> (:sym | Integer)
21
21
  end
@@ -18,6 +18,6 @@ __END__
18
18
  # Classes
19
19
  class Object
20
20
  private
21
- def foo: ((:sym | Integer | String)?) -> Integer
21
+ def foo: ((:sym | Integer | String)? x) -> Integer
22
22
  def bar: -> Integer
23
23
  end
@@ -14,6 +14,7 @@ __END__
14
14
  # Classes
15
15
  class Object
16
16
  Ary: [Integer, String]
17
+
17
18
  private
18
19
  def foo: -> (Integer | String)
19
20
  end
@@ -13,5 +13,5 @@ __END__
13
13
  # Classes
14
14
  class Object
15
15
  private
16
- def log: (Integer | String) -> nil
16
+ def log: (Integer | String n) -> nil
17
17
  end
@@ -19,5 +19,5 @@ __END__
19
19
  # Classes
20
20
  class Object
21
21
  private
22
- def foo: (Integer | String | true) -> (Integer | String | bool)
22
+ def foo: (Integer | String | true n) -> (Integer | String | bool)
23
23
  end
@@ -21,6 +21,6 @@ __END__
21
21
  # Classes
22
22
  class Object
23
23
  private
24
- def foo: (:a | Integer | String, *Integer | String, :z | Integer | String) -> (Array[Integer | String])
25
- def bar: (String, ?Integer | String, *String, String) -> Array[String]
24
+ def foo: (:a | Integer | String a, *Integer | String r, :z | Integer | String z) -> (Array[Integer | String])
25
+ def bar: (String a, ?Integer | String o, *String r, String z) -> Array[String]
26
26
  end
@@ -27,5 +27,5 @@ __END__
27
27
  # Classes
28
28
  class Object
29
29
  private
30
- def foo: (Integer, String, :s) -> [Integer, String, :s]
30
+ def foo: (Integer a, String b, :s c) -> [Integer, String, :s]
31
31
  end
@@ -28,10 +28,10 @@ __END__
28
28
  # Classes
29
29
  class Object
30
30
  private
31
- def foo: (*String) -> nil
32
- def bar: (*Integer | String) -> nil
33
- def baz: (String, *String) -> nil
34
- def qux: (Integer, *String) -> nil
35
- def corge: (*Integer | String, Integer | String) -> nil
36
- def grault: (String, ?Integer | String, *String, String) -> nil
31
+ def foo: (*String r) -> nil
32
+ def bar: (*Integer | String r) -> nil
33
+ def baz: (String x, *String r) -> nil
34
+ def qux: (Integer x, *String r) -> nil
35
+ def corge: (*Integer | String r, Integer | String z) -> nil
36
+ def grault: (String a, ?Integer | String o, *String r, String z) -> nil
37
37
  end
@@ -14,6 +14,6 @@ __END__
14
14
  # Classes
15
15
  class Object
16
16
  private
17
- def foo: (*:s | Integer | String) -> nil
18
- def bar: (Integer, :s | String, :s | String) -> nil
17
+ def foo: (*:s | Integer | String a) -> nil
18
+ def bar: (Integer x, :s | String y, :s | String z) -> nil
19
19
  end
@@ -7,5 +7,5 @@ __END__
7
7
  # Classes
8
8
  class Object
9
9
  private
10
- def foo: (*Integer) -> [Integer]
10
+ def foo: (*Integer args) -> [Integer]
11
11
  end
@@ -8,5 +8,5 @@ __END__
8
8
  # Classes
9
9
  class Object
10
10
  private
11
- def foo: (?Integer | String, *String) -> [Array[String]]
11
+ def foo: (?Integer | String o1, *String r) -> [Array[String]]
12
12
  end
@@ -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
@@ -0,0 +1,12 @@
1
+ def foo(n)
2
+ n.to_s
3
+ end
4
+
5
+ foo(42)
6
+
7
+ __END__
8
+ # Classes
9
+ class Object
10
+ private
11
+ def foo: (Integer n) -> String
12
+ end
@@ -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
- # XXX: Need to support keyword_init
2
- Foo = Struct.new(:foo, keyword_init: true)
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 foo(): nil
19
- def initialize: (foo: untyped) -> Foo
6
+ class Foo < Struct[untyped]
7
+ attr_accessor a(): Integer
8
+ attr_accessor b(): String
9
+ attr_accessor c(): Float
20
10
  end
@@ -5,7 +5,7 @@ end
5
5
  Foo.new.a = 1
6
6
  __END__
7
7
  # Classes
8
- class AnonymousStruct_generated_1 < Struct
8
+ class AnonymousStruct_generated_1 < Struct[untyped]
9
9
  attr_accessor a(): untyped
10
10
  end
11
11
 
@@ -18,7 +18,7 @@ class Object
18
18
  def gen_foobar: -> FooBar
19
19
  end
20
20
 
21
- class FooBar < Struct
21
+ class FooBar < Struct[untyped]
22
22
  attr_accessor foo(): Integer | String
23
23
  attr_accessor bar(): :sym?
24
24
  def my_foo: -> (Integer | String)
@@ -7,7 +7,7 @@ App::FooBar.new(1, "str")
7
7
  __END__
8
8
  # Classes
9
9
  class App
10
- class FooBar < Struct
10
+ class FooBar < Struct[untyped]
11
11
  attr_accessor foo(): Integer
12
12
  attr_accessor bar(): String
13
13
  end
@@ -2,6 +2,6 @@ UndefinedConstant::Foo = Struct.new(:foo)
2
2
 
3
3
  __END__
4
4
  # Classes
5
- class AnonymousStruct_generated_1 < Struct
5
+ class AnonymousStruct_generated_1 < Struct[untyped]
6
6
  attr_accessor foo(): untyped
7
7
  end
@@ -10,7 +10,7 @@ Foo.new(42)
10
10
 
11
11
  __END__
12
12
  # Classes
13
- class Foo < Struct
13
+ class Foo < Struct[untyped]
14
14
  attr_accessor foo(): String
15
- def initialize: (Integer) -> Foo
15
+ def initialize: (Integer foo) -> Foo
16
16
  end
@@ -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
@@ -12,6 +12,6 @@ end
12
12
 
13
13
  __END__
14
14
  # Classes
15
- class Foo < Struct
15
+ class Foo < Struct[untyped]
16
16
  def initialize: -> Foo
17
17
  end
@@ -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
@@ -14,6 +14,7 @@ __END__
14
14
  # Classes
15
15
  class Foo
16
16
  @a: Integer
17
- def self.new: (Integer) -> Foo
18
- def initialize: (Integer) -> Integer
17
+
18
+ def self.new: (Integer a) -> Foo
19
+ def initialize: (Integer a) -> Integer
19
20
  end
@@ -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
- def f: (:M2) -> nil
37
+
38
+ def f: (:M2 m) -> nil
38
39
  end
39
40
 
40
41
  class E < D
41
42
  include M2
42
- def f: (:top) -> nil
43
+
44
+ def f: (:top m) -> nil
43
45
  end
@@ -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
- def f: (:M) -> nil
30
+
31
+ def f: (:M m) -> nil
31
32
  end
32
33
 
33
34
  class E < D
34
35
  include M
35
- def f: (:top) -> nil
36
+
37
+ def f: (:top m) -> nil
36
38
  end
@@ -18,5 +18,5 @@ end
18
18
 
19
19
  class Foo
20
20
  attr_reader foo: Integer | untyped
21
- def initialize: (Integer | untyped) -> (Integer | untyped)
21
+ def initialize: (Integer | untyped foo) -> (Integer | untyped)
22
22
  end
@@ -13,6 +13,6 @@ __END__
13
13
  # Classes
14
14
  class Object
15
15
  private
16
- def bar: (Integer) -> nil
17
- def foo: (Integer) -> Integer
16
+ def bar: (Integer x) -> nil
17
+ def foo: (Integer x) -> Integer
18
18
  end
@@ -9,5 +9,5 @@ __END__
9
9
  # Classes
10
10
  class Object
11
11
  private
12
- def foo: (Integer) -> Integer
12
+ def foo: (Integer x) -> Integer
13
13
  end
@@ -1,5 +1,5 @@
1
- def number?(type)
2
- %w[integer float].include?(type).then { puts 1 }
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
@@ -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
@@ -22,5 +22,6 @@ end
22
22
 
23
23
  module Foo
24
24
  extend Bar
25
+
25
26
  def foo: -> :foo
26
27
  end
@@ -22,5 +22,6 @@ end
22
22
 
23
23
  module Foo
24
24
  include Bar
25
+
25
26
  def foo: -> :foo
26
27
  end
@@ -7,7 +7,7 @@ end
7
7
 
8
8
  __END__
9
9
  # Errors
10
- smoke/wrong-include2.rb:5: [warning] including something that is not a module
10
+ smoke/wrong-include2.rb:5: [warning] attempted to include/extend non-module; ignored
11
11
 
12
12
  # Classes
13
13
  class Foo
@@ -21,7 +21,7 @@ GEM
21
21
  concurrent-ruby (1.1.7)
22
22
  i18n (1.8.5)
23
23
  concurrent-ruby (~> 1.0)
24
- minitest (5.14.2)
24
+ minitest (5.14.3)
25
25
  minitest-reporters (1.4.2)
26
26
  ansi
27
27
  builder
@@ -30,5 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
- spec.add_runtime_dependency "rbs", ">= 0.20.0"
33
+ spec.add_runtime_dependency "rbs", ">= 1.0.0"
34
34
  end