class RuboCop::Cop::Style::NumericLiteralPrefix
This cop checks for octal, hex, binary and decimal literals using uppercase prefixes and corrects them to lowercase prefix or no prefix (in case of decimals). eg. for octal use `0o` instead of `0` or `0O`.
Can be configured to use `0` only for octal literals using `EnforcedOctalStyle` => `zero_only`
Constants
- BINARY_MSG
- BINARY_REGEX
- DECIMAL_MSG
- DECIMAL_REGEX
- HEX_MSG
- HEX_REGEX
- OCTAL_MSG
- OCTAL_REGEX
- OCTAL_ZERO_ONLY_MSG
- OCTAL_ZERO_ONLY_REGEX
Public Instance Methods
on_int(node)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 28 def on_int(node) type = literal_type(node) return unless type add_offense(node) end
Private Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 42 def autocorrect(node) lambda do |corrector| type = literal_type(node) corrector.replace(node.source_range, send(:"format_#{type}", node.source)) end end
format_binary(source)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 91 def format_binary(source) source.sub(/^0B/, '0b') end
format_decimal(source)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 95 def format_decimal(source) source.sub(/^0[dD]/, '') end
format_hex(source)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 87 def format_hex(source) source.sub(/^0X/, '0x') end
format_octal(source)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 79 def format_octal(source) source.sub(/^0O?/, '0o') end
format_octal_zero_only(source)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 83 def format_octal_zero_only(source) source.sub(/^0[Oo]?/, '0') end
hex_bin_dec_literal_type(literal)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 64 def hex_bin_dec_literal_type(literal) case literal when HEX_REGEX :hex when BINARY_REGEX :binary when DECIMAL_REGEX :decimal end end
literal_type(node)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 50 def literal_type(node) literal = integer_part(node) octal_literal_type(literal) || hex_bin_dec_literal_type(literal) end
message(node)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 38 def message(node) self.class.const_get("#{literal_type(node).upcase}_MSG") end
octal_literal_type(literal)
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 56 def octal_literal_type(literal) if literal =~ OCTAL_ZERO_ONLY_REGEX && octal_zero_only? :octal_zero_only elsif literal =~ OCTAL_REGEX && !octal_zero_only? :octal end end
octal_zero_only?()
click to toggle source
# File lib/rubocop/cop/style/numeric_literal_prefix.rb, line 75 def octal_zero_only? cop_config['EnforcedOctalStyle'] == 'zero_only' end