class RuboCop::Cop::Style::NumericLiteralPrefix

num = 01234
# good
num = 0O1234
num = 0o1234
# bad
@example EnforcedOctalStyle: zero_only
num = 1234
num = 0b10101
num = 0x12AB
num = 0o1234
# good
num = 0d1234
num = 0D1234
# bad - redundant decimal prefix
num = 0B10101
num = 0X12AB
num = 0O1234
# bad - uppercase prefix
num = 01234
# bad - missing octal prefix
@example EnforcedOctalStyle: zero_with_o (default)
or no prefix (in case of decimals).
uppercase prefixes and corrects them to lowercase prefix
Checks for octal, hex, binary, and decimal literals using

def format_binary(source)

def format_binary(source)
  source.sub(/^0B/, '0b')
end

def format_decimal(source)

def format_decimal(source)
  source.sub(/^0[dD]/, '')
end

def format_hex(source)

def format_hex(source)
  source.sub(/^0X/, '0x')
end

def format_octal(source)

def format_octal(source)
  source.sub(/^0O?/, '0o')
end

def format_octal_zero_only(source)

def format_octal_zero_only(source)
  source.sub(/^0[Oo]?/, '0')
end

def hex_bin_dec_literal_type(literal)

def hex_bin_dec_literal_type(literal)
  case literal
  when HEX_REGEX
    :hex
  when BINARY_REGEX
    :binary
  when DECIMAL_REGEX
    :decimal
  end
end

def literal_type(node)

def literal_type(node)
  literal = integer_part(node)
  octal_literal_type(literal) || hex_bin_dec_literal_type(literal)
end

def message(node)

def message(node)
  self.class.const_get("#{literal_type(node).upcase}_MSG")
end

def octal_literal_type(literal)

def octal_literal_type(literal)
  if OCTAL_ZERO_ONLY_REGEX.match?(literal) && octal_zero_only?
    :octal_zero_only
  elsif OCTAL_REGEX.match?(literal) && !octal_zero_only?
    :octal
  end
end

def octal_zero_only?

def octal_zero_only?
  cop_config['EnforcedOctalStyle'] == 'zero_only'
end

def on_int(node)

def on_int(node)
  type = literal_type(node)
  return unless type
  add_offense(node) do |corrector|
    corrector.replace(node, send(:"format_#{type}", node.source))
  end
end