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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +9 -20
- data/LICENSE +21 -0
- data/doc/doc.ja.md +2 -1
- data/doc/doc.md +3 -2
- data/exe/typeprof +2 -1
- data/lib/typeprof.rb +1 -0
- data/lib/typeprof/analyzer.rb +163 -84
- data/lib/typeprof/builtin.rb +20 -19
- data/lib/typeprof/cli.rb +51 -98
- data/lib/typeprof/config.rb +114 -0
- data/lib/typeprof/container-type.rb +125 -21
- data/lib/typeprof/export.rb +20 -8
- data/lib/typeprof/import.rb +43 -20
- data/lib/typeprof/iseq.rb +17 -1
- data/lib/typeprof/method.rb +33 -9
- data/lib/typeprof/type.rb +52 -24
- data/lib/typeprof/utils.rb +4 -18
- data/lib/typeprof/version.rb +3 -0
- data/smoke/arguments2.rb +55 -0
- data/smoke/hash4.rb +1 -1
- data/smoke/keyword3.rb +1 -2
- data/smoke/keyword4.rb +1 -1
- data/smoke/module4.rb +2 -0
- data/smoke/optional1.rb +1 -1
- data/smoke/optional2.rb +1 -1
- data/smoke/rbs-extend.rb +9 -0
- data/smoke/rbs-extend.rbs +7 -0
- data/smoke/rbs-interface.rb +24 -0
- data/smoke/rbs-interface.rbs +12 -0
- data/smoke/rbs-tyvar.rb +18 -0
- data/smoke/rbs-tyvar.rbs +5 -0
- data/smoke/rbs-tyvar2.rb +20 -0
- data/smoke/rbs-tyvar2.rbs +9 -0
- data/smoke/rest1.rb +1 -1
- data/smoke/rest3.rb +1 -1
- data/smoke/rest6.rb +1 -1
- data/smoke/retry1.rb +1 -1
- data/smoke/step.rb +1 -1
- data/smoke/user-demo.rb +15 -0
- data/smoke/wrong-extend.rb +1 -0
- data/typeprof.gemspec +4 -2
- metadata +17 -5
- data/run.sh +0 -3
data/lib/typeprof/utils.rb
CHANGED
@@ -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
|
-
|
24
|
-
(
|
25
|
-
|
26
|
-
|
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
|
data/smoke/arguments2.rb
ADDED
@@ -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
|
data/smoke/hash4.rb
CHANGED
data/smoke/keyword3.rb
CHANGED
@@ -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
|
data/smoke/keyword4.rb
CHANGED
data/smoke/module4.rb
CHANGED
data/smoke/optional1.rb
CHANGED
@@ -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
|
data/smoke/optional2.rb
CHANGED
@@ -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
|
data/smoke/rbs-extend.rb
ADDED
@@ -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
|
data/smoke/rbs-tyvar.rb
ADDED
@@ -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
|
data/smoke/rbs-tyvar.rbs
ADDED
data/smoke/rbs-tyvar2.rb
ADDED
@@ -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
|
data/smoke/rest1.rb
CHANGED
@@ -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
|
data/smoke/rest3.rb
CHANGED
@@ -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
|
data/smoke/rest6.rb
CHANGED
data/smoke/retry1.rb
CHANGED
data/smoke/step.rb
CHANGED
data/smoke/user-demo.rb
ADDED
@@ -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
|
data/smoke/wrong-extend.rb
CHANGED
data/typeprof.gemspec
CHANGED
@@ -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 =
|
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.
|
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.
|
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-
|
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.
|
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.
|
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
|
-
-
|
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