rbs 4.0.0.dev.4 → 4.0.0.dev.5
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 +11 -8
- data/.github/workflows/comments.yml +3 -3
- data/.github/workflows/dependabot.yml +1 -1
- data/.github/workflows/ruby.yml +17 -34
- data/.github/workflows/typecheck.yml +2 -2
- data/.github/workflows/valgrind.yml +42 -0
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +1 -1
- data/README.md +1 -1
- data/Rakefile +32 -5
- data/config.yml +46 -0
- data/core/array.rbs +96 -46
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/comparable.rbs +13 -6
- data/core/complex.rbs +55 -41
- data/core/dir.rbs +4 -4
- data/core/encoding.rbs +7 -10
- data/core/enumerable.rbs +90 -3
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +63 -1
- data/core/errno.rbs +8 -0
- data/core/errors.rbs +28 -1
- data/core/exception.rbs +2 -2
- data/core/fiber.rbs +40 -20
- data/core/file.rbs +108 -78
- data/core/file_test.rbs +1 -1
- data/core/float.rbs +225 -69
- data/core/gc.rbs +417 -281
- data/core/hash.rbs +1023 -727
- data/core/integer.rbs +104 -110
- data/core/io/buffer.rbs +21 -10
- data/core/io/wait.rbs +11 -33
- data/core/io.rbs +82 -19
- data/core/kernel.rbs +70 -59
- data/core/marshal.rbs +1 -1
- data/core/match_data.rbs +1 -1
- data/core/math.rbs +42 -3
- data/core/method.rbs +63 -27
- data/core/module.rbs +103 -26
- data/core/nil_class.rbs +3 -3
- data/core/numeric.rbs +43 -35
- data/core/object.rbs +3 -3
- data/core/object_space.rbs +21 -15
- data/core/pathname.rbs +1272 -0
- data/core/proc.rbs +30 -25
- data/core/process.rbs +4 -2
- data/core/ractor.rbs +361 -509
- data/core/random.rbs +17 -0
- data/core/range.rbs +113 -16
- data/core/rational.rbs +56 -85
- data/core/rbs/unnamed/argf.rbs +2 -2
- data/core/rbs/unnamed/env_class.rbs +1 -1
- data/core/rbs/unnamed/random.rbs +4 -113
- data/core/regexp.rbs +25 -20
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +6 -4
- data/core/rubygems/errors.rbs +3 -70
- data/core/rubygems/rubygems.rbs +11 -79
- data/core/rubygems/version.rbs +2 -3
- data/core/set.rbs +488 -359
- data/core/signal.rbs +24 -14
- data/core/string.rbs +3171 -1241
- data/core/struct.rbs +1 -1
- data/core/symbol.rbs +17 -11
- data/core/thread.rbs +95 -33
- data/core/time.rbs +35 -9
- data/core/trace_point.rbs +7 -4
- data/core/unbound_method.rbs +14 -6
- data/docs/aliases.md +79 -0
- data/docs/collection.md +2 -2
- data/docs/encoding.md +56 -0
- data/docs/gem.md +0 -1
- data/docs/inline.md +470 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +33 -4
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +77 -3
- data/ext/rbs_extension/ast_translation.h +3 -0
- data/ext/rbs_extension/class_constants.c +8 -2
- data/ext/rbs_extension/class_constants.h +4 -0
- data/ext/rbs_extension/extconf.rb +5 -1
- data/ext/rbs_extension/legacy_location.c +5 -5
- data/ext/rbs_extension/main.c +37 -20
- data/include/rbs/ast.h +85 -38
- data/include/rbs/defines.h +27 -0
- data/include/rbs/lexer.h +30 -11
- 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_encoding.h +2 -0
- data/include/rbs/util/rbs_unescape.h +2 -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 +137 -0
- 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 +159 -1
- 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 -51
- data/lib/rbs/cli.rb +52 -19
- data/lib/rbs/collection/config/lockfile_generator.rb +8 -0
- 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 +91 -2
- 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 -7
- data/lib/rbs/inline_parser.rb +341 -5
- 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 +2 -2
- data/lib/rbs/prototype/rb.rb +2 -2
- data/lib/rbs/prototype/rbi.rb +2 -0
- 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 +16 -2
- data/lib/rbs/type_name.rb +1 -1
- data/lib/rbs/types.rb +27 -27
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +1 -1
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +1 -1
- data/rbs.gemspec +3 -2
- data/schema/typeParam.json +17 -1
- data/sig/ast/ruby/annotations.rbs +124 -0
- data/sig/ast/ruby/comment_block.rbs +8 -0
- data/sig/ast/ruby/declarations.rbs +102 -4
- data/sig/ast/ruby/members.rbs +87 -1
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +13 -4
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -1
- data/sig/environment.rbs +70 -12
- data/sig/errors.rbs +13 -6
- 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/method_types.rbs +1 -1
- data/sig/parser.rbs +16 -2
- 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 +4 -4
- data/src/ast.c +80 -1
- data/src/lexer.c +1392 -1313
- data/src/lexer.re +3 -0
- data/src/lexstate.c +58 -37
- data/src/location.c +4 -4
- data/src/parser.c +412 -145
- 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 -10
- data/src/util/rbs_encoding.c +4 -8
- data/src/util/rbs_unescape.c +56 -20
- data/stdlib/bigdecimal/0/big_decimal.rbs +100 -82
- 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 +3 -1
- data/stdlib/date/0/date.rbs +67 -59
- data/stdlib/date/0/date_time.rbs +1 -1
- data/stdlib/delegate/0/delegator.rbs +10 -7
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +737 -347
- data/stdlib/fileutils/0/fileutils.rbs +20 -14
- data/stdlib/forwardable/0/forwardable.rbs +3 -0
- data/stdlib/json/0/json.rbs +82 -28
- data/stdlib/net-http/0/net-http.rbs +3 -0
- data/stdlib/objspace/0/objspace.rbs +9 -27
- data/stdlib/open-uri/0/open-uri.rbs +40 -0
- data/stdlib/open3/0/open3.rbs +459 -1
- data/stdlib/openssl/0/openssl.rbs +331 -228
- data/stdlib/optparse/0/optparse.rbs +8 -3
- data/stdlib/pathname/0/pathname.rbs +9 -1379
- data/stdlib/psych/0/psych.rbs +4 -4
- 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 +2 -2
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +6 -19
- data/stdlib/singleton/0/singleton.rbs +3 -0
- data/stdlib/socket/0/socket.rbs +13 -1
- data/stdlib/socket/0/tcp_socket.rbs +10 -2
- data/stdlib/stringio/0/stringio.rbs +1176 -85
- data/stdlib/strscan/0/string_scanner.rbs +31 -31
- data/stdlib/tempfile/0/tempfile.rbs +3 -3
- data/stdlib/time/0/time.rbs +1 -1
- data/stdlib/timeout/0/timeout.rbs +63 -7
- data/stdlib/tsort/0/cyclic.rbs +3 -0
- data/stdlib/uri/0/common.rbs +16 -2
- data/stdlib/uri/0/file.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +24 -16
- data/stdlib/uri/0/rfc2396_parser.rbs +6 -7
- data/stdlib/zlib/0/gzip_reader.rbs +2 -2
- data/stdlib/zlib/0/gzip_writer.rbs +1 -1
- data/stdlib/zlib/0/zstream.rbs +1 -0
- metadata +30 -4
data/sig/environment.rbs
CHANGED
|
@@ -12,10 +12,10 @@ module RBS
|
|
|
12
12
|
def initialize: (name: N, decl: D, context: Resolver::context) -> void
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias]
|
|
15
|
+
class ModuleAliasEntry < SingleEntry[TypeName, AST::Declarations::ModuleAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias]
|
|
18
|
+
class ClassAliasEntry < SingleEntry[TypeName, AST::Declarations::ClassAlias | AST::Ruby::Declarations::ClassModuleAliasDecl]
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
class InterfaceEntry < SingleEntry[TypeName, AST::Declarations::Interface]
|
|
@@ -24,7 +24,7 @@ module RBS
|
|
|
24
24
|
class TypeAliasEntry < SingleEntry[TypeName, AST::Declarations::TypeAlias]
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant]
|
|
27
|
+
class ConstantEntry < SingleEntry[TypeName, AST::Declarations::Constant | AST::Ruby::Declarations::ConstantDecl]
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
class GlobalEntry < SingleEntry[Symbol, AST::Declarations::Global]
|
|
@@ -84,9 +84,15 @@ module RBS
|
|
|
84
84
|
# When `only` is given, it skips other _top-level_ declarations not included in the collection.
|
|
85
85
|
# This helps running resolution faster in the case of _partial updates_.
|
|
86
86
|
#
|
|
87
|
-
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
|
|
88
88
|
|
|
89
|
-
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]]
|
|
90
96
|
|
|
91
97
|
def inspect: () -> String
|
|
92
98
|
|
|
@@ -94,7 +100,8 @@ module RBS
|
|
|
94
100
|
|
|
95
101
|
# Remove declarations and directives that are loaded from `buffers`
|
|
96
102
|
#
|
|
97
|
-
def unload: (Set[
|
|
103
|
+
def unload: (Set[Pathname] paths) -> Environment
|
|
104
|
+
| %a{deprecated: Use pathname version} (Set[Buffer] buffers) -> Environment
|
|
98
105
|
|
|
99
106
|
# Returns true if an interface with the type name is defined
|
|
100
107
|
#
|
|
@@ -135,22 +142,58 @@ module RBS
|
|
|
135
142
|
# Returns true if the type name is a class alias
|
|
136
143
|
def class_alias?: (TypeName) -> bool
|
|
137
144
|
|
|
138
|
-
|
|
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)
|
|
139
156
|
|
|
140
157
|
# Returns ClassEntry if the class definition is found, normalized in case of alias
|
|
141
158
|
#
|
|
159
|
+
%a{deprecated: Use `class_entry(type_name, normalized: true)` instead. }
|
|
142
160
|
def normalized_class_entry: (TypeName) -> ClassEntry?
|
|
143
161
|
|
|
144
|
-
|
|
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)
|
|
145
173
|
|
|
146
174
|
# Returns ModuleEntry if the module definition is found, normalized in case of alias
|
|
147
175
|
#
|
|
176
|
+
%a{deprecated: Use `module_entry(type_name, normalized: true)` instead. }
|
|
148
177
|
def normalized_module_entry: (TypeName) -> ModuleEntry?
|
|
149
178
|
|
|
150
|
-
|
|
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)
|
|
151
188
|
|
|
152
|
-
|
|
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)
|
|
153
195
|
|
|
196
|
+
%a{deprecated: Use `module_class_entry(type_name, normalized: true)` instead. }
|
|
154
197
|
def normalized_module_class_entry: (TypeName) -> (ClassEntry | ModuleEntry | nil)
|
|
155
198
|
|
|
156
199
|
@normalize_module_name_cache: Hash[TypeName, TypeName | false | nil]
|
|
@@ -161,26 +204,39 @@ module RBS
|
|
|
161
204
|
# * Returns `nil` if the rhs name cannot be found
|
|
162
205
|
# * Returns `false` if the name is cyclic
|
|
163
206
|
#
|
|
207
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
208
|
+
#
|
|
164
209
|
def normalize_module_name?: (TypeName) -> (TypeName | nil | false)
|
|
165
210
|
|
|
166
|
-
# Returns the original module name that is defined with `module` declaration
|
|
211
|
+
# Returns the original module name that is defined with `module`/`class` declaration
|
|
167
212
|
#
|
|
168
|
-
# * Raises an error if given type name is not module
|
|
213
|
+
# * Raises an error if given type name is not module/class
|
|
169
214
|
# * Calls `#absolute!` for relative module names
|
|
170
215
|
# * Returns the name itself if the name cannot be normalized to a class/module
|
|
171
216
|
#
|
|
217
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
218
|
+
#
|
|
172
219
|
def normalize_module_name: (TypeName) -> TypeName
|
|
173
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
|
+
|
|
174
226
|
# Returns a normalized module/class name or a type name with a normalized namespace
|
|
175
227
|
#
|
|
176
228
|
# * Calls `#absolute!` for relative module names
|
|
177
229
|
# * Returns `nil` if the typename cannot be found
|
|
178
230
|
# * Returns `false` if the name is cyclic
|
|
179
231
|
#
|
|
232
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
233
|
+
#
|
|
180
234
|
def normalize_type_name?: (TypeName) -> (TypeName | nil | false)
|
|
181
235
|
|
|
182
236
|
# Normalize the type name or raises an error
|
|
183
237
|
#
|
|
238
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
239
|
+
#
|
|
184
240
|
def normalize_type_name!: (TypeName) -> TypeName
|
|
185
241
|
|
|
186
242
|
# Returns a normalized module/class name or a type name with a normalized namespace
|
|
@@ -188,6 +244,8 @@ module RBS
|
|
|
188
244
|
# * Calls `#absolute!` for relative module names
|
|
189
245
|
# * Returns the typename itself if the name cannot be normalized
|
|
190
246
|
#
|
|
247
|
+
# Note that this method assumes the declarations have resolved type names.
|
|
248
|
+
#
|
|
191
249
|
def normalize_type_name: (TypeName) -> TypeName
|
|
192
250
|
|
|
193
251
|
# Returns `true` if given type name is normalized
|
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
|
|
@@ -287,6 +289,7 @@ module RBS
|
|
|
287
289
|
include DetailedMessageable
|
|
288
290
|
|
|
289
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
|
|
290
293
|
|
|
291
294
|
attr_reader type_name: TypeName
|
|
292
295
|
attr_reader member: member
|
|
@@ -297,17 +300,21 @@ module RBS
|
|
|
297
300
|
|
|
298
301
|
def self.check!: (type_name: TypeName, env: Environment, member: member) -> void
|
|
299
302
|
|
|
303
|
+
def member_name: (member) -> TypeName
|
|
304
|
+
|
|
300
305
|
def mixin_name: () -> String
|
|
301
306
|
end
|
|
302
307
|
|
|
303
308
|
# InheritModuleError is raised if a class definition inherits a module (not a class)
|
|
304
309
|
#
|
|
305
310
|
class InheritModuleError < DefinitionError
|
|
311
|
+
type super_class = AST::Declarations::Class::Super | AST::Ruby::Declarations::ClassDecl::SuperClass
|
|
312
|
+
|
|
306
313
|
include DetailedMessageable
|
|
307
314
|
|
|
308
|
-
attr_reader super_decl:
|
|
315
|
+
attr_reader super_decl: super_class
|
|
309
316
|
|
|
310
|
-
def initialize: (
|
|
317
|
+
def initialize: (super_class) -> void
|
|
311
318
|
|
|
312
319
|
def location: () -> Location[untyped, untyped]?
|
|
313
320
|
|
|
@@ -315,7 +322,7 @@ module RBS
|
|
|
315
322
|
#
|
|
316
323
|
# Automatically normalize the name of super.
|
|
317
324
|
#
|
|
318
|
-
def self.check!: (
|
|
325
|
+
def self.check!: (super_class, env: Environment) -> void
|
|
319
326
|
end
|
|
320
327
|
|
|
321
328
|
class RecursiveTypeAliasError < BaseError
|
data/sig/inline_parser.rbs
CHANGED
|
@@ -9,6 +9,8 @@ module RBS
|
|
|
9
9
|
attr_reader diagnostics: Array[Diagnostic::t]
|
|
10
10
|
|
|
11
11
|
def initialize: (Buffer, Prism::ParseResult) -> void
|
|
12
|
+
|
|
13
|
+
def type_fingerprint: () -> untyped
|
|
12
14
|
end
|
|
13
15
|
|
|
14
16
|
module Diagnostic
|
|
@@ -29,19 +31,44 @@ module RBS
|
|
|
29
31
|
class NonConstantModuleName < Base
|
|
30
32
|
end
|
|
31
33
|
|
|
34
|
+
class NonConstantSuperClassName < Base
|
|
35
|
+
end
|
|
36
|
+
|
|
32
37
|
class TopLevelMethodDefinition < Base
|
|
33
38
|
end
|
|
34
39
|
|
|
40
|
+
class TopLevelAttributeDefinition < Base
|
|
41
|
+
end
|
|
42
|
+
|
|
35
43
|
class UnusedInlineAnnotation < Base
|
|
36
44
|
end
|
|
37
45
|
|
|
38
46
|
class AnnotationSyntaxError < Base
|
|
39
47
|
end
|
|
40
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
|
+
|
|
41
64
|
type t = NotImplementedYet
|
|
42
|
-
| NonConstantClassName | NonConstantModuleName
|
|
43
|
-
| TopLevelMethodDefinition
|
|
65
|
+
| NonConstantClassName | NonConstantModuleName | NonConstantSuperClassName
|
|
66
|
+
| TopLevelMethodDefinition | TopLevelAttributeDefinition
|
|
44
67
|
| UnusedInlineAnnotation | AnnotationSyntaxError
|
|
68
|
+
| MixinMultipleArguments | MixinNonConstantModule
|
|
69
|
+
| AttributeNonSymbolName
|
|
70
|
+
| NonConstantConstantDeclaration
|
|
71
|
+
| ClassModuleAliasDeclarationMissingTypeName
|
|
45
72
|
end
|
|
46
73
|
|
|
47
74
|
def self.parse: (Buffer, Prism::ParseResult) -> Result
|
|
@@ -82,6 +109,16 @@ module RBS
|
|
|
82
109
|
def report_unused_annotation: (*AST::Ruby::Annotations::t | nil | AST::Ruby::CommentBlock::AnnotationSyntaxError) -> void
|
|
83
110
|
|
|
84
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?
|
|
85
122
|
end
|
|
86
123
|
end
|
|
87
124
|
end
|
data/sig/locator.rbs
CHANGED
|
@@ -37,8 +37,6 @@ module RBS
|
|
|
37
37
|
#
|
|
38
38
|
def find2: (line: Integer, column: Integer) -> [Symbol?, Array[component]]?
|
|
39
39
|
|
|
40
|
-
private
|
|
41
|
-
|
|
42
40
|
def find_in_directive: (Integer pos, AST::Directives::t, Array[component]) -> bool
|
|
43
41
|
|
|
44
42
|
def find_in_decl: (Integer pos, decl: AST::Declarations::t, array: Array[component]) -> bool
|
data/sig/manifest.yaml
CHANGED
data/sig/method_builder.rbs
CHANGED
|
@@ -16,7 +16,7 @@ module RBS
|
|
|
16
16
|
#
|
|
17
17
|
class Definition
|
|
18
18
|
type original = AST::Members::MethodDefinition | AST::Members::Alias | AST::Members::AttrAccessor | AST::Members::AttrWriter | AST::Members::AttrReader
|
|
19
|
-
| AST::Ruby::Members::DefMember
|
|
19
|
+
| AST::Ruby::Members::DefMember | AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember
|
|
20
20
|
|
|
21
21
|
type overloading_definition = AST::Members::MethodDefinition | AST::Ruby::Members::DefMember
|
|
22
22
|
|
|
@@ -77,6 +77,8 @@ module RBS
|
|
|
77
77
|
|
|
78
78
|
def build_attribute: (Methods, Methods::instance_type, member: AST::Members::AttrAccessor | AST::Members::AttrReader | AST::Members::AttrWriter, accessibility: Definition::accessibility) -> void
|
|
79
79
|
|
|
80
|
+
def build_ruby_attribute: (Methods, Methods::instance_type, member: AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember, accessibility: Definition::accessibility) -> void
|
|
81
|
+
|
|
80
82
|
def build_method: (Methods, Methods::instance_type, member: AST::Members::MethodDefinition | AST::Ruby::Members::DefMember, accessibility: Definition::accessibility) -> void
|
|
81
83
|
|
|
82
84
|
def each_rbs_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void
|
data/sig/method_types.rbs
CHANGED
data/sig/parser.rbs
CHANGED
|
@@ -62,7 +62,21 @@ module RBS
|
|
|
62
62
|
# RBS::Parser.parse_type("", require_eof: true) # => nil
|
|
63
63
|
# ```
|
|
64
64
|
#
|
|
65
|
-
|
|
65
|
+
# The `void_allowed` keyword controls whether `void` is allowed as a type.
|
|
66
|
+
#
|
|
67
|
+
# ```ruby
|
|
68
|
+
# RBS::Parser.parse_type("void", void_allowed: true) # => `void`
|
|
69
|
+
# RBS::Parser.parse_type("void", void_allowed: false) # => Raises an syntax error
|
|
70
|
+
# ```
|
|
71
|
+
#
|
|
72
|
+
# The `self_allowed` keyword controls whether `self` is allowed as a type.
|
|
73
|
+
#
|
|
74
|
+
# ```ruby
|
|
75
|
+
# RBS::Parser.parse_type("self", self_allowed: true) # => `self`
|
|
76
|
+
# RBS::Parser.parse_type("self", self_allowed: false) # => Raises an syntax error
|
|
77
|
+
# ```
|
|
78
|
+
#
|
|
79
|
+
def self.parse_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool) -> Types::t?
|
|
66
80
|
|
|
67
81
|
# Parse whole RBS file and return an array of declarations
|
|
68
82
|
#
|
|
@@ -116,7 +130,7 @@ module RBS
|
|
|
116
130
|
|
|
117
131
|
def self.buffer: (String | Buffer source) -> Buffer
|
|
118
132
|
|
|
119
|
-
def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> Types::t?
|
|
133
|
+
def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof, bool void_allowed, bool self_allowed) -> Types::t?
|
|
120
134
|
|
|
121
135
|
def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> MethodType?
|
|
122
136
|
|
|
@@ -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
|
@@ -54,7 +54,7 @@ module RBS
|
|
|
54
54
|
# * The function return type is a return position (`() -> void`)
|
|
55
55
|
# * Generic parameter is a return position (`Enumerator[Integer, void]`)
|
|
56
56
|
#
|
|
57
|
-
def with_nonreturn_void?: () -> bool
|
|
57
|
+
%a{deprecated} def with_nonreturn_void?: () -> bool
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
# t represents union of all possible types.
|
|
@@ -213,7 +213,7 @@ module RBS
|
|
|
213
213
|
|
|
214
214
|
def has_classish_type?: () -> bool
|
|
215
215
|
|
|
216
|
-
def with_nonreturn_void?: () -> bool
|
|
216
|
+
%a{deprecated} def with_nonreturn_void?: () -> bool
|
|
217
217
|
end
|
|
218
218
|
|
|
219
219
|
class Interface
|
|
@@ -452,7 +452,7 @@ module RBS
|
|
|
452
452
|
|
|
453
453
|
def has_classish_type?: () -> bool
|
|
454
454
|
|
|
455
|
-
def with_nonreturn_void?: () -> bool
|
|
455
|
+
%a{deprecated} def with_nonreturn_void?: () -> bool
|
|
456
456
|
|
|
457
457
|
def ==: (untyped) -> bool
|
|
458
458
|
|
|
@@ -495,7 +495,7 @@ module RBS
|
|
|
495
495
|
|
|
496
496
|
def has_classish_type?: () -> bool
|
|
497
497
|
|
|
498
|
-
def with_nonreturn_void?: () -> bool
|
|
498
|
+
%a{deprecated} def with_nonreturn_void?: () -> bool
|
|
499
499
|
|
|
500
500
|
# Returns `?`
|
|
501
501
|
def param_to_s: () -> String
|