rbs 1.1.1 → 1.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +34 -0
- data/Rakefile +2 -0
- data/core/array.rbs +1 -1
- data/core/enumerable.rbs +1 -1
- data/core/hash.rbs +13 -5
- data/core/io.rbs +3 -3
- data/core/module.rbs +1 -1
- data/core/numeric.rbs +10 -0
- data/core/proc.rbs +1 -1
- data/core/random.rbs +4 -2
- data/core/range.rbs +2 -2
- data/core/struct.rbs +3 -2
- data/core/thread.rbs +1 -1
- data/docs/CONTRIBUTING.md +5 -3
- data/docs/sigs.md +18 -1
- data/docs/syntax.md +11 -11
- data/lib/rbs.rb +1 -0
- data/lib/rbs/ast/annotation.rb +2 -2
- data/lib/rbs/ast/comment.rb +2 -2
- data/lib/rbs/ast/declarations.rb +37 -22
- data/lib/rbs/ast/members.rb +26 -26
- data/lib/rbs/cli.rb +3 -0
- data/lib/rbs/constant_table.rb +4 -1
- data/lib/rbs/definition.rb +1 -1
- data/lib/rbs/definition_builder.rb +14 -0
- data/lib/rbs/definition_builder/ancestor_builder.rb +1 -0
- data/lib/rbs/definition_builder/method_builder.rb +4 -2
- data/lib/rbs/location.rb +106 -2
- data/lib/rbs/locator.rb +205 -0
- data/lib/rbs/method_type.rb +2 -2
- data/lib/rbs/parser.rb +1050 -713
- data/lib/rbs/parser.y +403 -71
- data/lib/rbs/test/hook.rb +8 -2
- data/lib/rbs/type_name.rb +2 -3
- data/lib/rbs/type_name_resolver.rb +1 -1
- data/lib/rbs/types.rb +36 -34
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +4 -2
- data/sig/annotation.rbs +1 -1
- data/sig/cli.rbs +31 -21
- data/sig/comment.rbs +1 -1
- data/sig/declarations.rbs +106 -21
- data/sig/environment.rbs +2 -2
- data/sig/location.rbs +84 -3
- data/sig/locator.rbs +44 -0
- data/sig/members.rbs +76 -12
- data/sig/method_builder.rbs +1 -1
- data/sig/method_types.rbs +1 -1
- data/sig/polyfill.rbs +13 -8
- data/sig/rbs.rbs +8 -4
- data/sig/typename.rbs +1 -1
- data/sig/types.rbs +60 -19
- data/sig/util.rbs +0 -4
- data/sig/writer.rbs +8 -2
- data/stdlib/rubygems/0/requirement.rbs +84 -2
- data/stdlib/rubygems/0/version.rbs +2 -1
- data/stdlib/shellwords/0/shellwords.rbs +252 -0
- data/steep/Gemfile.lock +16 -13
- metadata +5 -2
data/lib/rbs/ast/declarations.rb
CHANGED
@@ -7,13 +7,28 @@ module RBS
|
|
7
7
|
class ModuleTypeParams
|
8
8
|
attr_reader :params
|
9
9
|
|
10
|
-
TypeParam = _ = Struct.new(:name, :variance, :skip_validation, keyword_init: true) do
|
11
|
-
|
10
|
+
TypeParam = _ = Struct.new(:name, :variance, :skip_validation, :location, keyword_init: true) do
|
11
|
+
# @implements TypeParam
|
12
|
+
|
13
|
+
def to_json(state = _ = nil)
|
12
14
|
{
|
13
15
|
name: name,
|
14
16
|
variance: variance,
|
15
17
|
skip_validation: skip_validation,
|
16
|
-
}.to_json(
|
18
|
+
}.to_json(state)
|
19
|
+
end
|
20
|
+
|
21
|
+
def ==(other)
|
22
|
+
other.is_a?(TypeParam) &&
|
23
|
+
other.name == name &&
|
24
|
+
other.variance == variance &&
|
25
|
+
other.skip_validation == skip_validation
|
26
|
+
end
|
27
|
+
|
28
|
+
alias eql? ==
|
29
|
+
|
30
|
+
def hash
|
31
|
+
self.class.hash ^ name.hash ^ variance.hash ^ skip_validation.hash
|
17
32
|
end
|
18
33
|
end
|
19
34
|
|
@@ -40,10 +55,10 @@ module RBS
|
|
40
55
|
params.find {|p| p.name == name }
|
41
56
|
end
|
42
57
|
|
43
|
-
def to_json(
|
58
|
+
def to_json(state = _ = nil)
|
44
59
|
{
|
45
60
|
params: params
|
46
|
-
}.to_json(
|
61
|
+
}.to_json(state)
|
47
62
|
end
|
48
63
|
|
49
64
|
def each(&block)
|
@@ -80,7 +95,7 @@ module RBS
|
|
80
95
|
ModuleTypeParams.new().tap do |params|
|
81
96
|
names.each.with_index do |new_name, index|
|
82
97
|
param = self.params[index]
|
83
|
-
params.add(TypeParam.new(name: new_name, variance: param.variance, skip_validation: param.skip_validation))
|
98
|
+
params.add(TypeParam.new(name: new_name, variance: param.variance, skip_validation: param.skip_validation, location: param.location))
|
84
99
|
end
|
85
100
|
end
|
86
101
|
end
|
@@ -154,12 +169,12 @@ module RBS
|
|
154
169
|
self.class.hash ^ name.hash ^ args.hash
|
155
170
|
end
|
156
171
|
|
157
|
-
def to_json(
|
172
|
+
def to_json(state = _ = nil)
|
158
173
|
{
|
159
174
|
name: name,
|
160
175
|
args: args,
|
161
176
|
location: location
|
162
|
-
}.to_json(
|
177
|
+
}.to_json(state)
|
163
178
|
end
|
164
179
|
end
|
165
180
|
|
@@ -198,7 +213,7 @@ module RBS
|
|
198
213
|
self.class.hash ^ name.hash ^ type_params.hash ^ super_class.hash ^ members.hash
|
199
214
|
end
|
200
215
|
|
201
|
-
def to_json(
|
216
|
+
def to_json(state = _ = nil)
|
202
217
|
{
|
203
218
|
declaration: :class,
|
204
219
|
name: name,
|
@@ -208,7 +223,7 @@ module RBS
|
|
208
223
|
annotations: annotations,
|
209
224
|
location: location,
|
210
225
|
comment: comment
|
211
|
-
}.to_json(
|
226
|
+
}.to_json(state)
|
212
227
|
end
|
213
228
|
end
|
214
229
|
|
@@ -234,12 +249,12 @@ module RBS
|
|
234
249
|
self.class.hash ^ name.hash ^ args.hash ^ location.hash
|
235
250
|
end
|
236
251
|
|
237
|
-
def to_json(
|
252
|
+
def to_json(state = _ = nil)
|
238
253
|
{
|
239
254
|
name: name,
|
240
255
|
args: args,
|
241
256
|
location: location
|
242
|
-
}.to_json(
|
257
|
+
}.to_json(state)
|
243
258
|
end
|
244
259
|
|
245
260
|
def to_s
|
@@ -286,7 +301,7 @@ module RBS
|
|
286
301
|
self.class.hash ^ name.hash ^ type_params.hash ^ self_types.hash ^ members.hash
|
287
302
|
end
|
288
303
|
|
289
|
-
def to_json(
|
304
|
+
def to_json(state = _ = nil)
|
290
305
|
{
|
291
306
|
declaration: :module,
|
292
307
|
name: name,
|
@@ -296,7 +311,7 @@ module RBS
|
|
296
311
|
annotations: annotations,
|
297
312
|
location: location,
|
298
313
|
comment: comment
|
299
|
-
}.to_json(
|
314
|
+
}.to_json(state)
|
300
315
|
end
|
301
316
|
end
|
302
317
|
|
@@ -332,7 +347,7 @@ module RBS
|
|
332
347
|
self.class.hash ^ type_params.hash ^ members.hash
|
333
348
|
end
|
334
349
|
|
335
|
-
def to_json(
|
350
|
+
def to_json(state = _ = nil)
|
336
351
|
{
|
337
352
|
declaration: :interface,
|
338
353
|
name: name,
|
@@ -341,7 +356,7 @@ module RBS
|
|
341
356
|
annotations: annotations,
|
342
357
|
location: location,
|
343
358
|
comment: comment
|
344
|
-
}.to_json(
|
359
|
+
}.to_json(state)
|
345
360
|
end
|
346
361
|
end
|
347
362
|
|
@@ -372,7 +387,7 @@ module RBS
|
|
372
387
|
self.class.hash ^ name.hash ^ type.hash
|
373
388
|
end
|
374
389
|
|
375
|
-
def to_json(
|
390
|
+
def to_json(state = _ = nil)
|
376
391
|
{
|
377
392
|
declaration: :alias,
|
378
393
|
name: name,
|
@@ -380,7 +395,7 @@ module RBS
|
|
380
395
|
annotations: annotations,
|
381
396
|
location: location,
|
382
397
|
comment: comment
|
383
|
-
}.to_json(
|
398
|
+
}.to_json(state)
|
384
399
|
end
|
385
400
|
end
|
386
401
|
|
@@ -409,14 +424,14 @@ module RBS
|
|
409
424
|
self.class.hash ^ name.hash ^ type.hash
|
410
425
|
end
|
411
426
|
|
412
|
-
def to_json(
|
427
|
+
def to_json(state = _ = nil)
|
413
428
|
{
|
414
429
|
declaration: :constant,
|
415
430
|
name: name,
|
416
431
|
type: type,
|
417
432
|
location: location,
|
418
433
|
comment: comment
|
419
|
-
}.to_json(
|
434
|
+
}.to_json(state)
|
420
435
|
end
|
421
436
|
end
|
422
437
|
|
@@ -445,14 +460,14 @@ module RBS
|
|
445
460
|
self.class.hash ^ name.hash ^ type.hash
|
446
461
|
end
|
447
462
|
|
448
|
-
def to_json(
|
463
|
+
def to_json(state = _ = nil)
|
449
464
|
{
|
450
465
|
declaration: :global,
|
451
466
|
name: name,
|
452
467
|
type: type,
|
453
468
|
location: location,
|
454
469
|
comment: comment
|
455
|
-
}.to_json(
|
470
|
+
}.to_json(state)
|
456
471
|
end
|
457
472
|
end
|
458
473
|
end
|
data/lib/rbs/ast/members.rb
CHANGED
@@ -61,7 +61,7 @@ module RBS
|
|
61
61
|
)
|
62
62
|
end
|
63
63
|
|
64
|
-
def to_json(
|
64
|
+
def to_json(state = _ = nil)
|
65
65
|
{
|
66
66
|
member: :method_definition,
|
67
67
|
kind: kind,
|
@@ -70,7 +70,7 @@ module RBS
|
|
70
70
|
location: location,
|
71
71
|
comment: comment,
|
72
72
|
overload: overload
|
73
|
-
}.to_json(
|
73
|
+
}.to_json(state)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -101,42 +101,42 @@ module RBS
|
|
101
101
|
class InstanceVariable < Base
|
102
102
|
include Var
|
103
103
|
|
104
|
-
def to_json(
|
104
|
+
def to_json(state = _ = nil)
|
105
105
|
{
|
106
106
|
member: :instance_variable,
|
107
107
|
name: name,
|
108
108
|
type: type,
|
109
109
|
location: location,
|
110
110
|
comment: comment
|
111
|
-
}.to_json(
|
111
|
+
}.to_json(state)
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
115
|
class ClassInstanceVariable < Base
|
116
116
|
include Var
|
117
117
|
|
118
|
-
def to_json(
|
118
|
+
def to_json(state = _ = nil)
|
119
119
|
{
|
120
120
|
member: :class_instance_variable,
|
121
121
|
name: name,
|
122
122
|
type: type,
|
123
123
|
location: location,
|
124
124
|
comment: comment
|
125
|
-
}.to_json(
|
125
|
+
}.to_json(state)
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
129
|
class ClassVariable < Base
|
130
130
|
include Var
|
131
131
|
|
132
|
-
def to_json(
|
132
|
+
def to_json(state = _ = nil)
|
133
133
|
{
|
134
134
|
member: :class_variable,
|
135
135
|
name: name,
|
136
136
|
type: type,
|
137
137
|
location: location,
|
138
138
|
comment: comment
|
139
|
-
}.to_json(
|
139
|
+
}.to_json(state)
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
@@ -171,7 +171,7 @@ module RBS
|
|
171
171
|
class Include < Base
|
172
172
|
include Mixin
|
173
173
|
|
174
|
-
def to_json(
|
174
|
+
def to_json(state = _ = nil)
|
175
175
|
{
|
176
176
|
member: :include,
|
177
177
|
name: name,
|
@@ -179,14 +179,14 @@ module RBS
|
|
179
179
|
annotations: annotations,
|
180
180
|
location: location,
|
181
181
|
comment: comment
|
182
|
-
}.to_json(
|
182
|
+
}.to_json(state)
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
186
186
|
class Extend < Base
|
187
187
|
include Mixin
|
188
188
|
|
189
|
-
def to_json(
|
189
|
+
def to_json(state = _ = nil)
|
190
190
|
{
|
191
191
|
member: :extend,
|
192
192
|
name: name,
|
@@ -194,14 +194,14 @@ module RBS
|
|
194
194
|
annotations: annotations,
|
195
195
|
location: location,
|
196
196
|
comment: comment
|
197
|
-
}.to_json(
|
197
|
+
}.to_json(state)
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
201
201
|
class Prepend < Base
|
202
202
|
include Mixin
|
203
203
|
|
204
|
-
def to_json(
|
204
|
+
def to_json(state = _ = nil)
|
205
205
|
{
|
206
206
|
member: :prepend,
|
207
207
|
name: name,
|
@@ -209,7 +209,7 @@ module RBS
|
|
209
209
|
annotations: annotations,
|
210
210
|
location: location,
|
211
211
|
comment: comment
|
212
|
-
}.to_json(
|
212
|
+
}.to_json(state)
|
213
213
|
end
|
214
214
|
end
|
215
215
|
|
@@ -263,7 +263,7 @@ module RBS
|
|
263
263
|
class AttrReader < Base
|
264
264
|
include Attribute
|
265
265
|
|
266
|
-
def to_json(
|
266
|
+
def to_json(state = _ = nil)
|
267
267
|
{
|
268
268
|
member: :attr_reader,
|
269
269
|
name: name,
|
@@ -273,14 +273,14 @@ module RBS
|
|
273
273
|
annotations: annotations,
|
274
274
|
location: location,
|
275
275
|
comment: comment
|
276
|
-
}.to_json(
|
276
|
+
}.to_json(state)
|
277
277
|
end
|
278
278
|
end
|
279
279
|
|
280
280
|
class AttrAccessor < Base
|
281
281
|
include Attribute
|
282
282
|
|
283
|
-
def to_json(
|
283
|
+
def to_json(state = _ = nil)
|
284
284
|
{
|
285
285
|
member: :attr_accessor,
|
286
286
|
name: name,
|
@@ -290,14 +290,14 @@ module RBS
|
|
290
290
|
annotations: annotations,
|
291
291
|
location: location,
|
292
292
|
comment: comment
|
293
|
-
}.to_json(
|
293
|
+
}.to_json(state)
|
294
294
|
end
|
295
295
|
end
|
296
296
|
|
297
297
|
class AttrWriter < Base
|
298
298
|
include Attribute
|
299
299
|
|
300
|
-
def to_json(
|
300
|
+
def to_json(state = _ = nil)
|
301
301
|
{
|
302
302
|
member: :attr_writer,
|
303
303
|
name: name,
|
@@ -307,7 +307,7 @@ module RBS
|
|
307
307
|
annotations: annotations,
|
308
308
|
location: location,
|
309
309
|
comment: comment
|
310
|
-
}.to_json(
|
310
|
+
}.to_json(state)
|
311
311
|
end
|
312
312
|
end
|
313
313
|
|
@@ -332,16 +332,16 @@ module RBS
|
|
332
332
|
class Public < Base
|
333
333
|
include LocationOnly
|
334
334
|
|
335
|
-
def to_json(
|
336
|
-
{ member: :public, location: location }.to_json(
|
335
|
+
def to_json(state = _ = nil)
|
336
|
+
{ member: :public, location: location }.to_json(state)
|
337
337
|
end
|
338
338
|
end
|
339
339
|
|
340
340
|
class Private < Base
|
341
341
|
include LocationOnly
|
342
342
|
|
343
|
-
def to_json(
|
344
|
-
{ member: :private, location: location }.to_json(
|
343
|
+
def to_json(state = _ = nil)
|
344
|
+
{ member: :private, location: location }.to_json(state)
|
345
345
|
end
|
346
346
|
end
|
347
347
|
|
@@ -375,7 +375,7 @@ module RBS
|
|
375
375
|
self.class.hash ^ new_name.hash ^ old_name.hash ^ kind.hash
|
376
376
|
end
|
377
377
|
|
378
|
-
def to_json(
|
378
|
+
def to_json(state = _ = nil)
|
379
379
|
{
|
380
380
|
member: :alias,
|
381
381
|
new_name: new_name,
|
@@ -384,7 +384,7 @@ module RBS
|
|
384
384
|
annotations: annotations,
|
385
385
|
location: location,
|
386
386
|
comment: comment
|
387
|
-
}.to_json(
|
387
|
+
}.to_json(state)
|
388
388
|
end
|
389
389
|
|
390
390
|
def instance?
|
data/lib/rbs/cli.rb
CHANGED
@@ -816,9 +816,12 @@ EOB
|
|
816
816
|
'RBS_TEST_TARGET' => (targets.join(',') unless targets.empty?)
|
817
817
|
}
|
818
818
|
|
819
|
+
# @type var out: String
|
820
|
+
# @type var err: String
|
819
821
|
out, err, status = Open3.capture3(env_hash, *args)
|
820
822
|
stdout.print(out)
|
821
823
|
stderr.print(err)
|
824
|
+
|
822
825
|
status
|
823
826
|
end
|
824
827
|
end
|
data/lib/rbs/constant_table.rb
CHANGED
@@ -56,7 +56,10 @@ module RBS
|
|
56
56
|
name_to_constant(TypeName.new(name: head, namespace: Namespace.root))
|
57
57
|
else
|
58
58
|
resolve_constant_reference_context(head, context: context) ||
|
59
|
-
|
59
|
+
context.first.yield_self do |first_contet|
|
60
|
+
raise unless first_contet
|
61
|
+
resolve_constant_reference_inherit(head, scopes: constant_scopes(first_contet.to_type_name))
|
62
|
+
end
|
60
63
|
end
|
61
64
|
|
62
65
|
tail.inject(head_constant) do |constant, name|
|
data/lib/rbs/definition.rb
CHANGED
@@ -746,6 +746,20 @@ module RBS
|
|
746
746
|
end
|
747
747
|
)
|
748
748
|
end
|
749
|
+
|
750
|
+
defs = method.defs.map do |defn|
|
751
|
+
defn.update(
|
752
|
+
type: sub.empty? ? defn.type : defn.type.sub(sub),
|
753
|
+
implemented_in: case implemented_in
|
754
|
+
when :keep
|
755
|
+
defn.implemented_in
|
756
|
+
when nil
|
757
|
+
nil
|
758
|
+
else
|
759
|
+
implemented_in
|
760
|
+
end
|
761
|
+
)
|
762
|
+
end
|
749
763
|
end
|
750
764
|
|
751
765
|
super_method = methods[name]
|
@@ -508,6 +508,7 @@ module RBS
|
|
508
508
|
included_interfaces = one_ancestors.included_interfaces or raise
|
509
509
|
included_interfaces.each do |a|
|
510
510
|
included_ancestors = interface_ancestors(a.name, building_ancestors: building_ancestors)
|
511
|
+
|
511
512
|
ancestors.unshift(*included_ancestors.apply(a.args, location: entry.decl.location))
|
512
513
|
end
|
513
514
|
|