typeprof 0.2.0 → 0.3.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.
@@ -6,25 +6,11 @@ module TypeProf
6
6
  end
7
7
 
8
8
  module StructuralEquality
9
- def hash
10
- @_hash ||=
11
- begin
12
- h = 0
13
- instance_variables.each do |v|
14
- h ^= instance_variable_get(v).hash if v != :@_hash
15
- end
16
- h
17
- end
18
- end
19
-
20
- TABLE = {}
21
-
22
9
  def self.included(klass)
23
- def klass.new(*args)
24
- (TABLE[self] ||= {})[args] ||= super
25
- end
26
- class << klass
27
- ruby2_keywords :new
10
+ klass.instance_eval do
11
+ def new(*args)
12
+ (@table ||= {})[[self] + args] ||= super
13
+ end
28
14
  end
29
15
  end
30
16
  end
@@ -0,0 +1,3 @@
1
+ module TypeProf
2
+ VERSION = "0.3.0"
3
+ end
@@ -0,0 +1,55 @@
1
+ def f1
2
+ end
3
+ f1
4
+
5
+ def f2(x, y, z)
6
+ end
7
+ f2(:x, :y, :z)
8
+
9
+ def f3(x = "str", y = "str")
10
+ end
11
+ f3
12
+
13
+ def f4(*r)
14
+ end
15
+ f4(:a, :b, :c)
16
+
17
+ def f5(x, y = "str", z)
18
+ end
19
+ f5(:x, :z)
20
+
21
+ def f6(k:)
22
+ end
23
+ f6(k: :kk)
24
+
25
+ def f7(k: 42)
26
+ end
27
+ f7
28
+
29
+ def f8(k: "str")
30
+ end
31
+ f8
32
+
33
+ def f9(**kw)
34
+ end
35
+ f9(k: :kk)
36
+
37
+ def f10(&blk)
38
+ blk.call(1)
39
+ end
40
+ f10 {}
41
+
42
+ __END__
43
+ # Classes
44
+ class Object
45
+ def f1 : -> nil
46
+ def f2 : (:x, :y, :z) -> nil
47
+ def f3 : (?String, ?String) -> nil
48
+ def f4 : (*:a | :b | :c) -> nil
49
+ def f5 : (:x, ?String, :z) -> nil
50
+ def f6 : (k: :kk) -> nil
51
+ def f7 : (?k: Integer) -> nil
52
+ def f8 : (?k: String) -> nil
53
+ def f9 : (**{:k=>:kk}) -> nil
54
+ def f10 : { (Integer) -> nil } -> nil
55
+ end
@@ -6,5 +6,5 @@ foo
6
6
  __END__
7
7
  # Classes
8
8
  class Object
9
- def foo : -> Hash
9
+ def foo : -> Hash[bot, bot]
10
10
  end
@@ -1,4 +1,3 @@
1
- # TODO: foo should accept "s: String | [Integer]"?
2
1
  def foo(n: 42, s: [n])
3
2
  [n, s]
4
3
  end
@@ -8,5 +7,5 @@ foo(n: 42, s: "str")
8
7
  __END__
9
8
  # Classes
10
9
  class Object
11
- def foo : (?n: Integer, ?s: String) -> ([Integer, String | [Integer]])
10
+ def foo : (?n: Integer, ?s: String | [Integer]) -> ([Integer, String | [Integer]])
12
11
  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}) -> nil
10
+ def foo : (**{:n=>Integer, :s=>String}) -> {:n=>Integer, :s=>String}
11
11
  end
@@ -25,8 +25,10 @@ module M2
25
25
  end
26
26
 
27
27
  module M1
28
+ extend M2
28
29
  def foo : -> :m1_foo
29
30
  end
30
31
 
31
32
  class C
33
+ extend M1
32
34
  end
@@ -9,5 +9,5 @@ foo("A", "B", "C", "Z")
9
9
  __END__
10
10
  # Classes
11
11
  class Object
12
- def foo : (String, ?String, ?String, String) -> ([String, Integer | String, Integer | String, String])
12
+ def foo : (String, ?Integer | String, ?Integer | String, String) -> ([String, Integer | String, Integer | String, String])
13
13
  end
@@ -11,5 +11,5 @@ foo("A", "B", "C", "D", "E", "Z")
11
11
  __END__
12
12
  # Classes
13
13
  class Object
14
- def foo : (String, ?String, ?String, *String, String) -> ([String, Integer | String, Integer | String, Array[String], String])
14
+ def foo : (String, ?Integer | String, ?Integer | String, *String, String) -> ([String, Integer | String, Integer | String, Array[String], String])
15
15
  end
@@ -0,0 +1,9 @@
1
+ def log
2
+ C.foo
3
+ end
4
+
5
+ __END__
6
+ # Classes
7
+ class Object
8
+ def log : -> Integer
9
+ end
@@ -0,0 +1,7 @@
1
+ module M
2
+ def foo: -> Integer
3
+ end
4
+
5
+ class C
6
+ extend M
7
+ end
@@ -0,0 +1,24 @@
1
+ def get_module
2
+ C.new.get_module
3
+ end
4
+
5
+ def get_module_foo
6
+ C.new.get_module.foo
7
+ end
8
+
9
+ def get_interface
10
+ C.new.get_interface
11
+ end
12
+
13
+ def get_interface_foo
14
+ C.new.get_interface.foo
15
+ end
16
+
17
+ __END__
18
+ # Classes
19
+ class Object
20
+ def get_module : -> M
21
+ def get_module_foo : -> Integer
22
+ def get_interface : -> _I
23
+ def get_interface_foo : -> Integer
24
+ end
@@ -0,0 +1,12 @@
1
+ module M
2
+ def foo: -> Integer
3
+ end
4
+
5
+ interface _I
6
+ def foo: -> Integer
7
+ end
8
+
9
+ class C
10
+ def get_module : -> M
11
+ def get_interface : -> _I
12
+ end
@@ -0,0 +1,18 @@
1
+ def foo
2
+ cell = Cell.new("str")
3
+ cell.set_elem(42) if rand < 0.5
4
+ cell
5
+ end
6
+
7
+ def bar
8
+ foo.get_elem
9
+ end
10
+
11
+ bar
12
+
13
+ __END__
14
+ # Classes
15
+ class Object
16
+ def foo : -> (Cell[Integer | String])
17
+ def bar : -> (Integer | String)
18
+ end
@@ -0,0 +1,5 @@
1
+ class Cell[T]
2
+ def initialize : (T) -> void
3
+ def set_elem : (T) -> void
4
+ def get_elem : -> T
5
+ end
@@ -0,0 +1,20 @@
1
+ def foo
2
+ cell = Cell.new(:a1, :b1, :c1)
3
+ cell.set_a(:a2)
4
+ cell.set_b(:b2)
5
+ cell.set_c(:c2)
6
+ cell
7
+ end
8
+
9
+ def bar
10
+ foo.get_b
11
+ end
12
+
13
+ bar
14
+
15
+ __END__
16
+ # Classes
17
+ class Object
18
+ def foo : -> (Cell[:a1 | :a2, :b1 | :b2, :c1 | :c2])
19
+ def bar : -> (:b1 | :b2)
20
+ end
@@ -0,0 +1,9 @@
1
+ class Cell[A, B, C]
2
+ def initialize : (A, B, C) -> void
3
+ def set_a : (A) -> void
4
+ def set_b : (B) -> void
5
+ def set_c : (C) -> void
6
+ def get_a : -> A
7
+ def get_b : -> B
8
+ def get_c : -> C
9
+ 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
@@ -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
@@ -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
@@ -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
@@ -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.13.1"
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.3.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-10-27 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.13.1
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.13.1
27
27
  description: |
28
28
  TypeProf performs a type analysis of non-annotated Ruby code.
29
29
 
@@ -41,6 +41,7 @@ files:
41
41
  - ".gitignore"
42
42
  - Gemfile
43
43
  - Gemfile.lock
44
+ - LICENSE
44
45
  - README.md
45
46
  - Rakefile
46
47
  - doc/doc.ja.md
@@ -51,6 +52,7 @@ files:
51
52
  - lib/typeprof/analyzer.rb
52
53
  - lib/typeprof/builtin.rb
53
54
  - lib/typeprof/cli.rb
55
+ - lib/typeprof/config.rb
54
56
  - lib/typeprof/container-type.rb
55
57
  - lib/typeprof/export.rb
56
58
  - lib/typeprof/import.rb
@@ -59,13 +61,14 @@ files:
59
61
  - lib/typeprof/method.rb
60
62
  - lib/typeprof/type.rb
61
63
  - lib/typeprof/utils.rb
62
- - run.sh
64
+ - lib/typeprof/version.rb
63
65
  - smoke/alias.rb
64
66
  - smoke/alias2.rb
65
67
  - smoke/any-cbase.rb
66
68
  - smoke/any1.rb
67
69
  - smoke/any2.rb
68
70
  - smoke/arguments.rb
71
+ - smoke/arguments2.rb
69
72
  - smoke/array-each.rb
70
73
  - smoke/array-each2.rb
71
74
  - smoke/array-each3.rb
@@ -220,6 +223,14 @@ files:
220
223
  - smoke/rbs-alias.rbs
221
224
  - smoke/rbs-attr.rb
222
225
  - smoke/rbs-attr.rbs
226
+ - smoke/rbs-extend.rb
227
+ - smoke/rbs-extend.rbs
228
+ - smoke/rbs-interface.rb
229
+ - smoke/rbs-interface.rbs
230
+ - smoke/rbs-tyvar.rb
231
+ - smoke/rbs-tyvar.rbs
232
+ - smoke/rbs-tyvar2.rb
233
+ - smoke/rbs-tyvar2.rbs
223
234
  - smoke/rbs-vars.rb
224
235
  - smoke/rbs-vars.rbs
225
236
  - smoke/redo1.rb
@@ -254,6 +265,7 @@ files:
254
265
  - smoke/type_var.rb
255
266
  - smoke/typed_method.rb
256
267
  - smoke/union-recv.rb
268
+ - smoke/user-demo.rb
257
269
  - smoke/variadic1.rb.notyet
258
270
  - smoke/wrong-extend.rb
259
271
  - smoke/wrong-include.rb
data/run.sh DELETED
@@ -1,3 +0,0 @@
1
- #!/bin/bash
2
-
3
- bundle exe ruby exe/typeprof $@