東京に来ていた Dominion525 さんと晩御飯を食べながら、名古屋Ruby会議やソフトウェア開発についての話をしたりしていた。
RuboCop の話題になった際に、do ... end
を文に { ... }
を式に適用するという cop を作れないか浮かんだので、帰宅後に初手として仮説を立てていた AST を見てた (仮に実現したあと upstream に投げるとしてもデフォルト Enabled: false
の類だといまのところ思っている) 。
require 'parser/current' Parser::CurrentRuby.parse("foo { puts('hi') }") => s(:block, s(:send, nil, :foo), s(:args), s(:send, nil, :puts, s(:str, "hi"))) Parser::CurrentRuby.parse("foo do puts('hi') end") => s(:block, s(:send, nil, :foo), s(:args), s(:send, nil, :puts, s(:str, "hi")))
予想 (というか期待?) したとおり do ... end
と { ... }
の違いは S 式上で出てこないので、まずこの辺りの解決をしないと考えを先に進められなさそう。Parser::AST::Node#location あたりを使って頑張ることになるのだろうか。