rbs 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Rakefile +9 -4
  4. data/Steepfile +28 -0
  5. data/bin/steep +4 -0
  6. data/bin/test_runner.rb +10 -5
  7. data/lib/rbs/ast/comment.rb +7 -1
  8. data/lib/rbs/ast/declarations.rb +15 -9
  9. data/lib/rbs/buffer.rb +1 -1
  10. data/lib/rbs/definition.rb +22 -13
  11. data/lib/rbs/definition_builder.rb +79 -55
  12. data/lib/rbs/environment.rb +24 -10
  13. data/lib/rbs/location.rb +1 -5
  14. data/lib/rbs/method_type.rb +5 -5
  15. data/lib/rbs/namespace.rb +14 -3
  16. data/lib/rbs/parser.y +0 -8
  17. data/lib/rbs/prototype/rb.rb +3 -4
  18. data/lib/rbs/prototype/rbi.rb +1 -2
  19. data/lib/rbs/substitution.rb +4 -3
  20. data/lib/rbs/type_name.rb +18 -1
  21. data/lib/rbs/type_name_resolver.rb +10 -3
  22. data/lib/rbs/types.rb +27 -21
  23. data/lib/rbs/variance_calculator.rb +8 -5
  24. data/lib/rbs/version.rb +1 -1
  25. data/sig/annotation.rbs +26 -0
  26. data/sig/buffer.rbs +28 -0
  27. data/sig/builtin_names.rbs +41 -0
  28. data/sig/comment.rbs +26 -0
  29. data/sig/declarations.rbs +202 -0
  30. data/sig/definition.rbs +129 -0
  31. data/sig/definition_builder.rbs +95 -0
  32. data/sig/environment.rbs +94 -0
  33. data/sig/environment_loader.rbs +4 -0
  34. data/sig/location.rbs +52 -0
  35. data/sig/members.rbs +160 -0
  36. data/sig/method_types.rbs +40 -0
  37. data/sig/namespace.rbs +124 -0
  38. data/sig/polyfill.rbs +3 -0
  39. data/sig/rbs.rbs +3 -0
  40. data/sig/substitution.rbs +39 -0
  41. data/sig/type_name_resolver.rbs +24 -0
  42. data/sig/typename.rbs +70 -0
  43. data/sig/types.rbs +361 -0
  44. data/sig/util.rbs +13 -0
  45. data/sig/variance_calculator.rbs +35 -0
  46. data/stdlib/bigdecimal/big_decimal.rbs +887 -0
  47. data/stdlib/bigdecimal/math/big_math.rbs +142 -0
  48. data/stdlib/builtin/builtin.rbs +0 -3
  49. data/stdlib/builtin/math.rbs +26 -26
  50. data/stdlib/builtin/struct.rbs +9 -10
  51. data/stdlib/forwardable/forwardable.rbs +204 -0
  52. data/stdlib/set/set.rbs +1 -1
  53. data/stdlib/uri/file.rbs +167 -0
  54. data/stdlib/uri/generic.rbs +875 -0
  55. data/steep/Gemfile +3 -0
  56. data/steep/Gemfile.lock +55 -0
  57. 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
- method_type.block.type.each_param do |param|
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(method_type.block.type.return_type, result: result, context: :contravariant)
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]&.type_params
116
+ env.class_decls[type.name].type_params
117
117
  when Types::Interface
118
- env.interface_decls[type.name]&.decl&.type_params
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
@@ -1,3 +1,3 @@
1
1
  module RBS
2
- VERSION = "0.11.0"
2
+ VERSION = "0.12.0"
3
3
  end
@@ -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
@@ -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
@@ -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
@@ -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