class RuboCop::Cop::Packaging::RequireRelativeHardcodingLib
This cop flags the `require_relative` calls, from anywhere mapping to the “lib” directory, except originating from lib/ or the gemspec file, and suggests to use `require` instead.
@example
# bad require_relative "lib/foo" # good require "foo" # bad require_relative "../../lib/foo/bar" # good require "foo/bar" # good require_relative "foo/bar/bax" require_relative "baz/qux"
Constants
- MSG
This is the message that will be displayed when
RuboCop
finds an offense of using `require_relative` with relative path to lib.
Public Instance Methods
This method is called from inside `#def_node_matcher`. It flags an offense if the `require_relative` call is made from anywhere except the “lib” directory.
# File lib/rubocop/cop/packaging/require_relative_hardcoding_lib.rb, line 75 def falls_in_lib?(str) @str = str target_falls_in_lib?(str) && inspected_file_is_not_in_lib_or_gemspec? end
Called from on_send
, this method helps to replace the “bad” require_relative call with the “good” one.
# File lib/rubocop/cop/packaging/require_relative_hardcoding_lib.rb, line 67 def good_require_call good_call = File.expand_path(@str, @file_directory).delete_prefix("#{root_dir}/lib/") %(require "#{good_call}") end
Extended from the Base class. More about the `#on_new_investigation` method can be found here: github.com/rubocop-hq/rubocop/blob/343f62e4555be0470326f47af219689e21c61a37/lib/rubocop/cop/base.rb
Processing of the AST happens here.
# File lib/rubocop/cop/packaging/require_relative_hardcoding_lib.rb, line 49 def on_new_investigation @file_path = processed_source.file_path @file_directory = File.dirname(@file_path) end
Extended from AST::Traversal. More about the `#on_send` method can be found here: github.com/rubocop-hq/rubocop-ast/blob/08d0f49a47af1e9a30a6d8f67533ba793c843d67/lib/rubocop/ast/traversal.rb#L112
# File lib/rubocop/cop/packaging/require_relative_hardcoding_lib.rb, line 57 def on_send(node) return unless require_relative(node) add_offense(node) do |corrector| corrector.replace(node, good_require_call) end end