class RuboCop::Cop::Rails::DotSeparatedKeys


I18n.t :record_invalid, scope: ‘activerecord.errors.messages’
I18n.t ‘activerecord.errors.messages.record_invalid’
# good
I18n.t :title, scope: :invitation
I18n.t :record_invalid, scope: [:activerecord, :errors, :messages]
# bad
@example
Dot-separated notation is easier to read and trace the hierarchy.
with an array or a single symbol in ‘I18n` translation methods.
Enforces the use of dot-separated locale keys instead of specifying the `:scope` option

def new_key(key_node, scope_node)

def new_key(key_node, scope_node)
  "'#{scopes(scope_node).map(&:value).join('.')}.#{key_node.value}'".squeeze('.')
end

def on_send(node)

def on_send(node)
  return unless TRANSLATE_METHODS.include?(node.method_name)
  translate_with_scope?(node) do |key_node, scope_node|
    return unless should_convert_scope?(scope_node)
    add_offense(scope_node) do |corrector|
      # Eat the comma on the left.
      range = range_with_surrounding_space(scope_node.source_range, side: :left)
      range = range_with_surrounding_comma(range, :left)
      corrector.remove(range)
      corrector.replace(key_node, new_key(key_node, scope_node))
    end
  end
end

def scopes(scope_node)

def scopes(scope_node)
  value = scope_node.value
  if value.array_type?
    value.values
  else
    [value]
  end
end

def should_convert_scope?(scope_node)

def should_convert_scope?(scope_node)
  scopes(scope_node).all?(&:basic_literal?)
end