module RuboCop::Cop::ConfigurableEnforcedStyle

def alternative_style

def alternative_style
  a = cop_config['SupportedStyles'].map(&:to_sym)
  if a.size != 2
    fail 'alternative_style can only be used when there are exactly ' \
         '2 SupportedStyles'
  end
  style == a.first ? a.last : a.first
end

def both_styles_detected

def both_styles_detected
  # Both correct and opposite styles exist.
  self.config_to_allow_offenses = { 'Enabled' => false }
end

def correct_style_detected

def correct_style_detected
  # Enabled:true indicates, later when the opposite style is detected,
  # that the correct style is used somewhere.
  self.config_to_allow_offenses ||= { 'Enabled' => true }
  both_styles_detected if config_to_allow_offenses[parameter_name]
end

def opposite_style_detected

def opposite_style_detected
  self.config_to_allow_offenses ||=
    { parameter_name => alternative_style.to_s }
  both_styles_detected if config_to_allow_offenses['Enabled']
end

def parameter_name

def parameter_name
  'EnforcedStyle'
end

def style

def style
  s = cop_config[parameter_name]
  if cop_config['SupportedStyles'].include?(s)
    s.to_sym
  else
    fail "Unknown style #{s} selected!"
  end
end

def unrecognized_style_detected

def unrecognized_style_detected
  # All we can do is to disable.
  self.config_to_allow_offenses = { 'Enabled' => false }
end