rbs 1.8.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -29,11 +29,18 @@ module RBS
29
29
  end
30
30
 
31
31
  def sub(s)
32
- s.without(*type_params).yield_self do |sub|
33
- map_type do |ty|
34
- ty.sub(sub)
35
- end
36
- end
32
+ sub = s.without(*type_param_names)
33
+
34
+ self.class.new(
35
+ type_params: type_params.map do |param|
36
+ param.map_type do |bound|
37
+ bound.map_type {|ty| ty.sub(sub) }
38
+ end
39
+ end,
40
+ type: type.sub(sub),
41
+ block: block&.sub(sub),
42
+ location: location
43
+ )
37
44
  end
38
45
 
39
46
  def update(type_params: self.type_params, type: self.type, block: self.block, location: self.location)
@@ -48,7 +55,7 @@ module RBS
48
55
  def free_variables(set = Set.new)
49
56
  type.free_variables(set)
50
57
  block&.type&.free_variables(set)
51
- set.subtract(type_params)
58
+ set.subtract(type_param_names)
52
59
  end
53
60
 
54
61
  def map_type(&block)
@@ -62,6 +69,18 @@ module RBS
62
69
  )
63
70
  end
64
71
 
72
+ def map_type_bound(&block)
73
+ if type_params.empty?
74
+ self
75
+ else
76
+ self.update(
77
+ type_params: type_params.map {|param|
78
+ param.map_type(&block)
79
+ }
80
+ )
81
+ end
82
+ end
83
+
65
84
  def each_type(&block)
66
85
  if block
67
86
  type.each_type(&block)
@@ -89,5 +108,9 @@ module RBS
89
108
  "[#{type_params.join(", ")}] #{s}"
90
109
  end
91
110
  end
111
+
112
+ def type_param_names
113
+ type_params.map(&:name)
114
+ end
92
115
  end
93
116
  end
@@ -49,7 +49,7 @@ module RBS
49
49
  annotations: [],
50
50
  comment: nil,
51
51
  location: nil,
52
- type_params: AST::Declarations::ModuleTypeParams.empty
52
+ type_params: []
53
53
  )
54
54
  decls << top
55
55
  end
@@ -88,7 +88,7 @@ module RBS
88
88
  kls = AST::Declarations::Class.new(
89
89
  name: const_to_name(class_name),
90
90
  super_class: super_class && AST::Declarations::Class::Super.new(name: const_to_name(super_class), args: [], location: nil),
91
- type_params: AST::Declarations::ModuleTypeParams.empty,
91
+ type_params: [],
92
92
  members: [],
93
93
  annotations: [],
94
94
  location: nil,
@@ -108,7 +108,7 @@ module RBS
108
108
 
109
109
  mod = AST::Declarations::Module.new(
110
110
  name: const_to_name(module_name),
111
- type_params: AST::Declarations::ModuleTypeParams.empty,
111
+ type_params: [],
112
112
  self_types: [],
113
113
  members: [],
114
114
  annotations: [],
@@ -48,7 +48,7 @@ module RBS
48
48
  modules.push AST::Declarations::Class.new(
49
49
  name: nested_name(name),
50
50
  super_class: super_class && AST::Declarations::Class::Super.new(name: const_to_name(super_class), args: [], location: nil),
51
- type_params: AST::Declarations::ModuleTypeParams.empty,
51
+ type_params: [],
52
52
  members: [],
53
53
  annotations: [],
54
54
  location: nil,
@@ -65,7 +65,7 @@ module RBS
65
65
  def push_module(name, comment:)
66
66
  modules.push AST::Declarations::Module.new(
67
67
  name: nested_name(name),
68
- type_params: AST::Declarations::ModuleTypeParams.empty,
68
+ type_params: [],
69
69
  members: [],
70
70
  annotations: [],
71
71
  location: nil,
@@ -212,10 +212,12 @@ module RBS
212
212
  end
213
213
  end
214
214
 
215
- current_module.type_params.add(
216
- AST::Declarations::ModuleTypeParams::TypeParam.new(name: node.children[0],
217
- variance: variance || :invariant,
218
- skip_validation: false))
215
+ current_module.type_params << AST::TypeParam.new(
216
+ name: node.children[0],
217
+ variance: variance || :invariant,
218
+ location: nil,
219
+ upper_bound: nil
220
+ )
219
221
  end
220
222
  else
221
223
  name = node.children[0].yield_self do |n|
@@ -371,7 +371,7 @@ module RBS
371
371
  unless decl
372
372
  decl = AST::Declarations::Class.new(
373
373
  name: to_type_name(only_name(mod)),
374
- type_params: AST::Declarations::ModuleTypeParams.empty,
374
+ type_params: [],
375
375
  super_class: generate_super_class(mod),
376
376
  members: [],
377
377
  annotations: [],
@@ -425,7 +425,7 @@ module RBS
425
425
  unless decl
426
426
  decl = AST::Declarations::Module.new(
427
427
  name: to_type_name(only_name(mod)),
428
- type_params: AST::Declarations::ModuleTypeParams.empty,
428
+ type_params: [],
429
429
  self_types: [],
430
430
  members: [],
431
431
  annotations: [],
@@ -479,7 +479,7 @@ module RBS
479
479
  if outer_module.is_a?(Class)
480
480
  outer_decl = AST::Declarations::Class.new(
481
481
  name: to_type_name(outer_module_name),
482
- type_params: AST::Declarations::ModuleTypeParams.empty,
482
+ type_params: [],
483
483
  super_class: generate_super_class(outer_module),
484
484
  members: [],
485
485
  annotations: [],
@@ -489,7 +489,7 @@ module RBS
489
489
  else
490
490
  outer_decl = AST::Declarations::Module.new(
491
491
  name: to_type_name(outer_module_name),
492
- type_params: AST::Declarations::ModuleTypeParams.empty,
492
+ type_params: [],
493
493
  self_types: [],
494
494
  members: [],
495
495
  annotations: [],
data/lib/rbs/types.rb CHANGED
@@ -26,6 +26,14 @@ module RBS
26
26
  enum_for :each_type
27
27
  end
28
28
  end
29
+
30
+ def map_type(&block)
31
+ if block
32
+ _ = self
33
+ else
34
+ enum_for(:map_type)
35
+ end
36
+ end
29
37
  end
30
38
 
31
39
  module Bases
@@ -261,6 +269,18 @@ module RBS
261
269
  location: location
262
270
  )
263
271
  end
272
+
273
+ def map_type(&block)
274
+ if block
275
+ Interface.new(
276
+ name: name,
277
+ args: args.map {|type| yield type },
278
+ location: location
279
+ )
280
+ else
281
+ enum_for(:map_type)
282
+ end
283
+ end
264
284
  end
265
285
 
266
286
  class ClassInstance
@@ -291,6 +311,18 @@ module RBS
291
311
  location: location
292
312
  )
293
313
  end
314
+
315
+ def map_type(&block)
316
+ if block
317
+ ClassInstance.new(
318
+ name: name,
319
+ args: args.map {|type| yield type },
320
+ location: location
321
+ )
322
+ else
323
+ enum_for :map_type
324
+ end
325
+ end
294
326
  end
295
327
 
296
328
  class Alias
@@ -319,6 +351,18 @@ module RBS
319
351
  location: location
320
352
  )
321
353
  end
354
+
355
+ def map_type(&block)
356
+ if block
357
+ Alias.new(
358
+ name: name,
359
+ args: args.map {|type| yield type },
360
+ location: location
361
+ )
362
+ else
363
+ enum_for :map_type
364
+ end
365
+ end
322
366
  end
323
367
 
324
368
  class Tuple
@@ -379,6 +423,17 @@ module RBS
379
423
  location: location
380
424
  )
381
425
  end
426
+
427
+ def map_type(&block)
428
+ if block
429
+ Tuple.new(
430
+ types: types.map {|type| yield type },
431
+ location: location
432
+ )
433
+ else
434
+ enum_for :map_type
435
+ end
436
+ end
382
437
  end
383
438
 
384
439
  class Record
@@ -444,6 +499,17 @@ module RBS
444
499
  location: location
445
500
  )
446
501
  end
502
+
503
+ def map_type(&block)
504
+ if block
505
+ Record.new(
506
+ fields: fields.transform_values {|type| yield type },
507
+ location: location
508
+ )
509
+ else
510
+ enum_for :map_type
511
+ end
512
+ end
447
513
  end
448
514
 
449
515
  class Optional
@@ -503,6 +569,17 @@ module RBS
503
569
  location: location
504
570
  )
505
571
  end
572
+
573
+ def map_type(&block)
574
+ if block
575
+ Optional.new(
576
+ type: yield(type),
577
+ location: location
578
+ )
579
+ else
580
+ enum_for :map_type
581
+ end
582
+ end
506
583
  end
507
584
 
508
585
  class Union
@@ -1046,6 +1123,18 @@ module RBS
1046
1123
  location: location
1047
1124
  )
1048
1125
  end
1126
+
1127
+ def map_type(&block)
1128
+ if block
1129
+ Proc.new(
1130
+ type: type.map_type(&block),
1131
+ block: self.block&.map_type(&block),
1132
+ location: location
1133
+ )
1134
+ else
1135
+ enum_for :map_type
1136
+ end
1137
+ end
1049
1138
  end
1050
1139
 
1051
1140
  class Literal
data/lib/rbs/validator.rb CHANGED
@@ -27,19 +27,17 @@ module RBS
27
27
  end
28
28
  end
29
29
 
30
+ definition_builder.validate_type_name(type.name, type.location)
31
+
30
32
  type_params = case type
31
33
  when Types::ClassInstance
32
- env.class_decls[type.name]&.type_params
34
+ env.class_decls[type.name].type_params
33
35
  when Types::Interface
34
- env.interface_decls[type.name]&.decl&.type_params
36
+ env.interface_decls[type.name].decl.type_params
35
37
  when Types::Alias
36
- env.alias_decls[type.name]&.decl&.type_params
38
+ env.alias_decls[type.name].decl.type_params
37
39
  end
38
40
 
39
- unless type_params
40
- raise NoTypeFoundError.new(type_name: type.name, location: type.location)
41
- end
42
-
43
41
  InvalidTypeApplicationError.check!(
44
42
  type_name: type.name,
45
43
  args: type.args,
@@ -48,9 +46,7 @@ module RBS
48
46
  )
49
47
 
50
48
  when Types::ClassSingleton
51
- # @type var type: Types::ClassSingleton
52
- type = _ = absolute_type(type, context: context) { type.name.absolute! }
53
- NoTypeFoundError.check!(type.name, env: env, location: type.location)
49
+ definition_builder.validate_type_presence(type)
54
50
  end
55
51
 
56
52
  type.each_type do |type|
@@ -76,7 +72,7 @@ module RBS
76
72
  result = calculator.in_type_alias(name: type_name)
77
73
  if set = result.incompatible?(entry.decl.type_params)
78
74
  set.each do |param_name|
79
- param = entry.decl.type_params[param_name] or raise
75
+ param = entry.decl.type_params.find {|param| param.name == param_name } or raise
80
76
  raise InvalidVarianceAnnotationError.new(
81
77
  type_name: type_name,
82
78
  param: param,
@@ -84,6 +80,61 @@ module RBS
84
80
  )
85
81
  end
86
82
  end
83
+
84
+ validate_type_params(
85
+ entry.decl.type_params,
86
+ type_name: type_name,
87
+ location: entry.decl.location&.aref(:type_params)
88
+ )
89
+ end
90
+ end
91
+
92
+ def validate_method_definition(method_def, type_name:)
93
+ method_def.types.each do |method_type|
94
+ unless method_type.type_params.empty?
95
+ loc = method_type.location&.aref(:type_params)
96
+
97
+ validate_type_params(
98
+ method_type.type_params,
99
+ type_name: type_name,
100
+ method_name: method_def.name,
101
+ location: loc
102
+ )
103
+ end
104
+ end
105
+ end
106
+
107
+ def validate_type_params(params, type_name: , method_name: nil, location:)
108
+ # @type var each_node: TSort::_EachNode[Symbol]
109
+ each_node = __skip__ = -> (&block) do
110
+ params.each do |param|
111
+ block[param.name]
112
+ end
113
+ end
114
+ # @type var each_child: TSort::_EachChild[Symbol]
115
+ each_child = __skip__ = -> (name, &block) do
116
+ if param = params.find {|p| p.name == name }
117
+ if b = param.upper_bound
118
+ b.free_variables.each do |tv|
119
+ block[tv]
120
+ end
121
+ end
122
+ end
123
+ end
124
+
125
+ TSort.each_strongly_connected_component(each_node, each_child) do |names|
126
+ if names.size > 1
127
+ params = names.map do |name|
128
+ params.find {|param| param.name == name} or raise
129
+ end
130
+
131
+ raise CyclicTypeParameterBound.new(
132
+ type_name: type_name,
133
+ method_name: method_name,
134
+ params: params,
135
+ location: location
136
+ )
137
+ end
87
138
  end
88
139
  end
89
140
 
@@ -141,14 +141,15 @@ module RBS
141
141
  end
142
142
 
143
143
  type.args.each.with_index do |ty, i|
144
- var = type_params.params[i]
145
- case var&.variance
146
- when :invariant
147
- type(ty, result: result, context: :invariant)
148
- when :covariant
149
- type(ty, result: result, context: context)
150
- when :contravariant
151
- type(ty, result: result, context: negate(context))
144
+ if var = type_params[i]
145
+ case var.variance
146
+ when :invariant
147
+ type(ty, result: result, context: :invariant)
148
+ when :covariant
149
+ type(ty, result: result, context: context)
150
+ when :contravariant
151
+ type(ty, result: result, context: negate(context))
152
+ end
152
153
  end
153
154
  end
154
155
  when Types::Proc
data/lib/rbs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RBS
2
- VERSION = "1.8.0"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/rbs/writer.rb CHANGED
@@ -146,19 +146,7 @@ module RBS
146
146
  "#{name}"
147
147
  else
148
148
  ps = params.each.map do |param|
149
- s = ""
150
- if param.skip_validation
151
- s << "unchecked "
152
- end
153
- case param.variance
154
- when :invariant
155
- # nop
156
- when :covariant
157
- s << "out "
158
- when :contravariant
159
- s << "in "
160
- end
161
- s + param.name.to_s
149
+ param.to_s
162
150
  end
163
151
 
164
152
  "#{name}[#{ps.join(", ")}]"
data/lib/rbs.rb CHANGED
@@ -16,6 +16,7 @@ require "rbs/namespace"
16
16
  require "rbs/type_name"
17
17
  require "rbs/types"
18
18
  require "rbs/method_type"
19
+ require "rbs/ast/type_param"
19
20
  require "rbs/ast/declarations"
20
21
  require "rbs/ast/members"
21
22
  require "rbs/ast/annotation"
data/schema/decls.json CHANGED
@@ -13,16 +13,10 @@
13
13
  "type": "string"
14
14
  },
15
15
  "type_params": {
16
- "type": "object",
17
- "properties": {
18
- "params": {
19
- "type": "array",
20
- "items": {
21
- "$ref": "#/definitions/moduleTypeParam"
22
- }
23
- }
24
- },
25
- "required": ["params"]
16
+ "type": "array",
17
+ "items": {
18
+ "$ref": "typeParam.json"
19
+ }
26
20
  },
27
21
  "type": {
28
22
  "$ref": "types.json"
@@ -88,21 +82,6 @@
88
82
  },
89
83
  "required": ["declaration", "name", "type", "comment", "location"]
90
84
  },
91
- "moduleTypeParam": {
92
- "type": "object",
93
- "properties": {
94
- "name": {
95
- "type": "string"
96
- },
97
- "variance": {
98
- "enum": ["covariant", "contravariant", "invariant"]
99
- },
100
- "skip_validation": {
101
- "type": "boolean"
102
- }
103
- },
104
- "required": ["name", "variance", "skip_validation"]
105
- },
106
85
  "classMember": {
107
86
  "oneOf": [
108
87
  {
@@ -157,16 +136,10 @@
157
136
  "type": "string"
158
137
  },
159
138
  "type_params": {
160
- "type": "object",
161
- "properties": {
162
- "params": {
163
- "type": "array",
164
- "items": {
165
- "$ref": "#/definitions/moduleTypeParam"
166
- }
167
- }
168
- },
169
- "required": ["params"]
139
+ "type": "array",
140
+ "items": {
141
+ "$ref": "typeParam.json"
142
+ }
170
143
  },
171
144
  "members": {
172
145
  "type": "array",
@@ -221,16 +194,10 @@
221
194
  "type": "string"
222
195
  },
223
196
  "type_params": {
224
- "type": "object",
225
- "properties": {
226
- "params": {
227
- "type": "array",
228
- "items": {
229
- "$ref": "#/definitions/moduleTypeParam"
230
- }
231
- }
232
- },
233
- "required": ["params"]
197
+ "type": "array",
198
+ "items": {
199
+ "$ref": "typeParam.json"
200
+ }
234
201
  },
235
202
  "members": {
236
203
  "type": "array",
@@ -309,16 +276,10 @@
309
276
  "type": "string"
310
277
  },
311
278
  "type_params": {
312
- "type": "object",
313
- "properties": {
314
- "params": {
315
- "type": "array",
316
- "items": {
317
- "$ref": "#/definitions/moduleTypeParam"
318
- }
319
- }
320
- },
321
- "required": ["params"]
279
+ "type": "array",
280
+ "items": {
281
+ "$ref": "typeParam.json"
282
+ }
322
283
  },
323
284
  "members": {
324
285
  "type": "array",
@@ -20,7 +20,7 @@
20
20
  "type_params": {
21
21
  "type": "array",
22
22
  "items": {
23
- "type": "string"
23
+ "$ref": "typeParam.json"
24
24
  }
25
25
  },
26
26
  "type": {
@@ -0,0 +1,36 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "title": "Type param: `A`, `unchecked out A`, ...",
4
+ "type": "object",
5
+ "properties": {
6
+ "name": {
7
+ "type": "string"
8
+ },
9
+ "variance": {
10
+ "enum": ["covariant", "contravariant", "invariant"]
11
+ },
12
+ "unchecked": {
13
+ "type": "boolean"
14
+ },
15
+ "upper_bound": {
16
+ "oneOf": [
17
+ {
18
+ "$ref": "types.json#definitions/classInstance"
19
+ },
20
+ {
21
+ "$ref": "types.json#definitions/classSingleton"
22
+ },
23
+ {
24
+ "$ref": "types.json#definitions/interface"
25
+ },
26
+ {
27
+ "type": "null"
28
+ }
29
+ ]
30
+ },
31
+ "location": {
32
+ "$ref": "location.json"
33
+ }
34
+ },
35
+ "required": ["name", "variance", "unchecked", "upper_bound", "location"]
36
+ }
@@ -8,11 +8,15 @@ module RBS
8
8
  def versions: (Config::gem_entry) -> Array[String]
9
9
  def install: (dest: Pathname, config_entry: Config::gem_entry, stdout: CLI::_IO) -> void
10
10
  def to_lockfile: () -> source_entry
11
+ def manifest_of: (Config::gem_entry) -> manifest_entry?
11
12
  end
12
13
 
13
14
  type source_entry = Git::source_entry
14
15
  | Stdlib::source_entry
15
16
  | Rubygems::source_entry
17
+ type manifest_entry = {
18
+ "dependencies" => Array[{"name" => String}]?,
19
+ }
16
20
 
17
21
  class Git
18
22
  METADATA_FILENAME: String
@@ -42,6 +46,8 @@ module RBS
42
46
 
43
47
  def to_lockfile: () -> source_entry
44
48
 
49
+ def manifest_of: (Config::gem_entry) -> manifest_entry?
50
+
45
51
  private
46
52
 
47
53
  def _install: (dest: Pathname , config_entry: Config::gem_entry) -> void
@@ -62,9 +68,9 @@ module RBS
62
68
 
63
69
  def resolve_revision: () -> String
64
70
 
65
- def git: (*String cmd) -> String
71
+ def git: (*String cmd, **untyped opt) -> String
66
72
 
67
- def sh!: (*String cmd) -> String
73
+ def sh!: (*String cmd, **untyped opt) -> String
68
74
 
69
75
  def format_config_entry: (Config::gem_entry) -> String
70
76
  end
@@ -86,6 +92,8 @@ module RBS
86
92
 
87
93
  def to_lockfile: () -> source_entry
88
94
 
95
+ def manifest_of: (Config::gem_entry) -> manifest_entry?
96
+
89
97
  private
90
98
 
91
99
  def gem_dir: (Config::gem_entry) -> Pathname
@@ -104,6 +112,7 @@ module RBS
104
112
  def versions: (Config::gem_entry) -> Array[String]
105
113
  def install: (dest: Pathname, config_entry: Config::gem_entry, stdout: CLI::_IO) -> void
106
114
  def to_lockfile: () -> source_entry
115
+ def manifest_of: (Config::gem_entry) -> manifest_entry?
107
116
 
108
117
  private
109
118
 
@@ -16,7 +16,7 @@ module RBS
16
16
 
17
17
  private
18
18
 
19
- def assign_gem: (gem_name: String, version: String?) -> void
19
+ def assign_gem: (name: String, version: String?) -> void
20
20
 
21
21
  def upsert_gem: (gem_entry? old, gem_entry new) -> void
22
22
 
@@ -24,7 +24,7 @@ module RBS
24
24
 
25
25
  def remove_ignored_gems!: () -> void
26
26
 
27
- def find_source: (gem_name: String) -> untyped
27
+ def find_source: (name: String) -> untyped
28
28
 
29
29
  def find_best_version: (version: String?, versions: Array[String]) -> Gem::Version
30
30
  end