Skip to content

Commit c8ac58a

Browse files
committed
Preserve partial accessor visibility in prototypes
1 parent 5de6ecd commit c8ac58a

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

lib/rbs/prototype/rb.rb

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,9 +315,16 @@ def process(node, decls:, comments:, context:)
315315
else
316316
args.each do |arg|
317317
if arg && (name = literal_to_symbol(arg))
318-
if (i, _ = find_def_index_by_name(decls, name))
318+
if (i, defn = find_def_index_by_name(decls, name))
319319
current = current_accessibility(decls, i)
320320
if current != accessibility
321+
if defn.is_a?(AST::Members::AttrAccessor)
322+
reader = build_attribute_member(AST::Members::AttrReader, defn)
323+
writer = build_attribute_member(AST::Members::AttrWriter, defn)
324+
targeted, remaining = name == defn.name ? [reader, writer] : [writer, reader]
325+
decls[i, 1] = [targeted, remaining]
326+
end
327+
321328
decls.insert(i + 1, current)
322329
decls.insert(i, accessibility)
323330
end
@@ -791,6 +798,8 @@ def find_def_index_by_name(decls, name)
791798
decl.name == name
792799
when AST::Members::AttrWriter
793800
:"#{decl.name}=" == name
801+
when AST::Members::AttrAccessor
802+
decl.name == name || :"#{decl.name}=" == name
794803
end
795804
end
796805

@@ -802,6 +811,19 @@ def find_def_index_by_name(decls, name)
802811
end
803812
end
804813

814+
def build_attribute_member(klass, member)
815+
klass.new(
816+
name: member.name,
817+
type: member.type,
818+
ivar_name: member.ivar_name,
819+
kind: member.kind,
820+
annotations: member.annotations,
821+
location: member.location,
822+
comment: member.comment,
823+
visibility: member.visibility
824+
)
825+
end
826+
805827
def sort_members!(decls)
806828
i = 0
807829
orders = {

0 commit comments

Comments
 (0)