Module: RuboCop::Cop::AutocorrectAlignment
- Included in:
- Style::AccessModifierIndentation, Style::AlignArray, Style::AlignParameters, Style::CommentIndentation, Style::ElseAlignment, Style::IndentArray, Style::IndentHash, Style::IndentationConsistency, Style::IndentationWidth, Style::MultilineOperationIndentation
- Defined in:
- lib/rubocop/cop/mixin/autocorrect_alignment.rb
Overview
This module does auto-correction of nodes that should just be moved to the left or to the right, amount being determined by the instance variable @column_delta.
Instance Method Summary collapse
- #autocorrect(arg) ⇒ Object
- #check_alignment(items, base_column = nil) ⇒ Object
- #configured_indentation_width ⇒ Object
- #start_of_line?(loc) ⇒ Boolean
Instance Method Details
#autocorrect(arg) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/rubocop/cop/mixin/autocorrect_alignment.rb', line 29 def autocorrect(arg) heredoc_ranges = heredoc_ranges(arg) expr = arg.respond_to?(:loc) ? arg.loc.expression : arg # We can't use the instance variable inside the lambda. That would just # give each lambda the same reference and they would all get the last # value of @column_delta. A local variable fixes the problem. column_delta = @column_delta fail CorrectionNotPossible if block_comment_within?(expr) @corrections << lambda do |corrector| each_line(expr) do |line_begin_pos| autocorrect_line(corrector, line_begin_pos, expr, column_delta, heredoc_ranges) end end end |
#check_alignment(items, base_column = nil) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/rubocop/cop/mixin/autocorrect_alignment.rb', line 13 def check_alignment(items, base_column = nil) base_column ||= items.first.loc.column unless items.empty? prev_line = -1 items.each do |current| if current.loc.line > prev_line && start_of_line?(current.loc) @column_delta = base_column - current.loc.column add_offense(current, :expression) if @column_delta != 0 end prev_line = current.loc.line end end |
#configured_indentation_width ⇒ Object
9 10 11 |
# File 'lib/rubocop/cop/mixin/autocorrect_alignment.rb', line 9 def configured_indentation_width config.for_cop('IndentationWidth')['Width'] end |
#start_of_line?(loc) ⇒ Boolean
25 26 27 |
# File 'lib/rubocop/cop/mixin/autocorrect_alignment.rb', line 25 def start_of_line?(loc) loc.expression.source_line[0...loc.column] =~ /^\s*$/ end |