class RuboCop::Cop::Style::IndentArray
spaces) more than the start of the line where the opening bracket is.
Array literals shall have their first element indented one step (2
cop.
lines. The other elements’ indentations are handled by the AlignArray
literal where the opening bracket and the first element are on separate
This cops checks the indentation of the first element in an array
def check_first_pair(first_pair, left_bracket)
def check_first_pair(first_pair, left_bracket) return if first_pair.nil? expr = first_pair.loc.expression return if expr.line == left_bracket.line base_column = left_bracket.source_line =~ /\S/ expected_column = base_column + IndentationWidth::CORRECT_INDENTATION @column_delta = expected_column - expr.column return if @column_delta == 0 msg = format('Use %d spaces for indentation in an array, relative ' \ 'to the start of the line where the left bracket is.', IndentationWidth::CORRECT_INDENTATION) add_offense(first_pair, :expression, msg) end
def check_right_bracket(node, first_pair, left_bracket)
def check_right_bracket(node, first_pair, left_bracket) right_bracket = node.loc.end column = right_bracket.column return if right_bracket.source_line[0...column] =~ /\S/ if first_pair && first_pair.loc.expression.line == left_bracket.line base_column = left_bracket.column expected_indentation = 'the left bracket' else base_column = left_bracket.source_line =~ /\S/ expected_indentation = 'the start of the line where the left bracket is' end @column_delta = base_column - column return if @column_delta == 0 add_offense(right_bracket, right_bracket, 'Indent the right bracket the same as ' + expected_indentation + '.') end
def on_array(node)
def on_array(node) left_bracket = node.loc.begin return if left_bracket.nil? first_pair = node.children.first check_first_pair(first_pair, left_bracket) check_right_bracket(node, first_pair, left_bracket) end