👌
rubocopのカスタムルールを利用してRailsのenumに_prefix or _suffixを強制させる
railsの enum機能は大変便利ですが、動的に生成されるメソッド名のわかり易さや、衝突を避けるために_prefix
, _suffix
オプションは必須で使いたいですよね。
参考)
rubocopのカスタムルールを作成することで、この様な制約を簡単に実現することができます。
*rails7のsyntaxには対応していない
class RuboCop::Cop::Rails::RequireEnumAffix < RuboCop::Cop::Base
MSG = 'Add _prefix or _suffix option.'
def_node_matcher :enum?, <<~PATTERN
(send nil? :enum (hash $...))
PATTERN
def_node_matcher :affix?, <<~PATTERN
(pair (sym {:_prefix :_suffix}) {str true})
PATTERN
def on_send(node)
enum?(node) do |pairs|
has_affix = false
pairs.each do |pair|
has_affix = true if affix?(pair)
end
add_offense(node) unless has_affix
end
end
end
参考)
Discussion