@@ -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