rbs 4.0.0.dev.4 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +18 -11
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +27 -34
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +2 -2
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +323 -0
- data/README.md +1 -1
- data/Rakefile +43 -33
- data/Steepfile +1 -0
- data/config.yml +426 -24
- 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 +179 -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 +192 -144
- 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 +3234 -1285
- data/core/struct.rbs +27 -26
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +135 -67
- 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 +544 -116
- data/ext/rbs_extension/ast_translation.h +3 -0
- data/ext/rbs_extension/class_constants.c +16 -2
- data/ext/rbs_extension/class_constants.h +8 -0
- data/ext/rbs_extension/extconf.rb +5 -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 +44 -35
- data/include/rbs/ast.h +448 -173
- data/include/rbs/defines.h +27 -0
- data/include/rbs/lexer.h +30 -11
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +6 -6
- 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/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 +293 -3
- data/lib/rbs/ast/ruby/comment_block.rb +24 -0
- data/lib/rbs/ast/ruby/declarations.rb +198 -3
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
- data/lib/rbs/ast/ruby/members.rb +532 -22
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +20 -15
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +38 -106
- data/lib/rbs/cli.rb +52 -19
- data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
- data/lib/rbs/collection/sources/git.rb +1 -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 +20 -0
- data/lib/rbs/definition_builder.rb +147 -25
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment.rb +227 -74
- data/lib/rbs/environment_loader.rb +0 -6
- data/lib/rbs/errors.rb +27 -18
- data/lib/rbs/inline_parser.rb +342 -6
- 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/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 +8 -0
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +116 -38
- data/lib/rbs/subtractor.rb +3 -1
- data/lib/rbs/test/type_check.rb +19 -2
- data/lib/rbs/type_name.rb +1 -1
- data/lib/rbs/types.rb +88 -78
- 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 +1 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +1 -1
- data/rbs.gemspec +4 -3
- 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/ast/ruby/annotations.rbs +315 -4
- data/sig/ast/ruby/comment_block.rbs +8 -0
- data/sig/ast/ruby/declarations.rbs +102 -4
- data/sig/ast/ruby/members.rbs +108 -2
- 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 -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 +39 -2
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -1
- data/sig/method_builder.rbs +3 -1
- data/sig/parser.rbs +31 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +35 -7
- data/sig/source.rbs +3 -3
- data/sig/type_param.rbs +13 -8
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +410 -153
- data/src/lexer.c +1392 -1313
- data/src/lexer.re +3 -0
- data/src/lexstate.c +58 -37
- data/src/location.c +8 -48
- data/src/parser.c +977 -516
- data/src/string.c +0 -48
- data/src/util/rbs_allocator.c +89 -71
- 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/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 +217 -136
- 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 +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 +25 -68
- 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 +2 -2
- 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 +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 +50 -6
|
@@ -8,28 +8,56 @@ module RBS
|
|
|
8
8
|
class TypeNameResolver
|
|
9
9
|
type query = [TypeName, context]
|
|
10
10
|
|
|
11
|
-
def initialize: (
|
|
11
|
+
def initialize: (Set[TypeName] all_names, Hash[TypeName, [TypeName, context]] aliases) -> void
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
def self.build: (Environment) -> instance
|
|
14
|
+
|
|
15
|
+
# Translates given type name to absolute type name
|
|
16
|
+
#
|
|
14
17
|
# Returns `nil` if cannot find associated type name.
|
|
18
|
+
# Module names in the type name are normalized.
|
|
15
19
|
#
|
|
16
20
|
def resolve: (TypeName, context: context) -> TypeName?
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
# Translates given type name to absolute type name
|
|
23
|
+
#
|
|
24
|
+
# Returns `false` if a cycle is detected while resolving aliases.
|
|
25
|
+
# Returns `nil` if the type name cannot be resolved.
|
|
26
|
+
#
|
|
27
|
+
def resolve_namespace: (TypeName, context: context) -> (TypeName | false | nil)
|
|
19
28
|
|
|
20
|
-
|
|
29
|
+
private
|
|
21
30
|
|
|
22
31
|
attr_reader all_names: Set[TypeName]
|
|
23
32
|
|
|
33
|
+
attr_reader aliases: Hash[TypeName, [TypeName, context]]
|
|
34
|
+
|
|
24
35
|
attr_reader cache: Hash[query, TypeName?]
|
|
25
36
|
|
|
26
|
-
|
|
37
|
+
# Returns the type name if it exists in `all_names` (normalized)
|
|
38
|
+
#
|
|
39
|
+
def has_type_name?: (TypeName) -> TypeName?
|
|
40
|
+
|
|
41
|
+
# Returns the type name if it is an alias (not normalized)
|
|
42
|
+
#
|
|
43
|
+
def aliased_name?: (TypeName) -> TypeName?
|
|
27
44
|
|
|
28
45
|
def try_cache: (query) { () -> TypeName? } -> TypeName?
|
|
29
46
|
|
|
30
|
-
|
|
47
|
+
# Translates the head module name in the context and returns an absolute type name
|
|
48
|
+
#
|
|
49
|
+
# Returns `nil` if cannot find associated type name.
|
|
50
|
+
# The returned namespace may be an alias
|
|
51
|
+
#
|
|
52
|
+
def resolve_head_namespace: (Symbol, context) -> TypeName?
|
|
53
|
+
|
|
54
|
+
# Resolves the type name in the given context
|
|
55
|
+
#
|
|
56
|
+
def resolve_type_name: (Symbol, context) -> TypeName?
|
|
57
|
+
|
|
58
|
+
def resolve_namespace0: (TypeName, context, Set[TypeName]) -> (TypeName | false | nil)
|
|
31
59
|
|
|
32
|
-
def
|
|
60
|
+
def normalize_namespace: (TypeName, TypeName rhs, context, Set[TypeName]) -> (TypeName | false | nil)
|
|
33
61
|
end
|
|
34
62
|
end
|
|
35
63
|
end
|
data/sig/source.rbs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module RBS
|
|
2
2
|
module Source
|
|
3
3
|
type t = RBS | Ruby
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
class RBS
|
|
6
6
|
attr_reader buffer: Buffer
|
|
7
7
|
|
|
@@ -28,9 +28,9 @@ module RBS
|
|
|
28
28
|
|
|
29
29
|
attr_reader declarations: Array[AST::Ruby::Declarations::t]
|
|
30
30
|
|
|
31
|
-
attr_reader diagnostics: Array[
|
|
31
|
+
attr_reader diagnostics: Array[InlineParser::Diagnostic::t]
|
|
32
32
|
|
|
33
|
-
def initialize: (Buffer, Prism::ParseResult, Array[AST::Ruby::Declarations::t], Array[
|
|
33
|
+
def initialize: (Buffer, Prism::ParseResult, Array[AST::Ruby::Declarations::t], Array[InlineParser::Diagnostic::t]) -> void
|
|
34
34
|
|
|
35
35
|
def each_type_name: () { (TypeName) -> void } -> void
|
|
36
36
|
| () -> Enumerator[TypeName]
|
data/sig/type_param.rbs
CHANGED
|
@@ -4,13 +4,14 @@ module RBS
|
|
|
4
4
|
# Key
|
|
5
5
|
# ^^^ name
|
|
6
6
|
#
|
|
7
|
-
# unchecked out Elem < _ToJson = untyped
|
|
8
|
-
# ^^^^^^^^^
|
|
9
|
-
# ^^^
|
|
10
|
-
# ^^^^
|
|
11
|
-
# ^^^^^^^^^
|
|
12
|
-
#
|
|
13
|
-
|
|
7
|
+
# unchecked out Elem < _ToJson > bot = untyped
|
|
8
|
+
# ^^^^^^^^^ unchecked
|
|
9
|
+
# ^^^ variance
|
|
10
|
+
# ^^^^ name
|
|
11
|
+
# ^^^^^^^^^ upper_bound
|
|
12
|
+
# ^^^^^ lower_bound
|
|
13
|
+
# ^^^^^^^^ default
|
|
14
|
+
type loc = Location[:name, :variance | :unchecked | :upper_bound | :lower_bound | :default]
|
|
14
15
|
|
|
15
16
|
type variance = :invariant | :covariant | :contravariant
|
|
16
17
|
|
|
@@ -24,9 +25,13 @@ module RBS
|
|
|
24
25
|
|
|
25
26
|
attr_reader upper_bound_type: Types::t?
|
|
26
27
|
|
|
28
|
+
%a{pure} def lower_bound: () -> bound?
|
|
29
|
+
|
|
30
|
+
attr_reader lower_bound_type: Types::t?
|
|
31
|
+
|
|
27
32
|
attr_reader default_type: Types::t?
|
|
28
33
|
|
|
29
|
-
def initialize: (name: Symbol, variance: variance, upper_bound: Types::t?, location: loc?, ?default_type: Types::t?, ?unchecked: bool) -> void
|
|
34
|
+
def initialize: (name: Symbol, variance: variance, upper_bound: Types::t?, lower_bound: Types::t?, location: loc?, ?default_type: Types::t?, ?unchecked: bool) -> void
|
|
30
35
|
|
|
31
36
|
include _ToJson
|
|
32
37
|
|
data/sig/types.rbs
CHANGED
|
@@ -172,24 +172,23 @@ module RBS
|
|
|
172
172
|
class ClassSingleton
|
|
173
173
|
# singleton(::Foo)
|
|
174
174
|
# ^^^^^ => name
|
|
175
|
-
type loc = Location[:name,
|
|
176
|
-
|
|
177
|
-
def initialize: (name: TypeName, location: loc?) -> void
|
|
175
|
+
type loc = Location[:name, :args]
|
|
178
176
|
|
|
179
|
-
|
|
177
|
+
def initialize: (name: TypeName, location: loc?, ?args: Array[t]) -> void
|
|
180
178
|
|
|
181
179
|
attr_reader location: loc?
|
|
182
180
|
|
|
183
181
|
include _TypeBase
|
|
184
|
-
include
|
|
185
|
-
include NoSubst
|
|
186
|
-
include EmptyEachType
|
|
182
|
+
include Application
|
|
187
183
|
|
|
188
184
|
def ==: (untyped other) -> bool
|
|
189
185
|
|
|
190
186
|
alias eql? ==
|
|
191
187
|
|
|
192
188
|
def hash: () -> Integer
|
|
189
|
+
|
|
190
|
+
def map_type: () { (t) -> t } -> ClassSingleton
|
|
191
|
+
| () -> Enumerator[t, ClassSingleton]
|
|
193
192
|
end
|
|
194
193
|
|
|
195
194
|
module Application
|
data/sig/unit_test/spy.rbs
CHANGED
|
@@ -153,6 +153,17 @@ module RBS
|
|
|
153
153
|
#
|
|
154
154
|
def refute_send_type: (String | MethodType method_type, untyped receiver, Symbol method_name, *untyped args) ?{ () -> untyped } -> void
|
|
155
155
|
|
|
156
|
+
# Calls a method `method_name`, validates if it's compatible with RBS type definition, and ensures it raises the `exception` class.
|
|
157
|
+
#
|
|
158
|
+
# 1. It calls `method_name` with `receiver` passing `args` and given block,
|
|
159
|
+
# 2. Validates if it's compatible with given `method_type`, and
|
|
160
|
+
# 3. Validates if it's compatible with one of the overloads defined in RBS type definition
|
|
161
|
+
# 4. Ensures that `exception` is thrown
|
|
162
|
+
#
|
|
163
|
+
# See `assert_send_type` for the details.
|
|
164
|
+
#
|
|
165
|
+
def assert_send_type_error: (String | MethodType method_type, Class exception, untyped receiver, Symbol method_name, *untyped args) ?{ () -> untyped } -> void
|
|
166
|
+
|
|
156
167
|
# Asserts if the constant `constant_name` has `constant_type`, and the RBS definition has compatible type
|
|
157
168
|
#
|
|
158
169
|
# ```ruby
|