steep 0.1.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.travis.yml +6 -0
  4. data/Gemfile +4 -0
  5. data/README.md +95 -0
  6. data/Rakefile +23 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/bin/smoke_runner.rb +106 -0
  10. data/exe/steep +18 -0
  11. data/lib/steep.rb +33 -0
  12. data/lib/steep/annotation.rb +223 -0
  13. data/lib/steep/cli.rb +79 -0
  14. data/lib/steep/drivers/check.rb +141 -0
  15. data/lib/steep/errors.rb +207 -0
  16. data/lib/steep/interface.rb +280 -0
  17. data/lib/steep/parser.y +311 -0
  18. data/lib/steep/signature/class.rb +358 -0
  19. data/lib/steep/signature/errors.rb +78 -0
  20. data/lib/steep/signature/extension.rb +51 -0
  21. data/lib/steep/signature/interface.rb +48 -0
  22. data/lib/steep/source.rb +98 -0
  23. data/lib/steep/type_assignability.rb +362 -0
  24. data/lib/steep/type_construction.rb +993 -0
  25. data/lib/steep/type_name.rb +37 -0
  26. data/lib/steep/types.rb +4 -0
  27. data/lib/steep/types/any.rb +31 -0
  28. data/lib/steep/types/class.rb +27 -0
  29. data/lib/steep/types/instance.rb +27 -0
  30. data/lib/steep/types/merge.rb +32 -0
  31. data/lib/steep/types/name.rb +57 -0
  32. data/lib/steep/types/union.rb +42 -0
  33. data/lib/steep/types/var.rb +38 -0
  34. data/lib/steep/typing.rb +70 -0
  35. data/lib/steep/version.rb +3 -0
  36. data/manual/annotations.md +144 -0
  37. data/sig/signature.rbi +54 -0
  38. data/sig/types.rbi +43 -0
  39. data/smoke/and/a.rb +9 -0
  40. data/smoke/array/a.rb +22 -0
  41. data/smoke/block/a.rb +12 -0
  42. data/smoke/block/a.rbi +4 -0
  43. data/smoke/case/a.rb +20 -0
  44. data/smoke/class/a.rb +31 -0
  45. data/smoke/class/a.rbi +9 -0
  46. data/smoke/class/b.rb +7 -0
  47. data/smoke/class/c.rb +10 -0
  48. data/smoke/const/a.rb +30 -0
  49. data/smoke/dstr/a.rb +6 -0
  50. data/smoke/extension/a.rb +11 -0
  51. data/smoke/extension/a.rbi +8 -0
  52. data/smoke/extension/b.rb +12 -0
  53. data/smoke/extension/c.rb +9 -0
  54. data/smoke/hello/hello.rb +13 -0
  55. data/smoke/hello/hello.rbi +7 -0
  56. data/smoke/if/a.rb +20 -0
  57. data/smoke/implements/a.rb +14 -0
  58. data/smoke/implements/a.rbi +6 -0
  59. data/smoke/literal/a.rb +16 -0
  60. data/smoke/map/a.rb +5 -0
  61. data/smoke/method/a.rb +26 -0
  62. data/smoke/method/a.rbi +0 -0
  63. data/smoke/module/a.rb +21 -0
  64. data/smoke/module/a.rbi +7 -0
  65. data/smoke/module/b.rb +8 -0
  66. data/smoke/self/a.rb +23 -0
  67. data/smoke/self/a.rbi +4 -0
  68. data/smoke/super/a.rb +34 -0
  69. data/smoke/super/a.rbi +10 -0
  70. data/smoke/yield/a.rb +18 -0
  71. data/stdlib/builtin.rbi +89 -0
  72. data/steep.gemspec +32 -0
  73. metadata +214 -0
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
@@ -0,0 +1,7 @@
1
+ interface _Each<'a>
2
+ def each: { ('a) -> any } -> instance
3
+ end
4
+
5
+ module A : _Each<Integer>
6
+ def count: () -> Integer
7
+ end
data/smoke/module/b.rb ADDED
@@ -0,0 +1,8 @@
1
+ # @type var klass: Class<any>
2
+ # @type var mod: Module
3
+
4
+ 3.is_a?(3.class)
5
+ klass = 3.class
6
+ mod = "".class
7
+
8
+
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
@@ -0,0 +1,4 @@
1
+ class A
2
+ def foo: -> any
3
+ def bar: -> any
4
+ end
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
@@ -0,0 +1,10 @@
1
+ class A
2
+ def foo: (any) -> Integer
3
+ include M
4
+
5
+ def baz: () -> any
6
+ end
7
+
8
+ module M
9
+ def foo: (any) -> Object
10
+ end
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
@@ -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: []