rbs 1.0.0.pre → 1.0.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -4
- data/Rakefile +8 -0
- data/Steepfile +2 -1
- data/bin/annotate-with-rdoc +0 -4
- data/core/file.rbs +3 -0
- data/core/io.rbs +6 -1
- data/core/module.rbs +41 -0
- data/docs/syntax.md +0 -17
- data/goodcheck.yml +2 -2
- data/lib/rbs/ast/declarations.rb +0 -47
- data/lib/rbs/definition_builder.rb +80 -46
- data/lib/rbs/definition_builder/ancestor_builder.rb +52 -3
- data/lib/rbs/environment.rb +1 -7
- data/lib/rbs/environment_loader.rb +7 -3
- data/lib/rbs/errors.rb +19 -57
- data/lib/rbs/parser.rb +994 -1032
- data/lib/rbs/parser.y +0 -19
- data/lib/rbs/prototype/rb.rb +4 -0
- data/lib/rbs/prototype/runtime.rb +30 -14
- data/lib/rbs/test/hook.rb +7 -6
- data/lib/rbs/types.rb +6 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +4 -3
- data/sig/ancestor_builder.rbs +98 -0
- data/sig/declarations.rbs +4 -16
- data/sig/definition_builder.rbs +14 -69
- data/sig/errors.rbs +141 -2
- data/sig/method_builder.rbs +71 -0
- data/sig/substitution.rbs +3 -0
- data/sig/types.rbs +1 -15
- data/stdlib/csv/0/csv.rbs +3 -0
- data/stdlib/pathname/0/pathname.rbs +1 -1
- data/stdlib/prime/0/prime.rbs +6 -0
- data/stdlib/securerandom/0/securerandom.rbs +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 876e6bbb99faa21b1446731aaa99e9e184952dfff4a74c40278a8e4473ab0153
|
4
|
+
data.tar.gz: dbe783feb6db3cef15000018b0d9120b5761775fa9e635355b75f23783d558c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bdc0e3cca9cff43bfd69dba8f8635745a5e164c8590c627434075f839fee353173a9f8e829ee5bbcdd3114fe0035fbd5fef54c56d17382135563c3d2e6d8b4b
|
7
|
+
data.tar.gz: ae9c5ca0eae79d4261263235817d031e1541e82e07d70826e6d7cd69fda211cf6fd4c933706b839a39ea221b45ca044cd3381b04ff480df1c3ba06a9ee9c528b
|
data/CHANGELOG.md
CHANGED
@@ -4,14 +4,18 @@
|
|
4
4
|
|
5
5
|
## 1.0.0 (Pre released)
|
6
6
|
|
7
|
-
* Signature updates for `URI`, `IO`, and `Time` ([#529](https://github.com/ruby/rbs/pull/529), [#521](https://github.com/ruby/rbs/pull/521), [#520](https://github.com/ruby/rbs/pull/520), [#511](https://github.com/ruby/rbs/pull/511), [#517](https://github.com/ruby/rbs/pull/517))
|
7
|
+
* Signature updates for `URI`, `IO`, `File`, `Pathname`, `Module`, and `Time` ([#529](https://github.com/ruby/rbs/pull/529), [#521](https://github.com/ruby/rbs/pull/521), [#520](https://github.com/ruby/rbs/pull/520), [#511](https://github.com/ruby/rbs/pull/511), [#517](https://github.com/ruby/rbs/pull/517), [#542](https://github.com/ruby/rbs/pull/542), [#546](https://github.com/ruby/rbs/pull/546), [#540](https://github.com/ruby/rbs/pull/540), [#538](https://github.com/ruby/rbs/pull/538))
|
8
8
|
* `rbs prototype runtime` generates `extend`s ([#535](https://github.com/ruby/rbs/pull/535))
|
9
9
|
* `rbs prototype runtime` stability improvements ([#533](https://github.com/ruby/rbs/pull/533), [#526](https://github.com/ruby/rbs/pull/526))
|
10
|
-
|
10
|
+
* `rbs prototype rb` compatibility improvements ([#545](https://github.com/ruby/rbs/pull/545))
|
11
|
+
* Implement method names escape in `RBS::Writer` ([#537](https://github.com/ruby/rbs/pull/537))
|
12
|
+
* Improve runtime type checker compatibility ([#532](https://github.com/ruby/rbs/pull/532), [#528](https://github.com/ruby/rbs/pull/528), [#547](https://github.com/ruby/rbs/pull/547))
|
13
|
+
* Fix `ruby2_keywords` for `Proc` in Ruby <2.7 ([#513](https://github.com/ruby/rbs/pull/513))
|
11
14
|
* Better compatibility for record type attribute names ([#525](https://github.com/ruby/rbs/pull/525), [#524](https://github.com/ruby/rbs/pull/524))
|
12
|
-
* Let module
|
15
|
+
* Let module self-types be classes ([#523](https://github.com/ruby/rbs/pull/523))
|
16
|
+
* Delete `extension` syntax ([#543](https://github.com/ruby/rbs/pull/543))
|
13
17
|
* Method resolution improvements about `alias` and `.new` ([#522](https://github.com/ruby/rbs/pull/522), [#519](https://github.com/ruby/rbs/pull/519), [#516](https://github.com/ruby/rbs/pull/516))
|
14
|
-
*
|
18
|
+
* Better message for `DuplicatedMethodDefinitionError` ([#539](https://github.com/ruby/rbs/pull/539))
|
15
19
|
|
16
20
|
## 0.20.1 (2020-12-06)
|
17
21
|
|
data/Rakefile
CHANGED
@@ -45,6 +45,14 @@ task :validate => :parser do
|
|
45
45
|
lib << "monitor"
|
46
46
|
end
|
47
47
|
|
48
|
+
if lib == ["csv"]
|
49
|
+
lib << "forwardable"
|
50
|
+
end
|
51
|
+
|
52
|
+
if lib == ["prime"]
|
53
|
+
lib << "singleton"
|
54
|
+
end
|
55
|
+
|
48
56
|
sh "#{ruby} #{rbs} #{lib.map {|l| "-r #{l}"}.join(" ")} validate --silent"
|
49
57
|
end
|
50
58
|
end
|
data/Steepfile
CHANGED
@@ -2,8 +2,9 @@ target :lib do
|
|
2
2
|
signature "sig"
|
3
3
|
check "lib"
|
4
4
|
ignore "lib/rbs/parser.rb"
|
5
|
+
ignore "lib/rbs/prototype", "lib/rbs/test", "lib/rbs/test.rb"
|
5
6
|
|
6
|
-
library "set", "pathname", "json", "logger"
|
7
|
+
library "set", "pathname", "json", "logger", "monitor", "tsort"
|
7
8
|
end
|
8
9
|
|
9
10
|
# target :lib do
|
data/bin/annotate-with-rdoc
CHANGED
@@ -140,10 +140,6 @@ ARGV.map {|f| Pathname(f) }.each do |path|
|
|
140
140
|
comment = comment_for_class(decl, stores: stores)
|
141
141
|
decl.instance_variable_set(:@comment, comment)
|
142
142
|
|
143
|
-
print_members stores, decl.name.to_s, decl.members
|
144
|
-
when RBS::AST::Declarations::Extension
|
145
|
-
puts " Importing documentation for #{decl.name} (#{decl.extension_name})"
|
146
|
-
|
147
143
|
print_members stores, decl.name.to_s, decl.members
|
148
144
|
end
|
149
145
|
end
|
data/core/file.rbs
CHANGED
@@ -531,6 +531,9 @@ class File < IO
|
|
531
531
|
#
|
532
532
|
def self.mtime: (string | _ToPath | IO file_name) -> Time
|
533
533
|
|
534
|
+
# Alias of `File.new`.
|
535
|
+
def self.open: (string | _ToPath | int file_name, ?(string | int) mode, ?int perm) -> instance
|
536
|
+
|
534
537
|
# Returns `true` if the named file exists and the effective used id of the
|
535
538
|
# calling process is the owner of the file.
|
536
539
|
#
|
data/core/io.rbs
CHANGED
@@ -683,7 +683,12 @@ class IO < Object
|
|
683
683
|
|
684
684
|
def self.write: (String name, _ToS arg0, ?Integer offset, ?external_encoding: String external_encoding, ?internal_encoding: String internal_encoding, ?encoding: String encoding, ?textmode: untyped textmode, ?binmode: untyped binmode, ?autoclose: untyped autoclose, ?mode: String mode) -> Integer
|
685
685
|
|
686
|
-
def self.for_fd: (
|
686
|
+
def self.for_fd: (int fd, ?(string | int) mode, **untyped opt) -> instance
|
687
|
+
|
688
|
+
alias self.open self.for_fd
|
689
|
+
|
690
|
+
def self.open: [A] (int fd, ?(string | int) mode, **untyped opt) { (instance) -> A } -> A
|
691
|
+
| ...
|
687
692
|
|
688
693
|
def bytes: () { (Integer arg0) -> untyped } -> self
|
689
694
|
| () -> ::Enumerator[Integer, self]
|
data/core/module.rbs
CHANGED
@@ -443,6 +443,47 @@ class Module < Object
|
|
443
443
|
#
|
444
444
|
def const_set: (Symbol | String arg0, untyped arg1) -> untyped
|
445
445
|
|
446
|
+
# Returns the Ruby source filename and line number containing first definition
|
447
|
+
# of constant specified. If the named constant is not found, `nil` is returned.
|
448
|
+
# If the constant is found, but its source location can not be extracted
|
449
|
+
# (constant is defined in C code), empty array is returned.
|
450
|
+
#
|
451
|
+
# *inherit* specifies whether to lookup in `mod.ancestors` (`true` by default).
|
452
|
+
#
|
453
|
+
# # test.rb:
|
454
|
+
# class A
|
455
|
+
# C1 = 1
|
456
|
+
# end
|
457
|
+
#
|
458
|
+
# module M
|
459
|
+
# C2 = 2
|
460
|
+
# end
|
461
|
+
#
|
462
|
+
# class B < A
|
463
|
+
# include M
|
464
|
+
# C3 = 3
|
465
|
+
# end
|
466
|
+
#
|
467
|
+
# class A # continuation of A definition
|
468
|
+
# end
|
469
|
+
#
|
470
|
+
# p B.const_source_location('C3') # => ["test.rb", 11]
|
471
|
+
# p B.const_source_location('C2') # => ["test.rb", 6]
|
472
|
+
# p B.const_source_location('C1') # => ["test.rb", 2]
|
473
|
+
#
|
474
|
+
# p B.const_source_location('C2', false) # => nil -- don't lookup in ancestors
|
475
|
+
#
|
476
|
+
# p Object.const_source_location('B') # => ["test.rb", 9]
|
477
|
+
# p Object.const_source_location('A') # => ["test.rb", 1] -- note it is first entry, not "continuation"
|
478
|
+
#
|
479
|
+
# p B.const_source_location('A') # => ["test.rb", 1] -- because Object is in ancestors
|
480
|
+
# p M.const_source_location('A') # => ["test.rb", 1] -- Object is not ancestor, but additionally checked for modules
|
481
|
+
#
|
482
|
+
# p Object.const_source_location('A::C1') # => ["test.rb", 2] -- nesting is supported
|
483
|
+
# p Object.const_source_location('String') # => [] -- constant is defined in C code
|
484
|
+
#
|
485
|
+
def const_source_location: (Symbol | String name, ?boolish inherit) -> ([String, Integer] | [ ] | nil)
|
486
|
+
|
446
487
|
# Returns an array of the names of the constants accessible in *mod*. This
|
447
488
|
# includes the names of constants in any included modules (example at start of
|
448
489
|
# section), unless the *inherit* parameter is set to `false`.
|
data/docs/syntax.md
CHANGED
@@ -531,23 +531,6 @@ interface _Foo
|
|
531
531
|
end
|
532
532
|
```
|
533
533
|
|
534
|
-
### Extension declaration
|
535
|
-
|
536
|
-
Extension is to model _open class_.
|
537
|
-
|
538
|
-
```
|
539
|
-
extension Kernel (Pathname)
|
540
|
-
def Pathname: (String) -> Pathname
|
541
|
-
end
|
542
|
-
|
543
|
-
extension Array[A] (ActiveSupport)
|
544
|
-
def to: (Integer) -> Array[A]
|
545
|
-
def from: (Integer) -> Array[A]
|
546
|
-
def second: () -> A?
|
547
|
-
def third: () -> A?
|
548
|
-
end
|
549
|
-
```
|
550
|
-
|
551
534
|
### Type alias declaration
|
552
535
|
|
553
536
|
You can declare an alias of types.
|
data/goodcheck.yml
CHANGED
@@ -3,7 +3,7 @@ rules:
|
|
3
3
|
pattern: 💪👽🚨
|
4
4
|
message: Do you forget to delete `arglists` section?
|
5
5
|
glob:
|
6
|
-
- "stdlib/**/*.rbs"
|
6
|
+
- "{core,stdlib}/**/*.rbs"
|
7
7
|
fail:
|
8
8
|
- |
|
9
9
|
# arglists 💪👽🚨 << Delete this section
|
@@ -22,7 +22,7 @@ rules:
|
|
22
22
|
justification:
|
23
23
|
- Documents (comments) may contain that pattern.
|
24
24
|
glob:
|
25
|
-
- "stdlib/**/*.rbs"
|
25
|
+
- "{core,stdlib}/**/*.rbs"
|
26
26
|
fail:
|
27
27
|
- "def `send`: (String | Symbol arg0, *untyped arg1) -> untyped"
|
28
28
|
pass:
|
data/lib/rbs/ast/declarations.rb
CHANGED
@@ -300,53 +300,6 @@ module RBS
|
|
300
300
|
end
|
301
301
|
end
|
302
302
|
|
303
|
-
class Extension < Base
|
304
|
-
attr_reader :name
|
305
|
-
attr_reader :type_params
|
306
|
-
attr_reader :extension_name
|
307
|
-
attr_reader :members
|
308
|
-
attr_reader :annotations
|
309
|
-
attr_reader :location
|
310
|
-
attr_reader :comment
|
311
|
-
|
312
|
-
def initialize(name:, type_params:, extension_name:, members:, annotations:, location:, comment:)
|
313
|
-
@name = name
|
314
|
-
@type_params = type_params
|
315
|
-
@extension_name = extension_name
|
316
|
-
@members = members
|
317
|
-
@annotations = annotations
|
318
|
-
@location = location
|
319
|
-
@comment = comment
|
320
|
-
end
|
321
|
-
|
322
|
-
def ==(other)
|
323
|
-
other.is_a?(Extension) &&
|
324
|
-
other.name == name &&
|
325
|
-
other.type_params == type_params &&
|
326
|
-
other.extension_name == extension_name &&
|
327
|
-
other.members == members
|
328
|
-
end
|
329
|
-
|
330
|
-
alias eql? ==
|
331
|
-
|
332
|
-
def hash
|
333
|
-
self.class.hash ^ name.hash ^ type_params.hash ^ extension_name.hash ^ members.hash
|
334
|
-
end
|
335
|
-
|
336
|
-
def to_json(*a)
|
337
|
-
{
|
338
|
-
declaration: :extension,
|
339
|
-
name: name,
|
340
|
-
type_params: type_params,
|
341
|
-
extension_name: extension_name,
|
342
|
-
members: members,
|
343
|
-
annotations: annotations,
|
344
|
-
location: location,
|
345
|
-
comment: comment
|
346
|
-
}.to_json(*a)
|
347
|
-
end
|
348
|
-
end
|
349
|
-
|
350
303
|
class Interface < Base
|
351
304
|
attr_reader :name
|
352
305
|
attr_reader :type_params
|
@@ -44,7 +44,8 @@ module RBS
|
|
44
44
|
|
45
45
|
ancestors = ancestor_builder.interface_ancestors(type_name)
|
46
46
|
Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
|
47
|
-
ancestor_builder.one_interface_ancestors(type_name).included_interfaces
|
47
|
+
included_interfaces = ancestor_builder.one_interface_ancestors(type_name).included_interfaces or raise
|
48
|
+
included_interfaces.each do |mod|
|
48
49
|
defn = build_interface(mod.name)
|
49
50
|
subst = Substitution.build(defn.type_params, mod.args)
|
50
51
|
|
@@ -54,13 +55,17 @@ module RBS
|
|
54
55
|
end
|
55
56
|
|
56
57
|
methods = method_builder.build_interface(type_name)
|
58
|
+
one_ancestors = ancestor_builder.one_interface_ancestors(type_name)
|
59
|
+
|
60
|
+
validate_type_params(definition, methods: methods, ancestors: one_ancestors)
|
61
|
+
|
57
62
|
methods.each do |defn|
|
58
|
-
method = case defn.original
|
63
|
+
method = case original = defn.original
|
59
64
|
when AST::Members::MethodDefinition
|
60
|
-
defs =
|
65
|
+
defs = original.types.map do |method_type|
|
61
66
|
Definition::Method::TypeDef.new(
|
62
67
|
type: method_type,
|
63
|
-
member:
|
68
|
+
member: original,
|
64
69
|
defined_in: type_name,
|
65
70
|
implemented_in: nil
|
66
71
|
)
|
@@ -73,15 +78,15 @@ module RBS
|
|
73
78
|
alias_of: nil
|
74
79
|
)
|
75
80
|
when AST::Members::Alias
|
76
|
-
unless definition.methods.key?(
|
81
|
+
unless definition.methods.key?(original.old_name)
|
77
82
|
raise UnknownMethodAliasError.new(
|
78
|
-
original_name:
|
79
|
-
aliased_name:
|
80
|
-
location:
|
83
|
+
original_name: original.old_name,
|
84
|
+
aliased_name: original.new_name,
|
85
|
+
location: original.location
|
81
86
|
)
|
82
87
|
end
|
83
88
|
|
84
|
-
original_method = definition.methods[
|
89
|
+
original_method = definition.methods[original.old_name]
|
85
90
|
Definition::Method.new(
|
86
91
|
super_method: nil,
|
87
92
|
defs: original_method.defs.map do |defn|
|
@@ -101,10 +106,14 @@ module RBS
|
|
101
106
|
end
|
102
107
|
|
103
108
|
definition.methods[defn.name]
|
109
|
+
|
110
|
+
when AST::Members::AttrReader, AST::Members::AttrWriter, AST::Members::AttrAccessor
|
111
|
+
raise
|
112
|
+
|
104
113
|
end
|
105
114
|
|
106
115
|
defn.overloads.each do |overload|
|
107
|
-
|
116
|
+
overload_defs = overload.types.map do |method_type|
|
108
117
|
Definition::Method::TypeDef.new(
|
109
118
|
type: method_type,
|
110
119
|
member: overload,
|
@@ -113,7 +122,7 @@ module RBS
|
|
113
122
|
)
|
114
123
|
end
|
115
124
|
|
116
|
-
method.defs.unshift(*
|
125
|
+
method.defs.unshift(*overload_defs)
|
117
126
|
end
|
118
127
|
|
119
128
|
definition.methods[defn.name] = method
|
@@ -141,15 +150,21 @@ module RBS
|
|
141
150
|
validate_type_params definition, methods: methods, ancestors: one_ancestors
|
142
151
|
|
143
152
|
if super_class = one_ancestors.super_class
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
153
|
+
case super_class
|
154
|
+
when Definition::Ancestor::Instance
|
155
|
+
build_instance(super_class.name).yield_self do |defn|
|
156
|
+
merge_definition(src: defn,
|
157
|
+
dest: definition,
|
158
|
+
subst: Substitution.build(defn.type_params, super_class.args),
|
159
|
+
keep_super: true)
|
160
|
+
end
|
161
|
+
else
|
162
|
+
raise
|
163
|
+
end
|
149
164
|
end
|
150
165
|
|
151
|
-
if one_ancestors.self_types
|
152
|
-
|
166
|
+
if self_types = one_ancestors.self_types
|
167
|
+
self_types.each do |ans|
|
153
168
|
defn = if ans.name.interface?
|
154
169
|
build_interface(ans.name)
|
155
170
|
else
|
@@ -164,7 +179,7 @@ module RBS
|
|
164
179
|
end
|
165
180
|
end
|
166
181
|
|
167
|
-
one_ancestors.
|
182
|
+
one_ancestors.each_included_module do |mod|
|
168
183
|
defn = build_instance(mod.name)
|
169
184
|
merge_definition(src: defn,
|
170
185
|
dest: definition,
|
@@ -173,16 +188,20 @@ module RBS
|
|
173
188
|
|
174
189
|
interface_methods = {}
|
175
190
|
|
176
|
-
one_ancestors.
|
191
|
+
one_ancestors.each_included_interface do |mod|
|
177
192
|
defn = build_interface(mod.name)
|
178
193
|
subst = Substitution.build(defn.type_params, mod.args)
|
179
194
|
|
180
195
|
defn.methods.each do |name, method|
|
181
196
|
if interface_methods.key?(name)
|
197
|
+
include_member = mod.source
|
198
|
+
|
199
|
+
raise unless include_member.is_a?(AST::Members::Include)
|
200
|
+
|
182
201
|
raise DuplicatedInterfaceMethodDefinitionError.new(
|
183
202
|
type: self_type,
|
184
203
|
method_name: name,
|
185
|
-
member:
|
204
|
+
member: include_member
|
186
205
|
)
|
187
206
|
end
|
188
207
|
|
@@ -221,7 +240,7 @@ module RBS
|
|
221
240
|
end
|
222
241
|
end
|
223
242
|
|
224
|
-
one_ancestors.
|
243
|
+
one_ancestors.each_prepended_module do |mod|
|
225
244
|
defn = build_instance(mod.name)
|
226
245
|
merge_definition(src: defn,
|
227
246
|
dest: definition,
|
@@ -261,24 +280,28 @@ module RBS
|
|
261
280
|
end
|
262
281
|
end
|
263
282
|
|
264
|
-
one_ancestors.
|
265
|
-
|
266
|
-
merge_definition(src:
|
283
|
+
one_ancestors.each_extended_module do |mod|
|
284
|
+
mod_defn = build_instance(mod.name)
|
285
|
+
merge_definition(src: mod_defn,
|
267
286
|
dest: definition,
|
268
|
-
subst: Substitution.build(
|
287
|
+
subst: Substitution.build(mod_defn.type_params, mod.args))
|
269
288
|
end
|
270
289
|
|
271
290
|
interface_methods = {}
|
272
|
-
one_ancestors.
|
273
|
-
|
274
|
-
subst = Substitution.build(
|
291
|
+
one_ancestors.each_extended_interface do |mod|
|
292
|
+
mod_defn = build_interface(mod.name)
|
293
|
+
subst = Substitution.build(mod_defn.type_params, mod.args)
|
275
294
|
|
276
|
-
|
295
|
+
mod_defn.methods.each do |name, method|
|
277
296
|
if interface_methods.key?(name)
|
297
|
+
src_member = mod.source
|
298
|
+
|
299
|
+
raise unless src_member.is_a?(AST::Members::Extend)
|
300
|
+
|
278
301
|
raise DuplicatedInterfaceMethodDefinitionError.new(
|
279
302
|
type: self_type,
|
280
303
|
method_name: name,
|
281
|
-
member:
|
304
|
+
member: src_member
|
282
305
|
)
|
283
306
|
end
|
284
307
|
|
@@ -418,6 +441,20 @@ module RBS
|
|
418
441
|
end
|
419
442
|
end
|
420
443
|
|
444
|
+
def source_location(source, decl)
|
445
|
+
case source
|
446
|
+
when nil
|
447
|
+
decl.location
|
448
|
+
when :super
|
449
|
+
case decl
|
450
|
+
when AST::Declarations::Class
|
451
|
+
decl.super_class&.location
|
452
|
+
end
|
453
|
+
else
|
454
|
+
source.location
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
421
458
|
def validate_type_params(definition, ancestors:, methods:)
|
422
459
|
type_params = definition.type_params_decl
|
423
460
|
|
@@ -429,19 +466,17 @@ module RBS
|
|
429
466
|
when Definition::Ancestor::Instance
|
430
467
|
result = calculator.in_inherit(name: ancestor.name, args: ancestor.args, variables: param_names)
|
431
468
|
validate_params_with(type_params, result: result) do |param|
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
source.location
|
439
|
-
end
|
469
|
+
decl = case entry = definition.entry
|
470
|
+
when Environment::ModuleEntry, Environment::ClassEntry
|
471
|
+
entry.primary.decl
|
472
|
+
when Environment::SingleEntry
|
473
|
+
entry.decl
|
474
|
+
end
|
440
475
|
|
441
476
|
raise InvalidVarianceAnnotationError.new(
|
442
477
|
type_name: definition.type_name,
|
443
478
|
param: param,
|
444
|
-
location:
|
479
|
+
location: source_location(ancestor.source, decl)
|
445
480
|
)
|
446
481
|
end
|
447
482
|
end
|
@@ -481,8 +516,6 @@ module RBS
|
|
481
516
|
nil
|
482
517
|
when nil
|
483
518
|
nil
|
484
|
-
else
|
485
|
-
raise
|
486
519
|
end
|
487
520
|
|
488
521
|
if method_types
|
@@ -537,11 +570,11 @@ module RBS
|
|
537
570
|
if interface_methods.key?(method_name)
|
538
571
|
interface_method = interface_methods[method_name]
|
539
572
|
|
540
|
-
if method_def.original
|
573
|
+
if original = method_def.original
|
541
574
|
raise DuplicatedMethodDefinitionError.new(
|
542
575
|
type: definition.self_type,
|
543
576
|
method_name: method_name,
|
544
|
-
members: [
|
577
|
+
members: [original]
|
545
578
|
)
|
546
579
|
end
|
547
580
|
|
@@ -561,6 +594,7 @@ module RBS
|
|
561
594
|
)
|
562
595
|
end
|
563
596
|
|
597
|
+
# @type var accessibility: RBS::Definition::accessibility
|
564
598
|
accessibility = if method_name == :initialize
|
565
599
|
:private
|
566
600
|
else
|
@@ -640,7 +674,7 @@ module RBS
|
|
640
674
|
end
|
641
675
|
|
642
676
|
method_def.overloads.each do |overload|
|
643
|
-
|
677
|
+
type_defs = overload.types.map do |method_type|
|
644
678
|
Definition::Method::TypeDef.new(
|
645
679
|
type: method_type,
|
646
680
|
member: overload,
|
@@ -649,7 +683,7 @@ module RBS
|
|
649
683
|
)
|
650
684
|
end
|
651
685
|
|
652
|
-
method.defs.unshift(*
|
686
|
+
method.defs.unshift(*type_defs)
|
653
687
|
end
|
654
688
|
|
655
689
|
definition.methods[method_name] = method
|