Sha256: d354548aa335bf4fc31055758a7f4be794795727cc7203fe53b4a541865750dc
Contents?: true
Size: 1.83 KB
Versions: 4
Compression:
Stored size: 1.83 KB
Contents
# encoding: utf-8 module Rubocop module Cop module Style # This cop checks how the *when*s of a *case* expression # are indented in relation to its *case* or *end* keyword. # # It will register a separate offense for each misaligned *when*. class CaseIndentation < Cop include ConfigurableEnforcedStyle def on_case(case_node) _condition, *whens, _else = *case_node base = style indent = cop_config['IndentOneStep'] base_column = base_column(case_node, base) whens.each do |when_node| check_when(when_node, case_node, base, indent, base_column) end end private def check_when(when_node, case_node, base, indent, base_column) pos = when_node.loc.keyword expected_column = base_column + (indent ? IndentationWidth::CORRECT_INDENTATION : 0) if pos.column == expected_column correct_style_detected else msg = 'Indent `when` ' + if indent "one step more than `#{base}`." else "as deep as `#{base}`." end add_offense(when_node, pos, msg) do if pos.column == base_column(case_node, alternative_style) opposite_style_detected else unrecognized_style_detected end end end end def parameter_name 'IndentWhenRelativeTo' end def base_column(case_node, base) case base when :case then case_node.location.keyword.column when :end then case_node.location.end.column end end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems