Class: RuboCop::Cop::Lint::ConstantResolution
- Includes:
- ProjectIndexHelp
- 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.
When AllCops/UseProjectIndex is enabled and the rubydex gem is
installed, only genuinely ambiguous constants are reported: those
that resolve to a different declaration through the surrounding
nesting than they would fully qualified. This makes the cop practical
to enable without Only/Ignore lists.
Constant Summary collapse
- MSG =
'Fully qualify this constant to avoid possibly ambiguous resolution.'
Constants included from ProjectIndexHelp
ProjectIndexHelp::BUILTIN_DOCUMENT_URI, ProjectIndexHelp::FILE_URI_PREFIX, ProjectIndexHelp::WINDOWS_DRIVE_PREFIX
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
#config, #processed_source, #project_index
Instance Method Summary collapse
Methods included from ProjectIndexHelp
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
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base
Instance Method Details
#on_const(node) ⇒ Object
78 79 80 81 82 83 |
# File 'lib/rubocop/cop/lint/constant_resolution.rb', line 78 def on_const(node) return if !unqualified_const?(node) || node.parent&.defined_module || node.loc.nil? return if project_index && !ambiguous_resolution?(node) add_offense(node) end |
#unqualified_const?(node) ⇒ Object
74 75 76 |
# File 'lib/rubocop/cop/lint/constant_resolution.rb', line 74 def_node_matcher :unqualified_const?, <<~PATTERN (const nil? #const_name?) PATTERN |