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/sig/environment.rbs
CHANGED
|
@@ -2,81 +2,20 @@ module RBS
|
|
|
2
2
|
class Environment
|
|
3
3
|
type module_decl = AST::Declarations::Class | AST::Declarations::Module
|
|
4
4
|
|
|
5
|
-
interface _ModuleOrClass
|
|
6
|
-
def name: () -> TypeName
|
|
7
|
-
|
|
8
|
-
def type_params: () -> Array[AST::TypeParam]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
interface _NamedDecl
|
|
12
|
-
def name: () -> TypeName
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
module ContextUtil
|
|
16
|
-
def calculate_context: (Array[_NamedDecl]) -> Resolver::context
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# Name of object, it's (multiple) declarations with the outer module declarations
|
|
20
|
-
#
|
|
21
|
-
class MultiEntry[M < _ModuleOrClass]
|
|
22
|
-
class D[M < _ModuleOrClass]
|
|
23
|
-
attr_reader decl: M
|
|
24
|
-
attr_reader outer: Array[module_decl]
|
|
25
|
-
|
|
26
|
-
def initialize: (decl: M, outer: Array[module_decl]) -> void
|
|
27
|
-
|
|
28
|
-
include ContextUtil
|
|
29
|
-
|
|
30
|
-
@context: Resolver::context
|
|
31
|
-
|
|
32
|
-
def context: () -> Resolver::context
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
attr_reader name: TypeName
|
|
36
|
-
attr_reader decls: Array[D[M]]
|
|
37
|
-
|
|
38
|
-
@primary: D[M]?
|
|
39
|
-
|
|
40
|
-
def initialize: (name: TypeName) -> void
|
|
41
|
-
|
|
42
|
-
def insert: (decl: M, outer: Array[module_decl]) -> void
|
|
43
|
-
|
|
44
|
-
def validate_type_params: () -> void
|
|
45
|
-
|
|
46
|
-
def compatible_params?: (Array[AST::TypeParam], Array[AST::TypeParam]) -> boolish
|
|
47
|
-
|
|
48
|
-
def type_params: () -> Array[AST::TypeParam]
|
|
49
|
-
|
|
50
|
-
def primary: () -> D[M]
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
class ModuleEntry < MultiEntry[AST::Declarations::Module]
|
|
54
|
-
def self_types: () -> Array[AST::Declarations::Module::Self]
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
class ClassEntry < MultiEntry[AST::Declarations::Class]
|
|
58
|
-
end
|
|
59
|
-
|
|
60
5
|
# Name of object, it's (single) declaration, and the outer module declarations
|
|
61
6
|
#
|
|
62
7
|
class SingleEntry[N, D]
|
|
63
8
|
attr_reader name: N
|
|
64
9
|
attr_reader decl: D
|
|
65
|
-
attr_reader
|
|
66
|
-
|
|
67
|
-
def initialize: (name: N, decl: D, outer: Array[module_decl]) -> void
|
|
10
|
+
attr_reader context: Resolver::context
|
|
68
11
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
@context: Resolver::context
|
|
72
|
-
|
|
73
|
-
def context: () -> Resolver::context
|
|
12
|
+
def initialize: (name: N, decl: D, context: Resolver::context) -> void
|
|
74
13
|
end
|
|
75
14
|
|
|
76
|
-
class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias]
|
|
15
|
+
class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
|
|
77
16
|
end
|
|
78
17
|
|
|
79
|
-
class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias]
|
|
18
|
+
class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
|
|
80
19
|
end
|
|
81
20
|
|
|
82
21
|
class InterfaceEntry < SingleEntry[TypeName, AST::Declarations::Interface]
|
|
@@ -85,14 +24,18 @@ module RBS
|
|
|
85
24
|
class TypeAliasEntry < SingleEntry[TypeName, AST::Declarations::TypeAlias]
|
|
86
25
|
end
|
|
87
26
|
|
|
88
|
-
class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant]
|
|
27
|
+
class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant | AST::Ruby::Declarations::ConstantDecl]
|
|
89
28
|
end
|
|
90
29
|
|
|
91
30
|
class GlobalEntry < SingleEntry[Symbol, AST::Declarations::Global]
|
|
92
31
|
end
|
|
93
32
|
|
|
94
33
|
# Top level declarations
|
|
95
|
-
|
|
34
|
+
def declarations: () -> Array[AST::Ruby::Declarations::t | AST::Declarations::t]
|
|
35
|
+
|
|
36
|
+
# Array of source objects loaded in the environment
|
|
37
|
+
#
|
|
38
|
+
attr_reader sources: Array[Source::t]
|
|
96
39
|
|
|
97
40
|
# Class declarations
|
|
98
41
|
attr_reader class_decls: Hash[TypeName, ModuleEntry | ClassEntry]
|
|
@@ -111,10 +54,6 @@ module RBS
|
|
|
111
54
|
# Global declarations
|
|
112
55
|
attr_reader global_decls: Hash[Symbol, GlobalEntry]
|
|
113
56
|
|
|
114
|
-
# A hash from Buffer to it's contents
|
|
115
|
-
#
|
|
116
|
-
attr_reader signatures: Hash[Buffer, [Array[AST::Directives::t], Array[AST::Declarations::t]]]
|
|
117
|
-
|
|
118
57
|
def initialize: () -> void
|
|
119
58
|
|
|
120
59
|
def initialize_copy: (Environment) -> void
|
|
@@ -123,15 +62,21 @@ module RBS
|
|
|
123
62
|
#
|
|
124
63
|
def self.from_loader: (EnvironmentLoader) -> Environment
|
|
125
64
|
|
|
126
|
-
def
|
|
65
|
+
def add_source: (Source::t) -> void
|
|
66
|
+
|
|
67
|
+
def each_rbs_source: () { (Source::RBS) -> void } -> void
|
|
68
|
+
| () -> Enumerator[Source::RBS]
|
|
127
69
|
|
|
128
|
-
|
|
70
|
+
def each_ruby_source: () { (Source::Ruby) -> void } -> void
|
|
71
|
+
| () -> Enumerator[Source::Ruby]
|
|
72
|
+
|
|
73
|
+
# Insert a declaration into the environment
|
|
129
74
|
#
|
|
130
|
-
def
|
|
75
|
+
private def insert_rbs_decl: (AST::Declarations::t, context: Resolver::context, namespace: Namespace) -> void
|
|
131
76
|
|
|
132
77
|
# Insert a declaration into the environment
|
|
133
78
|
#
|
|
134
|
-
private def
|
|
79
|
+
private def insert_ruby_decl: (AST::Ruby::Declarations::t, context: Resolver::context, namespace: Namespace) -> void
|
|
135
80
|
|
|
136
81
|
# Resolve all type names in the environment to absolute type names.
|
|
137
82
|
# Relative type name will be left if absolute type name cannot be found.
|
|
@@ -139,9 +84,15 @@ module RBS
|
|
|
139
84
|
# When `only` is given, it skips other _top-level_ declarations not included in the collection.
|
|
140
85
|
# This helps running resolution faster in the case of _partial updates_.
|
|
141
86
|
#
|
|
142
|
-
def resolve_type_names: (?only: Set[AST::Declarations::t]?) -> Environment
|
|
87
|
+
def resolve_type_names: (?only: Set[AST::Declarations::t | AST::Ruby::Declarations::t]?) -> Environment
|
|
143
88
|
|
|
144
|
-
def resolve_signature: (
|
|
89
|
+
def resolve_signature: (
|
|
90
|
+
Resolver::TypeNameResolver,
|
|
91
|
+
UseMap::Table,
|
|
92
|
+
Array[AST::Directives::t],
|
|
93
|
+
Array[AST::Declarations::t],
|
|
94
|
+
?only: Set[AST::Declarations::t | AST::Ruby::Declarations::t]?
|
|
95
|
+
) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
|
|
145
96
|
|
|
146
97
|
def inspect: () -> String
|
|
147
98
|
|
|
@@ -149,7 +100,8 @@ module RBS
|
|
|
149
100
|
|
|
150
101
|
# Remove declarations and directives that are loaded from `buffers`
|
|
151
102
|
#
|
|
152
|
-
def unload: (Set[
|
|
103
|
+
def unload: (Set[Pathname] paths) -> Environment
|
|
104
|
+
| %a{deprecated: Use pathname version} (Set[Buffer] buffers) -> Environment
|
|
153
105
|
|
|
154
106
|
# Returns true if an interface with the type name is defined
|
|
155
107
|
#
|
|
@@ -190,22 +142,58 @@ module RBS
|
|
|
190
142
|
# Returns true if the type name is a class alias
|
|
191
143
|
def class_alias?: (TypeName) -> bool
|
|
192
144
|
|
|
193
|
-
|
|
145
|
+
# Returns the entry for the class name
|
|
146
|
+
#
|
|
147
|
+
# Returns `nil` when:
|
|
148
|
+
#
|
|
149
|
+
# * The type name is not found
|
|
150
|
+
# * The type name is not a class
|
|
151
|
+
#
|
|
152
|
+
# It normalizes when `normalized: true` is given -- returns `ClassEntry` or `nil`.
|
|
153
|
+
#
|
|
154
|
+
def class_entry: (TypeName, normalized: true) -> ClassEntry?
|
|
155
|
+
| (TypeName, ?normalized: bool) -> (ClassEntry | ClassAliasEntry | nil)
|
|
194
156
|
|
|
195
157
|
# Returns ClassEntry if the class definition is found, normalized in case of alias
|
|
196
158
|
#
|
|
159
|
+
%a{deprecated: Use `class_entry(type_name, normalized: true)` instead. }
|
|
197
160
|
def normalized_class_entry: (TypeName) -> ClassEntry?
|
|
198
161
|
|
|
199
|
-
|
|
162
|
+
# Returns the entry for the module name
|
|
163
|
+
#
|
|
164
|
+
# Returns `nil` when:
|
|
165
|
+
#
|
|
166
|
+
# * The type name is not found
|
|
167
|
+
# * The type name is not a module
|
|
168
|
+
#
|
|
169
|
+
# It normalizes when `normalized: true` is given -- returns `ModuleEntry` or `nil`.
|
|
170
|
+
#
|
|
171
|
+
def module_entry: (TypeName, normalized: true) -> ModuleEntry?
|
|
172
|
+
| (TypeName, ?normalized: bool) -> (ModuleEntry | ModuleAliasEntry | nil)
|
|
200
173
|
|
|
201
174
|
# Returns ModuleEntry if the module definition is found, normalized in case of alias
|
|
202
175
|
#
|
|
176
|
+
%a{deprecated: Use `module_entry(type_name, normalized: true)` instead. }
|
|
203
177
|
def normalized_module_entry: (TypeName) -> ModuleEntry?
|
|
204
178
|
|
|
205
|
-
|
|
179
|
+
# Returns the entry for the type name
|
|
180
|
+
#
|
|
181
|
+
# The entry is one of ClassEntry, ModuleEntry, ConstantEntry, ClassAliasEntry, or ModuleAliasEntry.
|
|
182
|
+
# When `normalized: true` is given, it returns normalized entry -- one of ClassEntry, ModuleEntry, or ConstantEntry.
|
|
183
|
+
#
|
|
184
|
+
# Returns `nil` if not found.
|
|
185
|
+
#
|
|
186
|
+
def constant_entry: (TypeName, normalized: true) -> (ClassEntry | ModuleEntry | ConstantEntry | nil)
|
|
187
|
+
| (TypeName, ?normalized: bool) -> (ClassEntry | ClassAliasEntry | ModuleEntry | ModuleAliasEntry | ConstantEntry | nil)
|
|
206
188
|
|
|
207
|
-
|
|
189
|
+
# Returns ClassEntry or ModuleEntry if the class/module definition is found
|
|
190
|
+
#
|
|
191
|
+
# Normalizes when `normalized: true` is given.
|
|
192
|
+
#
|
|
193
|
+
def module_class_entry: (TypeName, normalized: true) -> (ClassEntry | ModuleEntry | nil)
|
|
194
|
+
| (TypeName, ?normalized: bool) -> (ClassEntry | ClassAliasEntry | ModuleEntry | ModuleAliasEntry | nil)
|
|
208
195
|
|
|
196
|
+
%a{deprecated: Use `module_class_entry(type_name, normalized: true)` instead. }
|
|
209
197
|
def normalized_module_class_entry: (TypeName) -> (ClassEntry | ModuleEntry | nil)
|
|
210
198
|
|
|
211
199
|
@normalize_module_name_cache: Hash[TypeName, TypeName | false | nil]
|
|
@@ -216,26 +204,39 @@ module RBS
|
|
|
216
204
|
# * Returns `nil` if the rhs name cannot be found
|
|
217
205
|
# * Returns `false` if the name is cyclic
|
|
218
206
|
#
|
|
207
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
208
|
+
#
|
|
219
209
|
def normalize_module_name?: (TypeName) -> (TypeName | nil | false)
|
|
220
210
|
|
|
221
|
-
# Returns the original module name that is defined with `module` declaration
|
|
211
|
+
# Returns the original module name that is defined with `module`/`class` declaration
|
|
222
212
|
#
|
|
223
|
-
# * Raises an error if given type name is not module
|
|
213
|
+
# * Raises an error if given type name is not module/class
|
|
224
214
|
# * Calls `#absolute!` for relative module names
|
|
225
215
|
# * Returns the name itself if the name cannot be normalized to a class/module
|
|
226
216
|
#
|
|
217
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
218
|
+
#
|
|
227
219
|
def normalize_module_name: (TypeName) -> TypeName
|
|
228
220
|
|
|
221
|
+
# Returns the original module name that is defined with `module`/`class` declaration
|
|
222
|
+
#
|
|
223
|
+
# * Raises an error if given type name is not a module/class
|
|
224
|
+
def normalize_module_name!: (TypeName) -> TypeName
|
|
225
|
+
|
|
229
226
|
# Returns a normalized module/class name or a type name with a normalized namespace
|
|
230
227
|
#
|
|
231
228
|
# * Calls `#absolute!` for relative module names
|
|
232
229
|
# * Returns `nil` if the typename cannot be found
|
|
233
230
|
# * Returns `false` if the name is cyclic
|
|
234
231
|
#
|
|
232
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
233
|
+
#
|
|
235
234
|
def normalize_type_name?: (TypeName) -> (TypeName | nil | false)
|
|
236
235
|
|
|
237
236
|
# Normalize the type name or raises an error
|
|
238
237
|
#
|
|
238
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
239
|
+
#
|
|
239
240
|
def normalize_type_name!: (TypeName) -> TypeName
|
|
240
241
|
|
|
241
242
|
# Returns a normalized module/class name or a type name with a normalized namespace
|
|
@@ -243,6 +244,8 @@ module RBS
|
|
|
243
244
|
# * Calls `#absolute!` for relative module names
|
|
244
245
|
# * Returns the typename itself if the name cannot be normalized
|
|
245
246
|
#
|
|
247
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
248
|
+
#
|
|
246
249
|
def normalize_type_name: (TypeName) -> TypeName
|
|
247
250
|
|
|
248
251
|
# Returns `true` if given type name is normalized
|
|
@@ -264,7 +267,7 @@ module RBS
|
|
|
264
267
|
|
|
265
268
|
def append_context: (Resolver::context, module_decl) -> Resolver::context
|
|
266
269
|
|
|
267
|
-
def resolve_declaration: (Resolver::TypeNameResolver resolver, UseMap map, AST::Declarations::t decl,
|
|
270
|
+
def resolve_declaration: (Resolver::TypeNameResolver resolver, UseMap map, AST::Declarations::t decl, context: Resolver::context, prefix: Namespace) -> AST::Declarations::t
|
|
268
271
|
|
|
269
272
|
def resolve_member: (Resolver::TypeNameResolver, UseMap map, AST::Members::t, context: Resolver::context) -> AST::Members::t
|
|
270
273
|
|
|
@@ -272,8 +275,12 @@ module RBS
|
|
|
272
275
|
|
|
273
276
|
def resolve_type_params: (Resolver::TypeNameResolver resolver, UseMap map, Array[AST::TypeParam], context: Resolver::context) -> Array[AST::TypeParam]
|
|
274
277
|
|
|
275
|
-
def
|
|
278
|
+
def resolve_ruby_decl: (Resolver::TypeNameResolver, AST::Ruby::Declarations::t, context: Resolver::context, prefix: Namespace) -> AST::Ruby::Declarations::t
|
|
279
|
+
|
|
280
|
+
def resolve_ruby_member: (Resolver::TypeNameResolver, AST::Ruby::Members::t, context: Resolver::context) -> AST::Ruby::Members::t
|
|
281
|
+
|
|
282
|
+
def absolute_type: (Resolver::TypeNameResolver, UseMap? map, Types::t, context: Resolver::context) -> Types::t
|
|
276
283
|
|
|
277
|
-
def absolute_type_name: (Resolver::TypeNameResolver, UseMap map, TypeName, context: Resolver::context) -> TypeName
|
|
284
|
+
def absolute_type_name: (Resolver::TypeNameResolver, UseMap? map, TypeName, context: Resolver::context) -> TypeName
|
|
278
285
|
end
|
|
279
286
|
end
|
data/sig/errors.rbs
CHANGED
|
@@ -115,14 +115,16 @@ module RBS
|
|
|
115
115
|
class NoMixinFoundError < DefinitionError
|
|
116
116
|
include DetailedMessageable
|
|
117
117
|
|
|
118
|
+
type member = AST::Members::t | AST::Ruby::Members::IncludeMember | AST::Ruby::Members::ExtendMember | AST::Ruby::Members::PrependMember
|
|
119
|
+
|
|
118
120
|
attr_reader type_name: TypeName
|
|
119
|
-
attr_reader member:
|
|
121
|
+
attr_reader member: member
|
|
120
122
|
|
|
121
|
-
def initialize: (type_name: TypeName, member:
|
|
123
|
+
def initialize: (type_name: TypeName, member: member) -> void
|
|
122
124
|
|
|
123
125
|
def location: () -> Location[untyped, untyped]?
|
|
124
126
|
|
|
125
|
-
def self.check!: (TypeName, env: Environment, member:
|
|
127
|
+
def self.check!: (TypeName, env: Environment, member: member) -> void
|
|
126
128
|
end
|
|
127
129
|
|
|
128
130
|
class DuplicatedMethodDefinitionError < DefinitionError
|
|
@@ -226,28 +228,35 @@ module RBS
|
|
|
226
228
|
class InvalidOverloadMethodError < DefinitionError
|
|
227
229
|
include DetailedMessageable
|
|
228
230
|
|
|
231
|
+
type member = AST::Members::MethodDefinition | AST::Ruby::Members::DefMember
|
|
232
|
+
|
|
229
233
|
attr_reader type_name: TypeName
|
|
230
234
|
attr_reader method_name: Symbol
|
|
231
235
|
attr_reader kind: :instance | :singleton
|
|
232
|
-
attr_reader members: Array[
|
|
236
|
+
attr_reader members: Array[member]
|
|
233
237
|
|
|
234
|
-
def initialize: (type_name: TypeName, method_name: Symbol, kind: :instance | :singleton, members: Array[
|
|
238
|
+
def initialize: (type_name: TypeName, method_name: Symbol, kind: :instance | :singleton, members: Array[member]) -> void
|
|
235
239
|
|
|
236
240
|
def location: () -> AST::Members::MethodDefinition::loc?
|
|
237
241
|
end
|
|
238
242
|
|
|
239
243
|
class GenericParameterMismatchError < LoadingError
|
|
244
|
+
type decl = AST::Declarations::Class | AST::Declarations::Module
|
|
245
|
+
| AST::Ruby::Declarations::ClassDecl | AST::Ruby::Declarations::ModuleDecl
|
|
246
|
+
|
|
240
247
|
attr_reader name: TypeName
|
|
241
|
-
attr_reader decl:
|
|
248
|
+
attr_reader decl: decl
|
|
242
249
|
|
|
243
|
-
def initialize: (name: TypeName, decl:
|
|
250
|
+
def initialize: (name: TypeName, decl: decl, ?location: Location) -> void
|
|
244
251
|
end
|
|
245
252
|
|
|
246
253
|
class DuplicatedDeclarationError < LoadingError
|
|
254
|
+
type declaration = AST::Declarations::t | AST::Ruby::Declarations::t
|
|
255
|
+
|
|
247
256
|
attr_reader name: TypeName | Symbol
|
|
248
|
-
attr_reader decls: Array[
|
|
257
|
+
attr_reader decls: Array[declaration]
|
|
249
258
|
|
|
250
|
-
def initialize: (TypeName | Symbol, *
|
|
259
|
+
def initialize: (TypeName | Symbol, *declaration) -> void
|
|
251
260
|
end
|
|
252
261
|
|
|
253
262
|
class InvalidVarianceAnnotationError < DefinitionError
|
|
@@ -280,6 +289,7 @@ module RBS
|
|
|
280
289
|
include DetailedMessageable
|
|
281
290
|
|
|
282
291
|
type member = AST::Members::Include | AST::Members::Prepend | AST::Members::Extend
|
|
292
|
+
| AST::Ruby::Members::IncludeMember | AST::Ruby::Members::PrependMember | AST::Ruby::Members::ExtendMember
|
|
283
293
|
|
|
284
294
|
attr_reader type_name: TypeName
|
|
285
295
|
attr_reader member: member
|
|
@@ -290,17 +300,21 @@ module RBS
|
|
|
290
300
|
|
|
291
301
|
def self.check!: (type_name: TypeName, env: Environment, member: member) -> void
|
|
292
302
|
|
|
303
|
+
def member_name: (member) -> TypeName
|
|
304
|
+
|
|
293
305
|
def mixin_name: () -> String
|
|
294
306
|
end
|
|
295
307
|
|
|
296
308
|
# InheritModuleError is raised if a class definition inherits a module (not a class)
|
|
297
309
|
#
|
|
298
310
|
class InheritModuleError < DefinitionError
|
|
311
|
+
type super_class = AST::Declarations::Class::Super | AST::Ruby::Declarations::ClassDecl::SuperClass
|
|
312
|
+
|
|
299
313
|
include DetailedMessageable
|
|
300
314
|
|
|
301
|
-
attr_reader super_decl:
|
|
315
|
+
attr_reader super_decl: super_class
|
|
302
316
|
|
|
303
|
-
def initialize: (
|
|
317
|
+
def initialize: (super_class) -> void
|
|
304
318
|
|
|
305
319
|
def location: () -> Location[untyped, untyped]?
|
|
306
320
|
|
|
@@ -308,7 +322,7 @@ module RBS
|
|
|
308
322
|
#
|
|
309
323
|
# Automatically normalize the name of super.
|
|
310
324
|
#
|
|
311
|
-
def self.check!: (
|
|
325
|
+
def self.check!: (super_class, env: Environment) -> void
|
|
312
326
|
end
|
|
313
327
|
|
|
314
328
|
class RecursiveTypeAliasError < BaseError
|
|
@@ -380,14 +394,6 @@ module RBS
|
|
|
380
394
|
def location: () -> AST::Declarations::AliasDecl::loc?
|
|
381
395
|
end
|
|
382
396
|
|
|
383
|
-
class WillSyntaxError < BaseError
|
|
384
|
-
include RBS::DetailedMessageable
|
|
385
|
-
|
|
386
|
-
def initialize: (String message, location: Location[untyped, untyped]?) -> void
|
|
387
|
-
|
|
388
|
-
attr_reader location: Location[untyped, untyped]?
|
|
389
|
-
end
|
|
390
|
-
|
|
391
397
|
class TypeParamDefaultReferenceError < BaseError
|
|
392
398
|
include DetailedMessageable
|
|
393
399
|
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
use RBS::AST::Ruby::CommentBlock
|
|
2
|
+
|
|
3
|
+
module RBS
|
|
4
|
+
class InlineParser
|
|
5
|
+
# CommentAssociation manages the association between `Prism::Node` and `CommentBlock`
|
|
6
|
+
#
|
|
7
|
+
class CommentAssociation
|
|
8
|
+
attr_reader blocks: Array[CommentBlock]
|
|
9
|
+
|
|
10
|
+
attr_reader start_line_map: Hash[Integer, CommentBlock]
|
|
11
|
+
|
|
12
|
+
attr_reader end_line_map: Hash[Integer, CommentBlock]
|
|
13
|
+
|
|
14
|
+
# CommentBlocks that are already associated to a node, which cannot be associated to another node again
|
|
15
|
+
#
|
|
16
|
+
attr_reader associated_blocks: Set[CommentBlock]
|
|
17
|
+
|
|
18
|
+
def self.build: (Buffer, Prism::Result) -> instance
|
|
19
|
+
|
|
20
|
+
def initialize: (Array[CommentBlock]) -> void
|
|
21
|
+
|
|
22
|
+
class Reference
|
|
23
|
+
attr_reader block: CommentBlock
|
|
24
|
+
|
|
25
|
+
@associated_blocks: Set[CommentBlock]
|
|
26
|
+
|
|
27
|
+
def initialize: (CommentBlock, Set[CommentBlock]) -> void
|
|
28
|
+
|
|
29
|
+
def associate!: () -> self
|
|
30
|
+
|
|
31
|
+
def associated?: () -> bool
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Returns an unassociated CommentBlock that can be associated to given node
|
|
35
|
+
#
|
|
36
|
+
# Automatically updates association status.
|
|
37
|
+
#
|
|
38
|
+
def leading_block!: (Prism::Node) -> CommentBlock?
|
|
39
|
+
|
|
40
|
+
# Returns a Reference that is associated to given node
|
|
41
|
+
#
|
|
42
|
+
# Updates association explicitly through the reference.
|
|
43
|
+
#
|
|
44
|
+
def leading_block: (Prism::Node) -> Reference?
|
|
45
|
+
|
|
46
|
+
# Returns a CommentBlock that is associated to given node, or by its location
|
|
47
|
+
#
|
|
48
|
+
# Update association status.
|
|
49
|
+
#
|
|
50
|
+
def trailing_block!: (Prism::Node | Prism::Location) -> CommentBlock?
|
|
51
|
+
|
|
52
|
+
# Returns a Reference that is associated to given node, or by its location
|
|
53
|
+
#
|
|
54
|
+
# Updates association explicitly through the reference.
|
|
55
|
+
#
|
|
56
|
+
def trailing_block: (Prism::Node | Prism::Location) -> Reference?
|
|
57
|
+
|
|
58
|
+
# Yields leading CommentBlocks that is enclosed in the given node
|
|
59
|
+
#
|
|
60
|
+
# Note that `enclosed_blocks` works only after all of the *leading* blocks inside the node is associated.
|
|
61
|
+
#
|
|
62
|
+
# Update association status.
|
|
63
|
+
#
|
|
64
|
+
def each_enclosed_block: (Prism::Node) { (CommentBlock) -> void } -> void
|
|
65
|
+
| (Prism::Node) -> Enumerator[CommentBlock]
|
|
66
|
+
|
|
67
|
+
def each_unassociated_block: () { (CommentBlock) -> void } -> void
|
|
68
|
+
| () -> Enumerator[CommentBlock]
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
use RBS::AST::Ruby::Declarations
|
|
2
|
+
|
|
3
|
+
module RBS
|
|
4
|
+
class InlineParser
|
|
5
|
+
class Result
|
|
6
|
+
attr_reader buffer: Buffer
|
|
7
|
+
attr_reader prism_result: Prism::ParseResult
|
|
8
|
+
attr_reader declarations: Array[AST::Ruby::Declarations::t]
|
|
9
|
+
attr_reader diagnostics: Array[Diagnostic::t]
|
|
10
|
+
|
|
11
|
+
def initialize: (Buffer, Prism::ParseResult) -> void
|
|
12
|
+
|
|
13
|
+
def type_fingerprint: () -> untyped
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module Diagnostic
|
|
17
|
+
class Base
|
|
18
|
+
attr_reader message: String
|
|
19
|
+
|
|
20
|
+
attr_reader location: Location
|
|
21
|
+
|
|
22
|
+
def initialize: (Location, String) -> void
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class NotImplementedYet < Base
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class NonConstantClassName < Base
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class NonConstantModuleName < Base
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class NonConstantSuperClassName < Base
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class TopLevelMethodDefinition < Base
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class TopLevelAttributeDefinition < Base
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class UnusedInlineAnnotation < Base
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class AnnotationSyntaxError < Base
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class MixinMultipleArguments < Base
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class MixinNonConstantModule < Base
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class AttributeNonSymbolName < Base
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class NonConstantConstantDeclaration < Base
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
class ClassModuleAliasDeclarationMissingTypeName < Base
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
type t = NotImplementedYet
|
|
65
|
+
| NonConstantClassName | NonConstantModuleName | NonConstantSuperClassName
|
|
66
|
+
| TopLevelMethodDefinition | TopLevelAttributeDefinition
|
|
67
|
+
| UnusedInlineAnnotation | AnnotationSyntaxError
|
|
68
|
+
| MixinMultipleArguments | MixinNonConstantModule
|
|
69
|
+
| AttributeNonSymbolName
|
|
70
|
+
| NonConstantConstantDeclaration
|
|
71
|
+
| ClassModuleAliasDeclarationMissingTypeName
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def self.parse: (Buffer, Prism::ParseResult) -> Result
|
|
75
|
+
|
|
76
|
+
class Parser < Prism::Visitor
|
|
77
|
+
type module_context = Declarations::ClassDecl | Declarations::ModuleDecl
|
|
78
|
+
|
|
79
|
+
include AST::Ruby::Helpers::ConstantHelper
|
|
80
|
+
|
|
81
|
+
include AST::Ruby::Helpers::LocationHelper
|
|
82
|
+
|
|
83
|
+
attr_reader comments: CommentAssociation
|
|
84
|
+
|
|
85
|
+
attr_reader result: Result
|
|
86
|
+
|
|
87
|
+
attr_reader module_nesting: Array[module_context]
|
|
88
|
+
|
|
89
|
+
def initialize: (Result) -> void
|
|
90
|
+
|
|
91
|
+
def buffer: () -> Buffer
|
|
92
|
+
|
|
93
|
+
%a{pure} def current_module: () -> module_context?
|
|
94
|
+
|
|
95
|
+
%a{pure} def current_module!: () -> module_context
|
|
96
|
+
|
|
97
|
+
def diagnostics: () -> Array[Diagnostic::t]
|
|
98
|
+
|
|
99
|
+
def push_module_nesting: [T] (module_context) { () -> T } -> T
|
|
100
|
+
|
|
101
|
+
# Returns `true` if the node is a comment block including `@rbs skip` annotation
|
|
102
|
+
#
|
|
103
|
+
# Doesn't update the `association` flag if returning `false`.
|
|
104
|
+
#
|
|
105
|
+
def skip_node?: (Prism::Node) -> bool
|
|
106
|
+
|
|
107
|
+
def insert_declaration: (module_context) -> void
|
|
108
|
+
|
|
109
|
+
def report_unused_annotation: (*AST::Ruby::Annotations::t | nil | AST::Ruby::CommentBlock::AnnotationSyntaxError) -> void
|
|
110
|
+
|
|
111
|
+
def report_unused_block: (AST::Ruby::CommentBlock) -> void
|
|
112
|
+
|
|
113
|
+
private
|
|
114
|
+
|
|
115
|
+
def parse_mixin_call: (Prism::CallNode) -> void
|
|
116
|
+
|
|
117
|
+
def parse_attribute_call: (Prism::CallNode) -> void
|
|
118
|
+
|
|
119
|
+
def parse_constant_declaration: (Prism::ConstantWriteNode | Prism::ConstantPathWriteNode) -> void
|
|
120
|
+
|
|
121
|
+
def parse_super_class: (Prism::node, Prism::Location) -> Declarations::ClassDecl::SuperClass?
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|