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
@@ -0,0 +1,3 @@
1
+ class Foo
2
+ def foo: (^(Integer) -> Integer) -> String
3
+ end
@@ -0,0 +1,13 @@
1
+ def log(foo)
2
+ foo.get.call
3
+ end
4
+
5
+ foo = Foo.new
6
+ foo.set(1)
7
+ log(foo)
8
+
9
+ __END__
10
+ # Classes
11
+ class Object
12
+ def log : (Foo[Integer]) -> Integer
13
+ end
@@ -0,0 +1,4 @@
1
+ class Foo[X]
2
+ def set: (X) -> void
3
+ def get: -> ^() -> X
4
+ end
@@ -0,0 +1,17 @@
1
+ def test_foo
2
+ h = C.new.foo
3
+ return h[:aaa], h[:bbb]
4
+ end
5
+
6
+ def test_bar
7
+ h = { }
8
+ h[:a] = 42
9
+ C.new.bar(h)
10
+ end
11
+
12
+ __END__
13
+ # Classes
14
+ class Object
15
+ def test_foo : -> [Integer, String]
16
+ def test_bar : -> Integer
17
+ end
@@ -0,0 +1,4 @@
1
+ class C
2
+ def foo: -> { aaa: Integer, bbb: String }
3
+ def bar: ({ a: Integer }) -> Integer
4
+ end
@@ -0,0 +1,25 @@
1
+ class StringFoo
2
+ def initialize
3
+ @foo = Foo.new
4
+ end
5
+
6
+ def set
7
+ @foo.set("42")
8
+ end
9
+
10
+ def get
11
+ @foo.get
12
+ end
13
+ end
14
+
15
+ StringFoo.new.set
16
+ StringFoo.new.get
17
+
18
+ __END__
19
+ # Classes
20
+ class StringFoo
21
+ @foo : Foo[String] | Foo[bot]
22
+ def initialize : -> Foo[bot]
23
+ def set : -> void
24
+ def get : -> String
25
+ end
@@ -0,0 +1,4 @@
1
+ class Foo[X]
2
+ def set: (X) -> void
3
+ def get: -> X
4
+ 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
@@ -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
@@ -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
@@ -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
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.3.0
4
+ version: 0.4.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-27 00:00:00.000000000 Z
11
+ date: 2020-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -44,12 +44,15 @@ files:
44
44
  - LICENSE
45
45
  - README.md
46
46
  - Rakefile
47
+ - doc/demo.md
47
48
  - doc/doc.ja.md
48
49
  - doc/doc.md
49
50
  - doc/ppl2019.pdf
50
51
  - exe/typeprof
51
52
  - lib/typeprof.rb
52
53
  - lib/typeprof/analyzer.rb
54
+ - lib/typeprof/arguments.rb
55
+ - lib/typeprof/block.rb
53
56
  - lib/typeprof/builtin.rb
54
57
  - lib/typeprof/cli.rb
55
58
  - lib/typeprof/config.rb
@@ -99,12 +102,22 @@ files:
99
102
  - smoke/array9.rb
100
103
  - smoke/attr.rb
101
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
102
114
  - smoke/block1.rb
103
115
  - smoke/block10.rb
104
116
  - smoke/block11.rb
105
117
  - smoke/block12.rb
106
118
  - smoke/block13.rb
107
119
  - smoke/block13.rbs
120
+ - smoke/block14.rb
108
121
  - smoke/block2.rb
109
122
  - smoke/block3.rb
110
123
  - smoke/block4.rb
@@ -118,6 +131,8 @@ files:
118
131
  - smoke/break2.rb
119
132
  - smoke/case.rb
120
133
  - smoke/case2.rb
134
+ - smoke/class-hierarchy.rb
135
+ - smoke/class-hierarchy2.rb
121
136
  - smoke/class.rb
122
137
  - smoke/class_instance_var.rb
123
138
  - smoke/class_method.rb
@@ -156,6 +171,7 @@ files:
156
171
  - smoke/flow5.rb
157
172
  - smoke/flow6.rb
158
173
  - smoke/flow7.rb
174
+ - smoke/flow8.rb
159
175
  - smoke/for.rb
160
176
  - smoke/freeze.rb
161
177
  - smoke/function.rb
@@ -210,6 +226,7 @@ files:
210
226
  - smoke/once.rb
211
227
  - smoke/optional1.rb
212
228
  - smoke/optional2.rb
229
+ - smoke/optional3.rb
213
230
  - smoke/parameterizedd-self.rb
214
231
  - smoke/pathname1.rb
215
232
  - smoke/pathname2.rb
@@ -227,10 +244,20 @@ files:
227
244
  - smoke/rbs-extend.rbs
228
245
  - smoke/rbs-interface.rb
229
246
  - smoke/rbs-interface.rbs
247
+ - smoke/rbs-proc1.rb
248
+ - smoke/rbs-proc1.rbs
249
+ - smoke/rbs-proc2.rb
250
+ - smoke/rbs-proc2.rbs
251
+ - smoke/rbs-proc3.rb
252
+ - smoke/rbs-proc3.rbs
253
+ - smoke/rbs-record.rb
254
+ - smoke/rbs-record.rbs
230
255
  - smoke/rbs-tyvar.rb
231
256
  - smoke/rbs-tyvar.rbs
232
257
  - smoke/rbs-tyvar2.rb
233
258
  - smoke/rbs-tyvar2.rbs
259
+ - smoke/rbs-tyvar3.rb
260
+ - smoke/rbs-tyvar3.rbs
234
261
  - smoke/rbs-vars.rb
235
262
  - smoke/rbs-vars.rbs
236
263
  - smoke/redo1.rb
@@ -255,10 +282,12 @@ files:
255
282
  - smoke/string-split.rb
256
283
  - smoke/struct.rb
257
284
  - smoke/struct2.rb
285
+ - smoke/struct3.rb
258
286
  - smoke/super1.rb
259
287
  - smoke/super2.rb
260
288
  - smoke/super3.rb
261
289
  - smoke/svar1.rb
290
+ - smoke/symbol-proc.rb
262
291
  - smoke/tap1.rb
263
292
  - smoke/toplevel.rb
264
293
  - smoke/two-map.rb
@@ -266,7 +295,6 @@ files:
266
295
  - smoke/typed_method.rb
267
296
  - smoke/union-recv.rb
268
297
  - smoke/user-demo.rb
269
- - smoke/variadic1.rb.notyet
270
298
  - smoke/wrong-extend.rb
271
299
  - smoke/wrong-include.rb
272
300
  - smoke/wrong-rbs.rb
@@ -1,5 +0,0 @@
1
- def foo(*a)
2
- p a
3
- end
4
-
5
- foo(1, 2)