typeprof 0.4.1 → 0.5.3

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.
@@ -1,3 +1,3 @@
1
1
  module TypeProf
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.3"
3
3
  end
@@ -50,6 +50,6 @@ class Object
50
50
  def f6 : (k: :kk) -> nil
51
51
  def f7 : (?k: Integer) -> nil
52
52
  def f8 : (?k: String) -> nil
53
- def f9 : (**{:k=>:kk}) -> nil
53
+ def f9 : (**{k: :kk}) -> nil
54
54
  def f10 : { (Integer) -> nil } -> nil
55
55
  end
@@ -46,7 +46,7 @@ class Object
46
46
  def f3 : { -> nil } -> nil
47
47
  def log3 : (Integer | String) -> nil
48
48
  def f4 : { -> nil } -> nil
49
- def log4 : ({:k=>Integer}) -> nil
49
+ def log4 : ({k: Integer}) -> nil
50
50
  def f5 : { -> nil } -> untyped
51
51
  def f6 : { -> nil } -> untyped
52
52
  end
@@ -10,5 +10,5 @@ foo([1], ["str"])
10
10
  __END__
11
11
  # Classes
12
12
  class Object
13
- def foo : ([Integer], [String]) -> [Integer]
13
+ def foo : ([Integer], [String]) -> ([Integer | String])
14
14
  end
@@ -21,7 +21,7 @@ baz(h)
21
21
  __END__
22
22
  # Classes
23
23
  class Object
24
- def foo : ({:a=>:A, :b=>:B}) -> (:A | :B)
25
- def bar : ({:a=>:A, :b=>:B}) -> (:A | :B | :C)
26
- def baz : ({:a=>:A, :b=>:B}) -> ([:A | :B | :C, (:a | :b)?])
24
+ def foo : ({a: :A, b: :B}) -> (:A | :B)
25
+ def bar : ({a: :A, b: :B}) -> (:A | :B | :C)
26
+ def baz : ({a: :A, b: :B}) -> ([:A | :B | :C, (:a | :b)?])
27
27
  end
@@ -0,0 +1,11 @@
1
+ def foo
2
+ h = { a: 42 }
3
+ h0 = h.merge!({ b: "str" })
4
+ return h0, h
5
+ end
6
+
7
+ __END__
8
+ # Classes
9
+ class Object
10
+ def foo : -> [{a: Integer}, {a: Integer, b: String}]
11
+ end
@@ -13,6 +13,6 @@ bar
13
13
  __END__
14
14
  # Classes
15
15
  class Object
16
- def foo : -> {:int=>Integer, :str=>String}
16
+ def foo : -> {int: Integer, str: String}
17
17
  def bar : -> ({Integer=>Integer | String, String=>String})
18
18
  end
@@ -9,5 +9,5 @@ foo
9
9
  __END__
10
10
  # Classes
11
11
  class Object
12
- def foo : -> {:int=>Integer, :str=>String}
12
+ def foo : -> {int: Integer, str: String}
13
13
  end
@@ -6,5 +6,5 @@ foo
6
6
  __END__
7
7
  # Classes
8
8
  class Object
9
- def foo : -> Hash[bot, bot]
9
+ def foo : -> {}
10
10
  end
@@ -24,7 +24,7 @@ __END__
24
24
  # Classes
25
25
  class Foo
26
26
  attr_reader array : Array[:sym | Integer | String]
27
- attr_reader hash : {:a=>Integer, :b=>String, :c=>:sym}
27
+ attr_reader hash : {a: Integer, b: String, c: :sym}
28
28
  def initialize : -> {}
29
29
  def set : -> :sym
30
30
  end
@@ -7,5 +7,5 @@ foo(n: 42, s: "str")
7
7
  __END__
8
8
  # Classes
9
9
  class Object
10
- def foo : (**{:n=>Integer, :s=>String}) -> {:n=>Integer, :s=>String}
10
+ def foo : (**{n: Integer, s: String}) -> {n: Integer, s: String}
11
11
  end
@@ -37,6 +37,6 @@ smoke/kwsplat1.rb:30: [error] undefined method: Object#any
37
37
  class Object
38
38
  def foo : (k: Integer) -> nil
39
39
  def bar : (int: Integer, str: String) -> nil
40
- def baz : (**{:int=>Integer, :str=>String}) -> nil
40
+ def baz : (**{int: Integer, str: String}) -> nil
41
41
  def qux : (**{untyped=>untyped}) -> nil
42
42
  end
@@ -8,5 +8,5 @@ foo(*a, **h)
8
8
  __END__
9
9
  # Classes
10
10
  class Object
11
- def foo : (*Integer | {:k=>Integer}, k: Integer) -> nil
11
+ def foo : (*Integer | {k: Integer}, k: Integer) -> nil
12
12
  end
@@ -0,0 +1,23 @@
1
+ # RUBY_VERSION >= 3.0
2
+
3
+ def foo
4
+ case [:a, :b, :c]
5
+ in [a, b, :c]
6
+ # Due to very subtle detail of bytecode, the variables "a" and "b" could be nil
7
+ return a, b
8
+ end
9
+ end
10
+
11
+ foo
12
+
13
+ __END__
14
+ # Errors
15
+ smoke/pattern-match1.rb:5: [error] undefined method: nil#length
16
+ smoke/pattern-match1.rb:5: [error] undefined method: nil#[]
17
+ smoke/pattern-match1.rb:5: [error] undefined method: nil#[]
18
+ smoke/pattern-match1.rb:5: [error] undefined method: nil#[]
19
+
20
+ # Classes
21
+ class Object
22
+ def foo : -> ([:a | untyped, :b | untyped])
23
+ end
@@ -0,0 +1,15 @@
1
+ # RUBY_VERSION >= 3.0
2
+
3
+ def foo
4
+ case { a: :A, b: :B, c: :C }
5
+ in { a:, b: bb, c: :C }
6
+ return a, bb
7
+ end
8
+ end
9
+
10
+ foo
11
+ __END__
12
+ # Classes
13
+ class Object
14
+ def foo : -> [:A, :B]
15
+ end
@@ -1,25 +1,17 @@
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
1
+ def foo
2
+ cell = Cell.new(42)
3
+ cell.map {|s| (s + 1).to_s }
13
4
  end
14
5
 
15
- StringFoo.new.set
16
- StringFoo.new.get
6
+ def bar
7
+ cell = Cell.new(42)
8
+ cell.map! {|s| (s + 1).to_s }
9
+ cell
10
+ end
17
11
 
18
12
  __END__
19
13
  # Classes
20
- class StringFoo
21
- @foo : Foo[String] | Foo[bot]
22
- def initialize : -> Foo[bot]
23
- def set : -> void
24
- def get : -> String
14
+ class Object
15
+ def foo : -> Cell[String]
16
+ def bar : -> (Cell[Integer | String])
25
17
  end
@@ -1,4 +1,5 @@
1
- class Foo[X]
2
- def set: (X) -> void
3
- def get: -> X
1
+ class Cell[T]
2
+ def initialize : (T) -> void
3
+ def map: [A] { (T) -> A } -> Cell[A]
4
+ def map!: { (T) -> T } -> self
4
5
  end
@@ -0,0 +1,36 @@
1
+ # This code is created by simplifying matrix.rb.
2
+ # The issue occurs when `Array.new` creates a cell-type container,
3
+ # so this test will be obsolete, but keep it just for case of regression.
4
+ #
5
+ # https://github.com/ruby/typeprof/issues/14
6
+
7
+ class Foo
8
+ def initialize(ivar)
9
+ @ivar = ivar
10
+ end
11
+
12
+ def foo(n)
13
+ @ivar.each_with_index { }
14
+ nil
15
+ end
16
+ end
17
+
18
+ Foo.new([])
19
+
20
+ rows = Array.new(1) do |i|
21
+ Array.new(1) do |j|
22
+ "str"
23
+ end
24
+ end
25
+ obj = Foo.new(rows)
26
+
27
+ obj.foo(:a)
28
+ obj.foo(:b)
29
+
30
+ __END__
31
+ # Classes
32
+ class Foo
33
+ @ivar : Array[Array[String]]
34
+ def initialize : (Array[Array[String]]) -> Array[Array[String]]
35
+ def foo : (:a | :b) -> nil
36
+ end
@@ -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
@@ -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
@@ -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.16.0"
33
+ spec.add_runtime_dependency "rbs", ">= 0.17.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.4.1
4
+ version: 0.5.3
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-11-05 00:00:00.000000000 Z
11
+ date: 2020-11-17 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.16.0
19
+ version: 0.17.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.16.0
26
+ version: 0.17.0
27
27
  description: |
28
28
  TypeProf performs a type analysis of non-annotated Ruby code.
29
29
 
@@ -179,6 +179,7 @@ files:
179
179
  - smoke/gvar2.rb
180
180
  - smoke/gvar2.rbs
181
181
  - smoke/hash-fetch.rb
182
+ - smoke/hash-merge-bang.rb
182
183
  - smoke/hash1.rb
183
184
  - smoke/hash2.rb
184
185
  - smoke/hash3.rb
@@ -230,6 +231,8 @@ files:
230
231
  - smoke/parameterizedd-self.rb
231
232
  - smoke/pathname1.rb
232
233
  - smoke/pathname2.rb
234
+ - smoke/pattern-match1.rb
235
+ - smoke/pattern-match2.rb
233
236
  - smoke/printf.rb
234
237
  - smoke/proc.rb
235
238
  - smoke/proc2.rb
@@ -258,6 +261,9 @@ files:
258
261
  - smoke/rbs-tyvar2.rbs
259
262
  - smoke/rbs-tyvar3.rb
260
263
  - smoke/rbs-tyvar3.rbs
264
+ - smoke/rbs-tyvar4.rb
265
+ - smoke/rbs-tyvar5.rb
266
+ - smoke/rbs-tyvar5.rbs
261
267
  - smoke/rbs-vars.rb
262
268
  - smoke/rbs-vars.rbs
263
269
  - smoke/redo1.rb
@@ -293,6 +299,7 @@ files:
293
299
  - smoke/two-map.rb
294
300
  - smoke/type_var.rb
295
301
  - smoke/typed_method.rb
302
+ - smoke/uninitialize-var.rb
296
303
  - smoke/union-recv.rb
297
304
  - smoke/user-demo.rb
298
305
  - smoke/wrong-extend.rb
@@ -327,7 +334,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
327
334
  - !ruby/object:Gem::Version
328
335
  version: '0'
329
336
  requirements: []
330
- rubygems_version: 3.1.4
337
+ rubygems_version: 3.2.0.rc.2
331
338
  signing_key:
332
339
  specification_version: 4
333
340
  summary: TypeProf is a type analysis tool for Ruby code based on abstract interpretation