typeprof 0.9.2 → 0.14.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 (189) 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 +201 -104
  7. data/lib/typeprof/block.rb +39 -4
  8. data/lib/typeprof/builtin.rb +217 -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 +116 -41
  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/break4.rb +17 -0
  64. data/smoke/class_eval.rb +22 -0
  65. data/smoke/class_method.rb +2 -2
  66. data/smoke/class_method2.rb +2 -2
  67. data/smoke/constant2.rb +3 -2
  68. data/smoke/context-sensitive1.rb +1 -1
  69. data/smoke/cvar.rb +3 -2
  70. data/smoke/define_method.rb +2 -2
  71. data/smoke/define_method3.rb +1 -0
  72. data/smoke/define_method4.rb +1 -1
  73. data/smoke/define_method6.rb +19 -0
  74. data/smoke/define_method7.rb +18 -0
  75. data/smoke/demo.rb +6 -6
  76. data/smoke/demo1.rb +1 -1
  77. data/smoke/demo11.rb +1 -1
  78. data/smoke/demo2.rb +1 -1
  79. data/smoke/demo3.rb +1 -1
  80. data/smoke/demo4.rb +3 -3
  81. data/smoke/demo5.rb +1 -1
  82. data/smoke/demo6.rb +2 -1
  83. data/smoke/demo7.rb +1 -1
  84. data/smoke/demo9.rb +1 -0
  85. data/smoke/dummy-execution1.rb +1 -1
  86. data/smoke/dummy-execution2.rb +1 -1
  87. data/smoke/dummy_element.rb +1 -1
  88. data/smoke/ensure1.rb +1 -1
  89. data/smoke/enum_for.rb +15 -0
  90. data/smoke/enum_for2.rb +17 -0
  91. data/smoke/extended.rb +38 -0
  92. data/smoke/fib.rb +2 -2
  93. data/smoke/flow1.rb +1 -1
  94. data/smoke/flow10.rb +17 -0
  95. data/smoke/flow11.rb +17 -0
  96. data/smoke/flow2.rb +1 -1
  97. data/smoke/flow3.rb +1 -1
  98. data/smoke/flow5.rb +1 -1
  99. data/smoke/flow6.rb +1 -1
  100. data/smoke/flow7.rb +1 -1
  101. data/smoke/flow8.rb +1 -1
  102. data/smoke/flow9.rb +1 -1
  103. data/smoke/function.rb +1 -1
  104. data/smoke/gvar.rb +1 -1
  105. data/smoke/gvar2.rb +1 -1
  106. data/smoke/hash-fetch.rb +3 -3
  107. data/smoke/included.rb +38 -0
  108. data/smoke/inheritance.rb +4 -4
  109. data/smoke/inherited.rb +26 -0
  110. data/smoke/initialize.rb +3 -2
  111. data/smoke/instance_eval.rb +2 -2
  112. data/smoke/instance_eval4.rb +12 -0
  113. data/smoke/int_times.rb +1 -1
  114. data/smoke/integer.rb +1 -1
  115. data/smoke/ivar.rb +3 -2
  116. data/smoke/ivar2.rb +2 -2
  117. data/smoke/ivar3.rb +2 -1
  118. data/smoke/ivar4.rb +1 -0
  119. data/smoke/kernel-class.rb +1 -1
  120. data/smoke/keyword4.rb +1 -1
  121. data/smoke/kwrest.rb +1 -0
  122. data/smoke/kwsplat1.rb +2 -2
  123. data/smoke/kwsplat2.rb +1 -1
  124. data/smoke/manual-rbs.rb +1 -0
  125. data/smoke/manual-rbs3.rb +1 -0
  126. data/smoke/method_missing.rb +4 -3
  127. data/smoke/module3.rb +1 -1
  128. data/smoke/module4.rb +1 -0
  129. data/smoke/module5.rb +1 -1
  130. data/smoke/module_function1.rb +3 -2
  131. data/smoke/module_function2.rb +3 -2
  132. data/smoke/multiple-include.rb +1 -0
  133. data/smoke/next1.rb +1 -1
  134. data/smoke/object-send1.rb +3 -3
  135. data/smoke/optional1.rb +1 -1
  136. data/smoke/optional2.rb +1 -1
  137. data/smoke/optional3.rb +1 -1
  138. data/smoke/parameterizedd-self.rb +2 -1
  139. data/smoke/prepend1.rb +33 -0
  140. data/smoke/prepend2.rb +10 -0
  141. data/smoke/prepend2.rbs +9 -0
  142. data/smoke/primitive_method.rb +19 -0
  143. data/smoke/proc4.rb +1 -1
  144. data/smoke/public.rb +4 -0
  145. data/smoke/range.rb +1 -1
  146. data/smoke/rbs-attr.rb +2 -2
  147. data/smoke/rbs-proc2.rb +1 -1
  148. data/smoke/rbs-proc3.rb +1 -1
  149. data/smoke/rbs-tyvar4.rb +3 -2
  150. data/smoke/rbs-tyvar6.rb +3 -3
  151. data/smoke/redo1.rb +1 -1
  152. data/smoke/redo2.rb +1 -1
  153. data/smoke/rescue1.rb +1 -1
  154. data/smoke/rescue2.rb +1 -1
  155. data/smoke/rescue3.rb +1 -0
  156. data/smoke/rescue4.rb +1 -1
  157. data/smoke/respond_to.rb +1 -1
  158. data/smoke/rest1.rb +2 -2
  159. data/smoke/rest2.rb +1 -1
  160. data/smoke/rest3.rb +6 -6
  161. data/smoke/rest4.rb +2 -2
  162. data/smoke/rest5.rb +1 -1
  163. data/smoke/rest6.rb +1 -1
  164. data/smoke/retry1.rb +2 -2
  165. data/smoke/simple.rb +1 -1
  166. data/smoke/step.rb +3 -3
  167. data/smoke/struct-keyword_init.rb +6 -16
  168. data/smoke/struct.rb +1 -1
  169. data/smoke/struct2.rb +1 -1
  170. data/smoke/struct3.rb +1 -1
  171. data/smoke/struct4.rb +1 -1
  172. data/smoke/struct5.rb +2 -2
  173. data/smoke/struct6.rb +2 -2
  174. data/smoke/struct7.rb +1 -1
  175. data/smoke/super1.rb +4 -4
  176. data/smoke/super3.rb +3 -2
  177. data/smoke/super4.rb +7 -5
  178. data/smoke/super5.rb +6 -4
  179. data/smoke/symbol-proc-attr.rb +1 -1
  180. data/smoke/tap1.rb +2 -2
  181. data/smoke/toplevel.rb +1 -1
  182. data/smoke/type_var.rb +3 -3
  183. data/smoke/user-demo.rb +1 -1
  184. data/smoke/wrong-extend.rb +1 -0
  185. data/smoke/wrong-include.rb +1 -0
  186. data/smoke/wrong-include2.rb +1 -1
  187. data/testbed/goodcheck-Gemfile.lock +1 -1
  188. data/typeprof.gemspec +1 -1
  189. metadata +25 -5
data/smoke/super3.rb CHANGED
@@ -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
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
- 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
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
- 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
data/smoke/tap1.rb CHANGED
@@ -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
data/smoke/toplevel.rb CHANGED
@@ -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
data/smoke/type_var.rb CHANGED
@@ -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
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
@@ -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
data/typeprof.gemspec CHANGED
@@ -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.1"
33
+ spec.add_runtime_dependency "rbs", ">= 1.0.0"
34
34
  end
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.9.2
4
+ version: 0.14.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: 2020-12-09 00:00:00.000000000 Z
11
+ date: 2021-05-18 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.20.1
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.20.1
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,10 +133,12 @@ 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
136
140
  - smoke/break3.rb
141
+ - smoke/break4.rb
137
142
  - smoke/case.rb
138
143
  - smoke/case2.rb
139
144
  - smoke/case3.rb
@@ -141,6 +146,7 @@ files:
141
146
  - smoke/class-hierarchy2.rb
142
147
  - smoke/class-new.rb
143
148
  - smoke/class.rb
149
+ - smoke/class_eval.rb
144
150
  - smoke/class_instance_var.rb
145
151
  - smoke/class_method.rb
146
152
  - smoke/class_method2.rb
@@ -159,6 +165,8 @@ files:
159
165
  - smoke/define_method4.rb
160
166
  - smoke/define_method4.rbs
161
167
  - smoke/define_method5.rb
168
+ - smoke/define_method6.rb
169
+ - smoke/define_method7.rb
162
170
  - smoke/demo.rb
163
171
  - smoke/demo1.rb
164
172
  - smoke/demo10.rb
@@ -175,12 +183,17 @@ files:
175
183
  - smoke/dummy-execution2.rb
176
184
  - smoke/dummy_element.rb
177
185
  - smoke/ensure1.rb
186
+ - smoke/enum_for.rb
187
+ - smoke/enum_for2.rb
178
188
  - smoke/enumerator.rb
179
189
  - smoke/expandarray1.rb
180
190
  - smoke/expandarray2.rb
191
+ - smoke/extended.rb
181
192
  - smoke/fib.rb
182
193
  - smoke/flip-flop.rb
183
194
  - smoke/flow1.rb
195
+ - smoke/flow10.rb
196
+ - smoke/flow11.rb
184
197
  - smoke/flow2.rb
185
198
  - smoke/flow3.rb
186
199
  - smoke/flow4.rb
@@ -203,12 +216,15 @@ files:
203
216
  - smoke/hash3.rb
204
217
  - smoke/hash4.rb
205
218
  - smoke/hash5.rb
219
+ - smoke/included.rb
206
220
  - smoke/inheritance.rb
207
221
  - smoke/inheritance2.rb
222
+ - smoke/inherited.rb
208
223
  - smoke/initialize.rb
209
224
  - smoke/instance_eval.rb
210
225
  - smoke/instance_eval2.rb
211
226
  - smoke/instance_eval3.rb
227
+ - smoke/instance_eval4.rb
212
228
  - smoke/int_times.rb
213
229
  - smoke/integer.rb
214
230
  - smoke/ivar.rb
@@ -264,6 +280,10 @@ files:
264
280
  - smoke/pathname2.rb
265
281
  - smoke/pattern-match1.rb
266
282
  - smoke/pattern-match2.rb
283
+ - smoke/prepend1.rb
284
+ - smoke/prepend2.rb
285
+ - smoke/prepend2.rbs
286
+ - smoke/primitive_method.rb
267
287
  - smoke/printf.rb
268
288
  - smoke/proc.rb
269
289
  - smoke/proc2.rb
@@ -391,7 +411,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
391
411
  - !ruby/object:Gem::Version
392
412
  version: '0'
393
413
  requirements: []
394
- rubygems_version: 3.2.0.rc.2
414
+ rubygems_version: 3.3.0.dev
395
415
  signing_key:
396
416
  specification_version: 4
397
417
  summary: TypeProf is a type analysis tool for Ruby code based on abstract interpretation