rbs 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Rakefile +9 -4
- data/Steepfile +28 -0
- data/bin/steep +4 -0
- data/bin/test_runner.rb +10 -5
- data/lib/rbs/ast/comment.rb +7 -1
- data/lib/rbs/ast/declarations.rb +15 -9
- data/lib/rbs/buffer.rb +1 -1
- data/lib/rbs/definition.rb +22 -13
- data/lib/rbs/definition_builder.rb +79 -55
- data/lib/rbs/environment.rb +24 -10
- data/lib/rbs/location.rb +1 -5
- data/lib/rbs/method_type.rb +5 -5
- data/lib/rbs/namespace.rb +14 -3
- data/lib/rbs/parser.y +0 -8
- data/lib/rbs/prototype/rb.rb +3 -4
- data/lib/rbs/prototype/rbi.rb +1 -2
- data/lib/rbs/substitution.rb +4 -3
- data/lib/rbs/type_name.rb +18 -1
- data/lib/rbs/type_name_resolver.rb +10 -3
- data/lib/rbs/types.rb +27 -21
- data/lib/rbs/variance_calculator.rb +8 -5
- data/lib/rbs/version.rb +1 -1
- data/sig/annotation.rbs +26 -0
- data/sig/buffer.rbs +28 -0
- data/sig/builtin_names.rbs +41 -0
- data/sig/comment.rbs +26 -0
- data/sig/declarations.rbs +202 -0
- data/sig/definition.rbs +129 -0
- data/sig/definition_builder.rbs +95 -0
- data/sig/environment.rbs +94 -0
- data/sig/environment_loader.rbs +4 -0
- data/sig/location.rbs +52 -0
- data/sig/members.rbs +160 -0
- data/sig/method_types.rbs +40 -0
- data/sig/namespace.rbs +124 -0
- data/sig/polyfill.rbs +3 -0
- data/sig/rbs.rbs +3 -0
- data/sig/substitution.rbs +39 -0
- data/sig/type_name_resolver.rbs +24 -0
- data/sig/typename.rbs +70 -0
- data/sig/types.rbs +361 -0
- data/sig/util.rbs +13 -0
- data/sig/variance_calculator.rbs +35 -0
- data/stdlib/bigdecimal/big_decimal.rbs +887 -0
- data/stdlib/bigdecimal/math/big_math.rbs +142 -0
- data/stdlib/builtin/builtin.rbs +0 -3
- data/stdlib/builtin/math.rbs +26 -26
- data/stdlib/builtin/struct.rbs +9 -10
- data/stdlib/forwardable/forwardable.rbs +204 -0
- data/stdlib/set/set.rbs +1 -1
- data/stdlib/uri/file.rbs +167 -0
- data/stdlib/uri/generic.rbs +875 -0
- data/steep/Gemfile +3 -0
- data/steep/Gemfile.lock +55 -0
- metadata +36 -6
@@ -73,11 +73,11 @@ module RBS
|
|
73
73
|
type(param.type, result: result, context: :contravariant)
|
74
74
|
end
|
75
75
|
|
76
|
-
if method_type.block
|
77
|
-
|
76
|
+
if block = method_type.block
|
77
|
+
block.type.each_param do |param|
|
78
78
|
type(param.type, result: result, context: :covariant)
|
79
79
|
end
|
80
|
-
type(
|
80
|
+
type(block.type.return_type, result: result, context: :contravariant)
|
81
81
|
end
|
82
82
|
|
83
83
|
type(method_type.type.return_type, result: result, context: :covariant)
|
@@ -113,9 +113,9 @@ module RBS
|
|
113
113
|
|
114
114
|
type_params = case type
|
115
115
|
when Types::ClassInstance
|
116
|
-
env.class_decls[type.name]
|
116
|
+
env.class_decls[type.name].type_params
|
117
117
|
when Types::Interface
|
118
|
-
env.interface_decls[type.name]
|
118
|
+
env.interface_decls[type.name].decl.type_params
|
119
119
|
end
|
120
120
|
|
121
121
|
type.args.each.with_index do |ty, i|
|
@@ -126,6 +126,7 @@ module RBS
|
|
126
126
|
when :covariant
|
127
127
|
type(ty, result: result, context: context)
|
128
128
|
when :contravariant
|
129
|
+
# @type var con: variance
|
129
130
|
con = case context
|
130
131
|
when :invariant
|
131
132
|
:invariant
|
@@ -133,6 +134,8 @@ module RBS
|
|
133
134
|
:contravariant
|
134
135
|
when :contravariant
|
135
136
|
:covariant
|
137
|
+
else
|
138
|
+
raise
|
136
139
|
end
|
137
140
|
type(ty, result: result, context: con)
|
138
141
|
end
|
data/lib/rbs/version.rb
CHANGED
data/sig/annotation.rbs
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module RBS
|
2
|
+
module AST
|
3
|
+
# RBS allows writing annotations of declarations and members.
|
4
|
+
#
|
5
|
+
# %a{annotation_here}
|
6
|
+
# class Hello
|
7
|
+
# %a{rbs:test:skip}
|
8
|
+
# def foo: () -> void
|
9
|
+
# end
|
10
|
+
#
|
11
|
+
class Annotation
|
12
|
+
attr_reader string: String
|
13
|
+
attr_reader location: Location?
|
14
|
+
|
15
|
+
def initialize: (string: String, location: Location?) -> void
|
16
|
+
|
17
|
+
def ==: (untyped other) -> bool
|
18
|
+
|
19
|
+
alias eql? ==
|
20
|
+
|
21
|
+
def hash: () -> Integer
|
22
|
+
|
23
|
+
def to_json: (*untyped) -> String
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/sig/buffer.rbs
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module RBS
|
2
|
+
class Buffer
|
3
|
+
# Location in a buffer.
|
4
|
+
# A pair of line number (1 origin) and column number (0 origin).
|
5
|
+
#
|
6
|
+
type loc = [Integer, Integer]
|
7
|
+
|
8
|
+
# Name to identify Buffer.
|
9
|
+
attr_reader name: untyped
|
10
|
+
|
11
|
+
# The content of the buffer.
|
12
|
+
attr_reader content: String
|
13
|
+
|
14
|
+
attr_reader lines: Array[String]
|
15
|
+
|
16
|
+
attr_reader ranges: Array[Range[Integer]]
|
17
|
+
|
18
|
+
def initialize: (name: untyped name, content: String content) -> void
|
19
|
+
|
20
|
+
# Translate position to location.
|
21
|
+
def pos_to_loc: (Integer pos) -> loc
|
22
|
+
|
23
|
+
# Translate location to position.
|
24
|
+
def loc_to_pos: (loc loc) -> Integer
|
25
|
+
|
26
|
+
def last_position: () -> Integer
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module RBS
|
2
|
+
module BuiltinNames
|
3
|
+
class Name
|
4
|
+
attr_reader name: TypeName
|
5
|
+
|
6
|
+
def initialize: (name: TypeName) -> void
|
7
|
+
|
8
|
+
def to_s: () -> String
|
9
|
+
|
10
|
+
def instance_type: (*Types::t) -> Types::ClassInstance
|
11
|
+
|
12
|
+
def instance_type?: (Types::t) -> bool
|
13
|
+
|
14
|
+
def singleton_type: () -> Types::ClassSingleton
|
15
|
+
|
16
|
+
def singleton_type?: (Types::t) -> bool
|
17
|
+
|
18
|
+
def self.define: (Symbol, ?namespace: Namespace) -> instance
|
19
|
+
end
|
20
|
+
|
21
|
+
BasicObject: Name
|
22
|
+
Object: Name
|
23
|
+
Kernel: Name
|
24
|
+
String: Name
|
25
|
+
Comparable: Name
|
26
|
+
Enumerable: Name
|
27
|
+
Class: Name
|
28
|
+
Module: Name
|
29
|
+
Array: Name
|
30
|
+
Hash: Name
|
31
|
+
Range: Name
|
32
|
+
Enumerator: Name
|
33
|
+
Set: Name
|
34
|
+
Symbol: Name
|
35
|
+
Integer: Name
|
36
|
+
Float: Name
|
37
|
+
Regexp: Name
|
38
|
+
TrueClass: Name
|
39
|
+
FalseClass: Name
|
40
|
+
end
|
41
|
+
end
|
data/sig/comment.rbs
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module RBS
|
2
|
+
module AST
|
3
|
+
# RBS allows writing documentation of declarations and members.
|
4
|
+
#
|
5
|
+
# # This is a doc for class.
|
6
|
+
# class Hello
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
class Comment
|
10
|
+
attr_reader string: String
|
11
|
+
attr_reader location: Location?
|
12
|
+
|
13
|
+
def initialize: (string: String, location: Location?) -> void
|
14
|
+
|
15
|
+
def ==: (untyped other) -> bool
|
16
|
+
|
17
|
+
alias eql? ==
|
18
|
+
|
19
|
+
def hash: () -> Integer
|
20
|
+
|
21
|
+
def to_json: (*untyped) -> String
|
22
|
+
|
23
|
+
def concat: (string: String, location: Location?) -> self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,202 @@
|
|
1
|
+
module RBS
|
2
|
+
module AST
|
3
|
+
module Declarations
|
4
|
+
type t = Class | Module | Interface | Constant | Global | Alias
|
5
|
+
|
6
|
+
class Base
|
7
|
+
end
|
8
|
+
|
9
|
+
type variance = :invariant | :covariant | :contravariant
|
10
|
+
|
11
|
+
class ModuleTypeParams
|
12
|
+
class TypeParam
|
13
|
+
attr_reader name: Symbol
|
14
|
+
attr_reader variance: variance
|
15
|
+
attr_reader skip_validation: bool
|
16
|
+
|
17
|
+
def initialize: (name: Symbol, variance: variance, skip_validation: bool) -> void
|
18
|
+
|
19
|
+
include _ToJson
|
20
|
+
end
|
21
|
+
|
22
|
+
attr_reader params: Array[TypeParam]
|
23
|
+
|
24
|
+
def initialize: () -> void
|
25
|
+
|
26
|
+
def add: (TypeParam param) -> self
|
27
|
+
|
28
|
+
include _HashEqual
|
29
|
+
include _ToJson
|
30
|
+
|
31
|
+
def []: (Symbol) -> TypeParam?
|
32
|
+
|
33
|
+
def each: { (TypeParam) -> void } -> void
|
34
|
+
| () -> Enumerator[TypeParam, void]
|
35
|
+
|
36
|
+
def self.empty: () -> instance
|
37
|
+
|
38
|
+
def variance: (Symbol) -> variance
|
39
|
+
|
40
|
+
def skip_validation?: (Symbol) -> bool
|
41
|
+
|
42
|
+
def empty?: () -> bool
|
43
|
+
|
44
|
+
def size: () -> Integer
|
45
|
+
|
46
|
+
def rename_to: (Array[Symbol] names) -> ModuleTypeParams
|
47
|
+
end
|
48
|
+
|
49
|
+
interface _WithMember
|
50
|
+
def members: () -> Array[untyped]
|
51
|
+
end
|
52
|
+
|
53
|
+
module NestedDeclarationHelper : _WithMember
|
54
|
+
def each_member: () { (Members::t) -> void } -> void
|
55
|
+
| () -> Enumerator[Members::t, void]
|
56
|
+
|
57
|
+
def each_decl: () { (t) -> void } -> void
|
58
|
+
| () -> Enumerator[t, void]
|
59
|
+
end
|
60
|
+
|
61
|
+
module MixinHelper : _WithMember
|
62
|
+
type mixin_member = Members::Include | Members::Extend | Members::Prepend
|
63
|
+
|
64
|
+
@mixins: Array[mixin_member]
|
65
|
+
|
66
|
+
def each_mixin: () { (mixin_member) -> void } -> void
|
67
|
+
| () -> Enumerator[mixin_member, void]
|
68
|
+
end
|
69
|
+
|
70
|
+
class Class < Base
|
71
|
+
type member = Members::t | t
|
72
|
+
|
73
|
+
class Super
|
74
|
+
attr_reader name: TypeName
|
75
|
+
attr_reader args: Array[Types::t]
|
76
|
+
|
77
|
+
def initialize: (name: TypeName, args: Array[Types::t]) -> void
|
78
|
+
|
79
|
+
include _HashEqual
|
80
|
+
include _ToJson
|
81
|
+
end
|
82
|
+
|
83
|
+
include NestedDeclarationHelper
|
84
|
+
include MixinHelper
|
85
|
+
|
86
|
+
attr_reader name: TypeName
|
87
|
+
attr_reader type_params: ModuleTypeParams
|
88
|
+
attr_reader members: Array[member]
|
89
|
+
attr_reader super_class: Super?
|
90
|
+
attr_reader annotations: Array[Annotation]
|
91
|
+
attr_reader location: Location?
|
92
|
+
attr_reader comment: Comment?
|
93
|
+
|
94
|
+
def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], super_class: Super?, annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
|
95
|
+
|
96
|
+
include _HashEqual
|
97
|
+
include _ToJson
|
98
|
+
end
|
99
|
+
|
100
|
+
class Module < Base
|
101
|
+
type member = Members::t | t
|
102
|
+
|
103
|
+
class Self
|
104
|
+
attr_reader name: TypeName
|
105
|
+
attr_reader args: Array[Types::t]
|
106
|
+
attr_reader location: Location?
|
107
|
+
|
108
|
+
def initialize: (name: TypeName, args: Array[Types::t], location: Location?) -> void
|
109
|
+
|
110
|
+
include _HashEqual
|
111
|
+
include _ToJson
|
112
|
+
|
113
|
+
def to_s: () -> String
|
114
|
+
end
|
115
|
+
|
116
|
+
include NestedDeclarationHelper
|
117
|
+
include MixinHelper
|
118
|
+
|
119
|
+
attr_reader name: TypeName
|
120
|
+
attr_reader type_params: ModuleTypeParams
|
121
|
+
attr_reader members: Array[member]
|
122
|
+
attr_reader location: Location?
|
123
|
+
attr_reader annotations: Array[Annotation]
|
124
|
+
attr_reader self_types: Array[Self]
|
125
|
+
attr_reader comment: Comment?
|
126
|
+
|
127
|
+
def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], location: Location?, annotations: Array[Annotation], self_types: Array[Self], comment: Comment?) -> void
|
128
|
+
|
129
|
+
include _HashEqual
|
130
|
+
include _ToJson
|
131
|
+
end
|
132
|
+
|
133
|
+
class Extension < Base
|
134
|
+
attr_reader name: TypeName
|
135
|
+
attr_reader type_params: ModuleTypeParams
|
136
|
+
attr_reader extension_name: Symbol
|
137
|
+
attr_reader members: Array[Members::t]
|
138
|
+
attr_reader annotations: Array[Annotation]
|
139
|
+
attr_reader location: Location?
|
140
|
+
attr_reader comment: Comment?
|
141
|
+
|
142
|
+
def initialize: (name: TypeName, type_params: ModuleTypeParams, extension_name: Symbol, members: Array[Members::t], annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
|
143
|
+
|
144
|
+
include _HashEqual
|
145
|
+
include _ToJson
|
146
|
+
end
|
147
|
+
|
148
|
+
class Interface
|
149
|
+
type member = Members::t
|
150
|
+
|
151
|
+
attr_reader name: TypeName
|
152
|
+
attr_reader type_params: ModuleTypeParams
|
153
|
+
attr_reader members: Array[member]
|
154
|
+
attr_reader annotations: Array[Annotation]
|
155
|
+
attr_reader location: Location?
|
156
|
+
attr_reader comment: Comment?
|
157
|
+
|
158
|
+
def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
|
159
|
+
|
160
|
+
include _HashEqual
|
161
|
+
include _ToJson
|
162
|
+
end
|
163
|
+
|
164
|
+
class Alias < Base
|
165
|
+
attr_reader name: TypeName
|
166
|
+
attr_reader type: Types::t
|
167
|
+
attr_reader annotations: Array[Annotation]
|
168
|
+
attr_reader location: Location?
|
169
|
+
attr_reader comment: Comment?
|
170
|
+
|
171
|
+
def initialize: (name: TypeName, type: Types::t, annotations: Array[Annotation], location: Location?, comment: Comment?) -> void
|
172
|
+
|
173
|
+
include _HashEqual
|
174
|
+
include _ToJson
|
175
|
+
end
|
176
|
+
|
177
|
+
class Constant < Base
|
178
|
+
attr_reader name: TypeName
|
179
|
+
attr_reader type: Types::t
|
180
|
+
attr_reader location: Location?
|
181
|
+
attr_reader comment: Comment?
|
182
|
+
|
183
|
+
def initialize: (name: TypeName, type: Types::t, location: Location?, comment: Comment?) -> void
|
184
|
+
|
185
|
+
include _HashEqual
|
186
|
+
include _ToJson
|
187
|
+
end
|
188
|
+
|
189
|
+
class Global < Base
|
190
|
+
attr_reader name: Symbol
|
191
|
+
attr_reader type: Types::t
|
192
|
+
attr_reader location: Location?
|
193
|
+
attr_reader comment: Comment?
|
194
|
+
|
195
|
+
def initialize: (name: Symbol, type: Types::t, location: Location?, comment: Comment?) -> void
|
196
|
+
|
197
|
+
include _HashEqual
|
198
|
+
include _ToJson
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
data/sig/definition.rbs
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
module RBS
|
2
|
+
class Definition
|
3
|
+
type accessibility = :public | :private
|
4
|
+
|
5
|
+
class Variable
|
6
|
+
attr_reader parent_variable: Variable?
|
7
|
+
attr_reader type: Types::t
|
8
|
+
attr_reader declared_in: TypeName
|
9
|
+
|
10
|
+
def initialize: (parent_variable: Variable?, type: Types::t, declared_in: TypeName) -> void
|
11
|
+
|
12
|
+
def sub: (Substitution) -> Variable
|
13
|
+
end
|
14
|
+
|
15
|
+
class Method
|
16
|
+
type method_member = AST::Members::MethodDefinition | AST::Members::AttrReader | AST::Members::AttrAccessor | AST::Members::AttrWriter
|
17
|
+
|
18
|
+
class TypeDef
|
19
|
+
attr_reader type: MethodType
|
20
|
+
attr_reader member: method_member
|
21
|
+
attr_reader defined_in: TypeName?
|
22
|
+
attr_reader implemented_in: TypeName?
|
23
|
+
|
24
|
+
def initialize: (type: MethodType, member: method_member, defined_in: TypeName?, implemented_in: TypeName?) -> void
|
25
|
+
|
26
|
+
def comment: () -> AST::Comment?
|
27
|
+
|
28
|
+
def annotations: () -> Array[AST::Annotation]
|
29
|
+
|
30
|
+
def update: (?type: MethodType, ?member: method_member, ?defined_in: TypeName?, ?implemented_in: TypeName?) -> TypeDef
|
31
|
+
|
32
|
+
def overload?: () -> bool
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader super_method: Method?
|
36
|
+
attr_reader defs: Array[TypeDef]
|
37
|
+
attr_reader accessibility: accessibility
|
38
|
+
attr_reader extra_annotations: Array[AST::Annotation]
|
39
|
+
attr_reader defined_in: TypeName?
|
40
|
+
attr_reader implemented_in: TypeName?
|
41
|
+
attr_reader method_types: Array[MethodType]
|
42
|
+
attr_reader comments: Array[AST::Comment]
|
43
|
+
attr_reader annotations: Array[AST::Annotation]
|
44
|
+
attr_reader members: Array[method_member]
|
45
|
+
|
46
|
+
def initialize: (super_method: Method?, defs: Array[TypeDef], accessibility: accessibility, ?annotations: Array[AST::Annotation]) -> void
|
47
|
+
|
48
|
+
def public?: () -> bool
|
49
|
+
|
50
|
+
def private?: () -> bool
|
51
|
+
|
52
|
+
def sub: (Substitution) -> Method
|
53
|
+
|
54
|
+
def map_type: () { (Types::t) -> Types::t } -> Method
|
55
|
+
|
56
|
+
def map_method_type: () { (MethodType) -> MethodType } -> Method
|
57
|
+
end
|
58
|
+
|
59
|
+
module Ancestor
|
60
|
+
type t = Instance | Singleton
|
61
|
+
|
62
|
+
class Instance
|
63
|
+
attr_reader name: TypeName
|
64
|
+
attr_reader args: Array[Types::t]
|
65
|
+
|
66
|
+
def initialize: (name: TypeName, args: Array[Types::t]) -> void
|
67
|
+
end
|
68
|
+
|
69
|
+
class Singleton
|
70
|
+
attr_reader name: TypeName
|
71
|
+
|
72
|
+
def initialize: (name: TypeName) -> void
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class InstanceAncestors
|
77
|
+
attr_reader type_name: TypeName
|
78
|
+
attr_reader params: Array[Symbol]
|
79
|
+
attr_reader ancestors: Array[Ancestor::t]
|
80
|
+
|
81
|
+
def initialize: (type_name: TypeName, params: Array[Symbol], ancestors: Array[Ancestor::t]) -> void
|
82
|
+
|
83
|
+
def apply: (Array[Types::t], location: Location?) -> Array[Ancestor::t]
|
84
|
+
end
|
85
|
+
|
86
|
+
class SingletonAncestors
|
87
|
+
attr_reader type_name: TypeName
|
88
|
+
attr_reader ancestors: Array[Ancestor::t]
|
89
|
+
|
90
|
+
def initialize: (type_name: TypeName, ancestors: Array[Ancestor::t]) -> void
|
91
|
+
end
|
92
|
+
|
93
|
+
type self_type = Types::ClassSingleton | Types::ClassInstance | Types::Interface
|
94
|
+
type definition_entry = Environment::ModuleEntry | Environment::ClassEntry | Environment::SingleEntry[TypeName, AST::Declarations::Interface]
|
95
|
+
|
96
|
+
attr_reader type_name: TypeName
|
97
|
+
attr_reader entry: definition_entry
|
98
|
+
attr_reader ancestors: InstanceAncestors | SingletonAncestors | nil
|
99
|
+
attr_reader self_type: self_type
|
100
|
+
attr_reader methods: Hash[Symbol, Method]
|
101
|
+
attr_reader instance_variables: Hash[Symbol, Variable]
|
102
|
+
attr_reader class_variables: Hash[Symbol, Variable]
|
103
|
+
|
104
|
+
def initialize: (type_name: TypeName, entry: definition_entry, self_type: self_type, ancestors: InstanceAncestors | SingletonAncestors | nil) -> void
|
105
|
+
|
106
|
+
def class?: () -> bool
|
107
|
+
|
108
|
+
def module?: () -> bool
|
109
|
+
|
110
|
+
def interface?: () -> bool
|
111
|
+
|
112
|
+
def class_type?: () -> bool
|
113
|
+
|
114
|
+
def instance_type?: () -> bool
|
115
|
+
|
116
|
+
def interface_type?: () -> bool
|
117
|
+
|
118
|
+
def type_params: () -> Array[Symbol]
|
119
|
+
|
120
|
+
def type_params_decl: () -> AST::Declarations::ModuleTypeParams
|
121
|
+
|
122
|
+
def sub: (Substitution) -> Definition
|
123
|
+
|
124
|
+
def map_method_type: () { (MethodType) -> MethodType } -> Definition
|
125
|
+
|
126
|
+
def each_type: () { (Types::t) -> void } -> void
|
127
|
+
| () -> Enumerator[Types::t, void]
|
128
|
+
end
|
129
|
+
end
|