Skip to content

feat: support attr_accessor/attr_reader/attr_writer in class definitions#546

Merged
takaokouji merged 2 commits into
developfrom
feat/attr-accessor
Apr 19, 2026
Merged

feat: support attr_accessor/attr_reader/attr_writer in class definitions#546
takaokouji merged 2 commits into
developfrom
feat/attr-accessor

Conversation

@takaokouji
Copy link
Copy Markdown

Summary

  • attr_accessorattr_readerattr_writer をクラス定義内でサポート
  • getter (foo, self.foo) → @foo 変数参照に変換
  • setter (self.foo = val) → @foo = val 変数代入に変換
  • ラウンドトリップ対応(@ruby:class コメントに attr 情報を保存)

変換例

class Sprite1
  attr_accessor :hp

  when_flag_clicked do
    self.hp = 100      # → data_setvariableto(@hp, 100)
    say(hp)            # → looks_say(data_variable(@hp))
  end
end

Changes Made

Converter:

  • class-visitor.jsattr_accessor/reader/writer のプレスキャン、フィルタリング、コメントマーカー
  • expressions.js — getter/setter 解決(AST の SelfNode 判定で _getNodeTypeName 使用)

Generator:

  • index.jsinit()@ruby:class コメントから attr 名を早期解析
  • data.jsdata_variable: accessor 名は @ なしで出力、data_setvariableto: self.name = val で出力
  • class-wrapper.jsattr_accessor :hp 行の出力、def initialize から accessor 変数を除外

Test Plan

  • 4 テスト pass (getter/setter, reader, multiple symbols, self.foo)
  • 全 223 roundtrip テスト pass (リグレッションなし)
  • lint pass

Closes #545

Converter:
- Pre-scan class body for attr_accessor/reader/writer calls
- Extract symbol names from SymbolNode.unescaped.value
- Store accessor info in context and @ruby:class comment
- Resolve getter (foo, self.foo) → @foo variable read
- Resolve setter (self.foo = val) → @foo variable assignment

Generator:
- Parse attr info from @ruby:class comment in init() (before code gen)
- data_variable: output accessor name without @ prefix
- data_setvariableto: output self.name = val for accessor writes
- _generateInitialize: skip accessor variables
- wrapClassCode: output attr_accessor/reader/writer lines

Closes #545

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

🚀 Preview deployed: https://smalruby.jp/smalruby3-editor/feat/attr-accessor/

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: attr_accessor/attr_reader/attr_writer サポート

1 participant