class RuboCop::Cop::Lint::RedundantRequireStatement
require ‘unloaded_feature’
# good
require ‘thread’
require ‘unloaded_feature’
# bad
@example
This cop target those features.
* 3.2+ … ‘set`
* 3.1+ … Add `fiber` above
* 2.7+ … Add `ruby2_keywords` above
* 2.2+ … Add `rational` and `complex` above
* 2.1+ … `thread`
* 2.0+ … `enumerator`
Below are the features that each `TargetRubyVersion` targets.
[“enumerator.so”, “rational.so”, “complex.so”, “thread.rb”]
ruby 2.2.8p477 (2017-09-14 revision 59906) [x86_64-darwin13]
ruby -ve ’p $LOADED_FEATURES.reject { |feature| %r|/| =~ feature }‘
they are already loaded. e.g. Ruby 2.2:
The following features are unnecessary `require` statement because
Checks for unnecessary `require` statement.
def on_send(node)
def on_send(node) return unless redundant_require_statement?(node) add_offense(node) do |corrector| if node.parent.respond_to?(:modifier_form?) && node.parent.modifier_form? corrector.insert_after(node.parent, "\nend") range = range_with_surrounding_space(node.source_range, side: :right) else range = range_by_whole_lines(node.source_range, include_final_newline: true) end corrector.remove(range) end end
def redundant_feature?(feature_name)
def redundant_feature?(feature_name) feature_name == 'enumerator' || (target_ruby_version >= 2.1 && feature_name == 'thread') || (target_ruby_version >= 2.2 && RUBY_22_LOADED_FEATURES.include?(feature_name)) || (target_ruby_version >= 2.7 && feature_name == 'ruby2_keywords') || (target_ruby_version >= 3.1 && feature_name == 'fiber') || (target_ruby_version >= 3.2 && feature_name == 'set') end