Sha256: f37357471168e88fa4bd0bc5fd42274cc409522b4ba779a10de8075e25b02a3c
Contents?: true
Size: 1.64 KB
Versions: 3
Compression:
Stored size: 1.64 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Rails # This cop looks for enums written with array syntax. # # When using array syntax, adding an element in a # position other than the last causes all previous # definitions to shift. Explicitly specifying the # value for each key prevents this from happening. # # @example # # bad # enum status: [:active, :archived] # # # good # enum status: { active: 0, archived: 1 } # class EnumHash < Cop MSG = 'Enum defined as an array found in `%<enum>s` enum declaration. '\ 'Use hash syntax instead.' def_node_matcher :enum?, <<~PATTERN (send nil? :enum (hash $...)) PATTERN def_node_matcher :array_pair?, <<~PATTERN (pair $_ $array) PATTERN def on_send(node) enum?(node) do |pairs| pairs.each do |pair| key, array = array_pair?(pair) next unless key add_offense(array, message: format(MSG, enum: enum_name(key))) end end end def autocorrect(node) range = node.loc.expression hash = node .children .each_with_index .map { |elem, index| [elem.children.first, index] }.to_h ->(corrector) { corrector.replace(range, hash.to_s) } end private def enum_name(key) case key.type when :sym, :str key.value else key.source end end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rubocop-rails-2.3.2 | lib/rubocop/cop/rails/enum_hash.rb |
rubocop-rails-2.3.1 | lib/rubocop/cop/rails/enum_hash.rb |
rubocop-rails-2.3.0 | lib/rubocop/cop/rails/enum_hash.rb |