steep 0.1.0.pre
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 +7 -0
- data/.gitignore +11 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/README.md +95 -0
- data/Rakefile +23 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bin/smoke_runner.rb +106 -0
- data/exe/steep +18 -0
- data/lib/steep.rb +33 -0
- data/lib/steep/annotation.rb +223 -0
- data/lib/steep/cli.rb +79 -0
- data/lib/steep/drivers/check.rb +141 -0
- data/lib/steep/errors.rb +207 -0
- data/lib/steep/interface.rb +280 -0
- data/lib/steep/parser.y +311 -0
- data/lib/steep/signature/class.rb +358 -0
- data/lib/steep/signature/errors.rb +78 -0
- data/lib/steep/signature/extension.rb +51 -0
- data/lib/steep/signature/interface.rb +48 -0
- data/lib/steep/source.rb +98 -0
- data/lib/steep/type_assignability.rb +362 -0
- data/lib/steep/type_construction.rb +993 -0
- data/lib/steep/type_name.rb +37 -0
- data/lib/steep/types.rb +4 -0
- data/lib/steep/types/any.rb +31 -0
- data/lib/steep/types/class.rb +27 -0
- data/lib/steep/types/instance.rb +27 -0
- data/lib/steep/types/merge.rb +32 -0
- data/lib/steep/types/name.rb +57 -0
- data/lib/steep/types/union.rb +42 -0
- data/lib/steep/types/var.rb +38 -0
- data/lib/steep/typing.rb +70 -0
- data/lib/steep/version.rb +3 -0
- data/manual/annotations.md +144 -0
- data/sig/signature.rbi +54 -0
- data/sig/types.rbi +43 -0
- data/smoke/and/a.rb +9 -0
- data/smoke/array/a.rb +22 -0
- data/smoke/block/a.rb +12 -0
- data/smoke/block/a.rbi +4 -0
- data/smoke/case/a.rb +20 -0
- data/smoke/class/a.rb +31 -0
- data/smoke/class/a.rbi +9 -0
- data/smoke/class/b.rb +7 -0
- data/smoke/class/c.rb +10 -0
- data/smoke/const/a.rb +30 -0
- data/smoke/dstr/a.rb +6 -0
- data/smoke/extension/a.rb +11 -0
- data/smoke/extension/a.rbi +8 -0
- data/smoke/extension/b.rb +12 -0
- data/smoke/extension/c.rb +9 -0
- data/smoke/hello/hello.rb +13 -0
- data/smoke/hello/hello.rbi +7 -0
- data/smoke/if/a.rb +20 -0
- data/smoke/implements/a.rb +14 -0
- data/smoke/implements/a.rbi +6 -0
- data/smoke/literal/a.rb +16 -0
- data/smoke/map/a.rb +5 -0
- data/smoke/method/a.rb +26 -0
- data/smoke/method/a.rbi +0 -0
- data/smoke/module/a.rb +21 -0
- data/smoke/module/a.rbi +7 -0
- data/smoke/module/b.rb +8 -0
- data/smoke/self/a.rb +23 -0
- data/smoke/self/a.rbi +4 -0
- data/smoke/super/a.rb +34 -0
- data/smoke/super/a.rbi +10 -0
- data/smoke/yield/a.rb +18 -0
- data/stdlib/builtin.rbi +89 -0
- data/steep.gemspec +32 -0
- metadata +214 -0
data/smoke/method/a.rbi
ADDED
File without changes
|
data/smoke/module/a.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module A
|
2
|
+
# @implements A
|
3
|
+
|
4
|
+
def count
|
5
|
+
# @type var n: Integer
|
6
|
+
n = 0
|
7
|
+
|
8
|
+
each do |_|
|
9
|
+
n = n + 1
|
10
|
+
end
|
11
|
+
|
12
|
+
# @type var s: String
|
13
|
+
# !expects IncompatibleAssignment: lhs_type=String, rhs_type=Integer
|
14
|
+
s = n
|
15
|
+
|
16
|
+
# !expects NoMethodError: type=_Each<Integer> + A, method=foo
|
17
|
+
foo()
|
18
|
+
|
19
|
+
n
|
20
|
+
end
|
21
|
+
end
|
data/smoke/module/a.rbi
ADDED
data/smoke/module/b.rb
ADDED
data/smoke/self/a.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
def foo
|
2
|
+
# @type self: A
|
3
|
+
|
4
|
+
self.bar()
|
5
|
+
|
6
|
+
tap do
|
7
|
+
# @type self: A
|
8
|
+
|
9
|
+
bar
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def bar
|
14
|
+
# @type self: Object
|
15
|
+
|
16
|
+
# !expects NoMethodError: type=Object, method=baz
|
17
|
+
baz
|
18
|
+
|
19
|
+
tap do
|
20
|
+
# !expects NoMethodError: type=Object, method=baz
|
21
|
+
baz
|
22
|
+
end
|
23
|
+
end
|
data/smoke/self/a.rbi
ADDED
data/smoke/super/a.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
class A
|
2
|
+
def foo(x)
|
3
|
+
# @type self: A
|
4
|
+
|
5
|
+
# @type var a: Integer
|
6
|
+
# !expects IncompatibleAssignment: lhs_type=Integer, rhs_type=Object
|
7
|
+
a = super(x)
|
8
|
+
# !expects IncompatibleAssignment: lhs_type=Integer, rhs_type=Object
|
9
|
+
a = super
|
10
|
+
|
11
|
+
# @type var b: Object
|
12
|
+
b = super(x)
|
13
|
+
|
14
|
+
# @type var c: Integer
|
15
|
+
c = foo(x)
|
16
|
+
end
|
17
|
+
|
18
|
+
def bar()
|
19
|
+
# @type self: A
|
20
|
+
|
21
|
+
super()
|
22
|
+
super
|
23
|
+
end
|
24
|
+
|
25
|
+
def baz
|
26
|
+
# @type self: A
|
27
|
+
|
28
|
+
# !expects UnexpectedSuper: method=baz
|
29
|
+
super()
|
30
|
+
|
31
|
+
# !expects UnexpectedSuper: method=baz
|
32
|
+
super
|
33
|
+
end
|
34
|
+
end
|
data/smoke/super/a.rbi
ADDED
data/smoke/yield/a.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
class A
|
2
|
+
# @type method foo: () { (Integer) -> Integer } -> any
|
3
|
+
def foo()
|
4
|
+
# @type var x: String
|
5
|
+
|
6
|
+
# !expects IncompatibleAssignment: lhs_type=String, rhs_type=Integer
|
7
|
+
x = yield(3)
|
8
|
+
|
9
|
+
# !expects IncompatibleAssignment: lhs_type=Integer, rhs_type=String
|
10
|
+
yield(x)
|
11
|
+
end
|
12
|
+
|
13
|
+
# @type method bar: () -> any
|
14
|
+
def bar()
|
15
|
+
# !expects UnexpectedYield
|
16
|
+
yield 4
|
17
|
+
end
|
18
|
+
end
|
data/stdlib/builtin.rbi
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
class BasicObject
|
2
|
+
def __id__: -> Integer
|
3
|
+
end
|
4
|
+
|
5
|
+
class Object <: BasicObject
|
6
|
+
include Kernel
|
7
|
+
def tap: { (instance) -> any } -> instance
|
8
|
+
def to_s: -> String
|
9
|
+
def hash: -> Integer
|
10
|
+
def eql?: (any) -> _Boolean
|
11
|
+
def ==: (any) -> _Boolean
|
12
|
+
def ===: (any) -> _Boolean
|
13
|
+
def !=: (any) -> _Boolean
|
14
|
+
def class: -> class
|
15
|
+
def to_i: -> Integer
|
16
|
+
def is_a?: (Module) -> _Boolean
|
17
|
+
end
|
18
|
+
|
19
|
+
class Module
|
20
|
+
def attr_reader: (*any) -> any
|
21
|
+
def class: -> Class<Module>
|
22
|
+
def tap: { (Module) -> any } -> Module
|
23
|
+
end
|
24
|
+
|
25
|
+
class Class<'instance> <: Module
|
26
|
+
def new: -> 'instance
|
27
|
+
def allocate: -> 'instance
|
28
|
+
end
|
29
|
+
|
30
|
+
module Kernel
|
31
|
+
def raise: () -> any
|
32
|
+
| (String) -> any
|
33
|
+
end
|
34
|
+
|
35
|
+
class Array<'a>
|
36
|
+
def []: (Integer) -> 'a
|
37
|
+
def []=: (Integer, 'a) -> 'a
|
38
|
+
def empty?: -> _Boolean
|
39
|
+
def size: -> Integer
|
40
|
+
def map: <'b> { ('a) -> 'b } -> Array<'b>
|
41
|
+
def join: (any) -> String
|
42
|
+
def all?: { (any) -> any } -> _Boolean
|
43
|
+
def sort_by: { ('a) -> any } -> Array<'a>
|
44
|
+
def zip: <'b> (Array<'b>) -> Array<Array<'a, 'b> >
|
45
|
+
def each: { ('a) -> any } -> instance
|
46
|
+
def select: { ('a) -> any } -> Array<'a>
|
47
|
+
def <<: ('a) -> instance
|
48
|
+
def filter: { ('a) -> any } -> Array<'a>
|
49
|
+
end
|
50
|
+
|
51
|
+
class Hash<'key, 'value>
|
52
|
+
def []: ('key) -> 'value
|
53
|
+
def size: -> Integer
|
54
|
+
def transform_values: <'a> { ('value) -> 'a } -> Hash<'key, 'a>
|
55
|
+
|
56
|
+
def self.[]: (Array<any>) -> Hash<'key, 'value>
|
57
|
+
end
|
58
|
+
|
59
|
+
class Symbol
|
60
|
+
end
|
61
|
+
|
62
|
+
interface _Boolean
|
63
|
+
end
|
64
|
+
|
65
|
+
class NilClass
|
66
|
+
end
|
67
|
+
|
68
|
+
class Numeric
|
69
|
+
def +: (Numeric) -> Numeric
|
70
|
+
end
|
71
|
+
|
72
|
+
class Integer <: Numeric
|
73
|
+
def to_int: -> Integer
|
74
|
+
def +: (Integer) -> Integer
|
75
|
+
| (Numeric) -> Numeric
|
76
|
+
def ^: (Numeric) -> Integer
|
77
|
+
end
|
78
|
+
|
79
|
+
class Float <: Numeric
|
80
|
+
end
|
81
|
+
|
82
|
+
class Range<'a>
|
83
|
+
end
|
84
|
+
|
85
|
+
class String
|
86
|
+
def +: (String) -> String
|
87
|
+
def to_str: -> String
|
88
|
+
def size: -> Integer
|
89
|
+
end
|
data/steep.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'steep/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "steep"
|
8
|
+
spec.version = Steep::VERSION
|
9
|
+
spec.authors = ["Soutaro Matsumoto"]
|
10
|
+
spec.email = ["matsumoto@soutaro.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Gradual Typing for Ruby}
|
13
|
+
spec.description = %q{Gradual Typing for Ruby}
|
14
|
+
spec.homepage = "https://github.com/soutaro/steep"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test|spec|features)/})
|
18
|
+
end
|
19
|
+
spec.files << "lib/steep/parser.rb"
|
20
|
+
spec.bindir = "exe"
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.13"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
27
|
+
spec.add_development_dependency "racc", "~> 1.4"
|
28
|
+
spec.add_development_dependency "rainbow", "~> 2.2.2"
|
29
|
+
|
30
|
+
spec.add_runtime_dependency "parser", "~> 2.4"
|
31
|
+
spec.add_runtime_dependency "ast_utils", "~> 0.1.0"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: steep
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0.pre
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Soutaro Matsumoto
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-09-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.13'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.13'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: racc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.4'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.4'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rainbow
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.2.2
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.2.2
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: parser
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.4'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.4'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: ast_utils
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.1.0
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.1.0
|
111
|
+
description: Gradual Typing for Ruby
|
112
|
+
email:
|
113
|
+
- matsumoto@soutaro.com
|
114
|
+
executables:
|
115
|
+
- steep
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- ".gitignore"
|
120
|
+
- ".travis.yml"
|
121
|
+
- Gemfile
|
122
|
+
- README.md
|
123
|
+
- Rakefile
|
124
|
+
- bin/console
|
125
|
+
- bin/setup
|
126
|
+
- bin/smoke_runner.rb
|
127
|
+
- exe/steep
|
128
|
+
- lib/steep.rb
|
129
|
+
- lib/steep/annotation.rb
|
130
|
+
- lib/steep/cli.rb
|
131
|
+
- lib/steep/drivers/check.rb
|
132
|
+
- lib/steep/errors.rb
|
133
|
+
- lib/steep/interface.rb
|
134
|
+
- lib/steep/parser.rb
|
135
|
+
- lib/steep/parser.y
|
136
|
+
- lib/steep/signature/class.rb
|
137
|
+
- lib/steep/signature/errors.rb
|
138
|
+
- lib/steep/signature/extension.rb
|
139
|
+
- lib/steep/signature/interface.rb
|
140
|
+
- lib/steep/source.rb
|
141
|
+
- lib/steep/type_assignability.rb
|
142
|
+
- lib/steep/type_construction.rb
|
143
|
+
- lib/steep/type_name.rb
|
144
|
+
- lib/steep/types.rb
|
145
|
+
- lib/steep/types/any.rb
|
146
|
+
- lib/steep/types/class.rb
|
147
|
+
- lib/steep/types/instance.rb
|
148
|
+
- lib/steep/types/merge.rb
|
149
|
+
- lib/steep/types/name.rb
|
150
|
+
- lib/steep/types/union.rb
|
151
|
+
- lib/steep/types/var.rb
|
152
|
+
- lib/steep/typing.rb
|
153
|
+
- lib/steep/version.rb
|
154
|
+
- manual/annotations.md
|
155
|
+
- sig/signature.rbi
|
156
|
+
- sig/types.rbi
|
157
|
+
- smoke/and/a.rb
|
158
|
+
- smoke/array/a.rb
|
159
|
+
- smoke/block/a.rb
|
160
|
+
- smoke/block/a.rbi
|
161
|
+
- smoke/case/a.rb
|
162
|
+
- smoke/class/a.rb
|
163
|
+
- smoke/class/a.rbi
|
164
|
+
- smoke/class/b.rb
|
165
|
+
- smoke/class/c.rb
|
166
|
+
- smoke/const/a.rb
|
167
|
+
- smoke/dstr/a.rb
|
168
|
+
- smoke/extension/a.rb
|
169
|
+
- smoke/extension/a.rbi
|
170
|
+
- smoke/extension/b.rb
|
171
|
+
- smoke/extension/c.rb
|
172
|
+
- smoke/hello/hello.rb
|
173
|
+
- smoke/hello/hello.rbi
|
174
|
+
- smoke/if/a.rb
|
175
|
+
- smoke/implements/a.rb
|
176
|
+
- smoke/implements/a.rbi
|
177
|
+
- smoke/literal/a.rb
|
178
|
+
- smoke/map/a.rb
|
179
|
+
- smoke/method/a.rb
|
180
|
+
- smoke/method/a.rbi
|
181
|
+
- smoke/module/a.rb
|
182
|
+
- smoke/module/a.rbi
|
183
|
+
- smoke/module/b.rb
|
184
|
+
- smoke/self/a.rb
|
185
|
+
- smoke/self/a.rbi
|
186
|
+
- smoke/super/a.rb
|
187
|
+
- smoke/super/a.rbi
|
188
|
+
- smoke/yield/a.rb
|
189
|
+
- stdlib/builtin.rbi
|
190
|
+
- steep.gemspec
|
191
|
+
homepage: https://github.com/soutaro/steep
|
192
|
+
licenses: []
|
193
|
+
metadata: {}
|
194
|
+
post_install_message:
|
195
|
+
rdoc_options: []
|
196
|
+
require_paths:
|
197
|
+
- lib
|
198
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
203
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - ">"
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: 1.3.1
|
208
|
+
requirements: []
|
209
|
+
rubyforge_project:
|
210
|
+
rubygems_version: 2.6.8
|
211
|
+
signing_key:
|
212
|
+
specification_version: 4
|
213
|
+
summary: Gradual Typing for Ruby
|
214
|
+
test_files: []
|