Skip to content

Commit

Permalink
Support Rails 7 syntax for Rails/EnumUniqueness cop
Browse files Browse the repository at this point in the history
  • Loading branch information
ytjmt committed Jun 16, 2024
1 parent bb1d373 commit 88df10a
Show file tree
Hide file tree
Showing 2 changed files with 254 additions and 78 deletions.
36 changes: 29 additions & 7 deletions lib/rubocop/cop/rails/enum_uniqueness.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@ module Rails
#
# @example
# # bad
# enum :status, { active: 0, archived: 0 }
#
# # good
# enum :status, { active: 0, archived: 1 }
#
# # bad
# enum :status, [:active, :archived, :active]
#
# # good
# enum :status, [:active, :archived]
#
# # bad
# enum status: { active: 0, archived: 0 }
#
# # good
Expand All @@ -24,6 +36,10 @@ class EnumUniqueness < Base
RESTRICT_ON_SEND = %i[enum].freeze

def_node_matcher :enum?, <<~PATTERN
(send nil? :enum $_ ${array hash} ...)
PATTERN

def_node_matcher :enum_with_old_syntax?, <<~PATTERN
(send nil? :enum (hash $...))
PATTERN

Expand All @@ -32,15 +48,17 @@ class EnumUniqueness < Base
PATTERN

def on_send(node)
enum?(node) do |pairs|
enum?(node) do |key, args|
consecutive_duplicates(args.values).each do |item|
add_offense(item, message: message(key, item))
end
end

enum_with_old_syntax?(node) do |pairs|
pairs.each do |pair|
enum_values(pair) do |key, args|
items = args.values

next unless duplicates?(items)

consecutive_duplicates(items).each do |item|
add_offense(item, message: format(MSG, value: item.source, enum: enum_name(key)))
consecutive_duplicates(args.values).each do |item|
add_offense(item, message: message(key, item))
end
end
end
Expand All @@ -57,6 +75,10 @@ def enum_name(key)
key.source
end
end

def message(key, item)
format(MSG, value: item.source, enum: enum_name(key))
end
end
end
end
Expand Down
Loading

0 comments on commit 88df10a

Please sign in to comment.