rbs 1.7.0 → 2.0.0.pre1

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +95 -3
  3. data/core/array.rbs +3 -3
  4. data/core/builtin.rbs +4 -0
  5. data/core/enumerable.rbs +3 -3
  6. data/core/thread.rbs +1 -1
  7. data/docs/collection.md +23 -1
  8. data/docs/syntax.md +117 -61
  9. data/ext/rbs_extension/constants.c +2 -6
  10. data/ext/rbs_extension/constants.h +1 -2
  11. data/ext/rbs_extension/parser.c +221 -185
  12. data/ext/rbs_extension/parserstate.c +6 -2
  13. data/ext/rbs_extension/parserstate.h +10 -0
  14. data/ext/rbs_extension/ruby_objs.c +17 -17
  15. data/ext/rbs_extension/ruby_objs.h +3 -4
  16. data/lib/rbs/ast/declarations.rb +6 -99
  17. data/lib/rbs/ast/type_param.rb +134 -0
  18. data/lib/rbs/cli.rb +33 -5
  19. data/lib/rbs/collection/config/lockfile_generator.rb +26 -18
  20. data/lib/rbs/collection/sources/git.rb +18 -7
  21. data/lib/rbs/collection/sources/rubygems.rb +7 -0
  22. data/lib/rbs/collection/sources/stdlib.rb +6 -0
  23. data/lib/rbs/definition.rb +9 -0
  24. data/lib/rbs/definition_builder.rb +78 -16
  25. data/lib/rbs/environment.rb +32 -8
  26. data/lib/rbs/environment_loader.rb +0 -2
  27. data/lib/rbs/environment_walker.rb +4 -1
  28. data/lib/rbs/errors.rb +31 -6
  29. data/lib/rbs/location_aux.rb +2 -0
  30. data/lib/rbs/method_type.rb +29 -6
  31. data/lib/rbs/prototype/rb.rb +3 -3
  32. data/lib/rbs/prototype/rbi.rb +8 -6
  33. data/lib/rbs/prototype/runtime.rb +4 -4
  34. data/lib/rbs/type_alias_regularity.rb +115 -0
  35. data/lib/rbs/types.rb +100 -23
  36. data/lib/rbs/validator.rb +99 -15
  37. data/lib/rbs/variance_calculator.rb +60 -31
  38. data/lib/rbs/version.rb +1 -1
  39. data/lib/rbs/writer.rb +2 -14
  40. data/lib/rbs.rb +2 -0
  41. data/schema/decls.json +19 -46
  42. data/schema/methodType.json +1 -1
  43. data/schema/typeParam.json +36 -0
  44. data/schema/types.json +8 -2
  45. data/sig/collection/collections.rbs +13 -2
  46. data/sig/collection/config.rbs +2 -2
  47. data/sig/declarations.rbs +15 -62
  48. data/sig/definition.rbs +11 -1
  49. data/sig/definition_builder.rbs +37 -1
  50. data/sig/environment.rbs +7 -1
  51. data/sig/environment_walker.rbs +26 -0
  52. data/sig/errors.rbs +28 -3
  53. data/sig/location.rbs +3 -1
  54. data/sig/locator.rbs +1 -1
  55. data/sig/method_types.rbs +25 -4
  56. data/sig/type_alias_regularity.rbs +92 -0
  57. data/sig/type_param.rbs +74 -0
  58. data/sig/types.rbs +37 -8
  59. data/sig/validator.rbs +38 -2
  60. data/sig/variance_calculator.rbs +50 -0
  61. data/sig/writer.rbs +1 -1
  62. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  63. data/stdlib/csv/0/manifest.yaml +2 -0
  64. data/stdlib/date/0/date.rbs +2 -2
  65. data/stdlib/logger/0/manifest.yaml +2 -0
  66. data/stdlib/net-http/0/manifest.yaml +2 -0
  67. data/stdlib/openssl/0/manifest.yaml +2 -0
  68. data/stdlib/prime/0/manifest.yaml +2 -0
  69. data/stdlib/resolv/0/manifest.yaml +3 -0
  70. data/stdlib/set/0/set.rbs +3 -3
  71. data/stdlib/uri/0/common.rbs +10 -5
  72. data/stdlib/uri/0/ftp.rbs +10 -0
  73. data/stdlib/uri/0/mailto.rbs +5 -0
  74. data/stdlib/uri/0/ws.rbs +10 -0
  75. data/stdlib/uri/0/wss.rbs +7 -0
  76. data/stdlib/yaml/0/manifest.yaml +3 -0
  77. data/steep/Gemfile.lock +10 -10
  78. metadata +21 -5
  79. data/lib/ruby/signature.rb +0 -7
data/lib/rbs/validator.rb CHANGED
@@ -2,10 +2,12 @@ module RBS
2
2
  class Validator
3
3
  attr_reader :env
4
4
  attr_reader :resolver
5
+ attr_reader :definition_builder
5
6
 
6
7
  def initialize(env:, resolver:)
7
8
  @env = env
8
9
  @resolver = resolver
10
+ @definition_builder = DefinitionBuilder.new(env: env)
9
11
  end
10
12
 
11
13
  def absolute_type(type, context:)
@@ -17,25 +19,25 @@ module RBS
17
19
  # Validates presence of the relative type, and application arity match.
18
20
  def validate_type(type, context:)
19
21
  case type
20
- when Types::ClassInstance, Types::Interface
21
- # @type var type: Types::ClassInstance | Types::Interface
22
+ when Types::ClassInstance, Types::Interface, Types::Alias
23
+ # @type var type: Types::ClassInstance | Types::Interface | Types::Alias
22
24
  if type.name.namespace.relative?
23
25
  type = _ = absolute_type(type, context: context) do |_|
24
26
  NoTypeFoundError.check!(type.name.absolute!, env: env, location: type.location)
25
27
  end
26
28
  end
27
29
 
30
+ definition_builder.validate_type_name(type.name, type.location)
31
+
28
32
  type_params = case type
29
33
  when Types::ClassInstance
30
- env.class_decls[type.name]&.type_params
34
+ env.class_decls[type.name].type_params
31
35
  when Types::Interface
32
- env.interface_decls[type.name]&.decl&.type_params
36
+ env.interface_decls[type.name].decl.type_params
37
+ when Types::Alias
38
+ env.alias_decls[type.name].decl.type_params
33
39
  end
34
40
 
35
- unless type_params
36
- raise NoTypeFoundError.new(type_name: type.name, location: type.location)
37
- end
38
-
39
41
  InvalidTypeApplicationError.check!(
40
42
  type_name: type.name,
41
43
  args: type.args,
@@ -43,10 +45,8 @@ module RBS
43
45
  location: type.location
44
46
  )
45
47
 
46
- when Types::Alias, Types::ClassSingleton
47
- # @type var type: Types::Alias | Types::ClassSingleton
48
- type = _ = absolute_type(type, context: context) { type.name.absolute! }
49
- NoTypeFoundError.check!(type.name, env: env, location: type.location)
48
+ when Types::ClassSingleton
49
+ definition_builder.validate_type_presence(type)
50
50
  end
51
51
 
52
52
  type.each_type do |type|
@@ -55,11 +55,95 @@ module RBS
55
55
  end
56
56
 
57
57
  def validate_type_alias(entry:)
58
- @type_alias_dependency ||= TypeAliasDependency.new(env: env)
59
- if @type_alias_dependency.circular_definition?(entry.decl.name)
58
+ type_name = entry.decl.name
59
+
60
+ if type_alias_dependency.circular_definition?(type_name)
60
61
  location = entry.decl.location or raise
61
- raise RecursiveTypeAliasError.new(alias_names: [entry.decl.name], location: location)
62
+ raise RecursiveTypeAliasError.new(alias_names: [type_name], location: location)
63
+ end
64
+
65
+ if diagnostic = type_alias_regularity.nonregular?(type_name)
66
+ location = entry.decl.location or raise
67
+ raise NonregularTypeAliasError.new(diagnostic: diagnostic, location: location)
68
+ end
69
+
70
+ unless entry.decl.type_params.empty?
71
+ calculator = VarianceCalculator.new(builder: definition_builder)
72
+ result = calculator.in_type_alias(name: type_name)
73
+ if set = result.incompatible?(entry.decl.type_params)
74
+ set.each do |param_name|
75
+ param = entry.decl.type_params.find {|param| param.name == param_name } or raise
76
+ raise InvalidVarianceAnnotationError.new(
77
+ type_name: type_name,
78
+ param: param,
79
+ location: entry.decl.type.location
80
+ )
81
+ end
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
62
138
  end
63
139
  end
140
+
141
+ def type_alias_dependency
142
+ @type_alias_dependency ||= TypeAliasDependency.new(env: env)
143
+ end
144
+
145
+ def type_alias_regularity
146
+ @type_alias_regularity ||= TypeAliasRegularity.validate(env: env)
147
+ end
64
148
  end
65
149
  end
@@ -54,6 +54,21 @@ module RBS
54
54
  false
55
55
  end
56
56
  end
57
+
58
+ def incompatible?(params)
59
+ # @type set: Hash[Symbol]
60
+ set = Set[]
61
+
62
+ params.each do |param|
63
+ unless compatible?(param.name, with_annotation: param.variance)
64
+ set << param.name
65
+ end
66
+ end
67
+
68
+ unless set.empty?
69
+ set
70
+ end
71
+ end
57
72
  end
58
73
 
59
74
  attr_reader :builder
@@ -69,19 +84,12 @@ module RBS
69
84
  def in_method_type(method_type:, variables:)
70
85
  result = Result.new(variables: variables)
71
86
 
72
- method_type.type.each_param do |param|
73
- type(param.type, result: result, context: :contravariant)
74
- end
87
+ function(method_type.type, result: result, context: :covariant)
75
88
 
76
89
  if block = method_type.block
77
- block.type.each_param do |param|
78
- type(param.type, result: result, context: :covariant)
79
- end
80
- type(block.type.return_type, result: result, context: :contravariant)
90
+ function(block.type, result: result, context: :contravariant)
81
91
  end
82
92
 
83
- type(method_type.type.return_type, result: result, context: :covariant)
84
-
85
93
  result
86
94
  end
87
95
 
@@ -97,6 +105,14 @@ module RBS
97
105
  end
98
106
  end
99
107
 
108
+ def in_type_alias(name:)
109
+ decl = env.alias_decls[name].decl or raise
110
+ variables = decl.type_params.each.map(&:name)
111
+ Result.new(variables: variables).tap do |result|
112
+ type(decl.type, result: result, context: :covariant)
113
+ end
114
+ end
115
+
100
116
  def type(type, result:, context:)
101
117
  case type
102
118
  when Types::Variable
@@ -110,7 +126,7 @@ module RBS
110
126
  result.invariant(type.name)
111
127
  end
112
128
  end
113
- when Types::ClassInstance, Types::Interface
129
+ when Types::ClassInstance, Types::Interface, Types::Alias
114
130
  NoTypeFoundError.check!(type.name,
115
131
  env: env,
116
132
  location: type.location)
@@ -120,36 +136,49 @@ module RBS
120
136
  env.class_decls[type.name].type_params
121
137
  when Types::Interface
122
138
  env.interface_decls[type.name].decl.type_params
139
+ when Types::Alias
140
+ env.alias_decls[type.name].decl.type_params
123
141
  end
124
142
 
125
143
  type.args.each.with_index do |ty, i|
126
- var = type_params.params[i]
127
- case var&.variance
128
- when :invariant
129
- type(ty, result: result, context: :invariant)
130
- when :covariant
131
- type(ty, result: result, context: context)
132
- when :contravariant
133
- # @type var con: variance
134
- con = case context
135
- when :invariant
136
- :invariant
137
- when :covariant
138
- :contravariant
139
- when :contravariant
140
- :covariant
141
- else
142
- raise
143
- end
144
- type(ty, result: result, context: con)
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
145
153
  end
146
154
  end
147
- when Types::Tuple, Types::Record, Types::Union, Types::Intersection
148
- # Covariant types
155
+ when Types::Proc
156
+ function(type.type, result: result, context: context)
157
+ else
149
158
  type.each_type do |ty|
150
159
  type(ty, result: result, context: context)
151
160
  end
152
161
  end
153
162
  end
163
+
164
+ def function(type, result:, context:)
165
+ type.each_param do |param|
166
+ type(param.type, result: result, context: negate(context))
167
+ end
168
+ type(type.return_type, result: result, context: context)
169
+ end
170
+
171
+ def negate(variance)
172
+ case variance
173
+ when :invariant
174
+ :invariant
175
+ when :covariant
176
+ :contravariant
177
+ when :contravariant
178
+ :covariant
179
+ else
180
+ raise
181
+ end
182
+ end
154
183
  end
155
184
  end
data/lib/rbs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RBS
2
- VERSION = "1.7.0"
2
+ VERSION = "2.0.0.pre1"
3
3
  end
data/lib/rbs/writer.rb CHANGED
@@ -119,7 +119,7 @@ module RBS
119
119
  when AST::Declarations::Alias
120
120
  write_comment decl.comment
121
121
  write_annotation decl.annotations
122
- puts "type #{decl.name} = #{decl.type}"
122
+ puts "type #{name_and_params(decl.name, decl.type_params)} = #{decl.type}"
123
123
 
124
124
  when AST::Declarations::Interface
125
125
  write_comment decl.comment
@@ -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"
@@ -45,6 +46,7 @@ require "rbs/repository"
45
46
  require "rbs/ancestor_graph"
46
47
  require "rbs/locator"
47
48
  require "rbs/type_alias_dependency"
49
+ require "rbs/type_alias_regularity"
48
50
  require "rbs/collection"
49
51
 
50
52
  require "rbs_extension"
data/schema/decls.json CHANGED
@@ -12,6 +12,12 @@
12
12
  "name": {
13
13
  "type": "string"
14
14
  },
15
+ "type_params": {
16
+ "type": "array",
17
+ "items": {
18
+ "$ref": "typeParam.json"
19
+ }
20
+ },
15
21
  "type": {
16
22
  "$ref": "types.json"
17
23
  },
@@ -28,7 +34,7 @@
28
34
  "$ref": "comment.json"
29
35
  }
30
36
  },
31
- "required": ["declaration", "name", "type", "annotations", "location", "comment"]
37
+ "required": ["declaration", "name", "type_params", "type", "annotations", "location", "comment"]
32
38
  },
33
39
  "constant": {
34
40
  "title": "Constant declaration: `VERSION: String`, ...",
@@ -76,21 +82,6 @@
76
82
  },
77
83
  "required": ["declaration", "name", "type", "comment", "location"]
78
84
  },
79
- "moduleTypeParam": {
80
- "type": "object",
81
- "properties": {
82
- "name": {
83
- "type": "string"
84
- },
85
- "variance": {
86
- "enum": ["covariant", "contravariant", "invariant"]
87
- },
88
- "skip_validation": {
89
- "type": "boolean"
90
- }
91
- },
92
- "required": ["name", "variance", "skip_validation"]
93
- },
94
85
  "classMember": {
95
86
  "oneOf": [
96
87
  {
@@ -145,16 +136,10 @@
145
136
  "type": "string"
146
137
  },
147
138
  "type_params": {
148
- "type": "object",
149
- "properties": {
150
- "params": {
151
- "type": "array",
152
- "items": {
153
- "$ref": "#/definitions/moduleTypeParam"
154
- }
155
- }
156
- },
157
- "required": ["params"]
139
+ "type": "array",
140
+ "items": {
141
+ "$ref": "typeParam.json"
142
+ }
158
143
  },
159
144
  "members": {
160
145
  "type": "array",
@@ -209,16 +194,10 @@
209
194
  "type": "string"
210
195
  },
211
196
  "type_params": {
212
- "type": "object",
213
- "properties": {
214
- "params": {
215
- "type": "array",
216
- "items": {
217
- "$ref": "#/definitions/moduleTypeParam"
218
- }
219
- }
220
- },
221
- "required": ["params"]
197
+ "type": "array",
198
+ "items": {
199
+ "$ref": "typeParam.json"
200
+ }
222
201
  },
223
202
  "members": {
224
203
  "type": "array",
@@ -297,16 +276,10 @@
297
276
  "type": "string"
298
277
  },
299
278
  "type_params": {
300
- "type": "object",
301
- "properties": {
302
- "params": {
303
- "type": "array",
304
- "items": {
305
- "$ref": "#/definitions/moduleTypeParam"
306
- }
307
- }
308
- },
309
- "required": ["params"]
279
+ "type": "array",
280
+ "items": {
281
+ "$ref": "typeParam.json"
282
+ }
310
283
  },
311
284
  "members": {
312
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
+ }
data/schema/types.json CHANGED
@@ -106,7 +106,7 @@
106
106
  "required": ["class", "name", "args", "location"]
107
107
  },
108
108
  "alias": {
109
- "title": "Type alias: `u`, `ty`, `json`, ...",
109
+ "title": "Type alias: `u`, `ty`, `json`, `list[Integer]`, ...",
110
110
  "type": "object",
111
111
  "properties": {
112
112
  "class": {
@@ -116,11 +116,17 @@
116
116
  "name": {
117
117
  "type": "string"
118
118
  },
119
+ "args": {
120
+ "type": "array",
121
+ "items": {
122
+ "$ref": "#"
123
+ }
124
+ },
119
125
  "location": {
120
126
  "$ref": "location.json"
121
127
  }
122
128
  },
123
- "required": ["class", "name", "location"]
129
+ "required": ["class", "name", "args", "location"]
124
130
  },
125
131
  "tuple": {
126
132
  "title": "Tuple type: `[Foo, bar]`, ...",
@@ -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,10 +46,14 @@ 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
48
54
 
55
+ def cp_r: (Pathname, Pathname) -> void
56
+
49
57
  def setup!: (revision: String) -> void
50
58
 
51
59
  def need_to_fetch?: (String revision ) -> bool
@@ -60,9 +68,9 @@ module RBS
60
68
 
61
69
  def resolve_revision: () -> String
62
70
 
63
- def git: (*String cmd) -> String
71
+ def git: (*String cmd, **untyped opt) -> String
64
72
 
65
- def sh!: (*String cmd) -> String
73
+ def sh!: (*String cmd, **untyped opt) -> String
66
74
 
67
75
  def format_config_entry: (Config::gem_entry) -> String
68
76
  end
@@ -84,6 +92,8 @@ module RBS
84
92
 
85
93
  def to_lockfile: () -> source_entry
86
94
 
95
+ def manifest_of: (Config::gem_entry) -> manifest_entry?
96
+
87
97
  private
88
98
 
89
99
  def gem_dir: (Config::gem_entry) -> Pathname
@@ -102,6 +112,7 @@ module RBS
102
112
  def versions: (Config::gem_entry) -> Array[String]
103
113
  def install: (dest: Pathname, config_entry: Config::gem_entry, stdout: CLI::_IO) -> void
104
114
  def to_lockfile: () -> source_entry
115
+ def manifest_of: (Config::gem_entry) -> manifest_entry?
105
116
 
106
117
  private
107
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