rbs 4.0.0.dev.4 → 4.1.0.pre.2
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 +1 -0
- data/.github/dependabot.yml +16 -14
- data/.github/workflows/bundle-update.yml +63 -0
- data/.github/workflows/c-check.yml +21 -11
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/jruby.yml +67 -0
- data/.github/workflows/milestone.yml +83 -0
- data/.github/workflows/ruby.yml +63 -24
- data/.github/workflows/rust.yml +184 -0
- data/.github/workflows/truffleruby.yml +54 -0
- data/.github/workflows/typecheck.yml +5 -2
- data/.github/workflows/wasm.yml +53 -0
- data/.github/workflows/windows.yml +8 -2
- data/.gitignore +11 -0
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +357 -0
- data/README.md +4 -4
- data/Rakefile +365 -33
- data/Steepfile +8 -0
- data/config.yml +450 -24
- data/core/array.rbs +443 -363
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +9 -8
- data/core/class.rbs +11 -8
- 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 +288 -196
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator/product.rbs +5 -5
- data/core/enumerator.rbs +91 -28
- 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 +260 -1151
- data/core/file_constants.rbs +463 -0
- data/core/file_stat.rbs +534 -0
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -92
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1151 -829
- data/core/integer.rbs +156 -195
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +216 -150
- data/core/kernel.rbs +239 -163
- 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 +302 -150
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +77 -63
- data/core/object.rbs +9 -11
- data/core/object_space/weak_key_map.rbs +7 -7
- 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 +181 -79
- data/core/rational.rbs +60 -89
- data/core/rbs/ops.rbs +154 -0
- data/core/rbs/unnamed/argf.rbs +63 -56
- 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 +78 -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 +493 -363
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3234 -1285
- data/core/struct.rbs +43 -42
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +141 -73
- 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/CONTRIBUTING.md +2 -1
- 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 +634 -0
- data/docs/rbs_by_example.md +20 -20
- data/docs/rust.md +96 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +48 -18
- data/docs/type_fingerprint.md +21 -0
- data/docs/wasm_serialization.md +80 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +1441 -671
- data/ext/rbs_extension/ast_translation.h +7 -0
- data/ext/rbs_extension/class_constants.c +18 -2
- data/ext/rbs_extension/class_constants.h +9 -0
- data/ext/rbs_extension/extconf.rb +6 -1
- data/ext/rbs_extension/legacy_location.c +33 -56
- data/ext/rbs_extension/legacy_location.h +37 -0
- data/ext/rbs_extension/main.c +183 -39
- data/include/rbs/ast.h +597 -297
- data/include/rbs/defines.h +40 -0
- data/include/rbs/lexer.h +31 -11
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +6 -6
- data/include/rbs/serialize.h +39 -0
- data/include/rbs/string.h +0 -2
- data/include/rbs/util/rbs_allocator.h +34 -13
- data/include/rbs/util/rbs_assert.h +12 -1
- data/include/rbs/util/rbs_constant_pool.h +0 -3
- data/include/rbs/util/rbs_encoding.h +2 -0
- data/include/rbs/util/rbs_unescape.h +2 -1
- data/include/rbs.h +8 -0
- data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
- 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 +335 -3
- data/lib/rbs/ast/ruby/comment_block.rb +30 -4
- data/lib/rbs/ast/ruby/declarations.rb +209 -4
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
- data/lib/rbs/ast/ruby/members.rb +571 -22
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +66 -24
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +38 -106
- data/lib/rbs/cli.rb +55 -24
- data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
- data/lib/rbs/collection/sources/git.rb +7 -0
- data/lib/rbs/definition.rb +1 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
- data/lib/rbs/definition_builder/method_builder.rb +32 -6
- data/lib/rbs/definition_builder.rb +147 -25
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment.rb +235 -75
- data/lib/rbs/environment_loader.rb +0 -6
- data/lib/rbs/errors.rb +27 -18
- data/lib/rbs/inline_parser.rb +377 -15
- data/lib/rbs/location_aux.rb +1 -1
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/namespace.rb +47 -11
- data/lib/rbs/parser_aux.rb +20 -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 -0
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +120 -44
- data/lib/rbs/rewriter.rb +70 -0
- data/lib/rbs/subtractor.rb +3 -1
- data/lib/rbs/test/type_check.rb +25 -3
- data/lib/rbs/type_name.rb +34 -14
- data/lib/rbs/types.rb +88 -78
- data/lib/rbs/unit_test/type_assertions.rb +44 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/wasm/deserializer.rb +213 -0
- data/lib/rbs/wasm/location.rb +61 -0
- data/lib/rbs/wasm/parser.rb +137 -0
- data/lib/rbs/wasm/runtime.rb +217 -0
- data/lib/rbs/wasm/serialization_schema.rb +110 -0
- data/lib/rbs.rb +13 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +1 -1
- data/rbs.gemspec +24 -6
- data/schema/typeParam.json +17 -1
- data/sig/annotate/rdoc_annotater.rbs +12 -9
- data/sig/ast/ruby/annotations.rbs +364 -4
- data/sig/ast/ruby/comment_block.rbs +8 -0
- data/sig/ast/ruby/declarations.rbs +102 -4
- data/sig/ast/ruby/members.rbs +128 -2
- data/sig/buffer.rbs +19 -1
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/collection/config/lockfile_generator.rbs +2 -0
- data/sig/definition.rbs +6 -1
- data/sig/definition_builder.rbs +2 -0
- data/sig/environment.rbs +70 -12
- data/sig/errors.rbs +13 -14
- data/sig/inline_parser.rbs +41 -2
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -2
- data/sig/method_builder.rbs +3 -1
- data/sig/namespace.rbs +20 -0
- data/sig/parser.rbs +41 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +36 -10
- data/sig/rewriter.rbs +45 -0
- data/sig/source.rbs +3 -3
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +15 -0
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +15 -0
- data/sig/wasm/deserializer.rbs +66 -0
- data/sig/wasm/serialization_schema.rbs +13 -0
- data/src/ast.c +443 -162
- data/src/lexer.c +1415 -1313
- data/src/lexer.re +4 -0
- data/src/lexstate.c +63 -37
- data/src/location.c +7 -47
- data/src/parser.c +1032 -521
- data/src/serialize.c +958 -0
- data/src/string.c +0 -48
- data/src/util/rbs_allocator.c +89 -74
- data/src/util/rbs_assert.c +1 -1
- data/src/util/rbs_buffer.c +2 -2
- data/src/util/rbs_constant_pool.c +10 -14
- data/src/util/rbs_encoding.c +4 -8
- data/src/util/rbs_unescape.c +56 -20
- data/stdlib/abbrev/0/array.rbs +1 -1
- 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/csv/0/csv.rbs +5 -5
- 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 +111 -1
- data/stdlib/erb/0/erb.rbs +748 -347
- data/stdlib/etc/0/etc.rbs +73 -54
- data/stdlib/fileutils/0/fileutils.rbs +179 -160
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +223 -142
- 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 +482 -364
- 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 +2 -1
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/rdoc.rbs +1 -1
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/resolv/0/resolv.rbs +26 -69
- data/stdlib/ripper/0/ripper.rbs +22 -19
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +3 -3
- data/stdlib/singleton/0/singleton.rbs +3 -0
- data/stdlib/socket/0/addrinfo.rbs +7 -7
- 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 +1209 -95
- data/stdlib/strscan/0/string_scanner.rbs +101 -80
- 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 +4 -1
- data/stdlib/tsort/0/interfaces.rbs +8 -8
- data/stdlib/tsort/0/tsort.rbs +16 -15
- 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 +8 -8
- 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
- data/wasm/README.md +59 -0
- data/wasm/rbs_wasm.c +411 -0
- metadata +56 -8
- data/.vscode/extensions.json +0 -5
- data/.vscode/settings.json +0 -19
data/lib/rbs/ast/declarations.rb
CHANGED
|
@@ -74,7 +74,7 @@ module RBS
|
|
|
74
74
|
self.class.hash ^ name.hash ^ args.hash
|
|
75
75
|
end
|
|
76
76
|
|
|
77
|
-
def to_json(state =
|
|
77
|
+
def to_json(state = nil)
|
|
78
78
|
{
|
|
79
79
|
name: name,
|
|
80
80
|
args: args,
|
|
@@ -130,7 +130,7 @@ module RBS
|
|
|
130
130
|
self.class.hash ^ name.hash ^ type_params.hash ^ super_class.hash ^ members.hash
|
|
131
131
|
end
|
|
132
132
|
|
|
133
|
-
def to_json(state =
|
|
133
|
+
def to_json(state = nil)
|
|
134
134
|
{
|
|
135
135
|
declaration: :class,
|
|
136
136
|
name: name,
|
|
@@ -166,7 +166,7 @@ module RBS
|
|
|
166
166
|
self.class.hash ^ name.hash ^ args.hash ^ location.hash
|
|
167
167
|
end
|
|
168
168
|
|
|
169
|
-
def to_json(state =
|
|
169
|
+
def to_json(state = nil)
|
|
170
170
|
{
|
|
171
171
|
name: name,
|
|
172
172
|
args: args,
|
|
@@ -231,7 +231,7 @@ module RBS
|
|
|
231
231
|
self.class.hash ^ name.hash ^ type_params.hash ^ self_types.hash ^ members.hash
|
|
232
232
|
end
|
|
233
233
|
|
|
234
|
-
def to_json(state =
|
|
234
|
+
def to_json(state = nil)
|
|
235
235
|
{
|
|
236
236
|
declaration: :module,
|
|
237
237
|
name: name,
|
|
@@ -288,7 +288,7 @@ module RBS
|
|
|
288
288
|
self.class.hash ^ type_params.hash ^ members.hash
|
|
289
289
|
end
|
|
290
290
|
|
|
291
|
-
def to_json(state =
|
|
291
|
+
def to_json(state = nil)
|
|
292
292
|
{
|
|
293
293
|
declaration: :interface,
|
|
294
294
|
name: name,
|
|
@@ -331,7 +331,7 @@ module RBS
|
|
|
331
331
|
self.class.hash ^ name.hash ^ type_params.hash ^ type.hash
|
|
332
332
|
end
|
|
333
333
|
|
|
334
|
-
def to_json(state =
|
|
334
|
+
def to_json(state = nil)
|
|
335
335
|
{
|
|
336
336
|
declaration: :alias,
|
|
337
337
|
name: name,
|
|
@@ -371,7 +371,7 @@ module RBS
|
|
|
371
371
|
self.class.hash ^ name.hash ^ type.hash
|
|
372
372
|
end
|
|
373
373
|
|
|
374
|
-
def to_json(state =
|
|
374
|
+
def to_json(state = nil)
|
|
375
375
|
{
|
|
376
376
|
declaration: :constant,
|
|
377
377
|
name: name,
|
|
@@ -409,7 +409,7 @@ module RBS
|
|
|
409
409
|
self.class.hash ^ name.hash ^ type.hash
|
|
410
410
|
end
|
|
411
411
|
|
|
412
|
-
def to_json(state =
|
|
412
|
+
def to_json(state = nil)
|
|
413
413
|
{
|
|
414
414
|
declaration: :global,
|
|
415
415
|
name: name,
|
|
@@ -445,7 +445,7 @@ module RBS
|
|
|
445
445
|
end
|
|
446
446
|
|
|
447
447
|
class ClassAlias < AliasDecl
|
|
448
|
-
def to_json(state =
|
|
448
|
+
def to_json(state = nil)
|
|
449
449
|
{
|
|
450
450
|
declaration: :class_alias,
|
|
451
451
|
new_name: new_name,
|
|
@@ -457,7 +457,7 @@ module RBS
|
|
|
457
457
|
end
|
|
458
458
|
|
|
459
459
|
class ModuleAlias < AliasDecl
|
|
460
|
-
def to_json(state =
|
|
460
|
+
def to_json(state = nil)
|
|
461
461
|
{
|
|
462
462
|
declaration: :module_alias,
|
|
463
463
|
new_name: new_name,
|
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,
|
|
@@ -31,6 +31,52 @@ module RBS
|
|
|
31
31
|
type: type.map_type_name { yield _1 }
|
|
32
32
|
) #: self
|
|
33
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
|
|
34
80
|
end
|
|
35
81
|
|
|
36
82
|
class ColonMethodTypeAnnotation < Base
|
|
@@ -50,17 +96,26 @@ module RBS
|
|
|
50
96
|
method_type: method_type.map_type {|type| type.map_type_name { yield _1 }}
|
|
51
97
|
) #: self
|
|
52
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
|
|
53
107
|
end
|
|
54
108
|
|
|
55
109
|
class MethodTypesAnnotation < Base
|
|
56
110
|
Overload = AST::Members::MethodDefinition::Overload
|
|
57
111
|
|
|
58
|
-
attr_reader :overloads, :vertical_bar_locations
|
|
112
|
+
attr_reader :overloads, :vertical_bar_locations, :dot3_location
|
|
59
113
|
|
|
60
|
-
def initialize(location:, prefix_location:, overloads:, vertical_bar_locations:)
|
|
114
|
+
def initialize(location:, prefix_location:, overloads:, vertical_bar_locations:, dot3_location:)
|
|
61
115
|
super(location, prefix_location)
|
|
62
116
|
@overloads = overloads
|
|
63
117
|
@vertical_bar_locations = vertical_bar_locations
|
|
118
|
+
@dot3_location = dot3_location
|
|
64
119
|
end
|
|
65
120
|
|
|
66
121
|
def map_type_name(&block)
|
|
@@ -71,7 +126,15 @@ module RBS
|
|
|
71
126
|
)
|
|
72
127
|
end
|
|
73
128
|
|
|
74
|
-
self.class.new(location:, prefix_location:, overloads: ovs, vertical_bar_locations:) #: self
|
|
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
|
+
]
|
|
75
138
|
end
|
|
76
139
|
end
|
|
77
140
|
|
|
@@ -83,6 +146,10 @@ module RBS
|
|
|
83
146
|
@skip_location = skip_location
|
|
84
147
|
@comment_location = comment_location
|
|
85
148
|
end
|
|
149
|
+
|
|
150
|
+
def type_fingerprint
|
|
151
|
+
"annots/skip"
|
|
152
|
+
end
|
|
86
153
|
end
|
|
87
154
|
|
|
88
155
|
class ReturnTypeAnnotation < Base
|
|
@@ -112,6 +179,271 @@ module RBS
|
|
|
112
179
|
comment_location: comment_location
|
|
113
180
|
) #: self
|
|
114
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 ModuleSelfAnnotation < Base
|
|
357
|
+
attr_reader :keyword_location, :colon_location, :name, :args, :open_bracket_location, :close_bracket_location, :args_comma_locations, :comment_location
|
|
358
|
+
|
|
359
|
+
def initialize(location:, prefix_location:, keyword_location:, colon_location:, name:, args:, open_bracket_location:, close_bracket_location:, args_comma_locations:, comment_location:)
|
|
360
|
+
super(location, prefix_location)
|
|
361
|
+
@keyword_location = keyword_location
|
|
362
|
+
@colon_location = colon_location
|
|
363
|
+
@name = name
|
|
364
|
+
@args = args
|
|
365
|
+
@open_bracket_location = open_bracket_location
|
|
366
|
+
@close_bracket_location = close_bracket_location
|
|
367
|
+
@args_comma_locations = args_comma_locations
|
|
368
|
+
@comment_location = comment_location
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
def map_type_name
|
|
372
|
+
mapped_args = args.map { |type| type.map_type_name { yield _1 } }
|
|
373
|
+
|
|
374
|
+
self.class.new(
|
|
375
|
+
location:,
|
|
376
|
+
prefix_location:,
|
|
377
|
+
keyword_location:,
|
|
378
|
+
colon_location:,
|
|
379
|
+
name: yield(name),
|
|
380
|
+
args: mapped_args,
|
|
381
|
+
open_bracket_location:,
|
|
382
|
+
close_bracket_location:,
|
|
383
|
+
args_comma_locations:,
|
|
384
|
+
comment_location:
|
|
385
|
+
) #: self
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
def type_fingerprint
|
|
389
|
+
[
|
|
390
|
+
"annots/module_self",
|
|
391
|
+
name.to_s,
|
|
392
|
+
args.map(&:to_s),
|
|
393
|
+
comment_location&.source
|
|
394
|
+
]
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
class BlockParamTypeAnnotation < Base
|
|
399
|
+
attr_reader :ampersand_location, :name_location, :colon_location, :question_location, :type_location, :type, :comment_location
|
|
400
|
+
|
|
401
|
+
def initialize(location:, prefix_location:, ampersand_location:, name_location:, colon_location:, question_location:, type_location:, type:, comment_location:)
|
|
402
|
+
super(location, prefix_location)
|
|
403
|
+
@ampersand_location = ampersand_location
|
|
404
|
+
@name_location = name_location
|
|
405
|
+
@colon_location = colon_location
|
|
406
|
+
@question_location = question_location
|
|
407
|
+
@type_location = type_location
|
|
408
|
+
@type = type
|
|
409
|
+
@comment_location = comment_location
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
def map_type_name(&block)
|
|
413
|
+
self.class.new(
|
|
414
|
+
location:,
|
|
415
|
+
prefix_location:,
|
|
416
|
+
ampersand_location: ampersand_location,
|
|
417
|
+
name_location: name_location,
|
|
418
|
+
colon_location: colon_location,
|
|
419
|
+
question_location: question_location,
|
|
420
|
+
type_location: type_location,
|
|
421
|
+
type: type.map_type_name { yield _1 },
|
|
422
|
+
comment_location: comment_location
|
|
423
|
+
) #: self
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
def name
|
|
427
|
+
name_location&.source&.to_sym
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
def optional?
|
|
431
|
+
question_location ? true : false
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
def required?
|
|
435
|
+
!optional?
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
def type_fingerprint
|
|
439
|
+
[
|
|
440
|
+
"annots/block_param_type",
|
|
441
|
+
name_location&.source,
|
|
442
|
+
type.to_s,
|
|
443
|
+
optional? ? "optional" : "required",
|
|
444
|
+
comment_location&.source
|
|
445
|
+
]
|
|
446
|
+
end
|
|
115
447
|
end
|
|
116
448
|
end
|
|
117
449
|
end
|
|
@@ -15,6 +15,7 @@ module RBS
|
|
|
15
15
|
prefix_str = "# "
|
|
16
16
|
|
|
17
17
|
ranges = [] #: Array[Range[Integer]]
|
|
18
|
+
byte_ranges = [] #: Array[Range[Integer]]
|
|
18
19
|
|
|
19
20
|
comments.each do |comment|
|
|
20
21
|
tuple = [comment, 2] #: [Prism::Comment, Integer]
|
|
@@ -25,12 +26,13 @@ module RBS
|
|
|
25
26
|
|
|
26
27
|
offsets << tuple
|
|
27
28
|
|
|
28
|
-
start_char = comment.location.
|
|
29
|
-
end_char = comment.location.
|
|
29
|
+
start_char = source_buffer.character_offset(comment.location.start_offset) + tuple[1]
|
|
30
|
+
end_char = source_buffer.character_offset(comment.location.end_offset)
|
|
30
31
|
ranges << (start_char ... end_char)
|
|
32
|
+
byte_ranges << ((comment.location.start_offset + tuple[1]) ... comment.location.end_offset)
|
|
31
33
|
end
|
|
32
34
|
|
|
33
|
-
@comment_buffer = source_buffer.sub_buffer(lines: ranges)
|
|
35
|
+
@comment_buffer = source_buffer.sub_buffer(lines: ranges, byte_lines_hint: byte_ranges)
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
def leading?
|
|
@@ -53,7 +55,7 @@ module RBS
|
|
|
53
55
|
|
|
54
56
|
def line_starts
|
|
55
57
|
offsets.map do |comment, prefix_size|
|
|
56
|
-
comment.location.
|
|
58
|
+
comment_buffer.character_offset(comment.location.start_offset) + prefix_size
|
|
57
59
|
end
|
|
58
60
|
end
|
|
59
61
|
|
|
@@ -177,6 +179,13 @@ module RBS
|
|
|
177
179
|
Location.new(comment_buffer, start_offset, end_offset)
|
|
178
180
|
end
|
|
179
181
|
|
|
182
|
+
def location()
|
|
183
|
+
first_comment = comments[0] or raise
|
|
184
|
+
last_comment = comments[-1] or raise
|
|
185
|
+
|
|
186
|
+
comment_buffer.rbs_location(first_comment.location.join last_comment.location)
|
|
187
|
+
end
|
|
188
|
+
|
|
180
189
|
def parse_annotation_lines(start_line, end_line, variables)
|
|
181
190
|
start_pos = comment_buffer.ranges[start_line].begin
|
|
182
191
|
end_pos = comment_buffer.ranges[end_line].end
|
|
@@ -215,6 +224,23 @@ module RBS
|
|
|
215
224
|
|
|
216
225
|
false
|
|
217
226
|
end
|
|
227
|
+
|
|
228
|
+
def as_comment
|
|
229
|
+
lines = [] #: Array[String]
|
|
230
|
+
|
|
231
|
+
each_paragraph([]) do |paragraph|
|
|
232
|
+
case paragraph
|
|
233
|
+
when Location
|
|
234
|
+
lines << paragraph.local_source
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
string = lines.join("\n")
|
|
239
|
+
|
|
240
|
+
unless string.strip.empty?
|
|
241
|
+
AST::Comment.new(string: string, location: location)
|
|
242
|
+
end
|
|
243
|
+
end
|
|
218
244
|
end
|
|
219
245
|
end
|
|
220
246
|
end
|