rbs 1.8.0 → 2.0.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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +82 -4
  3. data/docs/collection.md +23 -1
  4. data/docs/syntax.md +94 -41
  5. data/ext/rbs_extension/constants.c +2 -6
  6. data/ext/rbs_extension/constants.h +1 -2
  7. data/ext/rbs_extension/parser.c +212 -178
  8. data/ext/rbs_extension/parserstate.c +6 -2
  9. data/ext/rbs_extension/parserstate.h +10 -0
  10. data/ext/rbs_extension/ruby_objs.c +9 -11
  11. data/ext/rbs_extension/ruby_objs.h +1 -2
  12. data/lib/rbs/ast/declarations.rb +0 -97
  13. data/lib/rbs/ast/type_param.rb +134 -0
  14. data/lib/rbs/cli.rb +32 -4
  15. data/lib/rbs/collection/config/lockfile_generator.rb +26 -18
  16. data/lib/rbs/collection/sources/git.rb +18 -7
  17. data/lib/rbs/collection/sources/rubygems.rb +7 -0
  18. data/lib/rbs/collection/sources/stdlib.rb +6 -0
  19. data/lib/rbs/definition.rb +9 -0
  20. data/lib/rbs/definition_builder.rb +49 -14
  21. data/lib/rbs/environment.rb +32 -9
  22. data/lib/rbs/environment_loader.rb +0 -2
  23. data/lib/rbs/errors.rb +20 -7
  24. data/lib/rbs/location_aux.rb +2 -0
  25. data/lib/rbs/method_type.rb +29 -6
  26. data/lib/rbs/prototype/rb.rb +3 -3
  27. data/lib/rbs/prototype/rbi.rb +8 -6
  28. data/lib/rbs/prototype/runtime.rb +4 -4
  29. data/lib/rbs/types.rb +89 -0
  30. data/lib/rbs/validator.rb +62 -11
  31. data/lib/rbs/variance_calculator.rb +9 -8
  32. data/lib/rbs/version.rb +1 -1
  33. data/lib/rbs/writer.rb +1 -13
  34. data/lib/rbs.rb +1 -0
  35. data/schema/decls.json +16 -55
  36. data/schema/methodType.json +1 -1
  37. data/schema/typeParam.json +36 -0
  38. data/sig/collection/collections.rbs +11 -2
  39. data/sig/collection/config.rbs +2 -2
  40. data/sig/declarations.rbs +8 -58
  41. data/sig/definition.rbs +11 -1
  42. data/sig/definition_builder.rbs +8 -1
  43. data/sig/environment.rbs +7 -1
  44. data/sig/errors.rbs +19 -4
  45. data/sig/location.rbs +3 -1
  46. data/sig/locator.rbs +1 -1
  47. data/sig/method_types.rbs +25 -4
  48. data/sig/type_param.rbs +74 -0
  49. data/sig/types.rbs +27 -1
  50. data/sig/validator.rbs +31 -2
  51. data/sig/variance_calculator.rbs +1 -1
  52. data/sig/writer.rbs +1 -1
  53. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  54. data/stdlib/csv/0/manifest.yaml +2 -0
  55. data/stdlib/logger/0/manifest.yaml +2 -0
  56. data/stdlib/net-http/0/manifest.yaml +2 -0
  57. data/stdlib/openssl/0/manifest.yaml +2 -0
  58. data/stdlib/prime/0/manifest.yaml +2 -0
  59. data/stdlib/resolv/0/manifest.yaml +3 -0
  60. data/stdlib/uri/0/common.rbs +10 -5
  61. data/stdlib/uri/0/ftp.rbs +10 -0
  62. data/stdlib/uri/0/generic.rbs +34 -34
  63. data/stdlib/uri/0/mailto.rbs +5 -0
  64. data/stdlib/uri/0/ws.rbs +10 -0
  65. data/stdlib/uri/0/wss.rbs +7 -0
  66. data/stdlib/yaml/0/manifest.yaml +3 -0
  67. metadata +17 -2
data/sig/declarations.rbs CHANGED
@@ -6,56 +6,6 @@ module RBS
6
6
  class Base
7
7
  end
8
8
 
9
- type variance = :invariant | :covariant | :contravariant
10
-
11
- class ModuleTypeParams
12
- class TypeParam
13
- # Key
14
- # ^^^ name
15
- #
16
- # unchecked out Elem
17
- # ^^^^^^^^^ unchecked
18
- # ^^^ variance
19
- # ^^^^ name
20
- type loc = Location[:name, :variance | :unchecked]
21
-
22
- attr_reader name: Symbol
23
- attr_reader variance: variance
24
- attr_reader skip_validation: bool
25
- attr_reader location: loc?
26
-
27
- def initialize: (name: Symbol, variance: variance, skip_validation: boolish, location: loc?) -> void
28
-
29
- include _ToJson
30
- end
31
-
32
- attr_reader params: Array[TypeParam]
33
-
34
- def initialize: () -> void
35
-
36
- def add: (TypeParam param) -> self
37
-
38
- include _HashEqual
39
- include _ToJson
40
-
41
- def []: (Symbol) -> TypeParam?
42
-
43
- def each: { (TypeParam) -> void } -> void
44
- | () -> Enumerator[TypeParam, void]
45
-
46
- def self.empty: () -> instance
47
-
48
- def variance: (Symbol) -> variance
49
-
50
- def skip_validation?: (Symbol) -> bool
51
-
52
- def empty?: () -> bool
53
-
54
- def size: () -> Integer
55
-
56
- def rename_to: (Array[Symbol] names) -> ModuleTypeParams
57
- end
58
-
59
9
  interface _WithMember
60
10
  def members: () -> Array[untyped]
61
11
  end
@@ -118,14 +68,14 @@ module RBS
118
68
  include MixinHelper
119
69
 
120
70
  attr_reader name: TypeName
121
- attr_reader type_params: ModuleTypeParams
71
+ attr_reader type_params: Array[TypeParam]
122
72
  attr_reader members: Array[member]
123
73
  attr_reader super_class: Super?
124
74
  attr_reader annotations: Array[Annotation]
125
75
  attr_reader location: loc?
126
76
  attr_reader comment: Comment?
127
77
 
128
- def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], super_class: Super?, annotations: Array[Annotation], location: loc?, comment: Comment?) -> void
78
+ def initialize: (name: TypeName, type_params: Array[TypeParam], members: Array[member], super_class: Super?, annotations: Array[Annotation], location: loc?, comment: Comment?) -> void
129
79
 
130
80
  include _HashEqual
131
81
  include _ToJson
@@ -172,14 +122,14 @@ module RBS
172
122
  include MixinHelper
173
123
 
174
124
  attr_reader name: TypeName
175
- attr_reader type_params: ModuleTypeParams
125
+ attr_reader type_params: Array[TypeParam]
176
126
  attr_reader members: Array[member]
177
127
  attr_reader location: loc?
178
128
  attr_reader annotations: Array[Annotation]
179
129
  attr_reader self_types: Array[Self]
180
130
  attr_reader comment: Comment?
181
131
 
182
- def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], location: loc?, annotations: Array[Annotation], self_types: Array[Self], comment: Comment?) -> void
132
+ def initialize: (name: TypeName, type_params: Array[TypeParam], members: Array[member], location: loc?, annotations: Array[Annotation], self_types: Array[Self], comment: Comment?) -> void
183
133
 
184
134
  include _HashEqual
185
135
  include _ToJson
@@ -202,13 +152,13 @@ module RBS
202
152
  type loc = Location[:name | :keyword | :end, :type_params]
203
153
 
204
154
  attr_reader name: TypeName
205
- attr_reader type_params: ModuleTypeParams
155
+ attr_reader type_params: Array[TypeParam]
206
156
  attr_reader members: Array[member]
207
157
  attr_reader annotations: Array[Annotation]
208
158
  attr_reader location: loc?
209
159
  attr_reader comment: Comment?
210
160
 
211
- def initialize: (name: TypeName, type_params: ModuleTypeParams, members: Array[member], annotations: Array[Annotation], location: loc?, comment: Comment?) -> void
161
+ def initialize: (name: TypeName, type_params: Array[TypeParam], members: Array[member], annotations: Array[Annotation], location: loc?, comment: Comment?) -> void
212
162
 
213
163
  include MixinHelper
214
164
 
@@ -226,13 +176,13 @@ module RBS
226
176
  type loc = Location[:keyword | :name | :eq, :type_params]
227
177
 
228
178
  attr_reader name: TypeName
229
- attr_reader type_params: ModuleTypeParams
179
+ attr_reader type_params: Array[TypeParam]
230
180
  attr_reader type: Types::t
231
181
  attr_reader annotations: Array[Annotation]
232
182
  attr_reader location: loc?
233
183
  attr_reader comment: Comment?
234
184
 
235
- def initialize: (name: TypeName, type_params: ModuleTypeParams, type: Types::t, annotations: Array[Annotation], location: loc?, comment: Comment?) -> void
185
+ def initialize: (name: TypeName, type_params: Array[TypeParam], type: Types::t, annotations: Array[Annotation], location: loc?, comment: Comment?) -> void
236
186
 
237
187
  include _HashEqual
238
188
  include _ToJson
data/sig/definition.rbs CHANGED
@@ -54,10 +54,20 @@ module RBS
54
54
 
55
55
  def private?: () -> bool
56
56
 
57
+ # Substitutes type variables to some types.
58
+ # Takes care of type parameter bounds.
59
+ #
57
60
  def sub: (Substitution) -> Method
58
61
 
62
+ # Applies the mapping from `Types::t` to `Types::t`.
63
+ #
64
+ # Note this method doesn't handle upper bound in type params.
65
+ # You may want to use `#map_type_bound` explicitly, or `#sub` for simple substitution.
66
+ #
59
67
  def map_type: () { (Types::t) -> Types::t } -> Method
60
68
 
69
+ def map_type_bound: () { (AST::TypeParam::bound) -> AST::TypeParam::bound } -> Method
70
+
61
71
  def map_method_type: () { (MethodType) -> MethodType } -> Method
62
72
  end
63
73
 
@@ -127,7 +137,7 @@ module RBS
127
137
 
128
138
  def type_params: () -> Array[Symbol]
129
139
 
130
- def type_params_decl: () -> AST::Declarations::ModuleTypeParams
140
+ def type_params_decl: () -> Array[AST::TypeParam]
131
141
 
132
142
  def sub: (Substitution) -> Definition
133
143
 
@@ -33,7 +33,7 @@ module RBS
33
33
  def try_cache: (TypeName, cache: Hash[TypeName, Definition | false | nil]) { () -> Definition } -> Definition
34
34
  | [A] (TypeName, cache: Hash[A, Definition | false | nil], key: A) { () -> Definition } -> Definition
35
35
 
36
- def validate_params_with: (AST::Declarations::ModuleTypeParams, result: VarianceCalculator::Result) { (AST::Declarations::ModuleTypeParams::TypeParam) -> void } -> void
36
+ def validate_params_with: (Array[AST::TypeParam], result: VarianceCalculator::Result) { (AST::TypeParam) -> void } -> void
37
37
 
38
38
  def validate_type_params: (Definition, ancestors: AncestorBuilder::OneAncestors, methods: MethodBuilder::Methods) -> void
39
39
 
@@ -43,6 +43,13 @@ module RBS
43
43
 
44
44
  def define_methods: (Definition, interface_methods: Hash[Symbol, Definition::Method], methods: MethodBuilder::Methods, super_interface_method: bool) -> void
45
45
 
46
+ # Validates presence of type names recursively.
47
+ # Assumes the type names are already resolved.
48
+ #
49
+ def validate_type_presence: (Types::t) -> void
50
+
51
+ def validate_type_name: (TypeName, Location[untyped, untyped]?) -> void
52
+
46
53
  # Expand a type alias of given name without type arguments.
47
54
  # Raises an error if the type alias requires arguments.
48
55
  #
data/sig/environment.rbs CHANGED
@@ -31,7 +31,9 @@ module RBS
31
31
 
32
32
  def validate_type_params: () -> void
33
33
 
34
- def type_params: () -> AST::Declarations::ModuleTypeParams
34
+ def compatible_params?: (Array[AST::TypeParam], Array[AST::TypeParam]) -> boolish
35
+
36
+ def type_params: () -> Array[AST::TypeParam]
35
37
 
36
38
  def primary: () -> D[module_decl]
37
39
  end
@@ -96,6 +98,10 @@ module RBS
96
98
 
97
99
  def resolve_member: (TypeNameResolver, AST::Members::t, context: Array[Namespace]) -> AST::Members::t
98
100
 
101
+ def resolve_method_type: (TypeNameResolver, RBS::MethodType, context: Array[Namespace]) -> RBS::MethodType
102
+
103
+ def resolve_type_params: (TypeNameResolver resolver, Array[AST::TypeParam], context: Array[Namespace]) -> Array[AST::TypeParam]
104
+
99
105
  def absolute_type: (TypeNameResolver, Types::t, context: Array[Namespace]) -> Types::t
100
106
 
101
107
  def absolute_type_name: (TypeNameResolver, TypeName, context: Array[Namespace]) -> TypeName
data/sig/errors.rbs CHANGED
@@ -179,10 +179,10 @@ module RBS
179
179
 
180
180
  class InvalidVarianceAnnotationError < DefinitionError
181
181
  attr_reader type_name: TypeName
182
- attr_reader param: AST::Declarations::ModuleTypeParams::TypeParam
182
+ attr_reader param: AST::TypeParam
183
183
  attr_reader location: Location[untyped, untyped]?
184
184
 
185
- def initialize: (type_name: TypeName, param: AST::Declarations::ModuleTypeParams::TypeParam, location: Location[untyped, untyped]?) -> void
185
+ def initialize: (type_name: TypeName, param: AST::TypeParam, location: Location[untyped, untyped]?) -> void
186
186
  end
187
187
 
188
188
  class RecursiveAliasDefinitionError < DefinitionError
@@ -212,7 +212,7 @@ module RBS
212
212
  def mixin_name: () -> String
213
213
  end
214
214
 
215
- class RecursiveTypeAliasError < LoadingError
215
+ class RecursiveTypeAliasError < BaseError
216
216
  attr_reader alias_names: Array[TypeName]
217
217
  attr_reader location: Location[untyped, untyped]?
218
218
 
@@ -221,7 +221,7 @@ module RBS
221
221
  def name: () -> String
222
222
  end
223
223
 
224
- class NonregularTypeAliasError < LoadingError
224
+ class NonregularTypeAliasError < BaseError
225
225
  # Diagnostic reported from `TypeAliasRegularity`.
226
226
  attr_reader diagnostic: TypeAliasRegularity::Diagnostic
227
227
 
@@ -230,4 +230,19 @@ module RBS
230
230
 
231
231
  def initialize: (diagnostic: TypeAliasRegularity::Diagnostic, location: Location[untyped, untyped]?) -> void
232
232
  end
233
+
234
+ class CyclicTypeParameterBound < BaseError
235
+ attr_reader location: Location[untyped, untyped]?
236
+
237
+ # Array of parameters which contains cyclic dependencies.
238
+ attr_reader params: Array[AST::TypeParam]
239
+
240
+ # Type name
241
+ attr_reader type_name: TypeName
242
+
243
+ # Method name
244
+ attr_reader method_name: Symbol?
245
+
246
+ def initialize: (type_name: TypeName, method_name: Symbol?, params: Array[AST::TypeParam], location: Location[untyped, untyped]?) -> void
247
+ end
233
248
  end
data/sig/location.rbs CHANGED
@@ -8,7 +8,7 @@ module RBS
8
8
  #
9
9
  # ```
10
10
  #
11
- class Location[RequiredChildKeys, OptionalChildKeys]
11
+ class Location[in RequiredChildKeys, in OptionalChildKeys]
12
12
  # The buffer this location points on.
13
13
  attr_reader buffer (): Buffer
14
14
 
@@ -79,6 +79,8 @@ module RBS
79
79
  | (OptionalChildKeys) -> Location[bot, bot]?
80
80
  | (Symbol) -> Location[bot, bot]?
81
81
 
82
+ alias aref []
83
+
82
84
  def each_optional_key: () { (Symbol) -> void } -> void
83
85
  | () -> Enumerator[Symbol, void]
84
86
 
data/sig/locator.rbs CHANGED
@@ -7,7 +7,7 @@ module RBS
7
7
  | MethodType
8
8
  | AST::Declarations::t
9
9
  | AST::Members::t
10
- | AST::Declarations::ModuleTypeParams::TypeParam
10
+ | AST::TypeParam
11
11
  | AST::Declarations::Class::Super
12
12
  | AST::Declarations::Module::Self
13
13
 
data/sig/method_types.rbs CHANGED
@@ -1,27 +1,48 @@
1
1
  module RBS
2
2
  class MethodType
3
- attr_reader type_params: Array[Symbol]
3
+ # () -> void
4
+ # ^^^^^^^^^^ type
5
+ #
6
+ # [A] () { () -> A } -> A
7
+ # ^^^ type_params
8
+ # ^^^^^^^^^^^^^^^^^^^ type
9
+ #
10
+ type loc = Location[:type, :type_params]
11
+
12
+ attr_reader type_params: Array[AST::TypeParam]
4
13
  attr_reader type: Types::Function
5
14
  attr_reader block: Types::Block?
6
- attr_reader location: Location[untyped, untyped]?
15
+ attr_reader location: loc?
7
16
 
8
- def initialize: (type_params: Array[Symbol], type: Types::Function, block: Types::Block?, location: Location[untyped, untyped]?) -> void
17
+ def initialize: (type_params: Array[AST::TypeParam], type: Types::Function, block: Types::Block?, location: loc?) -> void
9
18
 
10
19
  def ==: (untyped other) -> bool
11
20
 
12
21
  include _ToJson
13
22
 
23
+ # Substitute type variables to some types.
24
+ # Takes care of type parameter bounds.
25
+ #
14
26
  def sub: (Substitution) -> MethodType
15
27
 
16
- def update: (?type_params: Array[Symbol], ?type: Types::Function, ?block: Types::Block?, ?location: Location[untyped, untyped]?) -> MethodType
28
+ def update: (?type_params: Array[AST::TypeParam], ?type: Types::Function, ?block: Types::Block?, ?location: loc?) -> MethodType
17
29
 
18
30
  def free_variables: (?Set[Symbol] set) -> Set[Symbol]
19
31
 
32
+ # Apply the mapping included in the MethodType.
33
+ #
34
+ # Note that type bound in generics parameter is not handled by this method.
35
+ # You may want to use `#map_type_bound` explicitly, or `#sub` for simple substitution.
36
+ #
20
37
  def map_type: () { (Types::t) -> Types::t } -> MethodType
21
38
 
39
+ def map_type_bound: () { (AST::TypeParam::bound) -> AST::TypeParam::bound } -> MethodType
40
+
22
41
  def each_type: () { (Types::t) -> void } -> void
23
42
  | () -> Enumerator[Types::t, void]
24
43
 
25
44
  def to_s: () -> String
45
+
46
+ def type_param_names: () -> Array[Symbol]
26
47
  end
27
48
  end
@@ -0,0 +1,74 @@
1
+ module RBS
2
+ module AST
3
+ class TypeParam
4
+ # Key
5
+ # ^^^ name
6
+ #
7
+ # unchecked out Elem < _ToJson
8
+ # ^^^^^^^^^ unchecked
9
+ # ^^^ variance
10
+ # ^^^^ name
11
+ # ^^^^^^^^^ upper_bound
12
+ type loc = Location[:name, :variance | :unchecked | :upper_bound]
13
+
14
+ type variance = :invariant | :covariant | :contravariant
15
+
16
+ type bound = Types::ClassInstance | Types::ClassSingleton | Types::Interface
17
+
18
+ attr_reader name: Symbol
19
+ attr_reader variance: variance
20
+ attr_reader location: loc?
21
+
22
+ attr_reader upper_bound: bound?
23
+
24
+ def initialize: (name: Symbol, variance: variance, upper_bound: bound?, location: loc?) -> void
25
+
26
+ include _ToJson
27
+
28
+ def ==: (untyped) -> bool
29
+
30
+ def eql?: (untyped) -> bool
31
+
32
+ def hash: () -> Integer
33
+
34
+ @unchecked: bool
35
+
36
+ def unchecked!: (?boolish) -> self
37
+
38
+ def unchecked?: () -> bool
39
+
40
+ def map_type: () { (bound) -> bound } -> TypeParam
41
+
42
+ # Helper function to resolve _class instance types_ to _type variables_.
43
+ #
44
+ # We need this step because RBS language has an identical syntax for both unqualified class instance types and type variables.
45
+ # `String` may be an instance of `::String` class or type variable depending on the list of bound type variables.
46
+ #
47
+ # So, we need second pass to parse the following generics parameter declaration.
48
+ #
49
+ # ```rbs
50
+ # class Foo[X < _Each[Y], Y]
51
+ # # ^ We want this `Y` to be a type variable.
52
+ # end
53
+ # ```
54
+ #
55
+ def self.resolve_variables: (Array[TypeParam]) -> void
56
+
57
+ def self.subst_var: (Set[Symbol], Types::t) -> Types::t
58
+
59
+ # Rename type parameter name.
60
+ #
61
+ # The renaming cannot be done separately because a set of `TypeParam` decls may be mutual recursive.
62
+ #
63
+ # Example:
64
+ #
65
+ # * Renaming `A -> X, B -> Y`
66
+ # * Input `[A, B < _Pushable[A]]`
67
+ # * Result `[X, Y < _Pushable[X]]`
68
+ #
69
+ def self.rename: (Array[TypeParam], new_names: Array[Symbol]) -> Array[TypeParam]
70
+
71
+ def to_s: () -> String
72
+ end
73
+ end
74
+ end
data/sig/types.rbs CHANGED
@@ -55,6 +55,11 @@ module RBS
55
55
  module EmptyEachType
56
56
  def each_type: () { (t) -> void } -> void
57
57
  | () -> Enumerator[t, void]
58
+
59
+ # `map_type` returns itself, because there is no sub type.
60
+ #
61
+ def map_type: () { (t) -> t } -> self
62
+ | () -> Enumerator[t, self]
58
63
  end
59
64
 
60
65
  module NoTypeName
@@ -199,6 +204,9 @@ module RBS
199
204
  include _TypeBase
200
205
 
201
206
  attr_reader location: loc?
207
+
208
+ def map_type: () { (t) -> t } -> Interface
209
+ | () -> Enumerator[t, Interface]
202
210
  end
203
211
 
204
212
  # ClassInstance represents a type of an instance of a class.
@@ -224,6 +232,9 @@ module RBS
224
232
  attr_reader location: loc?
225
233
 
226
234
  include _TypeBase
235
+
236
+ def map_type: () { (t) -> t } -> ClassInstance
237
+ | () -> Enumerator[t, ClassInstance]
227
238
  end
228
239
 
229
240
  class Alias
@@ -242,6 +253,9 @@ module RBS
242
253
 
243
254
  include _TypeBase
244
255
  include Application
256
+
257
+ def map_type: () { (t) -> t } -> Alias
258
+ | () -> Enumerator[t, Alias]
245
259
  end
246
260
 
247
261
  class Tuple
@@ -254,6 +268,9 @@ module RBS
254
268
  include _TypeBase
255
269
 
256
270
  attr_reader location: loc?
271
+
272
+ def map_type: () { (t) -> t } -> Tuple
273
+ | () -> Enumerator[t, Tuple]
257
274
  end
258
275
 
259
276
  class Record
@@ -266,6 +283,9 @@ module RBS
266
283
  include _TypeBase
267
284
 
268
285
  attr_reader location: loc?
286
+
287
+ def map_type: () { (t) -> t } -> Record
288
+ | () -> Enumerator[t, Record]
269
289
  end
270
290
 
271
291
  class Optional
@@ -278,6 +298,9 @@ module RBS
278
298
  include _TypeBase
279
299
 
280
300
  attr_reader location: loc?
301
+
302
+ def map_type: () { (t) -> t } -> Optional
303
+ | () -> Enumerator[t, Optional]
281
304
  end
282
305
 
283
306
  class Union
@@ -395,7 +418,7 @@ module RBS
395
418
 
396
419
  def sub: (Substitution) -> Block
397
420
 
398
- def map_type: () { (Types::t) -> Types::t } -> Block
421
+ def map_type: () { (t) -> t } -> Block
399
422
  end
400
423
 
401
424
  class Proc
@@ -409,6 +432,9 @@ module RBS
409
432
  include _TypeBase
410
433
 
411
434
  attr_reader location: loc?
435
+
436
+ def map_type: () { (t) -> t } -> Proc
437
+ | () -> Enumerator[t, Proc]
412
438
  end
413
439
 
414
440
  class Literal
data/sig/validator.rbs CHANGED
@@ -12,10 +12,39 @@ module RBS
12
12
 
13
13
  def initialize: (env: Environment, resolver: TypeNameResolver) -> void
14
14
 
15
- def absolute_type: (Types::t, context: TypeNameResolver::context) { (Types::t) -> TypeName } -> Types::t
16
-
15
+ # Validates the presence of type names and type application arity match.
16
+ #
17
17
  def validate_type: (Types::t, context: TypeNameResolver::context) -> void
18
18
 
19
+ # Validates type alias definition:
20
+ #
21
+ # - There is no circular definition between aliases
22
+ # - The type alias is _regular_
23
+ # - The generics type parameter variance annotation is consistent with respect to their usage
24
+ # - There is no circular dependencies between the generics type parameter bounds
25
+ #
19
26
  def validate_type_alias: (entry: Environment::SingleEntry[TypeName, AST::Declarations::Alias]) -> void
27
+
28
+ # Validates the type parameters in generic methods.
29
+ #
30
+ def validate_method_definition: (AST::Members::MethodDefinition, type_name: TypeName) -> void
31
+
32
+ # Validates the type parameters if there is no circular dependencies between the bounds.
33
+ #
34
+ # ```rbs
35
+ # [X, Y] # OK
36
+ # [X, Y < _Foo[X]] # OK
37
+ # [X < _Foo[Y], Y] # OK
38
+ # [X < _Foo[Y], Y < _Foo[X]] # Error
39
+ # ```
40
+ #
41
+ def validate_type_params: (Array[AST::TypeParam] params, type_name: TypeName, ?method_name: Symbol?, location: Location[untyped, untyped]?) -> void
42
+
43
+ private
44
+
45
+ # Resolves relative type names to absolute type names in given context.
46
+ # Yields the type when the type name resolution using `#resolver` fails.
47
+ #
48
+ def absolute_type: (Types::t, context: TypeNameResolver::context) { (Types::t) -> TypeName } -> Types::t
20
49
  end
21
50
  end
@@ -59,7 +59,7 @@ module RBS
59
59
 
60
60
  def compatible?: (Symbol, with_annotation: variance) -> bool
61
61
 
62
- def incompatible?: (AST::Declarations::ModuleTypeParams) -> Set[Symbol]?
62
+ def incompatible?: (Array[AST::TypeParam]) -> Set[Symbol]?
63
63
  end
64
64
 
65
65
  attr_reader builder: DefinitionBuilder
data/sig/writer.rbs CHANGED
@@ -27,7 +27,7 @@ module RBS
27
27
 
28
28
  def write_member: (AST::Declarations::Module::member) -> void
29
29
 
30
- def name_and_params: (TypeName, AST::Declarations::ModuleTypeParams) -> String?
30
+ def name_and_params: (TypeName, Array[AST::TypeParam]) -> String?
31
31
 
32
32
  def name_and_args: (TypeName, Array[Types::t]) -> String?
33
33
 
@@ -0,0 +1,2 @@
1
+ dependencies:
2
+ - name: bigdecimal
@@ -0,0 +1,2 @@
1
+ dependencies:
2
+ - name: forwardable
@@ -0,0 +1,2 @@
1
+ dependencies:
2
+ - name: monitor
@@ -0,0 +1,2 @@
1
+ dependencies:
2
+ - name: uri
@@ -0,0 +1,2 @@
1
+ dependencies:
2
+ - name: socket
@@ -0,0 +1,2 @@
1
+ dependencies:
2
+ - name: singleton
@@ -0,0 +1,3 @@
1
+ dependencies:
2
+ - name: socket
3
+ - name: timeout
@@ -154,7 +154,7 @@ module URI
154
154
  #
155
155
  # See URI.encode_www_form_component, URI.decode_www_form.
156
156
  #
157
- def self.encode_www_form: (Enumerable[[ _ToS, _ToS ]] enum, ?encoding enc) -> String
157
+ def self.encode_www_form: (Enumerable[[ _ToS, _ToS ]] enum, ?encoding? enc) -> String
158
158
 
159
159
  # Encodes given `str` to URL-encoded form data.
160
160
  #
@@ -168,7 +168,7 @@ module URI
168
168
  #
169
169
  # See URI.decode_www_form_component, URI.encode_www_form.
170
170
  #
171
- def self.encode_www_form_component: (String str, ?encoding enc) -> String
171
+ def self.encode_www_form_component: (_ToS str, ?encoding? enc) -> String
172
172
 
173
173
  # ## Synopsis
174
174
  #
@@ -268,7 +268,7 @@ module URI
268
268
  # It's recommended to first ::escape the provided `uri_str` if there are any
269
269
  # invalid URI characters.
270
270
  #
271
- def self.parse: (String uri) -> URI::Generic
271
+ def self.parse: (_ToStr uri) -> (File | FTP | HTTP | HTTPS | LDAP | LDAPS | MailTo | WS | WSS | Generic)
272
272
 
273
273
  # ## Synopsis
274
274
  #
@@ -302,12 +302,17 @@ module URI
302
302
  # p $&
303
303
  # end
304
304
  #
305
- def self.regexp: (?Array[String] schemes) -> Regexp
305
+ def self.regexp: (?Array[String]? schemes) -> Regexp
306
306
 
307
307
  # Returns a Hash of the defined schemes.
308
308
  #
309
309
  def self.scheme_list: () -> Hash[String, Class]
310
310
 
311
+ # Construct a URI instance, using the scheme to detect the appropriate class
312
+ # from +URI.scheme_list+.
313
+ #
314
+ def self.for: (String scheme, *untyped arguments, ?default: Class) -> (File | FTP | HTTP | HTTPS | LDAP | LDAPS | MailTo | WS | WSS | Generic)
315
+
311
316
  # ## Synopsis
312
317
  #
313
318
  # URI::split(uri)
@@ -340,7 +345,7 @@ module URI
340
345
  # URI.split("http://www.ruby-lang.org/")
341
346
  # # => ["http", nil, "www.ruby-lang.org", nil, nil, "/", nil, nil, nil]
342
347
  #
343
- def self.split: (String uri) -> [ String?, String?, String?, String?, String?, String?, String?, String?, String? ]
348
+ def self.split: (_ToStr uri) -> [ String?, String?, String?, String?, nil, String?, String?, String?, String? ]
344
349
  end
345
350
 
346
351
  URI::ABS_PATH: Regexp
@@ -0,0 +1,10 @@
1
+ module URI
2
+ # FTP URI syntax is defined by RFC1738 section 3.2.
3
+ #
4
+ # This class will be redesigned because of difference of implementations;
5
+ # the structure of its path. draft-hoffman-ftp-uri-04 is a draft but it
6
+ # is a good summary about the de facto spec.
7
+ # http://tools.ietf.org/html/draft-hoffman-ftp-uri-04
8
+ class FTP < Generic
9
+ end
10
+ end