Class: RuboCop::Cop::Lint::ConstantResolution

Inherits:
Base
  • Object
show all
Defined in:
lib/rubocop/cop/lint/constant_resolution.rb

Overview

Checks that certain constants are fully qualified.

This is not enabled by default because it would mark a lot of offenses unnecessarily.

Generally, gems should fully qualify all constants to avoid conflicts with the code that uses the gem. Enable this cop without using ‘Only`/`Ignore`

Large projects will over time end up with one or two constant names that are problematic because of a conflict with a library or just internally using the same name for a namespace and a class. To avoid too many unnecessary offenses, enable this cop with ‘Only: [The, Constant, Names, Causing, Issues]`

NOTE: ‘Style/RedundantConstantBase` cop is disabled if this cop is enabled, to prevent conflicting rules. This is because it respects user configurations that want to enable this cop which is disabled by default.

Examples:

# By default checks every constant

# bad
User

# bad
User::Login

# good
::User

# good
::User::Login

Only: [‘Login’]

# Restrict this cop to only being concerned about certain constants

# bad
Login

# good
::Login

# good
User::Login

Ignore: [‘Login’]

# Restrict this cop not being concerned about certain constants

# bad
User

# good
::User::Login

# good
Login

Constant Summary collapse

MSG =
'Fully qualify this constant to avoid possibly ambiguous resolution.'

Constants inherited from Base

Base::RESTRICT_ON_SEND

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source, #project_index

Instance Method Summary collapse

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_gem_version, #target_rails_version, #target_ruby_version

Methods included from ExcludeLimit

cop_dir_for, #exclude_limit, read_limits

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

silence_warnings

Constructor Details

This class inherits a constructor from RuboCop::Cop::Base

Instance Method Details

#on_const(node) ⇒ Object



70
71
72
73
74
# File 'lib/rubocop/cop/lint/constant_resolution.rb', line 70

def on_const(node)
  return if !unqualified_const?(node) || node.parent&.defined_module || node.loc.nil?

  add_offense(node)
end

#unqualified_const?(node) ⇒ Object



66
67
68
# File 'lib/rubocop/cop/lint/constant_resolution.rb', line 66

def_node_matcher :unqualified_const?, <<~PATTERN
  (const nil? #const_name?)
PATTERN