Class: RuboCop::Cop::Gemspec::RubyVersionGlobalsUsage

Inherits:
Base
  • Object
show all
Includes:
RuboCop::Cop::GemspecHelp
Defined in:
lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb

Overview

Checks that RUBY_VERSION constant is not used in gemspec. Using RUBY_VERSION is dangerous because value of the constant is determined by rake release. It’s possible to have dependency based on ruby version used to execute rake release and not user’s ruby version.

Examples:


# bad
Gem::Specification.new do |spec|
  if RUBY_VERSION >= '3.0'
    spec.add_runtime_dependency 'gem_a'
  else
    spec.add_runtime_dependency 'gem_b'
  end
end

# good
Gem::Specification.new do |spec|
  spec.add_runtime_dependency 'gem_a'
end

Constant Summary collapse

MSG =
'Do not use `RUBY_VERSION` in gemspec file.'

Constants inherited from Base

Base::RESTRICT_ON_SEND

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Instance Method Summary collapse

Methods included from RuboCop::Cop::GemspecHelp

#gem_specification, #gem_specification?

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, autocorrect_incompatible_with, badge, #begin_investigation, callbacks_needed, #callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #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, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version

Methods included from ExcludeLimit

#exclude_limit

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



36
37
38
39
40
# File 'lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb', line 36

def on_const(node)
  return unless gem_spec_with_ruby_version?(node)

  add_offense(node)
end

#ruby_version?(node) ⇒ Object



34
# File 'lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb', line 34

def_node_matcher :ruby_version?, '(const {cbase nil?} :RUBY_VERSION)'