class RuboCop::Cop::Style::RequireOrder
Sort `require` and `require_relative` in alphabetical order.
@safety
This cop's autocorrection is unsafe because it will obviously change the execution order.
@example
# bad require 'b' require 'a' # good require 'a' require 'b' # bad require_relative 'b' require_relative 'a' # good require_relative 'a' require_relative 'b' # good (sorted within each section separated by a blank line) require 'a' require 'd' require 'b' require 'c' # good require 'b' require_relative 'c' require 'a'
Constants
- RESTRICT_ON_SEND
Public Instance Methods
on_send(node)
click to toggle source
# File lib/rubocop/cop/style/require_order.rb, line 46 def on_send(node) previous_older_sibling = find_previous_older_sibling(node) return unless previous_older_sibling add_offense( node, message: "Sort `#{node.method_name}` in alphabetical order." ) do |corrector| swap( range_with_comments_and_lines(previous_older_sibling), range_with_comments_and_lines(node), corrector: corrector ) end end
Private Instance Methods
find_previous_older_sibling(node)
click to toggle source
# File lib/rubocop/cop/style/require_order.rb, line 64 def find_previous_older_sibling(node) node.left_siblings.reverse.find do |sibling| break unless sibling.send_type? break unless sibling.method?(node.method_name) break unless in_same_section?(sibling, node) node.first_argument.source < sibling.first_argument.source end end
in_same_section?(node1, node2)
click to toggle source
# File lib/rubocop/cop/style/require_order.rb, line 74 def in_same_section?(node1, node2) !node1.location.expression.with( end_pos: node2.location.expression.end_pos ).source.include?("\n\n") end
swap(range1, range2, corrector:)
click to toggle source
# File lib/rubocop/cop/style/require_order.rb, line 80 def swap(range1, range2, corrector:) inserted = range2.source corrector.insert_before(range1, inserted) corrector.remove(range2) end