rbs 3.10.4 → 4.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.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +7 -5
- data/.github/workflows/comments.yml +2 -2
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +16 -26
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +1 -1
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +2 -2
- data/.vscode/extensions.json +5 -0
- data/.vscode/settings.json +19 -0
- data/CHANGELOG.md +202 -2
- data/Rakefile +9 -23
- data/Steepfile +2 -0
- data/config.yml +457 -13
- data/core/array.rbs +218 -188
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/class.rbs +6 -5
- data/core/comparable.rbs +45 -31
- data/core/complex.rbs +66 -55
- data/core/dir.rbs +57 -45
- data/core/encoding.rbs +6 -6
- data/core/enumerable.rbs +105 -91
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +24 -3
- data/core/errno.rbs +3 -2
- data/core/errors.rbs +31 -29
- data/core/exception.rbs +12 -12
- data/core/fiber.rbs +47 -36
- data/core/file.rbs +242 -169
- data/core/file_test.rbs +2 -2
- data/core/float.rbs +42 -68
- data/core/gc.rbs +78 -70
- data/core/hash.rbs +70 -60
- data/core/integer.rbs +32 -75
- data/core/io/buffer.rbs +36 -36
- data/core/io/wait.rbs +7 -7
- data/core/io.rbs +192 -146
- data/core/kernel.rbs +198 -147
- data/core/marshal.rbs +3 -3
- data/core/match_data.rbs +14 -12
- data/core/math.rbs +69 -67
- data/core/method.rbs +6 -8
- data/core/module.rbs +148 -88
- data/core/nil_class.rbs +4 -3
- data/core/numeric.rbs +53 -50
- data/core/object.rbs +6 -8
- data/core/object_space.rbs +11 -10
- data/core/pathname.rbs +131 -81
- data/core/proc.rbs +65 -34
- data/core/process.rbs +221 -201
- data/core/ractor.rbs +15 -11
- data/core/random.rbs +21 -3
- data/core/range.rbs +152 -49
- data/core/rational.rbs +5 -56
- data/core/rbs/unnamed/argf.rbs +58 -51
- data/core/rbs/unnamed/env_class.rbs +18 -13
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +7 -116
- data/core/regexp.rbs +236 -197
- data/core/ruby.rbs +1 -1
- data/core/ruby_vm.rbs +32 -30
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +1 -1
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +5 -3
- data/core/set.rbs +17 -16
- data/core/signal.rbs +2 -2
- data/core/string.rbs +318 -298
- data/core/struct.rbs +26 -25
- data/core/symbol.rbs +25 -24
- data/core/thread.rbs +40 -41
- data/core/time.rbs +47 -42
- data/core/trace_point.rbs +34 -31
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +10 -10
- data/core/warning.rbs +7 -7
- data/docs/collection.md +1 -1
- data/docs/config.md +171 -0
- data/docs/inline.md +576 -0
- data/docs/syntax.md +46 -16
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +595 -98
- data/ext/rbs_extension/class_constants.c +30 -0
- data/ext/rbs_extension/class_constants.h +15 -0
- data/ext/rbs_extension/legacy_location.c +30 -53
- data/ext/rbs_extension/legacy_location.h +37 -0
- data/ext/rbs_extension/main.c +125 -24
- data/include/rbs/ast.h +485 -150
- data/include/rbs/lexer.h +11 -4
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +20 -2
- data/include/rbs/util/rbs_constant_pool.h +0 -3
- data/include/rbs.h +8 -0
- data/lib/rbs/ast/annotation.rb +1 -1
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/ast/declarations.rb +10 -10
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +409 -0
- data/lib/rbs/ast/ruby/comment_block.rb +245 -0
- data/lib/rbs/ast/ruby/declarations.rb +281 -0
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/lib/rbs/ast/ruby/members.rb +723 -0
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +105 -20
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +62 -125
- data/lib/rbs/cli.rb +55 -23
- data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
- data/lib/rbs/collection/sources/git.rb +1 -0
- data/lib/rbs/collection.rb +0 -1
- data/lib/rbs/definition.rb +6 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +119 -63
- data/lib/rbs/definition_builder/method_builder.rb +65 -30
- data/lib/rbs/definition_builder.rb +177 -20
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment/class_entry.rb +69 -0
- data/lib/rbs/environment/module_entry.rb +66 -0
- data/lib/rbs/environment.rb +338 -155
- data/lib/rbs/environment_loader.rb +2 -2
- data/lib/rbs/errors.rb +30 -20
- data/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/lib/rbs/inline_parser.rb +542 -0
- data/lib/rbs/location_aux.rb +36 -4
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/namespace.rb +0 -7
- data/lib/rbs/parser_aux.rb +31 -8
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +3 -20
- data/lib/rbs/prototype/runtime.rb +10 -2
- data/lib/rbs/resolver/type_name_resolver.rb +0 -8
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +4 -3
- data/lib/rbs/test/type_check.rb +5 -2
- data/lib/rbs/type_name.rb +1 -8
- data/lib/rbs/types.rb +88 -78
- data/lib/rbs/unit_test/convertibles.rb +1 -0
- data/lib/rbs/unit_test/type_assertions.rb +35 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +12 -1
- data/rbs.gemspec +3 -2
- data/rust/.gitignore +1 -0
- data/rust/Cargo.lock +378 -0
- data/rust/Cargo.toml +7 -0
- data/rust/ruby-rbs/Cargo.toml +22 -0
- data/rust/ruby-rbs/build.rs +764 -0
- data/rust/ruby-rbs/examples/locations.rs +60 -0
- data/rust/ruby-rbs/src/lib.rs +1 -0
- data/rust/ruby-rbs/src/node/mod.rs +742 -0
- data/rust/ruby-rbs/tests/sanity.rs +47 -0
- data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
- data/rust/ruby-rbs-sys/Cargo.toml +23 -0
- data/rust/ruby-rbs-sys/build.rs +204 -0
- data/rust/ruby-rbs-sys/src/lib.rs +50 -0
- data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
- data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
- data/rust/ruby-rbs-sys/wrapper.h +1 -0
- data/schema/typeParam.json +17 -1
- data/sig/ancestor_builder.rbs +1 -1
- data/sig/ast/ruby/annotations.rbs +421 -0
- data/sig/ast/ruby/comment_block.rbs +127 -0
- data/sig/ast/ruby/declarations.rbs +158 -0
- data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/sig/ast/ruby/members.rbs +178 -0
- data/sig/buffer.rbs +63 -5
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -0
- data/sig/definition_builder.rbs +3 -1
- data/sig/environment/class_entry.rbs +50 -0
- data/sig/environment/module_entry.rbs +50 -0
- data/sig/environment.rbs +37 -81
- data/sig/errors.rbs +26 -20
- data/sig/inline_parser/comment_association.rbs +71 -0
- data/sig/inline_parser.rbs +124 -0
- data/sig/location.rbs +32 -7
- data/sig/locator.rbs +0 -2
- data/sig/method_builder.rbs +9 -4
- data/sig/namespace.rbs +0 -5
- data/sig/parser.rbs +47 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +0 -3
- data/sig/source.rbs +48 -0
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +0 -5
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +491 -143
- data/src/lexer.c +1552 -1314
- data/src/lexer.re +7 -0
- data/src/lexstate.c +8 -1
- data/src/location.c +8 -48
- data/src/parser.c +1107 -409
- data/src/util/rbs_constant_pool.c +0 -4
- data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
- data/stdlib/cgi-escape/0/escape.rbs +4 -4
- data/stdlib/coverage/0/coverage.rbs +4 -3
- data/stdlib/date/0/date.rbs +33 -28
- data/stdlib/date/0/date_time.rbs +24 -23
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +64 -53
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +140 -126
- data/stdlib/forwardable/0/forwardable.rbs +10 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +158 -131
- data/stdlib/monitor/0/monitor.rbs +3 -3
- data/stdlib/net-http/0/net-http.rbs +159 -134
- data/stdlib/objspace/0/objspace.rbs +8 -30
- data/stdlib/open-uri/0/open-uri.rbs +8 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +144 -129
- data/stdlib/optparse/0/optparse.rbs +23 -14
- data/stdlib/pathname/0/pathname.rbs +2 -2
- data/stdlib/pp/0/pp.rbs +9 -8
- data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
- data/stdlib/pstore/0/pstore.rbs +35 -30
- data/stdlib/psych/0/psych.rbs +62 -9
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +2 -1
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/ripper/0/ripper.rbs +20 -17
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +2 -2
- data/stdlib/socket/0/addrinfo.rbs +9 -9
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +10 -9
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +1 -1
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +55 -54
- data/stdlib/strscan/0/string_scanner.rbs +46 -44
- data/stdlib/tempfile/0/tempfile.rbs +24 -20
- data/stdlib/time/0/time.rbs +7 -5
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +31 -18
- data/stdlib/uri/0/file.rbs +2 -2
- data/stdlib/uri/0/generic.rbs +9 -2
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/ldap.rbs +2 -2
- data/stdlib/uri/0/mailto.rbs +3 -3
- data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_reader.rbs +6 -6
- data/stdlib/zlib/0/gzip_writer.rbs +14 -12
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- metadata +66 -3
data/lib/rbs/types.rb
CHANGED
|
@@ -61,7 +61,7 @@ module RBS
|
|
|
61
61
|
include EmptyEachType
|
|
62
62
|
include NoTypeName
|
|
63
63
|
|
|
64
|
-
def to_json(state =
|
|
64
|
+
def to_json(state = nil)
|
|
65
65
|
klass = to_s.to_sym
|
|
66
66
|
{ class: klass, location: location }.to_json(state)
|
|
67
67
|
end
|
|
@@ -157,7 +157,7 @@ module RBS
|
|
|
157
157
|
end
|
|
158
158
|
end
|
|
159
159
|
|
|
160
|
-
def to_json(state =
|
|
160
|
+
def to_json(state = nil)
|
|
161
161
|
{ class: :variable, name: name, location: location }.to_json(state)
|
|
162
162
|
end
|
|
163
163
|
|
|
@@ -199,58 +199,6 @@ module RBS
|
|
|
199
199
|
end
|
|
200
200
|
end
|
|
201
201
|
|
|
202
|
-
class ClassSingleton
|
|
203
|
-
attr_reader :name
|
|
204
|
-
attr_reader :location
|
|
205
|
-
|
|
206
|
-
def initialize(name:, location:)
|
|
207
|
-
@name = name
|
|
208
|
-
@location = location
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
def ==(other)
|
|
212
|
-
other.is_a?(ClassSingleton) && other.name == name
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
alias eql? ==
|
|
216
|
-
|
|
217
|
-
def hash
|
|
218
|
-
self.class.hash ^ name.hash
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
include NoFreeVariables
|
|
222
|
-
include NoSubst
|
|
223
|
-
|
|
224
|
-
def to_json(state = _ = nil)
|
|
225
|
-
{ class: :class_singleton, name: name, location: location }.to_json(state)
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
def to_s(level = 0)
|
|
229
|
-
"singleton(#{name})"
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
include EmptyEachType
|
|
233
|
-
|
|
234
|
-
def map_type_name(&)
|
|
235
|
-
ClassSingleton.new(
|
|
236
|
-
name: yield(name, location, self),
|
|
237
|
-
location: location
|
|
238
|
-
)
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
def has_self_type?
|
|
242
|
-
false
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
def has_classish_type?
|
|
246
|
-
false
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
def with_nonreturn_void?
|
|
250
|
-
false
|
|
251
|
-
end
|
|
252
|
-
end
|
|
253
|
-
|
|
254
202
|
module Application
|
|
255
203
|
attr_reader :name
|
|
256
204
|
attr_reader :args
|
|
@@ -303,12 +251,74 @@ module RBS
|
|
|
303
251
|
# `void` in immediate generics parameter is allowed
|
|
304
252
|
false
|
|
305
253
|
else
|
|
306
|
-
type.with_nonreturn_void?
|
|
254
|
+
type.with_nonreturn_void? # steep:ignore DeprecatedReference
|
|
307
255
|
end
|
|
308
256
|
end
|
|
309
257
|
end
|
|
310
258
|
end
|
|
311
259
|
|
|
260
|
+
class ClassSingleton
|
|
261
|
+
attr_reader :location
|
|
262
|
+
|
|
263
|
+
include Application
|
|
264
|
+
|
|
265
|
+
def initialize(name:, location:, args: [])
|
|
266
|
+
@name = name
|
|
267
|
+
@location = location
|
|
268
|
+
@args = args
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def ==(other)
|
|
272
|
+
other.is_a?(ClassSingleton) && other.name == name && other.args == args
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
alias eql? ==
|
|
276
|
+
|
|
277
|
+
def hash
|
|
278
|
+
self.class.hash ^ name.hash ^ args.hash
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def sub(s)
|
|
282
|
+
return self if s.empty?
|
|
283
|
+
|
|
284
|
+
self.class.new(name: name,
|
|
285
|
+
args: args.map {|ty| ty.sub(s) },
|
|
286
|
+
location: location)
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
def to_json(state = _ = nil)
|
|
290
|
+
{ class: :class_singleton, name: name, args: args, location: location }.to_json(state)
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def to_s(level = 0)
|
|
294
|
+
if args.empty?
|
|
295
|
+
"singleton(#{name})"
|
|
296
|
+
else
|
|
297
|
+
"singleton(#{name})[#{args.join(", ")}]"
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def map_type_name(&block)
|
|
302
|
+
ClassSingleton.new(
|
|
303
|
+
name: yield(name, location, self),
|
|
304
|
+
args: args.map {|type| type.map_type_name(&block) },
|
|
305
|
+
location: location
|
|
306
|
+
)
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def map_type(&block)
|
|
310
|
+
if block
|
|
311
|
+
ClassSingleton.new(
|
|
312
|
+
name: name,
|
|
313
|
+
args: args.map {|type| yield type },
|
|
314
|
+
location: location
|
|
315
|
+
)
|
|
316
|
+
else
|
|
317
|
+
enum_for :map_type
|
|
318
|
+
end
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
|
|
312
322
|
class Interface
|
|
313
323
|
attr_reader :location
|
|
314
324
|
|
|
@@ -320,7 +330,7 @@ module RBS
|
|
|
320
330
|
@location = location
|
|
321
331
|
end
|
|
322
332
|
|
|
323
|
-
def to_json(state =
|
|
333
|
+
def to_json(state = nil)
|
|
324
334
|
{ class: :interface, name: name, args: args, location: location }.to_json(state)
|
|
325
335
|
end
|
|
326
336
|
|
|
@@ -364,7 +374,7 @@ module RBS
|
|
|
364
374
|
@location = location
|
|
365
375
|
end
|
|
366
376
|
|
|
367
|
-
def to_json(state =
|
|
377
|
+
def to_json(state = nil)
|
|
368
378
|
{ class: :class_instance, name: name, args: args, location: location }.to_json(state)
|
|
369
379
|
end
|
|
370
380
|
|
|
@@ -408,7 +418,7 @@ module RBS
|
|
|
408
418
|
@location = location
|
|
409
419
|
end
|
|
410
420
|
|
|
411
|
-
def to_json(state =
|
|
421
|
+
def to_json(state = nil)
|
|
412
422
|
{ class: :alias, name: name, args: args, location: location }.to_json(state)
|
|
413
423
|
end
|
|
414
424
|
|
|
@@ -466,7 +476,7 @@ module RBS
|
|
|
466
476
|
end
|
|
467
477
|
end
|
|
468
478
|
|
|
469
|
-
def to_json(state =
|
|
479
|
+
def to_json(state = nil)
|
|
470
480
|
{ class: :tuple, types: types, location: location }.to_json(state)
|
|
471
481
|
end
|
|
472
482
|
|
|
@@ -520,7 +530,7 @@ module RBS
|
|
|
520
530
|
end
|
|
521
531
|
|
|
522
532
|
def with_nonreturn_void?
|
|
523
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
533
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
524
534
|
end
|
|
525
535
|
end
|
|
526
536
|
|
|
@@ -573,7 +583,7 @@ module RBS
|
|
|
573
583
|
end
|
|
574
584
|
end
|
|
575
585
|
|
|
576
|
-
def to_json(state =
|
|
586
|
+
def to_json(state = nil)
|
|
577
587
|
{ class: :record, fields: fields, optional_fields: optional_fields, location: location }.to_json(state)
|
|
578
588
|
end
|
|
579
589
|
|
|
@@ -638,7 +648,7 @@ module RBS
|
|
|
638
648
|
end
|
|
639
649
|
|
|
640
650
|
def with_nonreturn_void?
|
|
641
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
651
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
642
652
|
end
|
|
643
653
|
end
|
|
644
654
|
|
|
@@ -665,7 +675,7 @@ module RBS
|
|
|
665
675
|
type.free_variables(set)
|
|
666
676
|
end
|
|
667
677
|
|
|
668
|
-
def to_json(state =
|
|
678
|
+
def to_json(state = nil)
|
|
669
679
|
{ class: :optional, type: type, location: location }.to_json(state)
|
|
670
680
|
end
|
|
671
681
|
|
|
@@ -724,7 +734,7 @@ module RBS
|
|
|
724
734
|
end
|
|
725
735
|
|
|
726
736
|
def with_nonreturn_void?
|
|
727
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
737
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
728
738
|
end
|
|
729
739
|
end
|
|
730
740
|
|
|
@@ -755,7 +765,7 @@ module RBS
|
|
|
755
765
|
end
|
|
756
766
|
end
|
|
757
767
|
|
|
758
|
-
def to_json(state =
|
|
768
|
+
def to_json(state = nil)
|
|
759
769
|
{ class: :union, types: types, location: location }.to_json(state)
|
|
760
770
|
end
|
|
761
771
|
|
|
@@ -815,7 +825,7 @@ module RBS
|
|
|
815
825
|
end
|
|
816
826
|
|
|
817
827
|
def with_nonreturn_void?
|
|
818
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
828
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
819
829
|
end
|
|
820
830
|
end
|
|
821
831
|
|
|
@@ -846,7 +856,7 @@ module RBS
|
|
|
846
856
|
end
|
|
847
857
|
end
|
|
848
858
|
|
|
849
|
-
def to_json(state =
|
|
859
|
+
def to_json(state = nil)
|
|
850
860
|
{ class: :intersection, types: types, location: location }.to_json(state)
|
|
851
861
|
end
|
|
852
862
|
|
|
@@ -898,7 +908,7 @@ module RBS
|
|
|
898
908
|
end
|
|
899
909
|
|
|
900
910
|
def with_nonreturn_void?
|
|
901
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
911
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
902
912
|
end
|
|
903
913
|
end
|
|
904
914
|
|
|
@@ -932,7 +942,7 @@ module RBS
|
|
|
932
942
|
end
|
|
933
943
|
end
|
|
934
944
|
|
|
935
|
-
def to_json(state =
|
|
945
|
+
def to_json(state = nil)
|
|
936
946
|
{ type: type, name: name }.to_json(state)
|
|
937
947
|
end
|
|
938
948
|
|
|
@@ -1091,7 +1101,7 @@ module RBS
|
|
|
1091
1101
|
end
|
|
1092
1102
|
end
|
|
1093
1103
|
|
|
1094
|
-
def to_json(state =
|
|
1104
|
+
def to_json(state = nil)
|
|
1095
1105
|
{
|
|
1096
1106
|
required_positionals: required_positionals,
|
|
1097
1107
|
optional_positionals: optional_positionals,
|
|
@@ -1226,13 +1236,13 @@ module RBS
|
|
|
1226
1236
|
end
|
|
1227
1237
|
|
|
1228
1238
|
def with_nonreturn_void?
|
|
1229
|
-
if each_param.any? {|param| param.type.with_nonreturn_void? }
|
|
1239
|
+
if each_param.any? {|param| param.type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
1230
1240
|
true
|
|
1231
1241
|
else
|
|
1232
1242
|
if return_type.is_a?(Bases::Void)
|
|
1233
1243
|
false
|
|
1234
1244
|
else
|
|
1235
|
-
return_type.with_nonreturn_void?
|
|
1245
|
+
return_type.with_nonreturn_void? # steep:ignore DeprecatedReference
|
|
1236
1246
|
end
|
|
1237
1247
|
end
|
|
1238
1248
|
end
|
|
@@ -1279,7 +1289,7 @@ module RBS
|
|
|
1279
1289
|
end
|
|
1280
1290
|
end
|
|
1281
1291
|
|
|
1282
|
-
def to_json(state =
|
|
1292
|
+
def to_json(state = nil)
|
|
1283
1293
|
{
|
|
1284
1294
|
return_type: return_type
|
|
1285
1295
|
}.to_json(state)
|
|
@@ -1355,7 +1365,7 @@ module RBS
|
|
|
1355
1365
|
other.self_type == self_type
|
|
1356
1366
|
end
|
|
1357
1367
|
|
|
1358
|
-
def to_json(state =
|
|
1368
|
+
def to_json(state = nil)
|
|
1359
1369
|
{
|
|
1360
1370
|
type: type,
|
|
1361
1371
|
required: required,
|
|
@@ -1424,7 +1434,7 @@ module RBS
|
|
|
1424
1434
|
set
|
|
1425
1435
|
end
|
|
1426
1436
|
|
|
1427
|
-
def to_json(state =
|
|
1437
|
+
def to_json(state = nil)
|
|
1428
1438
|
{
|
|
1429
1439
|
class: :proc,
|
|
1430
1440
|
type: type,
|
|
@@ -1505,11 +1515,11 @@ module RBS
|
|
|
1505
1515
|
end
|
|
1506
1516
|
|
|
1507
1517
|
def with_nonreturn_void?
|
|
1508
|
-
if type.with_nonreturn_void? || self_type&.with_nonreturn_void?
|
|
1518
|
+
if type.with_nonreturn_void? || self_type&.with_nonreturn_void? # steep:ignore DeprecatedReference
|
|
1509
1519
|
true
|
|
1510
1520
|
else
|
|
1511
1521
|
if block = block()
|
|
1512
|
-
block.type.with_nonreturn_void? || block.self_type&.with_nonreturn_void? || false
|
|
1522
|
+
block.type.with_nonreturn_void? || block.self_type&.with_nonreturn_void? || false # steep:ignore DeprecatedReference
|
|
1513
1523
|
else
|
|
1514
1524
|
false
|
|
1515
1525
|
end
|
|
@@ -1541,7 +1551,7 @@ module RBS
|
|
|
1541
1551
|
include EmptyEachType
|
|
1542
1552
|
include NoTypeName
|
|
1543
1553
|
|
|
1544
|
-
def to_json(state =
|
|
1554
|
+
def to_json(state = nil)
|
|
1545
1555
|
{ class: :literal, literal: literal.inspect, location: location }.to_json(state)
|
|
1546
1556
|
end
|
|
1547
1557
|
|
|
@@ -192,6 +192,31 @@ module RBS
|
|
|
192
192
|
end
|
|
193
193
|
end
|
|
194
194
|
|
|
195
|
+
ruby2_keywords def assert_send_type_error(method_type, error_type, receiver, method, *args, &block)
|
|
196
|
+
send_setup(method_type, receiver, method, args, block) do |method_type, trace, result, exception|
|
|
197
|
+
typecheck = RBS::Test::TypeCheck.new(
|
|
198
|
+
self_class: receiver.class,
|
|
199
|
+
builder: builder,
|
|
200
|
+
sample_size: 100,
|
|
201
|
+
unchecked_classes: [],
|
|
202
|
+
instance_class: instance_class,
|
|
203
|
+
class_class: class_class
|
|
204
|
+
)
|
|
205
|
+
errors = typecheck.method_call(method, method_type, trace, errors: [])
|
|
206
|
+
|
|
207
|
+
assert_empty errors.map {|x| RBS::Test::Errors.to_string(x) }, "Call trace does not match with given method type: #{trace.inspect}"
|
|
208
|
+
|
|
209
|
+
method_defs = method_defs(method)
|
|
210
|
+
all_errors = method_defs.map {|t| typecheck.method_call(method, t.type, trace, errors: [], annotations: t.each_annotation.to_a) }
|
|
211
|
+
assert all_errors.any? {|es| es.empty? }, "Call trace does not match one of method definitions:\n #{trace.inspect}\n #{method_defs.map(&:type).join(" | ")}"
|
|
212
|
+
|
|
213
|
+
# Use `instnace_of?` instead of `is_a?` as we want to check for _the exact exception class_.
|
|
214
|
+
assert exception.instance_of? error_type
|
|
215
|
+
|
|
216
|
+
result
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
195
220
|
ruby2_keywords def refute_send_type(method_type, receiver, method, *args, &block)
|
|
196
221
|
send_setup(method_type, receiver, method, args, block) do |method_type, trace, result, exception|
|
|
197
222
|
method_type = method_type.update(
|
|
@@ -231,15 +256,17 @@ module RBS
|
|
|
231
256
|
type, definition = target
|
|
232
257
|
|
|
233
258
|
case type
|
|
234
|
-
when Types::ClassInstance
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
259
|
+
when Types::ClassInstance, Types::ClassSingleton
|
|
260
|
+
if type.is_a?(Types::ClassSingleton) && type.args.empty?
|
|
261
|
+
definition.methods[method].defs
|
|
262
|
+
else
|
|
263
|
+
subst = RBS::Substitution.build(definition.type_params, type.args)
|
|
264
|
+
definition.methods[method].defs.map do |type_def|
|
|
265
|
+
type_def.update(
|
|
266
|
+
type: type_def.type.sub(subst)
|
|
267
|
+
)
|
|
268
|
+
end
|
|
240
269
|
end
|
|
241
|
-
when Types::ClassSingleton
|
|
242
|
-
definition.methods[method].defs
|
|
243
270
|
else
|
|
244
271
|
raise
|
|
245
272
|
end
|
data/lib/rbs/validator.rb
CHANGED
|
@@ -127,8 +127,8 @@ module RBS
|
|
|
127
127
|
# @type var each_child: ^(Symbol) { (Symbol) -> void } -> void
|
|
128
128
|
each_child = -> (name, &block) do
|
|
129
129
|
if param = params.find {|p| p.name == name }
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
[param.upper_bound_type, param.lower_bound_type].compact.each do |bound|
|
|
131
|
+
bound.free_variables.each do |tv|
|
|
132
132
|
block[tv]
|
|
133
133
|
end
|
|
134
134
|
end
|
data/lib/rbs/version.rb
CHANGED
data/lib/rbs.rb
CHANGED
|
@@ -6,10 +6,10 @@ require "set"
|
|
|
6
6
|
require "json"
|
|
7
7
|
require "pathname" unless defined?(Pathname)
|
|
8
8
|
require "pp"
|
|
9
|
-
require "ripper"
|
|
10
9
|
require "logger"
|
|
11
10
|
require "tsort"
|
|
12
11
|
require "strscan"
|
|
12
|
+
require "prism"
|
|
13
13
|
|
|
14
14
|
require "rbs/errors"
|
|
15
15
|
require "rbs/buffer"
|
|
@@ -24,8 +24,19 @@ require "rbs/ast/declarations"
|
|
|
24
24
|
require "rbs/ast/members"
|
|
25
25
|
require "rbs/ast/annotation"
|
|
26
26
|
require "rbs/ast/visitor"
|
|
27
|
+
require "rbs/ast/ruby/comment_block"
|
|
28
|
+
require "rbs/ast/ruby/helpers/constant_helper"
|
|
29
|
+
require "rbs/ast/ruby/helpers/location_helper"
|
|
30
|
+
require "rbs/ast/ruby/annotations"
|
|
31
|
+
require "rbs/ast/ruby/declarations"
|
|
32
|
+
require "rbs/ast/ruby/members"
|
|
33
|
+
require "rbs/source"
|
|
34
|
+
require "rbs/inline_parser"
|
|
35
|
+
require "rbs/inline_parser/comment_association"
|
|
27
36
|
require "rbs/environment"
|
|
28
37
|
require "rbs/environment/use_map"
|
|
38
|
+
require "rbs/environment/class_entry"
|
|
39
|
+
require "rbs/environment/module_entry"
|
|
29
40
|
require "rbs/environment_loader"
|
|
30
41
|
require "rbs/builtin_names"
|
|
31
42
|
require "rbs/definition"
|
data/rbs.gemspec
CHANGED
|
@@ -38,13 +38,14 @@ Gem::Specification.new do |spec|
|
|
|
38
38
|
spec.extensions = %w{ext/rbs_extension/extconf.rb}
|
|
39
39
|
|
|
40
40
|
if false
|
|
41
|
-
spec.required_ruby_version = ">= 3.
|
|
41
|
+
spec.required_ruby_version = ">= 3.4"
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
spec.bindir = "exe"
|
|
45
45
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
46
46
|
spec.require_paths = ["lib"]
|
|
47
|
-
spec.required_ruby_version = ">= 3.
|
|
47
|
+
spec.required_ruby_version = ">= 3.2"
|
|
48
48
|
spec.add_dependency "logger"
|
|
49
|
+
spec.add_dependency "prism", ">= 1.6.0"
|
|
49
50
|
spec.add_dependency "tsort"
|
|
50
51
|
end
|
data/rust/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/target/
|