typeprof 0.2.0 → 0.5.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 (120) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +1 -2
  3. data/.gitignore +1 -0
  4. data/Gemfile +2 -2
  5. data/Gemfile.lock +10 -21
  6. data/LICENSE +21 -0
  7. data/README.md +6 -0
  8. data/doc/demo.md +398 -0
  9. data/doc/doc.ja.md +6 -1
  10. data/doc/doc.md +7 -2
  11. data/exe/typeprof +2 -1
  12. data/lib/typeprof.rb +9 -0
  13. data/lib/typeprof/analyzer.rb +427 -325
  14. data/lib/typeprof/arguments.rb +405 -0
  15. data/lib/typeprof/block.rb +136 -0
  16. data/lib/typeprof/builtin.rb +36 -25
  17. data/lib/typeprof/cli.rb +51 -98
  18. data/lib/typeprof/config.rb +114 -0
  19. data/lib/typeprof/container-type.rb +280 -92
  20. data/lib/typeprof/export.rb +197 -108
  21. data/lib/typeprof/import.rb +134 -80
  22. data/lib/typeprof/iseq.rb +42 -1
  23. data/lib/typeprof/method.rb +178 -82
  24. data/lib/typeprof/type.rb +228 -369
  25. data/lib/typeprof/utils.rb +4 -18
  26. data/lib/typeprof/version.rb +3 -0
  27. data/smoke/arguments2.rb +55 -0
  28. data/smoke/array-each3.rb +1 -4
  29. data/smoke/array12.rb +1 -1
  30. data/smoke/array6.rb +1 -0
  31. data/smoke/block-ambiguous.rb +36 -0
  32. data/smoke/block-args1-rest.rb +62 -0
  33. data/smoke/block-args1.rb +59 -0
  34. data/smoke/block-args2-rest.rb +62 -0
  35. data/smoke/block-args2.rb +59 -0
  36. data/smoke/block-args3-rest.rb +73 -0
  37. data/smoke/block-args3.rb +70 -0
  38. data/smoke/block-blockarg.rb +27 -0
  39. data/smoke/block-kwarg.rb +52 -0
  40. data/smoke/block10.rb +1 -1
  41. data/smoke/block11.rb +1 -1
  42. data/smoke/block14.rb +17 -0
  43. data/smoke/block4.rb +2 -2
  44. data/smoke/block5.rb +1 -0
  45. data/smoke/block6.rb +1 -1
  46. data/smoke/block7.rb +0 -2
  47. data/smoke/block8.rb +2 -2
  48. data/smoke/block9.rb +1 -1
  49. data/smoke/blown.rb +1 -1
  50. data/smoke/class-hierarchy.rb +54 -0
  51. data/smoke/class-hierarchy2.rb +27 -0
  52. data/smoke/constant1.rb +11 -6
  53. data/smoke/constant2.rb +2 -0
  54. data/smoke/cvar.rb +1 -0
  55. data/smoke/demo10.rb +1 -1
  56. data/smoke/demo8.rb +2 -2
  57. data/smoke/demo9.rb +1 -3
  58. data/smoke/flow7.rb +1 -7
  59. data/smoke/flow8.rb +13 -0
  60. data/smoke/hash-fetch.rb +3 -3
  61. data/smoke/hash-merge-bang.rb +11 -0
  62. data/smoke/hash1.rb +1 -1
  63. data/smoke/hash3.rb +1 -1
  64. data/smoke/hash4.rb +1 -1
  65. data/smoke/instance_eval.rb +1 -1
  66. data/smoke/int_times.rb +1 -1
  67. data/smoke/ivar2.rb +1 -1
  68. data/smoke/keyword3.rb +1 -2
  69. data/smoke/keyword4.rb +1 -1
  70. data/smoke/kwsplat1.rb +1 -1
  71. data/smoke/kwsplat2.rb +1 -1
  72. data/smoke/module4.rb +2 -0
  73. data/smoke/multiple-superclass.rb +4 -0
  74. data/smoke/next2.rb +1 -1
  75. data/smoke/optional1.rb +1 -1
  76. data/smoke/optional2.rb +1 -1
  77. data/smoke/optional3.rb +10 -0
  78. data/smoke/pattern-match1.rb +23 -0
  79. data/smoke/pattern-match2.rb +15 -0
  80. data/smoke/proc4.rb +1 -1
  81. data/smoke/rbs-extend.rb +9 -0
  82. data/smoke/rbs-extend.rbs +7 -0
  83. data/smoke/rbs-interface.rb +24 -0
  84. data/smoke/rbs-interface.rbs +12 -0
  85. data/smoke/rbs-proc1.rb +9 -0
  86. data/smoke/rbs-proc1.rbs +3 -0
  87. data/smoke/rbs-proc2.rb +20 -0
  88. data/smoke/rbs-proc2.rbs +3 -0
  89. data/smoke/rbs-proc3.rb +13 -0
  90. data/smoke/rbs-proc3.rbs +4 -0
  91. data/smoke/rbs-record.rb +17 -0
  92. data/smoke/rbs-record.rbs +4 -0
  93. data/smoke/rbs-tyvar.rb +18 -0
  94. data/smoke/rbs-tyvar.rbs +5 -0
  95. data/smoke/rbs-tyvar2.rb +20 -0
  96. data/smoke/rbs-tyvar2.rbs +9 -0
  97. data/smoke/rbs-tyvar3.rb +17 -0
  98. data/smoke/rbs-tyvar3.rbs +5 -0
  99. data/smoke/rbs-tyvar4.rb +36 -0
  100. data/smoke/rbs-tyvar5.rb +12 -0
  101. data/smoke/rbs-tyvar5.rbs +8 -0
  102. data/smoke/rest1.rb +1 -1
  103. data/smoke/rest2.rb +1 -1
  104. data/smoke/rest3.rb +1 -1
  105. data/smoke/rest5.rb +1 -1
  106. data/smoke/rest6.rb +1 -1
  107. data/smoke/retry1.rb +1 -1
  108. data/smoke/return.rb +1 -1
  109. data/smoke/singleton_method.rb +3 -0
  110. data/smoke/step.rb +1 -1
  111. data/smoke/struct.rb +4 -3
  112. data/smoke/struct3.rb +14 -0
  113. data/smoke/symbol-proc.rb +24 -0
  114. data/smoke/uninitialize-var.rb +12 -0
  115. data/smoke/user-demo.rb +15 -0
  116. data/smoke/wrong-extend.rb +1 -0
  117. data/typeprof.gemspec +4 -2
  118. metadata +53 -6
  119. data/run.sh +0 -3
  120. data/smoke/variadic1.rb.notyet +0 -5
@@ -0,0 +1,12 @@
1
+ def foo
2
+ cell = Cell.new
3
+ cell.set { Foo.new(:a, :b) }
4
+ cell.dummy { }
5
+ cell
6
+ end
7
+
8
+ __END__
9
+ # Classes
10
+ class Object
11
+ def foo : -> Cell[Foo[:a, :b]]
12
+ end
@@ -0,0 +1,8 @@
1
+ class Cell[X]
2
+ def set: { -> X } -> self
3
+ def dummy: { -> void } -> self
4
+ end
5
+
6
+ class Foo[X, Y]
7
+ def initialize: (X, Y) -> void
8
+ end
@@ -21,5 +21,5 @@ __END__
21
21
  # Classes
22
22
  class Object
23
23
  def foo : (:a | Integer | String, *Integer | String, :z | Integer | String) -> (Array[Integer | String])
24
- def bar : (String, ?String, *String, String) -> Array[String]
24
+ def bar : (String, ?Integer | String, *String, String) -> Array[String]
25
25
  end
@@ -26,5 +26,5 @@ foo(*a)
26
26
  __END__
27
27
  # Classes
28
28
  class Object
29
- def foo : (:s | Integer | String, :s | Integer | String, :s | Integer | String) -> ([:s | Integer | String, :s | Integer | String, :s | Integer | String])
29
+ def foo : (Integer, String, :s) -> [Integer, String, :s]
30
30
  end
@@ -32,5 +32,5 @@ class Object
32
32
  def baz : (String, *String) -> nil
33
33
  def qux : (Integer, *String) -> nil
34
34
  def corge : (*Integer | String, Integer | String) -> nil
35
- def grault : (String, ?String, *String, String) -> nil
35
+ def grault : (String, ?Integer | String, *String, String) -> nil
36
36
  end
@@ -6,5 +6,5 @@ foo(42)
6
6
  __END__
7
7
  # Classes
8
8
  class Object
9
- def foo : (*Integer) -> Array[Integer]
9
+ def foo : (*Integer) -> [Integer]
10
10
  end
@@ -7,5 +7,5 @@ foo("x", "x")
7
7
  __END__
8
8
  # Classes
9
9
  class Object
10
- def foo : (?String, *String) -> [Array[String]]
10
+ def foo : (?Integer | String, *String) -> [Array[String]]
11
11
  end
@@ -16,5 +16,5 @@ __END__
16
16
  # Classes
17
17
  class Object
18
18
  def bar : (Integer | String) -> (Integer | String)
19
- def foo : (Integer) -> (Integer | String)
19
+ def foo : (Integer | String) -> (Integer | String)
20
20
  end
@@ -1,5 +1,5 @@
1
1
  def foo
2
- loop do |_|
2
+ loop do
3
3
  return 42
4
4
  end
5
5
  nil
@@ -7,3 +7,6 @@ end
7
7
 
8
8
  __END__
9
9
  # Classes
10
+ class Object
11
+ V : Object
12
+ end
@@ -12,6 +12,6 @@ __END__
12
12
  # Classes
13
13
  class Object
14
14
  def log1 : (Integer | Numeric) -> nil
15
- def log2 : (untyped) -> nil
15
+ def log2 : (void) -> nil
16
16
  def log3 : (Enumerator[Integer | Numeric]) -> nil
17
17
  end
@@ -1,12 +1,13 @@
1
- # tentative
1
+ # tentative: Currently, the hidden instance variable belongs to Foo, not Anonymous Struct.
2
+ # Thus, it outputs "untyped"
2
3
  class Foo < Struct.new(:a)
3
4
  end
4
5
  Foo.new.a = 1
5
6
  __END__
6
7
  # Classes
7
- class (Struct) < Struct
8
+ class (Anonymous Struct) < Struct
8
9
  attr_accessor a() : untyped
9
10
  end
10
11
 
11
- class Foo < (Struct)
12
+ class Foo < (Anonymous Struct)
12
13
  end
@@ -0,0 +1,14 @@
1
+ class App
2
+ FooBar = Struct.new(:foo, :bar)
3
+ end
4
+
5
+ App::FooBar.new(1, "str")
6
+
7
+ __END__
8
+ # Classes
9
+ class App
10
+ class FooBar < Struct
11
+ attr_accessor foo() : Integer
12
+ attr_accessor bar() : String
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ def foo
2
+ [1, :sym, "str"].map(&:to_s)
3
+ end
4
+
5
+ class Foo
6
+ def foo
7
+ :foo
8
+ end
9
+ end
10
+
11
+ def bar
12
+ [Foo.new].map(&:foo)
13
+ end
14
+
15
+ __END__
16
+ # Classes
17
+ class Object
18
+ def foo : -> Array[String]
19
+ def bar : -> Array[:foo]
20
+ end
21
+
22
+ class Foo
23
+ def foo : -> :foo
24
+ end
@@ -0,0 +1,12 @@
1
+ def foo
2
+ x = begin
3
+ return x
4
+ 1
5
+ end
6
+ end
7
+
8
+ __END__
9
+ # Classes
10
+ class Object
11
+ def foo : -> nil
12
+ end
@@ -0,0 +1,15 @@
1
+ class User
2
+ def foo(name: "str", age: 0)
3
+ @name, @age = name, age
4
+ end
5
+
6
+ attr_reader :name, :age
7
+ end
8
+
9
+ __END__
10
+ # Classes
11
+ class User
12
+ attr_reader name : String | untyped
13
+ attr_reader age : Integer | untyped
14
+ def foo : (?name: String | untyped, ?age: Integer | untyped) -> ([String | untyped, Integer | untyped])
15
+ end
@@ -21,5 +21,6 @@ module Bar
21
21
  end
22
22
 
23
23
  module Foo
24
+ extend Bar
24
25
  def foo : -> :foo
25
26
  end
@@ -1,6 +1,8 @@
1
+ require_relative 'lib/typeprof/version'
2
+
1
3
  Gem::Specification.new do |spec|
2
4
  spec.name = "typeprof" # temporal
3
- spec.version = "0.2.0"
5
+ spec.version = TypeProf::VERSION
4
6
  spec.authors = ["Yusuke Endoh"]
5
7
  spec.email = ["mame@ruby-lang.org"]
6
8
 
@@ -28,5 +30,5 @@ Gem::Specification.new do |spec|
28
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
31
  spec.require_paths = ["lib"]
30
32
 
31
- spec.add_runtime_dependency "rbs", ">= 0.14.0"
33
+ spec.add_runtime_dependency "rbs", ">= 0.16.0"
32
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.2.0
4
+ version: 0.5.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-10-19 00:00:00.000000000 Z
11
+ date: 2020-11-14 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.14.0
19
+ version: 0.16.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.14.0
26
+ version: 0.16.0
27
27
  description: |
28
28
  TypeProf performs a type analysis of non-annotated Ruby code.
29
29
 
@@ -41,16 +41,21 @@ files:
41
41
  - ".gitignore"
42
42
  - Gemfile
43
43
  - Gemfile.lock
44
+ - LICENSE
44
45
  - README.md
45
46
  - Rakefile
47
+ - doc/demo.md
46
48
  - doc/doc.ja.md
47
49
  - doc/doc.md
48
50
  - doc/ppl2019.pdf
49
51
  - exe/typeprof
50
52
  - lib/typeprof.rb
51
53
  - lib/typeprof/analyzer.rb
54
+ - lib/typeprof/arguments.rb
55
+ - lib/typeprof/block.rb
52
56
  - lib/typeprof/builtin.rb
53
57
  - lib/typeprof/cli.rb
58
+ - lib/typeprof/config.rb
54
59
  - lib/typeprof/container-type.rb
55
60
  - lib/typeprof/export.rb
56
61
  - lib/typeprof/import.rb
@@ -59,13 +64,14 @@ files:
59
64
  - lib/typeprof/method.rb
60
65
  - lib/typeprof/type.rb
61
66
  - lib/typeprof/utils.rb
62
- - run.sh
67
+ - lib/typeprof/version.rb
63
68
  - smoke/alias.rb
64
69
  - smoke/alias2.rb
65
70
  - smoke/any-cbase.rb
66
71
  - smoke/any1.rb
67
72
  - smoke/any2.rb
68
73
  - smoke/arguments.rb
74
+ - smoke/arguments2.rb
69
75
  - smoke/array-each.rb
70
76
  - smoke/array-each2.rb
71
77
  - smoke/array-each3.rb
@@ -96,12 +102,22 @@ files:
96
102
  - smoke/array9.rb
97
103
  - smoke/attr.rb
98
104
  - smoke/backtrace.rb
105
+ - smoke/block-ambiguous.rb
106
+ - smoke/block-args1-rest.rb
107
+ - smoke/block-args1.rb
108
+ - smoke/block-args2-rest.rb
109
+ - smoke/block-args2.rb
110
+ - smoke/block-args3-rest.rb
111
+ - smoke/block-args3.rb
112
+ - smoke/block-blockarg.rb
113
+ - smoke/block-kwarg.rb
99
114
  - smoke/block1.rb
100
115
  - smoke/block10.rb
101
116
  - smoke/block11.rb
102
117
  - smoke/block12.rb
103
118
  - smoke/block13.rb
104
119
  - smoke/block13.rbs
120
+ - smoke/block14.rb
105
121
  - smoke/block2.rb
106
122
  - smoke/block3.rb
107
123
  - smoke/block4.rb
@@ -115,6 +131,8 @@ files:
115
131
  - smoke/break2.rb
116
132
  - smoke/case.rb
117
133
  - smoke/case2.rb
134
+ - smoke/class-hierarchy.rb
135
+ - smoke/class-hierarchy2.rb
118
136
  - smoke/class.rb
119
137
  - smoke/class_instance_var.rb
120
138
  - smoke/class_method.rb
@@ -153,6 +171,7 @@ files:
153
171
  - smoke/flow5.rb
154
172
  - smoke/flow6.rb
155
173
  - smoke/flow7.rb
174
+ - smoke/flow8.rb
156
175
  - smoke/for.rb
157
176
  - smoke/freeze.rb
158
177
  - smoke/function.rb
@@ -160,6 +179,7 @@ files:
160
179
  - smoke/gvar2.rb
161
180
  - smoke/gvar2.rbs
162
181
  - smoke/hash-fetch.rb
182
+ - smoke/hash-merge-bang.rb
163
183
  - smoke/hash1.rb
164
184
  - smoke/hash2.rb
165
185
  - smoke/hash3.rb
@@ -207,9 +227,12 @@ files:
207
227
  - smoke/once.rb
208
228
  - smoke/optional1.rb
209
229
  - smoke/optional2.rb
230
+ - smoke/optional3.rb
210
231
  - smoke/parameterizedd-self.rb
211
232
  - smoke/pathname1.rb
212
233
  - smoke/pathname2.rb
234
+ - smoke/pattern-match1.rb
235
+ - smoke/pattern-match2.rb
213
236
  - smoke/printf.rb
214
237
  - smoke/proc.rb
215
238
  - smoke/proc2.rb
@@ -220,6 +243,27 @@ files:
220
243
  - smoke/rbs-alias.rbs
221
244
  - smoke/rbs-attr.rb
222
245
  - smoke/rbs-attr.rbs
246
+ - smoke/rbs-extend.rb
247
+ - smoke/rbs-extend.rbs
248
+ - smoke/rbs-interface.rb
249
+ - smoke/rbs-interface.rbs
250
+ - smoke/rbs-proc1.rb
251
+ - smoke/rbs-proc1.rbs
252
+ - smoke/rbs-proc2.rb
253
+ - smoke/rbs-proc2.rbs
254
+ - smoke/rbs-proc3.rb
255
+ - smoke/rbs-proc3.rbs
256
+ - smoke/rbs-record.rb
257
+ - smoke/rbs-record.rbs
258
+ - smoke/rbs-tyvar.rb
259
+ - smoke/rbs-tyvar.rbs
260
+ - smoke/rbs-tyvar2.rb
261
+ - smoke/rbs-tyvar2.rbs
262
+ - smoke/rbs-tyvar3.rb
263
+ - smoke/rbs-tyvar3.rbs
264
+ - smoke/rbs-tyvar4.rb
265
+ - smoke/rbs-tyvar5.rb
266
+ - smoke/rbs-tyvar5.rbs
223
267
  - smoke/rbs-vars.rb
224
268
  - smoke/rbs-vars.rbs
225
269
  - smoke/redo1.rb
@@ -244,17 +288,20 @@ files:
244
288
  - smoke/string-split.rb
245
289
  - smoke/struct.rb
246
290
  - smoke/struct2.rb
291
+ - smoke/struct3.rb
247
292
  - smoke/super1.rb
248
293
  - smoke/super2.rb
249
294
  - smoke/super3.rb
250
295
  - smoke/svar1.rb
296
+ - smoke/symbol-proc.rb
251
297
  - smoke/tap1.rb
252
298
  - smoke/toplevel.rb
253
299
  - smoke/two-map.rb
254
300
  - smoke/type_var.rb
255
301
  - smoke/typed_method.rb
302
+ - smoke/uninitialize-var.rb
256
303
  - smoke/union-recv.rb
257
- - smoke/variadic1.rb.notyet
304
+ - smoke/user-demo.rb
258
305
  - smoke/wrong-extend.rb
259
306
  - smoke/wrong-include.rb
260
307
  - smoke/wrong-rbs.rb
data/run.sh DELETED
@@ -1,3 +0,0 @@
1
- #!/bin/bash
2
-
3
- bundle exe ruby exe/typeprof $@
@@ -1,5 +0,0 @@
1
- def foo(*a)
2
- p a
3
- end
4
-
5
- foo(1, 2)