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.
Files changed (188) 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 +163 -77
  7. data/lib/typeprof/block.rb +39 -4
  8. data/lib/typeprof/builtin.rb +195 -70
  9. data/lib/typeprof/cli.rb +7 -0
  10. data/lib/typeprof/config.rb +30 -14
  11. data/lib/typeprof/container-type.rb +24 -0
  12. data/lib/typeprof/export.rb +134 -74
  13. data/lib/typeprof/import.rb +87 -39
  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_eval.rb +22 -0
  64. data/smoke/class_method.rb +2 -2
  65. data/smoke/class_method2.rb +2 -2
  66. data/smoke/constant2.rb +3 -2
  67. data/smoke/context-sensitive1.rb +1 -1
  68. data/smoke/cvar.rb +3 -2
  69. data/smoke/define_method.rb +2 -2
  70. data/smoke/define_method3.rb +1 -0
  71. data/smoke/define_method4.rb +1 -1
  72. data/smoke/define_method6.rb +19 -0
  73. data/smoke/define_method7.rb +18 -0
  74. data/smoke/demo.rb +6 -6
  75. data/smoke/demo1.rb +1 -1
  76. data/smoke/demo11.rb +1 -1
  77. data/smoke/demo2.rb +1 -1
  78. data/smoke/demo3.rb +1 -1
  79. data/smoke/demo4.rb +3 -3
  80. data/smoke/demo5.rb +1 -1
  81. data/smoke/demo6.rb +2 -1
  82. data/smoke/demo7.rb +1 -1
  83. data/smoke/demo9.rb +1 -0
  84. data/smoke/dummy-execution1.rb +1 -1
  85. data/smoke/dummy-execution2.rb +1 -1
  86. data/smoke/dummy_element.rb +1 -1
  87. data/smoke/ensure1.rb +1 -1
  88. data/smoke/enum_for.rb +15 -0
  89. data/smoke/enum_for2.rb +17 -0
  90. data/smoke/extended.rb +38 -0
  91. data/smoke/fib.rb +2 -2
  92. data/smoke/flow1.rb +1 -1
  93. data/smoke/flow10.rb +17 -0
  94. data/smoke/flow2.rb +1 -1
  95. data/smoke/flow3.rb +1 -1
  96. data/smoke/flow5.rb +1 -1
  97. data/smoke/flow6.rb +1 -1
  98. data/smoke/flow7.rb +1 -1
  99. data/smoke/flow8.rb +1 -1
  100. data/smoke/flow9.rb +1 -1
  101. data/smoke/function.rb +1 -1
  102. data/smoke/gvar.rb +1 -1
  103. data/smoke/gvar2.rb +1 -1
  104. data/smoke/hash-fetch.rb +3 -3
  105. data/smoke/included.rb +38 -0
  106. data/smoke/inheritance.rb +4 -4
  107. data/smoke/inherited.rb +26 -0
  108. data/smoke/initialize.rb +3 -2
  109. data/smoke/instance_eval.rb +2 -2
  110. data/smoke/instance_eval4.rb +12 -0
  111. data/smoke/int_times.rb +1 -1
  112. data/smoke/integer.rb +1 -1
  113. data/smoke/ivar.rb +3 -2
  114. data/smoke/ivar2.rb +2 -2
  115. data/smoke/ivar3.rb +2 -1
  116. data/smoke/ivar4.rb +1 -0
  117. data/smoke/kernel-class.rb +1 -1
  118. data/smoke/keyword4.rb +1 -1
  119. data/smoke/kwrest.rb +1 -0
  120. data/smoke/kwsplat1.rb +2 -2
  121. data/smoke/kwsplat2.rb +1 -1
  122. data/smoke/manual-rbs.rb +2 -1
  123. data/smoke/manual-rbs3.rb +1 -0
  124. data/smoke/method_in_branch.rb +1 -1
  125. data/smoke/method_missing.rb +4 -3
  126. data/smoke/module3.rb +1 -1
  127. data/smoke/module4.rb +1 -0
  128. data/smoke/module5.rb +1 -1
  129. data/smoke/module_function1.rb +3 -2
  130. data/smoke/module_function2.rb +3 -2
  131. data/smoke/multiple-include.rb +1 -0
  132. data/smoke/next1.rb +1 -1
  133. data/smoke/object-send1.rb +3 -3
  134. data/smoke/optional1.rb +1 -1
  135. data/smoke/optional2.rb +1 -1
  136. data/smoke/optional3.rb +1 -1
  137. data/smoke/parameterizedd-self.rb +2 -1
  138. data/smoke/prepend1.rb +33 -0
  139. data/smoke/prepend2.rb +10 -0
  140. data/smoke/prepend2.rbs +9 -0
  141. data/smoke/primitive_method.rb +19 -0
  142. data/smoke/proc4.rb +1 -1
  143. data/smoke/public.rb +4 -0
  144. data/smoke/range.rb +1 -1
  145. data/smoke/rbs-attr.rb +2 -2
  146. data/smoke/rbs-proc2.rb +1 -1
  147. data/smoke/rbs-proc3.rb +1 -1
  148. data/smoke/rbs-tyvar4.rb +3 -2
  149. data/smoke/rbs-tyvar6.rb +3 -3
  150. data/smoke/redo1.rb +1 -1
  151. data/smoke/redo2.rb +1 -1
  152. data/smoke/rescue1.rb +1 -1
  153. data/smoke/rescue2.rb +1 -1
  154. data/smoke/rescue3.rb +1 -0
  155. data/smoke/rescue4.rb +1 -1
  156. data/smoke/respond_to.rb +1 -1
  157. data/smoke/rest1.rb +2 -2
  158. data/smoke/rest2.rb +1 -1
  159. data/smoke/rest3.rb +6 -6
  160. data/smoke/rest4.rb +2 -2
  161. data/smoke/rest5.rb +1 -1
  162. data/smoke/rest6.rb +1 -1
  163. data/smoke/retry1.rb +2 -2
  164. data/smoke/simple.rb +12 -0
  165. data/smoke/step.rb +3 -3
  166. data/smoke/struct-keyword_init.rb +6 -16
  167. data/smoke/struct.rb +1 -1
  168. data/smoke/struct2.rb +1 -1
  169. data/smoke/struct3.rb +1 -1
  170. data/smoke/struct4.rb +1 -1
  171. data/smoke/struct5.rb +2 -2
  172. data/smoke/struct6.rb +2 -2
  173. data/smoke/struct7.rb +1 -1
  174. data/smoke/super1.rb +4 -4
  175. data/smoke/super3.rb +3 -2
  176. data/smoke/super4.rb +7 -5
  177. data/smoke/super5.rb +6 -4
  178. data/smoke/symbol-proc-attr.rb +1 -1
  179. data/smoke/tap1.rb +2 -2
  180. data/smoke/toplevel.rb +1 -1
  181. data/smoke/type_var.rb +3 -3
  182. data/smoke/user-demo.rb +1 -1
  183. data/smoke/wrong-extend.rb +1 -0
  184. data/smoke/wrong-include.rb +1 -0
  185. data/smoke/wrong-include2.rb +1 -1
  186. data/testbed/goodcheck-Gemfile.lock +1 -1
  187. data/typeprof.gemspec +1 -1
  188. metadata +24 -5
@@ -11,6 +11,6 @@ end
11
11
  __END__
12
12
  # Classes
13
13
  class Foo
14
- def foo: (Integer | untyped) -> (Integer | untyped)
14
+ def foo: (Integer | untyped n) -> (Integer | untyped)
15
15
  def self.bar: -> (Integer | untyped)
16
16
  end
@@ -10,5 +10,5 @@ Foo.new.f
10
10
  __END__
11
11
  # Classes
12
12
  class Foo
13
- def f: (**Hash[untyped, untyped]) -> nil
13
+ def f: (**untyped) -> nil
14
14
  end
data/smoke/ensure1.rb CHANGED
@@ -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
21
21
  end
data/smoke/enum_for.rb ADDED
@@ -0,0 +1,15 @@
1
+ def log
2
+ nn = nil
3
+ ary = [1, "str"].to_enum.map do |n|
4
+ nn = n
5
+ n.to_s
6
+ end
7
+ return nn, ary
8
+ end
9
+
10
+ __END__
11
+ # Classes
12
+ class Object
13
+ private
14
+ def log: -> ([(Integer | String)?, Array[String]])
15
+ end
@@ -0,0 +1,17 @@
1
+ class Foo
2
+ def int_and_str_enum
3
+ return enum_for(__method__) unless block_given?
4
+
5
+ yield 1
6
+ yield 2
7
+ yield 3
8
+
9
+ 1.0
10
+ end
11
+ end
12
+
13
+ __END__
14
+ # Classes
15
+ class Foo
16
+ def int_and_str_enum: ?{ (Integer) -> untyped } -> (Enumerator[Integer, untyped] | Float)
17
+ end
data/smoke/extended.rb ADDED
@@ -0,0 +1,38 @@
1
+ module Foo
2
+ @extended = []
3
+ def self.extended(klass)
4
+ @extended << klass
5
+ end
6
+ end
7
+
8
+ class C
9
+ extend Foo
10
+ end
11
+
12
+ class D
13
+ extend Foo
14
+ end
15
+
16
+ class E
17
+ extend Foo
18
+ end
19
+
20
+ __END__
21
+ # Classes
22
+ module Foo
23
+ self.@extended: Array[singleton(C) | singleton(D) | singleton(E)]
24
+
25
+ def self.extended: (singleton(C) | singleton(D) | singleton(E) klass) -> (Array[singleton(C) | singleton(D) | singleton(E)])
26
+ end
27
+
28
+ class C
29
+ extend Foo
30
+ end
31
+
32
+ class D
33
+ extend Foo
34
+ end
35
+
36
+ class E
37
+ extend Foo
38
+ end
data/smoke/fib.rb CHANGED
@@ -23,6 +23,6 @@ Fib.new.fib_rec(42)
23
23
  __END__
24
24
  # Classes
25
25
  class Fib
26
- def fib_loop: (Integer) -> Integer
27
- def fib_rec: (Integer) -> Integer
26
+ def fib_loop: (Integer x) -> Integer
27
+ def fib_rec: (Integer x) -> Integer
28
28
  end
data/smoke/flow1.rb CHANGED
@@ -13,5 +13,5 @@ __END__
13
13
  # Classes
14
14
  class Object
15
15
  private
16
- def foo: (Integer | String) -> (Integer | String)
16
+ def foo: (Integer | String n) -> (Integer | String)
17
17
  end
data/smoke/flow10.rb ADDED
@@ -0,0 +1,17 @@
1
+ def foo
2
+ if block_given?
3
+ yield 42
4
+ else
5
+ 1.0
6
+ end
7
+ end
8
+
9
+ foo
10
+ foo {|n| n.to_s }
11
+
12
+ __END__
13
+ # Classes
14
+ class Object
15
+ private
16
+ def foo: ?{ (Integer) -> String } -> (Float | String)
17
+ end
data/smoke/flow2.rb CHANGED
@@ -11,5 +11,5 @@ smoke/flow2.rb:5: [error] undefined method: Object#unknown
11
11
  # Classes
12
12
  class Object
13
13
  private
14
- def foo: (untyped) -> Integer
14
+ def foo: (untyped x) -> Integer
15
15
  end
data/smoke/flow3.rb CHANGED
@@ -11,5 +11,5 @@ __END__
11
11
  # Classes
12
12
  class Object
13
13
  private
14
- def foo: (Integer?) -> Integer?
14
+ def foo: (Integer? x) -> Integer?
15
15
  end
data/smoke/flow5.rb CHANGED
@@ -16,5 +16,5 @@ __END__
16
16
  # Classes
17
17
  class Object
18
18
  private
19
- def foo: (Integer | String) -> Integer
19
+ def foo: (Integer | String x) -> Integer
20
20
  end
data/smoke/flow6.rb CHANGED
@@ -16,5 +16,5 @@ __END__
16
16
  # Classes
17
17
  class Object
18
18
  private
19
- def foo: (Integer | String) -> String
19
+ def foo: (Integer | String x) -> String
20
20
  end
data/smoke/flow7.rb CHANGED
@@ -17,5 +17,5 @@ __END__
17
17
  # Classes
18
18
  class Object
19
19
  private
20
- def foo: (:sym | Integer | String) -> (:sym | Integer | String)
20
+ def foo: (:sym | Integer | String n) -> (:sym | Integer | String)
21
21
  end
data/smoke/flow8.rb CHANGED
@@ -10,5 +10,5 @@ __END__
10
10
  # Classes
11
11
  class Object
12
12
  private
13
- def foo: (Integer?) -> Integer
13
+ def foo: (Integer? n) -> Integer
14
14
  end
data/smoke/flow9.rb CHANGED
@@ -8,5 +8,5 @@ __END__
8
8
  # Classes
9
9
  class Object
10
10
  private
11
- def foo: (untyped) -> String?
11
+ def foo: (untyped obj) -> String?
12
12
  end
data/smoke/function.rb CHANGED
@@ -13,5 +13,5 @@ __END__
13
13
  class Object
14
14
  private
15
15
  def no_argument: -> String
16
- def one_argument: (Integer) -> nil
16
+ def one_argument: (Integer x) -> nil
17
17
  end
data/smoke/gvar.rb CHANGED
@@ -10,5 +10,5 @@ $foo: Integer | String
10
10
  # Classes
11
11
  class Object
12
12
  private
13
- def log: (Integer | String) -> nil
13
+ def log: (Integer | String x) -> nil
14
14
  end
data/smoke/gvar2.rb CHANGED
@@ -6,7 +6,7 @@ end
6
6
 
7
7
  __END__
8
8
  # Errors
9
- smoke/gvar2.rb:1: [warning] inconsistent assignment to RBS-declared global variable
9
+ smoke/gvar2.rb:1: [warning] inconsistent assignment to RBS-declared variable
10
10
 
11
11
  # Global variables
12
12
  #$foo: String
data/smoke/hash-fetch.rb CHANGED
@@ -22,7 +22,7 @@ __END__
22
22
  # Classes
23
23
  class Object
24
24
  private
25
- def foo: ({a: :A, b: :B}) -> (:A | :B)
26
- def bar: ({a: :A, b: :B}) -> (:A | :B | :C)
27
- def baz: ({a: :A, b: :B}) -> ([:A | :B | :C, (:a | :b)?])
25
+ def foo: ({a: :A, b: :B} h) -> (:A | :B)
26
+ def bar: ({a: :A, b: :B} h) -> (:A | :B | :C)
27
+ def baz: ({a: :A, b: :B} h) -> ([:A | :B | :C, (:a | :b)?])
28
28
  end
data/smoke/included.rb ADDED
@@ -0,0 +1,38 @@
1
+ module Foo
2
+ @included = []
3
+ def self.included(klass)
4
+ @included << klass
5
+ end
6
+ end
7
+
8
+ class C
9
+ include Foo
10
+ end
11
+
12
+ class D
13
+ include Foo
14
+ end
15
+
16
+ class E
17
+ include Foo
18
+ end
19
+
20
+ __END__
21
+ # Classes
22
+ module Foo
23
+ self.@included: Array[singleton(C) | singleton(D) | singleton(E)]
24
+
25
+ def self.included: (singleton(C) | singleton(D) | singleton(E) klass) -> (Array[singleton(C) | singleton(D) | singleton(E)])
26
+ end
27
+
28
+ class C
29
+ include Foo
30
+ end
31
+
32
+ class D
33
+ include Foo
34
+ end
35
+
36
+ class E
37
+ include Foo
38
+ end
data/smoke/inheritance.rb CHANGED
@@ -24,11 +24,11 @@ B.test("str")
24
24
  __END__
25
25
  # Classes
26
26
  class A
27
- def foo: (Integer | String) -> nil
28
- def bar: (Integer | String) -> nil
29
- def self.test: (Integer | String) -> nil
27
+ def foo: (Integer | String x) -> nil
28
+ def bar: (Integer | String x) -> nil
29
+ def self.test: (Integer | String x) -> nil
30
30
  end
31
31
 
32
32
  class B < A
33
- def bar: ((Integer | String)?) -> nil
33
+ def bar: ((Integer | String)? x) -> nil
34
34
  end
@@ -0,0 +1,26 @@
1
+ class Foo
2
+ @inherited = []
3
+ def self.inherited(klass)
4
+ @inherited << klass
5
+ end
6
+ end
7
+
8
+ class Bar < Foo
9
+ end
10
+
11
+ class Baz < Foo
12
+ end
13
+
14
+ __END__
15
+ # Classes
16
+ class Foo
17
+ self.@inherited: Array[singleton(Bar) | singleton(Baz)]
18
+
19
+ def self.inherited: (singleton(Bar) | singleton(Baz) klass) -> (Array[singleton(Bar) | singleton(Baz)])
20
+ end
21
+
22
+ class Bar < Foo
23
+ end
24
+
25
+ class Baz < Foo
26
+ end
data/smoke/initialize.rb CHANGED
@@ -16,12 +16,13 @@ __END__
16
16
  # Classes
17
17
  class Object
18
18
  private
19
- def log: (A) -> nil
19
+ def log: (A x) -> nil
20
20
  end
21
21
 
22
22
  class A
23
23
  @int: Integer
24
24
  @str: String
25
25
  @val: (Integer | String)?
26
- def initialize: ((Integer | String)?) -> ((Integer | String)?)
26
+
27
+ def initialize: ((Integer | String)? x) -> ((Integer | String)?)
27
28
  end
@@ -13,6 +13,6 @@ end
13
13
  __END__
14
14
  # Classes
15
15
  class C
16
- def self.foo: { (C) -> nil } -> C
17
- def log: (Integer) -> nil
16
+ def self.foo: { (C) -> nil } -> nil
17
+ def log: (Integer n) -> nil
18
18
  end
@@ -0,0 +1,12 @@
1
+ def foo
2
+ 5.instance_eval { i }
3
+ end
4
+
5
+ foo
6
+
7
+ __END__
8
+ # Classes
9
+ class Object
10
+ private
11
+ def foo: -> Complex
12
+ end
data/smoke/int_times.rb CHANGED
@@ -11,5 +11,5 @@ __END__
11
11
  # Classes
12
12
  class Object
13
13
  private
14
- def foo: (Integer) -> (Integer | String)
14
+ def foo: (Integer n) -> (Integer | String)
15
15
  end
data/smoke/integer.rb CHANGED
@@ -7,5 +7,5 @@ __END__
7
7
  # Classes
8
8
  class Object
9
9
  private
10
- def foo: (Integer) -> nil
10
+ def foo: (Integer x) -> nil
11
11
  end
data/smoke/ivar.rb CHANGED
@@ -20,11 +20,12 @@ __END__
20
20
  # Classes
21
21
  class Object
22
22
  private
23
- def log: (Integer | String) -> nil
23
+ def log: (Integer | String x) -> nil
24
24
  end
25
25
 
26
26
  class Foo
27
27
  @foo: Integer | String
28
- def foo=: (Integer | String) -> (Integer | String)
28
+
29
+ def foo=: (Integer | String x) -> (Integer | String)
29
30
  def foo: -> (Integer | String)
30
31
  end
data/smoke/ivar2.rb CHANGED
@@ -23,8 +23,8 @@ Foo.new.set
23
23
  __END__
24
24
  # Classes
25
25
  class Foo
26
- attr_reader array: Array[:sym | Integer | String]
27
- attr_reader hash: {a: Integer, b: String, c: :sym}
28
26
  def initialize: -> Hash[bot, bot]
29
27
  def set: -> :sym
28
+ attr_reader array: Array[:sym | Integer | String]
29
+ attr_reader hash: {a: Integer, b: String, c: :sym}
30
30
  end
data/smoke/ivar3.rb CHANGED
@@ -7,10 +7,11 @@ end
7
7
 
8
8
  __END__
9
9
  # Errors
10
- smoke/ivar3.rb:3: [warning] inconsistent assignment to RBS-declared global variable
10
+ smoke/ivar3.rb:3: [warning] inconsistent assignment to RBS-declared variable
11
11
 
12
12
  # Classes
13
13
  class Foo
14
14
  @bar: String
15
+
15
16
  def initialize: -> String
16
17
  end
data/smoke/ivar4.rb CHANGED
@@ -14,6 +14,7 @@ __END__
14
14
  # Classes
15
15
  class Object
16
16
  @undefined_ivar: bot
17
+
17
18
  private
18
19
  def foo: -> bool
19
20
  def bar: -> nil
@@ -9,5 +9,5 @@ __END__
9
9
  # Classes
10
10
  class Object
11
11
  private
12
- def foo: (Integer | String) -> (singleton(Integer) | singleton(String))
12
+ def foo: (Integer | String n) -> (singleton(Integer) | singleton(String))
13
13
  end
data/smoke/keyword4.rb CHANGED
@@ -8,5 +8,5 @@ __END__
8
8
  # Classes
9
9
  class Object
10
10
  private
11
- def foo: (**{n: Integer, s: String}) -> {n: Integer, s: String}
11
+ def foo: (**Integer | String) -> {n: Integer, s: String}
12
12
  end