typeprof 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 $@