class RuboCop::Cop::Layout::RescueEnsureAlignment
This cop checks whether the rescue and ensure keywords are aligned properly.
@example
# bad begin something rescue puts 'error' end # good begin something rescue puts 'error' end
Constants
- MSG
Public Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/layout/rescue_ensure_alignment.rb, line 42 def autocorrect(node) whitespace = whitespace_range(node) return false unless whitespace.source.strip.empty? new_column = ancestor_node(node).loc.end.column ->(corrector) { corrector.replace(whitespace, ' ' * new_column) } end
investigate(processed_source)
click to toggle source
# File lib/rubocop/cop/layout/rescue_ensure_alignment.rb, line 34 def investigate(processed_source) @modifier_locations = processed_source.tokens.each_with_object([]) do |token, locations| next unless token.type == :kRESCUE_MOD locations << token.pos end end
on_ensure(node)
click to toggle source
# File lib/rubocop/cop/layout/rescue_ensure_alignment.rb, line 30 def on_ensure(node) check(node) end
on_resbody(node)
click to toggle source
# File lib/rubocop/cop/layout/rescue_ensure_alignment.rb, line 26 def on_resbody(node) check(node) unless modifier?(node) end
Private Instance Methods
ancestor_node(node)
click to toggle source
# File lib/rubocop/cop/layout/rescue_ensure_alignment.rb, line 81 def ancestor_node(node) node.each_ancestor(:kwbegin, :def, :defs, :class, :module).first end
check(node)
click to toggle source
# File lib/rubocop/cop/layout/rescue_ensure_alignment.rb, line 52 def check(node) end_loc = ancestor_node(node).loc.end kw_loc = node.loc.keyword return if end_loc.column == kw_loc.column return if end_loc.line == kw_loc.line add_offense(node, location: kw_loc, message: format_message(kw_loc, end_loc)) end
format_message(kw_loc, end_loc)
click to toggle source
# File lib/rubocop/cop/layout/rescue_ensure_alignment.rb, line 64 def format_message(kw_loc, end_loc) format(MSG, kw_loc.source, kw_loc.line, kw_loc.column, end_loc.line, end_loc.column) end
modifier?(node)
click to toggle source
# File lib/rubocop/cop/layout/rescue_ensure_alignment.rb, line 69 def modifier?(node) return false unless @modifier_locations.respond_to?(:include?) @modifier_locations.include?(node.loc.keyword) end
whitespace_range(node)
click to toggle source
# File lib/rubocop/cop/layout/rescue_ensure_alignment.rb, line 74 def whitespace_range(node) begin_pos = node.loc.keyword.begin_pos current_column = node.loc.keyword.column range_between(begin_pos - current_column, begin_pos) end