class RuboCop::Cop::Style::RedundantConstantBase

Avoid redundant ‘::` prefix on constant.

How Ruby searches constant is a bit complicated, and it can often be difficult to understand from the code whether the ‘::` is intended or not. Where `Module.nesting` is empty, there is no need to prepend `::`, so it would be nice to consistently avoid such meaningless `::` prefix to avoid confusion.

NOTE: This cop is disabled if ‘Lint/ConstantResolution` cop is enabled to prevent conflicting rules. Because it respects user configurations that want to enable `Lint/ConstantResolution` cop which is disabled by default.

@example

# bad
::Const

# good
Const

# bad
class << self
  ::Const
end

# good
class << self
  Const
end

# good
class A
  ::Const
end

# good
module A
  ::Const
end

Constants

MSG

Public Instance Methods

on_cbase(node) click to toggle source
# File lib/rubocop/cop/style/redundant_constant_base.rb, line 48
def on_cbase(node)
  return if lint_constant_resolution_cop_enabled?
  return unless bad?(node)

  add_offense(node) do |corrector|
    corrector.remove(node)
  end
end

Private Instance Methods

bad?(node) click to toggle source
# File lib/rubocop/cop/style/redundant_constant_base.rb, line 67
def bad?(node)
  module_nesting_ancestors_of(node).none?
end
lint_constant_resolution_config() click to toggle source
# File lib/rubocop/cop/style/redundant_constant_base.rb, line 63
def lint_constant_resolution_config
  config.for_cop('Lint/ConstantResolution')
end
lint_constant_resolution_cop_enabled?() click to toggle source
# File lib/rubocop/cop/style/redundant_constant_base.rb, line 59
def lint_constant_resolution_cop_enabled?
  lint_constant_resolution_config.fetch('Enabled', false)
end
module_nesting_ancestors_of(node) click to toggle source
# File lib/rubocop/cop/style/redundant_constant_base.rb, line 71
def module_nesting_ancestors_of(node)
  node.each_ancestor(:class, :module).reject do |ancestor|
    ancestor.class_type? && used_in_super_class_part?(node, class_node: ancestor)
  end
end
used_in_super_class_part?(node, class_node:) click to toggle source
# File lib/rubocop/cop/style/redundant_constant_base.rb, line 77
def used_in_super_class_part?(node, class_node:)
  class_node.parent_class&.each_descendant(:cbase)&.any? do |descendant|
    descendant.equal?(node)
  end
end