rbs 3.9.5 → 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/.clang-format +74 -0
- data/.clangd +2 -0
- data/.github/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +58 -0
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +40 -32
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +2 -2
- data/.github/workflows/windows.yml +3 -3
- data/.gitignore +4 -0
- data/.rubocop.yml +2 -2
- data/.vscode/extensions.json +5 -0
- data/.vscode/settings.json +19 -0
- data/CHANGELOG.md +284 -0
- data/README.md +38 -1
- data/Rakefile +144 -29
- data/Steepfile +2 -0
- data/config.yml +634 -62
- data/core/array.rbs +307 -227
- 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 +55 -34
- data/core/complex.rbs +104 -78
- data/core/dir.rbs +61 -49
- data/core/encoding.rbs +12 -15
- data/core/enumerable.rbs +188 -87
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +65 -2
- data/core/errno.rbs +11 -2
- data/core/errors.rbs +58 -29
- data/core/exception.rbs +13 -13
- data/core/fiber.rbs +74 -54
- data/core/file.rbs +280 -177
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -92
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1045 -739
- data/core/integer.rbs +135 -137
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +196 -148
- data/core/kernel.rbs +216 -155
- data/core/marshal.rbs +4 -4
- data/core/match_data.rbs +15 -13
- data/core/math.rbs +107 -66
- data/core/method.rbs +69 -33
- data/core/module.rbs +244 -106
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +74 -63
- data/core/object.rbs +9 -11
- data/core/object_space.rbs +30 -23
- data/core/pathname.rbs +1322 -0
- data/core/proc.rbs +95 -58
- data/core/process.rbs +222 -202
- data/core/ractor.rbs +371 -515
- data/core/random.rbs +21 -3
- data/core/range.rbs +159 -57
- data/core/rational.rbs +60 -89
- data/core/rbs/unnamed/argf.rbs +60 -53
- data/core/rbs/unnamed/env_class.rbs +19 -14
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +11 -118
- data/core/regexp.rbs +258 -214
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +38 -34
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +4 -71
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +16 -82
- data/core/rubygems/version.rbs +2 -3
- data/core/set.rbs +490 -360
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3303 -1365
- data/core/struct.rbs +27 -26
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +135 -74
- data/core/time.rbs +81 -50
- data/core/trace_point.rbs +41 -35
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +24 -16
- data/core/warning.rbs +7 -7
- data/docs/aliases.md +79 -0
- data/docs/collection.md +3 -3
- data/docs/config.md +171 -0
- data/docs/encoding.md +56 -0
- data/docs/gem.md +0 -1
- data/docs/inline.md +576 -0
- data/docs/sigs.md +3 -3
- 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 +1513 -0
- data/ext/rbs_extension/ast_translation.h +37 -0
- data/ext/rbs_extension/class_constants.c +185 -0
- data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +22 -1
- data/ext/rbs_extension/compat.h +10 -0
- data/ext/rbs_extension/extconf.rb +25 -1
- data/ext/rbs_extension/legacy_location.c +294 -0
- data/ext/rbs_extension/legacy_location.h +82 -0
- data/ext/rbs_extension/main.c +468 -24
- data/ext/rbs_extension/rbs_extension.h +6 -21
- data/ext/rbs_extension/rbs_string_bridging.c +9 -0
- data/ext/rbs_extension/rbs_string_bridging.h +24 -0
- data/include/rbs/ast.h +1022 -0
- data/include/rbs/defines.h +86 -0
- data/include/rbs/lexer.h +206 -0
- data/include/rbs/location.h +40 -0
- data/include/rbs/parser.h +153 -0
- data/include/rbs/string.h +47 -0
- data/include/rbs/util/rbs_allocator.h +59 -0
- data/include/rbs/util/rbs_assert.h +20 -0
- data/include/rbs/util/rbs_buffer.h +83 -0
- data/include/rbs/util/rbs_constant_pool.h +6 -70
- data/include/rbs/util/rbs_encoding.h +282 -0
- data/include/rbs/util/rbs_unescape.h +24 -0
- data/include/rbs.h +9 -2
- data/lib/rbs/annotate/formatter.rb +3 -13
- data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
- data/lib/rbs/annotate/rdoc_source.rb +1 -1
- 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 +63 -126
- data/lib/rbs/cli.rb +56 -24
- data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
- 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 +121 -65
- 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 +402 -214
- data/lib/rbs/environment_loader.rb +2 -8
- data/lib/rbs/errors.rb +31 -21
- 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 +35 -7
- 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/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +116 -38
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +7 -4
- data/lib/rbs/test/type_check.rb +19 -2
- data/lib/rbs/type_name.rb +1 -8
- data/lib/rbs/types.rb +91 -79
- 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 +13 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +3 -3
- data/rbs.gemspec +4 -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/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.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 +94 -87
- 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/manifest.yaml +0 -1
- data/sig/method_builder.rbs +9 -4
- data/sig/namespace.rbs +0 -5
- data/sig/parser.rbs +67 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +35 -7
- data/sig/source.rbs +48 -0
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +0 -5
- data/sig/types.rbs +10 -8
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +1604 -0
- data/src/lexer.c +3194 -0
- data/src/lexer.re +154 -0
- data/src/lexstate.c +212 -0
- data/src/location.c +31 -0
- data/src/parser.c +4205 -0
- data/src/string.c +41 -0
- data/src/util/rbs_allocator.c +165 -0
- data/src/util/rbs_assert.c +19 -0
- data/src/util/rbs_buffer.c +54 -0
- data/src/util/rbs_constant_pool.c +18 -92
- data/src/util/rbs_encoding.c +21308 -0
- data/src/util/rbs_unescape.c +167 -0
- data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
- data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
- data/stdlib/cgi/0/core.rbs +9 -393
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/stdlib/coverage/0/coverage.rbs +7 -4
- data/stdlib/date/0/date.rbs +92 -79
- data/stdlib/date/0/date_time.rbs +25 -24
- data/stdlib/delegate/0/delegator.rbs +10 -7
- 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 +748 -347
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +158 -139
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +226 -179
- data/stdlib/monitor/0/monitor.rbs +3 -3
- data/stdlib/net-http/0/net-http.rbs +162 -134
- data/stdlib/objspace/0/objspace.rbs +17 -34
- data/stdlib/open-uri/0/open-uri.rbs +48 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +475 -357
- data/stdlib/optparse/0/optparse.rbs +26 -17
- data/stdlib/pathname/0/pathname.rbs +11 -1381
- 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 +65 -12
- 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 +4 -3
- data/stdlib/rdoc/0/comment.rbs +2 -0
- data/stdlib/rdoc/0/options.rbs +76 -0
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/rdoc.rbs +7 -5
- data/stdlib/rdoc/0/store.rbs +2 -2
- data/stdlib/resolv/0/resolv.rbs +25 -68
- data/stdlib/ripper/0/ripper.rbs +25 -19
- 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/singleton/0/singleton.rbs +3 -0
- 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 +23 -10
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +11 -3
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +1177 -85
- data/stdlib/strscan/0/string_scanner.rbs +27 -25
- data/stdlib/tempfile/0/tempfile.rbs +25 -21
- data/stdlib/time/0/time.rbs +8 -6
- data/stdlib/timeout/0/timeout.rbs +63 -7
- data/stdlib/tsort/0/cyclic.rbs +3 -0
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +42 -20
- data/stdlib/uri/0/file.rbs +3 -3
- data/stdlib/uri/0/generic.rbs +26 -18
- 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 +12 -12
- 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
- data/stdlib/zlib/0/zstream.rbs +1 -0
- metadata +121 -18
- data/ext/rbs_extension/lexer.c +0 -2728
- data/ext/rbs_extension/lexer.h +0 -179
- data/ext/rbs_extension/lexer.re +0 -147
- data/ext/rbs_extension/lexstate.c +0 -175
- data/ext/rbs_extension/location.c +0 -325
- data/ext/rbs_extension/location.h +0 -85
- data/ext/rbs_extension/parser.c +0 -2982
- data/ext/rbs_extension/parser.h +0 -18
- data/ext/rbs_extension/parserstate.c +0 -411
- data/ext/rbs_extension/parserstate.h +0 -163
- data/ext/rbs_extension/unescape.c +0 -32
- data/include/rbs/ruby_objs.h +0 -72
- data/src/constants.c +0 -153
- data/src/ruby_objs.c +0 -799
data/lib/rbs/ast/members.rb
CHANGED
|
@@ -35,7 +35,7 @@ module RBS
|
|
|
35
35
|
update(method_type: self.method_type.sub(subst))
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def to_json(state =
|
|
38
|
+
def to_json(state = nil)
|
|
39
39
|
{
|
|
40
40
|
annotations: annotations,
|
|
41
41
|
method_type: method_type
|
|
@@ -103,7 +103,7 @@ module RBS
|
|
|
103
103
|
)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
def to_json(state =
|
|
106
|
+
def to_json(state = nil)
|
|
107
107
|
{
|
|
108
108
|
member: :method_definition,
|
|
109
109
|
name: name,
|
|
@@ -145,7 +145,7 @@ module RBS
|
|
|
145
145
|
class InstanceVariable < Base
|
|
146
146
|
include Var
|
|
147
147
|
|
|
148
|
-
def to_json(state =
|
|
148
|
+
def to_json(state = nil)
|
|
149
149
|
{
|
|
150
150
|
member: :instance_variable,
|
|
151
151
|
name: name,
|
|
@@ -159,7 +159,7 @@ module RBS
|
|
|
159
159
|
class ClassInstanceVariable < Base
|
|
160
160
|
include Var
|
|
161
161
|
|
|
162
|
-
def to_json(state =
|
|
162
|
+
def to_json(state = nil)
|
|
163
163
|
{
|
|
164
164
|
member: :class_instance_variable,
|
|
165
165
|
name: name,
|
|
@@ -173,7 +173,7 @@ module RBS
|
|
|
173
173
|
class ClassVariable < Base
|
|
174
174
|
include Var
|
|
175
175
|
|
|
176
|
-
def to_json(state =
|
|
176
|
+
def to_json(state = nil)
|
|
177
177
|
{
|
|
178
178
|
member: :class_variable,
|
|
179
179
|
name: name,
|
|
@@ -215,7 +215,7 @@ module RBS
|
|
|
215
215
|
class Include < Base
|
|
216
216
|
include Mixin
|
|
217
217
|
|
|
218
|
-
def to_json(state =
|
|
218
|
+
def to_json(state = nil)
|
|
219
219
|
{
|
|
220
220
|
member: :include,
|
|
221
221
|
name: name,
|
|
@@ -230,7 +230,7 @@ module RBS
|
|
|
230
230
|
class Extend < Base
|
|
231
231
|
include Mixin
|
|
232
232
|
|
|
233
|
-
def to_json(state =
|
|
233
|
+
def to_json(state = nil)
|
|
234
234
|
{
|
|
235
235
|
member: :extend,
|
|
236
236
|
name: name,
|
|
@@ -245,7 +245,7 @@ module RBS
|
|
|
245
245
|
class Prepend < Base
|
|
246
246
|
include Mixin
|
|
247
247
|
|
|
248
|
-
def to_json(state =
|
|
248
|
+
def to_json(state = nil)
|
|
249
249
|
{
|
|
250
250
|
member: :prepend,
|
|
251
251
|
name: name,
|
|
@@ -311,7 +311,7 @@ module RBS
|
|
|
311
311
|
class AttrReader < Base
|
|
312
312
|
include Attribute
|
|
313
313
|
|
|
314
|
-
def to_json(state =
|
|
314
|
+
def to_json(state = nil)
|
|
315
315
|
{
|
|
316
316
|
member: :attr_reader,
|
|
317
317
|
name: name,
|
|
@@ -329,7 +329,7 @@ module RBS
|
|
|
329
329
|
class AttrAccessor < Base
|
|
330
330
|
include Attribute
|
|
331
331
|
|
|
332
|
-
def to_json(state =
|
|
332
|
+
def to_json(state = nil)
|
|
333
333
|
{
|
|
334
334
|
member: :attr_accessor,
|
|
335
335
|
name: name,
|
|
@@ -347,7 +347,7 @@ module RBS
|
|
|
347
347
|
class AttrWriter < Base
|
|
348
348
|
include Attribute
|
|
349
349
|
|
|
350
|
-
def to_json(state =
|
|
350
|
+
def to_json(state = nil)
|
|
351
351
|
{
|
|
352
352
|
member: :attr_writer,
|
|
353
353
|
name: name,
|
|
@@ -383,7 +383,7 @@ module RBS
|
|
|
383
383
|
class Public < Base
|
|
384
384
|
include LocationOnly
|
|
385
385
|
|
|
386
|
-
def to_json(state =
|
|
386
|
+
def to_json(state = nil)
|
|
387
387
|
{ member: :public, location: location }.to_json(state)
|
|
388
388
|
end
|
|
389
389
|
end
|
|
@@ -391,7 +391,7 @@ module RBS
|
|
|
391
391
|
class Private < Base
|
|
392
392
|
include LocationOnly
|
|
393
393
|
|
|
394
|
-
def to_json(state =
|
|
394
|
+
def to_json(state = nil)
|
|
395
395
|
{ member: :private, location: location }.to_json(state)
|
|
396
396
|
end
|
|
397
397
|
end
|
|
@@ -426,7 +426,7 @@ module RBS
|
|
|
426
426
|
new_name.hash ^ old_name.hash ^ kind.hash
|
|
427
427
|
end
|
|
428
428
|
|
|
429
|
-
def to_json(state =
|
|
429
|
+
def to_json(state = nil)
|
|
430
430
|
{
|
|
431
431
|
member: :alias,
|
|
432
432
|
new_name: new_name,
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RBS
|
|
4
|
+
module AST
|
|
5
|
+
module Ruby
|
|
6
|
+
module Annotations
|
|
7
|
+
class Base
|
|
8
|
+
attr_reader :location, :prefix_location
|
|
9
|
+
|
|
10
|
+
def initialize(location, prefix_location)
|
|
11
|
+
@location = location
|
|
12
|
+
@prefix_location = prefix_location
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def buffer
|
|
16
|
+
location.buffer
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class NodeTypeAssertion < Base
|
|
21
|
+
attr_reader :type
|
|
22
|
+
|
|
23
|
+
def initialize(location:, prefix_location:, type:)
|
|
24
|
+
super(location, prefix_location)
|
|
25
|
+
@type = type
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def map_type_name
|
|
29
|
+
self.class.new(
|
|
30
|
+
location:, prefix_location:,
|
|
31
|
+
type: type.map_type_name { yield _1 }
|
|
32
|
+
) #: self
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def type_fingerprint
|
|
36
|
+
[
|
|
37
|
+
"annots/node_type_assertion",
|
|
38
|
+
type.to_s
|
|
39
|
+
]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class AliasAnnotation < Base
|
|
44
|
+
attr_reader :keyword_location, :type_name_location, :type_name
|
|
45
|
+
|
|
46
|
+
def initialize(location:, prefix_location:, keyword_location:, type_name:, type_name_location:)
|
|
47
|
+
super(location, prefix_location)
|
|
48
|
+
@keyword_location = keyword_location
|
|
49
|
+
@type_name = type_name
|
|
50
|
+
@type_name_location = type_name_location
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def map_type_name
|
|
54
|
+
self.class.new(
|
|
55
|
+
location:,
|
|
56
|
+
prefix_location:,
|
|
57
|
+
keyword_location:,
|
|
58
|
+
type_name: type_name ? yield(type_name) : nil,
|
|
59
|
+
type_name_location:
|
|
60
|
+
) #: self
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class ClassAliasAnnotation < AliasAnnotation
|
|
65
|
+
def type_fingerprint
|
|
66
|
+
[
|
|
67
|
+
"annots/class-alias",
|
|
68
|
+
type_name&.to_s
|
|
69
|
+
]
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class ModuleAliasAnnotation < AliasAnnotation
|
|
74
|
+
def type_fingerprint
|
|
75
|
+
[
|
|
76
|
+
"annots/module-alias",
|
|
77
|
+
type_name&.to_s
|
|
78
|
+
]
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
class ColonMethodTypeAnnotation < Base
|
|
83
|
+
attr_reader :annotations, :method_type
|
|
84
|
+
|
|
85
|
+
def initialize(location:, prefix_location:, annotations:, method_type:)
|
|
86
|
+
super(location, prefix_location)
|
|
87
|
+
@annotations = annotations
|
|
88
|
+
@method_type = method_type
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def map_type_name
|
|
92
|
+
self.class.new(
|
|
93
|
+
location:,
|
|
94
|
+
prefix_location:,
|
|
95
|
+
annotations: annotations,
|
|
96
|
+
method_type: method_type.map_type {|type| type.map_type_name { yield _1 }}
|
|
97
|
+
) #: self
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def type_fingerprint
|
|
101
|
+
[
|
|
102
|
+
"annots/colon_method_type",
|
|
103
|
+
annotations.map(&:to_s),
|
|
104
|
+
method_type.to_s
|
|
105
|
+
]
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
class MethodTypesAnnotation < Base
|
|
110
|
+
Overload = AST::Members::MethodDefinition::Overload
|
|
111
|
+
|
|
112
|
+
attr_reader :overloads, :vertical_bar_locations, :dot3_location
|
|
113
|
+
|
|
114
|
+
def initialize(location:, prefix_location:, overloads:, vertical_bar_locations:, dot3_location:)
|
|
115
|
+
super(location, prefix_location)
|
|
116
|
+
@overloads = overloads
|
|
117
|
+
@vertical_bar_locations = vertical_bar_locations
|
|
118
|
+
@dot3_location = dot3_location
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def map_type_name(&block)
|
|
122
|
+
ovs = overloads.map do |overload|
|
|
123
|
+
Overload.new(
|
|
124
|
+
method_type: overload.method_type.map_type {|type| type.map_type_name { yield _1 } },
|
|
125
|
+
annotations: overload.annotations
|
|
126
|
+
)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
self.class.new(location:, prefix_location:, overloads: ovs, vertical_bar_locations:, dot3_location:) #: self
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def type_fingerprint
|
|
133
|
+
[
|
|
134
|
+
"annots/method_types",
|
|
135
|
+
overloads.map { |o| [o.annotations.map(&:to_s), o.method_type.to_s] },
|
|
136
|
+
overloading: dot3_location ? true : false
|
|
137
|
+
]
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
class SkipAnnotation < Base
|
|
142
|
+
attr_reader :skip_location, :comment_location
|
|
143
|
+
|
|
144
|
+
def initialize(location:, prefix_location:, skip_location:, comment_location:)
|
|
145
|
+
super(location, prefix_location)
|
|
146
|
+
@skip_location = skip_location
|
|
147
|
+
@comment_location = comment_location
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def type_fingerprint
|
|
151
|
+
"annots/skip"
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
class ReturnTypeAnnotation < Base
|
|
156
|
+
attr_reader :return_location
|
|
157
|
+
|
|
158
|
+
attr_reader :colon_location
|
|
159
|
+
|
|
160
|
+
attr_reader :return_type
|
|
161
|
+
|
|
162
|
+
attr_reader :comment_location
|
|
163
|
+
|
|
164
|
+
def initialize(location:, prefix_location:, return_location:, colon_location:, return_type:, comment_location:)
|
|
165
|
+
super(location, prefix_location)
|
|
166
|
+
@return_location = return_location
|
|
167
|
+
@colon_location = colon_location
|
|
168
|
+
@return_type = return_type
|
|
169
|
+
@comment_location = comment_location
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def map_type_name(&block)
|
|
173
|
+
self.class.new(
|
|
174
|
+
location:,
|
|
175
|
+
prefix_location:,
|
|
176
|
+
return_location: return_location,
|
|
177
|
+
colon_location: colon_location,
|
|
178
|
+
return_type: return_type.map_type_name { yield _1 },
|
|
179
|
+
comment_location: comment_location
|
|
180
|
+
) #: self
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def type_fingerprint
|
|
184
|
+
[
|
|
185
|
+
"annots/return_type",
|
|
186
|
+
return_type.to_s,
|
|
187
|
+
comment_location&.source
|
|
188
|
+
]
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
class TypeApplicationAnnotation < Base
|
|
193
|
+
attr_reader :type_args, :close_bracket_location, :comma_locations
|
|
194
|
+
|
|
195
|
+
def initialize(location:, prefix_location:, type_args:, close_bracket_location:, comma_locations:)
|
|
196
|
+
super(location, prefix_location)
|
|
197
|
+
@type_args = type_args
|
|
198
|
+
@close_bracket_location = close_bracket_location
|
|
199
|
+
@comma_locations = comma_locations
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def map_type_name(&block)
|
|
203
|
+
mapped_type_args = type_args.map { |type| type.map_type_name { yield _1 } }
|
|
204
|
+
|
|
205
|
+
self.class.new(
|
|
206
|
+
location:,
|
|
207
|
+
prefix_location:,
|
|
208
|
+
type_args: mapped_type_args,
|
|
209
|
+
close_bracket_location:,
|
|
210
|
+
comma_locations:
|
|
211
|
+
) #: self
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def type_fingerprint
|
|
215
|
+
[
|
|
216
|
+
"annots/type_application",
|
|
217
|
+
type_args.map(&:to_s)
|
|
218
|
+
]
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
class InstanceVariableAnnotation < Base
|
|
223
|
+
attr_reader :ivar_name, :ivar_name_location, :colon_location, :type, :comment_location
|
|
224
|
+
|
|
225
|
+
def initialize(location:, prefix_location:, ivar_name:, ivar_name_location:, colon_location:, type:, comment_location:)
|
|
226
|
+
super(location, prefix_location)
|
|
227
|
+
@ivar_name = ivar_name
|
|
228
|
+
@ivar_name_location = ivar_name_location
|
|
229
|
+
@colon_location = colon_location
|
|
230
|
+
@type = type
|
|
231
|
+
@comment_location = comment_location
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def map_type_name(&block)
|
|
235
|
+
self.class.new(
|
|
236
|
+
location:,
|
|
237
|
+
prefix_location:,
|
|
238
|
+
ivar_name:,
|
|
239
|
+
ivar_name_location:,
|
|
240
|
+
colon_location:,
|
|
241
|
+
type: type.map_type_name { yield _1 },
|
|
242
|
+
comment_location:
|
|
243
|
+
) #: self
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def type_fingerprint
|
|
247
|
+
[
|
|
248
|
+
"annots/instance_variable",
|
|
249
|
+
ivar_name.to_s,
|
|
250
|
+
type.to_s,
|
|
251
|
+
comment_location&.source
|
|
252
|
+
]
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
class ParamTypeAnnotation < Base
|
|
257
|
+
attr_reader :name_location, :colon_location, :param_type, :comment_location
|
|
258
|
+
|
|
259
|
+
def initialize(location:, prefix_location:, name_location:, colon_location:, param_type:, comment_location:)
|
|
260
|
+
super(location, prefix_location)
|
|
261
|
+
@name_location = name_location
|
|
262
|
+
@colon_location = colon_location
|
|
263
|
+
@param_type = param_type
|
|
264
|
+
@comment_location = comment_location
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def map_type_name(&block)
|
|
268
|
+
self.class.new(
|
|
269
|
+
location:,
|
|
270
|
+
prefix_location:,
|
|
271
|
+
name_location: name_location,
|
|
272
|
+
colon_location: colon_location,
|
|
273
|
+
param_type: param_type.map_type_name { yield _1 },
|
|
274
|
+
comment_location: comment_location
|
|
275
|
+
) #: self
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def type_fingerprint
|
|
279
|
+
[
|
|
280
|
+
"annots/param_type",
|
|
281
|
+
name_location.source,
|
|
282
|
+
param_type.to_s,
|
|
283
|
+
comment_location&.source
|
|
284
|
+
]
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
class SplatParamTypeAnnotation < Base
|
|
289
|
+
attr_reader :star_location, :name_location, :colon_location, :param_type, :comment_location
|
|
290
|
+
|
|
291
|
+
def initialize(location:, prefix_location:, star_location:, name_location:, colon_location:, param_type:, comment_location:)
|
|
292
|
+
super(location, prefix_location)
|
|
293
|
+
@star_location = star_location
|
|
294
|
+
@name_location = name_location
|
|
295
|
+
@colon_location = colon_location
|
|
296
|
+
@param_type = param_type
|
|
297
|
+
@comment_location = comment_location
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def map_type_name(&block)
|
|
301
|
+
self.class.new(
|
|
302
|
+
location:,
|
|
303
|
+
prefix_location:,
|
|
304
|
+
star_location: star_location,
|
|
305
|
+
name_location: name_location,
|
|
306
|
+
colon_location: colon_location,
|
|
307
|
+
param_type: param_type.map_type_name { yield _1 },
|
|
308
|
+
comment_location: comment_location
|
|
309
|
+
) #: self
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def type_fingerprint
|
|
313
|
+
[
|
|
314
|
+
"annots/splat_param_type",
|
|
315
|
+
name_location&.source,
|
|
316
|
+
param_type.to_s,
|
|
317
|
+
comment_location&.source
|
|
318
|
+
]
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
class DoubleSplatParamTypeAnnotation < Base
|
|
323
|
+
attr_reader :star2_location, :name_location, :colon_location, :param_type, :comment_location
|
|
324
|
+
|
|
325
|
+
def initialize(location:, prefix_location:, star2_location:, name_location:, colon_location:, param_type:, comment_location:)
|
|
326
|
+
super(location, prefix_location)
|
|
327
|
+
@star2_location = star2_location
|
|
328
|
+
@name_location = name_location
|
|
329
|
+
@colon_location = colon_location
|
|
330
|
+
@param_type = param_type
|
|
331
|
+
@comment_location = comment_location
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def map_type_name(&block)
|
|
335
|
+
self.class.new(
|
|
336
|
+
location:,
|
|
337
|
+
prefix_location:,
|
|
338
|
+
star2_location: star2_location,
|
|
339
|
+
name_location: name_location,
|
|
340
|
+
colon_location: colon_location,
|
|
341
|
+
param_type: param_type.map_type_name { yield _1 },
|
|
342
|
+
comment_location: comment_location
|
|
343
|
+
) #: self
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
def type_fingerprint
|
|
347
|
+
[
|
|
348
|
+
"annots/double_splat_param_type",
|
|
349
|
+
name_location&.source,
|
|
350
|
+
param_type.to_s,
|
|
351
|
+
comment_location&.source
|
|
352
|
+
]
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
class BlockParamTypeAnnotation < Base
|
|
357
|
+
attr_reader :ampersand_location, :name_location, :colon_location, :question_location, :type_location, :type, :comment_location
|
|
358
|
+
|
|
359
|
+
def initialize(location:, prefix_location:, ampersand_location:, name_location:, colon_location:, question_location:, type_location:, type:, comment_location:)
|
|
360
|
+
super(location, prefix_location)
|
|
361
|
+
@ampersand_location = ampersand_location
|
|
362
|
+
@name_location = name_location
|
|
363
|
+
@colon_location = colon_location
|
|
364
|
+
@question_location = question_location
|
|
365
|
+
@type_location = type_location
|
|
366
|
+
@type = type
|
|
367
|
+
@comment_location = comment_location
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
def map_type_name(&block)
|
|
371
|
+
self.class.new(
|
|
372
|
+
location:,
|
|
373
|
+
prefix_location:,
|
|
374
|
+
ampersand_location: ampersand_location,
|
|
375
|
+
name_location: name_location,
|
|
376
|
+
colon_location: colon_location,
|
|
377
|
+
question_location: question_location,
|
|
378
|
+
type_location: type_location,
|
|
379
|
+
type: type.map_type_name { yield _1 },
|
|
380
|
+
comment_location: comment_location
|
|
381
|
+
) #: self
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
def name
|
|
385
|
+
name_location&.source&.to_sym
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
def optional?
|
|
389
|
+
question_location ? true : false
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
def required?
|
|
393
|
+
!optional?
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
def type_fingerprint
|
|
397
|
+
[
|
|
398
|
+
"annots/block_param_type",
|
|
399
|
+
name_location&.source,
|
|
400
|
+
type.to_s,
|
|
401
|
+
optional? ? "optional" : "required",
|
|
402
|
+
comment_location&.source
|
|
403
|
+
]
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
end
|
|
409
|
+
end
|