C = Struct.new(:foo, keyword_init: true) pp m=C.instance_method(:foo=) # => #<UnboundMethod: C(keyword_init: true)#foo=(_) /tmp/tmp.ZxMbyVAwA1/test.rb:1> pp RubyVM::AbstractSyntaxTree.of(m) # => (CDECL@1:0-1:40 :C (CALL@1:4-1:40 (CONST@1:4-1:10 :Struct) :new (LIST@1:15-1:39 (LIT@1:15-1:19 :foo) (HASH@1:21-1:39 (LIST@1:21-1:39 (LIT@1:21-1:34 :keyword_init) (TRUE@1:35-1:39) nil)) nil)))
StructのsetterメソッドをRubyVM::AST.ofしようとすると、メソッド定義ではないnodeが取れてしまって不便。
https://github.com/ruby/ruby/blob/593cc4ca83298c9495e6694dec6ada5c79453b11/struct.c#L394 のあたりを眺めていた。getterの場合も10個目以降は同様の問題がありそう。