rbs 0.17.0 → 0.20.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -0
- data/Rakefile +5 -0
- data/core/file.rbs +0 -4
- data/core/hash.rbs +1 -3
- data/core/object_space.rbs +98 -0
- data/core/time.rbs +0 -12
- data/lib/rbs/ast/members.rb +9 -3
- data/lib/rbs/definition_builder.rb +80 -61
- data/lib/rbs/environment.rb +3 -0
- data/lib/rbs/environment_loader.rb +2 -2
- data/lib/rbs/environment_walker.rb +70 -35
- data/lib/rbs/method_type.rb +1 -31
- data/lib/rbs/parser.rb +966 -906
- data/lib/rbs/parser.y +95 -55
- data/lib/rbs/prototype/rb.rb +154 -20
- data/lib/rbs/prototype/rbi.rb +5 -5
- data/lib/rbs/prototype/runtime.rb +2 -1
- data/lib/rbs/test/hook.rb +30 -17
- data/lib/rbs/test/type_check.rb +6 -1
- data/lib/rbs/types.rb +63 -6
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +9 -1
- data/schema/members.json +5 -1
- data/sig/definition_builder.rbs +3 -0
- data/sig/members.rbs +4 -1
- data/sig/method_types.rbs +3 -16
- data/sig/types.rbs +17 -1
- data/stdlib/dbm/0/dbm.rbs +0 -2
- data/stdlib/monitor/0/monitor.rbs +119 -0
- data/stdlib/singleton/0/singleton.rbs +111 -0
- data/stdlib/tsort/0/tsort.rbs +8 -0
- data/stdlib/yaml/0/dbm.rbs +221 -0
- data/stdlib/yaml/0/store.rbs +53 -0
- data/steep/Gemfile.lock +7 -7
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d0358484cf9cfd6a58aba4115025628e9af481fbeb11079ba189e387486bd85
|
4
|
+
data.tar.gz: 01fa1f2883a0faa043d5116118e6d4bbebb33dc3290d32d9404935817e589643
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a16ce63cf0d28ba0834f7a702767aa5dcb7440a0ef83d00f443e6877977abdb751c6e7816266d45af44cbe21b3eafc7a563edfdf678662a8412f4d8b758d80c
|
7
|
+
data.tar.gz: 45e237d7de22114e7f6d22f138b2850645067993c9577581842464bec7d06937a7427d13d9821d93088008f0ea838b6e475b43725d3b16b60c0e3c821b7fef93
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,34 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
+
## 0.20.1 (2020-12-06)
|
6
|
+
|
7
|
+
* Make the order of RBS load reproducible ([#508](https://github.com/ruby/rbs/pull/508))
|
8
|
+
|
9
|
+
## 0.20.0 (2020-12-06)
|
10
|
+
|
11
|
+
* Signature updates for `TSort`, `DBM`, `Time`, and `Hash` ([#496](https://github.com/ruby/rbs/pull/496), [#497](https://github.com/ruby/rbs/pull/497), [#499](https://github.com/ruby/rbs/pull/499), [#507](https://github.com/ruby/rbs/pull/507))
|
12
|
+
* Add _singleton attribute_ syntax ([#502](https://github.com/ruby/rbs/pull/502), [#506](https://github.com/ruby/rbs/pull/506), [#505](https://github.com/ruby/rbs/pull/505))
|
13
|
+
* Proc types with blocks ([#503](https://github.com/ruby/rbs/pull/503))
|
14
|
+
* Add support for escape sequences in string literal types ([#501](https://github.com/ruby/rbs/pull/501))
|
15
|
+
* Fix runtime type checking of blocks with keyword args ([#500](https://github.com/ruby/rbs/pull/500))
|
16
|
+
|
17
|
+
## 0.19.0 (2020-12-02)
|
18
|
+
|
19
|
+
* Signature updates for `Monitor` and File ([#485](https://github.com/ruby/rbs/pull/485), [#495](https://github.com/ruby/rbs/pull/495))
|
20
|
+
|
21
|
+
## 0.18.1 (2020-12-01)
|
22
|
+
|
23
|
+
* Fix `EnvironmentWalker#each_type_name` ([#494](https://github.com/ruby/rbs/pull/494))
|
24
|
+
|
25
|
+
## 0.18.0 (2020-12-01)
|
26
|
+
|
27
|
+
* Signature updates for `YAML`, `ObjectSpace`, and `Singleton` ([#408](https://github.com/ruby/rbs/pull/408), [#477](https://github.com/ruby/rbs/pull/477), [#482](https://github.com/ruby/rbs/pull/482))
|
28
|
+
* `prototype rb` improvements ([#492](https://github.com/ruby/rbs/pull/492), [#487](https://github.com/ruby/rbs/pull/487), [#486](https://github.com/ruby/rbs/pull/486), [#481](https://github.com/ruby/rbs/pull/481))
|
29
|
+
* Runtime type checker improvements ([#488](https://github.com/ruby/rbs/pull/488), [#489](https://github.com/ruby/rbs/pull/489), [#490](https://github.com/ruby/rbs/pull/490))
|
30
|
+
* Update `DependencyWalker` API to receive _Node_ objects instead of `TypeName` ([#484](https://github.com/ruby/rbs/pull/484))
|
31
|
+
* Assume encoding of RBS files to be UTF-8 ([#493](https://github.com/ruby/rbs/pull/493))
|
32
|
+
|
5
33
|
## 0.17.0 (2020-11-14)
|
6
34
|
|
7
35
|
* Signature updates for `Enumerable`, `Hash`, and `TSort` ([#462](https://github.com/ruby/rbs/pull/462), [#468](https://github.com/ruby/rbs/pull/468), [#471](https://github.com/ruby/rbs/pull/471), [#472](https://github.com/ruby/rbs/pull/472), [#473](https://github.com/ruby/rbs/pull/473), [#474](https://github.com/ruby/rbs/pull/474))
|
data/Rakefile
CHANGED
data/core/file.rbs
CHANGED
@@ -192,10 +192,6 @@ class File < IO
|
|
192
192
|
#
|
193
193
|
def self.exist?: (string | _ToPath | IO file_name) -> bool
|
194
194
|
|
195
|
-
# Deprecated method. Don't use.
|
196
|
-
#
|
197
|
-
alias self.exists? self.exist?
|
198
|
-
|
199
195
|
# Converts a pathname to an absolute pathname. Relative paths are referenced
|
200
196
|
# from the current working directory of the process unless `dir_string` is
|
201
197
|
# given, in which case it will be used as the starting point. The given pathname
|
data/core/hash.rbs
CHANGED
@@ -563,8 +563,6 @@ class Hash[unchecked out K, unchecked out V] < Object
|
|
563
563
|
#
|
564
564
|
alias include? has_key?
|
565
565
|
|
566
|
-
def index: (V) -> K?
|
567
|
-
|
568
566
|
# Return the contents of this hash as a string.
|
569
567
|
#
|
570
568
|
# h = { "c" => 300, "a" => 100, "d" => 400, "c" => 300 }
|
@@ -615,7 +613,7 @@ class Hash[unchecked out K, unchecked out V] < Object
|
|
615
613
|
# h.key(300) #=> "c"
|
616
614
|
# h.key(999) #=> nil
|
617
615
|
#
|
618
|
-
|
616
|
+
def key: (V) -> K?
|
619
617
|
|
620
618
|
# Returns `true` if the given key is present in *hsh*.
|
621
619
|
#
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# The ObjectSpace module contains a number of routines that interact with the
|
2
|
+
# garbage collection facility and allow you to traverse all living objects with
|
3
|
+
# an iterator.
|
4
|
+
#
|
5
|
+
# ObjectSpace also provides support for object finalizers, procs that will be
|
6
|
+
# called when a specific object is about to be destroyed by garbage collection.
|
7
|
+
#
|
8
|
+
# require 'objspace'
|
9
|
+
#
|
10
|
+
# a = "A"
|
11
|
+
# b = "B"
|
12
|
+
#
|
13
|
+
# ObjectSpace.define_finalizer(a, proc {|id| puts "Finalizer one on #{id}" })
|
14
|
+
# ObjectSpace.define_finalizer(b, proc {|id| puts "Finalizer two on #{id}" })
|
15
|
+
#
|
16
|
+
# *produces:*
|
17
|
+
#
|
18
|
+
# Finalizer two on 537763470
|
19
|
+
# Finalizer one on 537763480
|
20
|
+
module ObjectSpace
|
21
|
+
def self._id2ref: (Integer id) -> untyped
|
22
|
+
|
23
|
+
# Counts all objects grouped by type.
|
24
|
+
#
|
25
|
+
# It returns a hash, such as:
|
26
|
+
# {
|
27
|
+
# :TOTAL=>10000,
|
28
|
+
# :FREE=>3011,
|
29
|
+
# :T_OBJECT=>6,
|
30
|
+
# :T_CLASS=>404,
|
31
|
+
# # ...
|
32
|
+
# }
|
33
|
+
#
|
34
|
+
# The contents of the returned hash are implementation specific. It may be
|
35
|
+
# changed in future.
|
36
|
+
#
|
37
|
+
# The keys starting with `:T_` means live objects. For example, `:T_ARRAY` is
|
38
|
+
# the number of arrays. `:FREE` means object slots which is not used now.
|
39
|
+
# `:TOTAL` means sum of above.
|
40
|
+
#
|
41
|
+
# If the optional argument `result_hash` is given, it is overwritten and
|
42
|
+
# returned. This is intended to avoid probe effect.
|
43
|
+
#
|
44
|
+
# h = {}
|
45
|
+
# ObjectSpace.count_objects(h)
|
46
|
+
# puts h
|
47
|
+
# # => { :TOTAL=>10000, :T_CLASS=>158280, :T_MODULE=>20672, :T_STRING=>527249 }
|
48
|
+
#
|
49
|
+
# This method is only expected to work on C Ruby.
|
50
|
+
#
|
51
|
+
def self.count_objects: (?Hash[Symbol, Integer] result_hash) -> Hash[Symbol, Integer]
|
52
|
+
|
53
|
+
# Adds *aProc* as a finalizer, to be called after *obj* was destroyed. The
|
54
|
+
# object ID of the *obj* will be passed as an argument to *aProc*. If *aProc* is
|
55
|
+
# a lambda or method, make sure it can be called with a single argument.
|
56
|
+
#
|
57
|
+
def self.define_finalizer: (untyped obj, ^(Integer id) -> void aProc) -> [ Integer, Proc ]
|
58
|
+
| (untyped obj) { (Integer id) -> void } -> [ Integer, Proc ]
|
59
|
+
|
60
|
+
# Calls the block once for each living, nonimmediate object in this Ruby
|
61
|
+
# process. If *module* is specified, calls the block for only those classes or
|
62
|
+
# modules that match (or are a subclass of) *module*. Returns the number of
|
63
|
+
# objects found. Immediate objects (`Fixnum`s, `Symbol`s `true`, `false`, and
|
64
|
+
# `nil`) are never returned. In the example below, #each_object returns both the
|
65
|
+
# numbers we defined and several constants defined in the Math module.
|
66
|
+
#
|
67
|
+
# If no block is given, an enumerator is returned instead.
|
68
|
+
#
|
69
|
+
# a = 102.7
|
70
|
+
# b = 95 # Won't be returned
|
71
|
+
# c = 12345678987654321
|
72
|
+
# count = ObjectSpace.each_object(Numeric) {|x| p x }
|
73
|
+
# puts "Total count: #{count}"
|
74
|
+
#
|
75
|
+
# *produces:*
|
76
|
+
#
|
77
|
+
# 12345678987654321
|
78
|
+
# 102.7
|
79
|
+
# 2.71828182845905
|
80
|
+
# 3.14159265358979
|
81
|
+
# 2.22044604925031e-16
|
82
|
+
# 1.7976931348623157e+308
|
83
|
+
# 2.2250738585072e-308
|
84
|
+
# Total count: 7
|
85
|
+
#
|
86
|
+
def self.each_object: (?Module `module`) -> Enumerator[untyped, Integer]
|
87
|
+
| (?Module `module`) { (untyped obj) -> void } -> Integer
|
88
|
+
|
89
|
+
def self.garbage_collect: (?full_mark: bool, ?immediate_mark: bool, ?immediate_sweep: bool) -> void
|
90
|
+
|
91
|
+
# Removes all finalizers for *obj*.
|
92
|
+
#
|
93
|
+
def self.undefine_finalizer: [X] (X obj) -> X
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def garbage_collect: (?full_mark: bool, ?immediate_mark: bool, ?immediate_sweep: bool) -> void
|
98
|
+
end
|
data/core/time.rbs
CHANGED
@@ -757,18 +757,6 @@ class Time < Object
|
|
757
757
|
#
|
758
758
|
def subsec: () -> Numeric
|
759
759
|
|
760
|
-
# Returns a new Time object, one second later than *time*. Time#succ is obsolete
|
761
|
-
# since 1.9.2 for time is not a discrete value.
|
762
|
-
#
|
763
|
-
# t = Time.now #=> 2007-11-19 08:23:57 -0600
|
764
|
-
# t.succ #=> 2007-11-19 08:23:58 -0600
|
765
|
-
#
|
766
|
-
# Use instead `time + 1`
|
767
|
-
#
|
768
|
-
# t + 1 #=> 2007-11-19 08:23:58 -0600
|
769
|
-
#
|
770
|
-
def succ: () -> Time
|
771
|
-
|
772
760
|
# Returns `true` if *time* represents Sunday.
|
773
761
|
#
|
774
762
|
# t = Time.local(1990, 4, 1) #=> 1990-04-01 00:00:00 -0600
|
data/lib/rbs/ast/members.rb
CHANGED
@@ -216,31 +216,34 @@ module RBS
|
|
216
216
|
module Attribute
|
217
217
|
attr_reader :name
|
218
218
|
attr_reader :type
|
219
|
+
attr_reader :kind
|
219
220
|
attr_reader :ivar_name
|
220
221
|
attr_reader :annotations
|
221
222
|
attr_reader :location
|
222
223
|
attr_reader :comment
|
223
224
|
|
224
|
-
def initialize(name:, type:, ivar_name:, annotations:, location:, comment:)
|
225
|
+
def initialize(name:, type:, ivar_name:, kind:, annotations:, location:, comment:)
|
225
226
|
@name = name
|
226
227
|
@type = type
|
227
228
|
@ivar_name = ivar_name
|
228
229
|
@annotations = annotations
|
229
230
|
@location = location
|
230
231
|
@comment = comment
|
232
|
+
@kind = kind
|
231
233
|
end
|
232
234
|
|
233
235
|
def ==(other)
|
234
236
|
other.is_a?(self.class) &&
|
235
237
|
other.name == name &&
|
236
238
|
other.type == type &&
|
237
|
-
other.ivar_name == ivar_name
|
239
|
+
other.ivar_name == ivar_name &&
|
240
|
+
other.kind == kind
|
238
241
|
end
|
239
242
|
|
240
243
|
alias eql? ==
|
241
244
|
|
242
245
|
def hash
|
243
|
-
self.class.hash ^ name.hash ^ type.hash ^ ivar_name.hash
|
246
|
+
self.class.hash ^ name.hash ^ type.hash ^ ivar_name.hash ^ kind.hash
|
244
247
|
end
|
245
248
|
end
|
246
249
|
|
@@ -253,6 +256,7 @@ module RBS
|
|
253
256
|
name: name,
|
254
257
|
type: type,
|
255
258
|
ivar_name: ivar_name,
|
259
|
+
kind: kind,
|
256
260
|
annotations: annotations,
|
257
261
|
location: location,
|
258
262
|
comment: comment
|
@@ -269,6 +273,7 @@ module RBS
|
|
269
273
|
name: name,
|
270
274
|
type: type,
|
271
275
|
ivar_name: ivar_name,
|
276
|
+
kind: kind,
|
272
277
|
annotations: annotations,
|
273
278
|
location: location,
|
274
279
|
comment: comment
|
@@ -285,6 +290,7 @@ module RBS
|
|
285
290
|
name: name,
|
286
291
|
type: type,
|
287
292
|
ivar_name: ivar_name,
|
293
|
+
kind: kind,
|
288
294
|
annotations: annotations,
|
289
295
|
location: location,
|
290
296
|
comment: comment
|
@@ -558,7 +558,7 @@ module RBS
|
|
558
558
|
)
|
559
559
|
end
|
560
560
|
|
561
|
-
unless array.all? {|pair| pair[1] == :public}
|
561
|
+
unless array.all? {|pair| pair[1] == :public }
|
562
562
|
raise InconsistentMethodVisibilityError.new(
|
563
563
|
type_name: type_name,
|
564
564
|
method_name: method_name,
|
@@ -658,65 +658,12 @@ module RBS
|
|
658
658
|
each_member_with_accessibility(d.decl.members) do |member, accessibility|
|
659
659
|
case member
|
660
660
|
when AST::Members::AttrReader, AST::Members::AttrAccessor, AST::Members::AttrWriter
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
else
|
668
|
-
member.ivar_name || :"@#{member.name}"
|
669
|
-
end
|
670
|
-
|
671
|
-
if member.is_a?(AST::Members::AttrReader) || member.is_a?(AST::Members::AttrAccessor)
|
672
|
-
definition.methods[name] = Definition::Method.new(
|
673
|
-
super_method: nil,
|
674
|
-
defs: [
|
675
|
-
Definition::Method::TypeDef.new(
|
676
|
-
type: MethodType.new(
|
677
|
-
type_params: [],
|
678
|
-
type: Types::Function.empty(type),
|
679
|
-
block: nil,
|
680
|
-
location: nil
|
681
|
-
),
|
682
|
-
member: member,
|
683
|
-
defined_in: type_name,
|
684
|
-
implemented_in: type_name
|
685
|
-
)
|
686
|
-
],
|
687
|
-
accessibility: accessibility,
|
688
|
-
alias_of: nil
|
689
|
-
)
|
690
|
-
end
|
691
|
-
|
692
|
-
if member.is_a?(AST::Members::AttrWriter) || member.is_a?(AST::Members::AttrAccessor)
|
693
|
-
definition.methods[:"#{name}="] = Definition::Method.new(
|
694
|
-
super_method: nil,
|
695
|
-
defs: [
|
696
|
-
Definition::Method::TypeDef.new(
|
697
|
-
type: MethodType.new(
|
698
|
-
type_params: [],
|
699
|
-
type: Types::Function.empty(type).update(
|
700
|
-
required_positionals: [Types::Function::Param.new(name: name, type: type)]
|
701
|
-
),
|
702
|
-
block: nil,
|
703
|
-
location: nil
|
704
|
-
),
|
705
|
-
member: member,
|
706
|
-
defined_in: type_name,
|
707
|
-
implemented_in: type_name
|
708
|
-
),
|
709
|
-
],
|
710
|
-
accessibility: accessibility,
|
711
|
-
alias_of: nil
|
712
|
-
)
|
713
|
-
end
|
714
|
-
|
715
|
-
if ivar_name
|
716
|
-
definition.instance_variables[ivar_name] = Definition::Variable.new(
|
717
|
-
parent_variable: nil,
|
718
|
-
type: type,
|
719
|
-
declared_in: type_name
|
661
|
+
if member.kind == :instance
|
662
|
+
build_attribute(
|
663
|
+
type_name: type_name,
|
664
|
+
definition: definition,
|
665
|
+
member: member,
|
666
|
+
accessibility: accessibility
|
720
667
|
)
|
721
668
|
end
|
722
669
|
|
@@ -982,8 +929,16 @@ module RBS
|
|
982
929
|
end
|
983
930
|
|
984
931
|
entry.decls.each do |d|
|
985
|
-
each_member_with_accessibility(d.decl.members) do |member,
|
932
|
+
each_member_with_accessibility(d.decl.members) do |member, accessibility|
|
986
933
|
case member
|
934
|
+
when AST::Members::AttrReader, AST::Members::AttrAccessor, AST::Members::AttrWriter
|
935
|
+
if member.kind == :singleton
|
936
|
+
build_attribute(type_name: type_name,
|
937
|
+
definition: definition,
|
938
|
+
member: member,
|
939
|
+
accessibility: accessibility)
|
940
|
+
end
|
941
|
+
|
987
942
|
when AST::Members::ClassInstanceVariable
|
988
943
|
definition.instance_variables[member.name] = Definition::Variable.new(
|
989
944
|
parent_variable: nil,
|
@@ -1004,6 +959,70 @@ module RBS
|
|
1004
959
|
end
|
1005
960
|
end
|
1006
961
|
|
962
|
+
def build_attribute(type_name:, definition:, member:, accessibility:)
|
963
|
+
name = member.name
|
964
|
+
type = member.type
|
965
|
+
|
966
|
+
ivar_name = case member.ivar_name
|
967
|
+
when false
|
968
|
+
nil
|
969
|
+
else
|
970
|
+
member.ivar_name || :"@#{member.name}"
|
971
|
+
end
|
972
|
+
|
973
|
+
if member.is_a?(AST::Members::AttrReader) || member.is_a?(AST::Members::AttrAccessor)
|
974
|
+
definition.methods[name] = Definition::Method.new(
|
975
|
+
super_method: nil,
|
976
|
+
defs: [
|
977
|
+
Definition::Method::TypeDef.new(
|
978
|
+
type: MethodType.new(
|
979
|
+
type_params: [],
|
980
|
+
type: Types::Function.empty(type),
|
981
|
+
block: nil,
|
982
|
+
location: nil
|
983
|
+
),
|
984
|
+
member: member,
|
985
|
+
defined_in: type_name,
|
986
|
+
implemented_in: type_name
|
987
|
+
)
|
988
|
+
],
|
989
|
+
accessibility: accessibility,
|
990
|
+
alias_of: nil
|
991
|
+
)
|
992
|
+
end
|
993
|
+
|
994
|
+
if member.is_a?(AST::Members::AttrWriter) || member.is_a?(AST::Members::AttrAccessor)
|
995
|
+
definition.methods[:"#{name}="] = Definition::Method.new(
|
996
|
+
super_method: nil,
|
997
|
+
defs: [
|
998
|
+
Definition::Method::TypeDef.new(
|
999
|
+
type: MethodType.new(
|
1000
|
+
type_params: [],
|
1001
|
+
type: Types::Function.empty(type).update(
|
1002
|
+
required_positionals: [Types::Function::Param.new(name: name, type: type)]
|
1003
|
+
),
|
1004
|
+
block: nil,
|
1005
|
+
location: nil
|
1006
|
+
),
|
1007
|
+
member: member,
|
1008
|
+
defined_in: type_name,
|
1009
|
+
implemented_in: type_name
|
1010
|
+
),
|
1011
|
+
],
|
1012
|
+
accessibility: accessibility,
|
1013
|
+
alias_of: nil
|
1014
|
+
)
|
1015
|
+
end
|
1016
|
+
|
1017
|
+
if ivar_name
|
1018
|
+
definition.instance_variables[ivar_name] = Definition::Variable.new(
|
1019
|
+
parent_variable: nil,
|
1020
|
+
type: type,
|
1021
|
+
declared_in: type_name
|
1022
|
+
)
|
1023
|
+
end
|
1024
|
+
end
|
1025
|
+
|
1007
1026
|
def merge_definitions(type_name, pairs, entry:, self_type:, ancestors:)
|
1008
1027
|
Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
|
1009
1028
|
pairs.reverse_each do |ancestor, current_definition|
|
data/lib/rbs/environment.rb
CHANGED
@@ -349,6 +349,7 @@ module RBS
|
|
349
349
|
AST::Members::AttrAccessor.new(
|
350
350
|
name: member.name,
|
351
351
|
type: absolute_type(resolver, member.type, context: context),
|
352
|
+
kind: member.kind,
|
352
353
|
annotations: member.annotations,
|
353
354
|
comment: member.comment,
|
354
355
|
location: member.location,
|
@@ -358,6 +359,7 @@ module RBS
|
|
358
359
|
AST::Members::AttrReader.new(
|
359
360
|
name: member.name,
|
360
361
|
type: absolute_type(resolver, member.type, context: context),
|
362
|
+
kind: member.kind,
|
361
363
|
annotations: member.annotations,
|
362
364
|
comment: member.comment,
|
363
365
|
location: member.location,
|
@@ -367,6 +369,7 @@ module RBS
|
|
367
369
|
AST::Members::AttrWriter.new(
|
368
370
|
name: member.name,
|
369
371
|
type: absolute_type(resolver, member.type, context: context),
|
372
|
+
kind: member.kind,
|
370
373
|
annotations: member.annotations,
|
371
374
|
comment: member.comment,
|
372
375
|
location: member.location,
|