Module: RuboCop::Cop::PrecedingFollowingAlignment
- Defined in:
- lib/rubocop/cop/mixin/preceding_following_alignment.rb
Overview
Common functionality for checking whether an AST node/token is aligned with something on a preceding or following line
Instance Method Summary collapse
- #aligned_assignment?(range, line) ⇒ Boolean
- #aligned_char?(range, line) ⇒ Boolean
- #aligned_identical?(range, line) ⇒ Boolean
- #aligned_operator?(range, line) ⇒ Boolean
- #aligned_token?(range, line) ⇒ Boolean
- #aligned_with_adjacent_line?(range, predicate) ⇒ Boolean
- #aligned_with_line?(line_nos, range, indent = nil) ⇒ Boolean
- #aligned_with_operator?(range) ⇒ Boolean
- #aligned_with_something?(range) ⇒ Boolean
- #aligned_words?(range, line) ⇒ Boolean
- #allow_for_alignment? ⇒ Boolean
- #comment_lines ⇒ Object
Instance Method Details
#aligned_assignment?(range, line) ⇒ Boolean
70 71 72 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 70 def aligned_assignment?(range, line) range.source[-1] == '=' && line[range.last_column - 1] == '=' end |
#aligned_char?(range, line) ⇒ Boolean
66 67 68 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 66 def aligned_char?(range, line) line[range.column] == range.source[0] end |
#aligned_identical?(range, line) ⇒ Boolean
74 75 76 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 74 def aligned_identical?(range, line) range.source == line[range.column, range.size] end |
#aligned_operator?(range, line) ⇒ Boolean
58 59 60 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 58 def aligned_operator?(range, line) (aligned_identical?(range, line) || aligned_assignment?(range, line)) end |
#aligned_token?(range, line) ⇒ Boolean
52 53 54 55 56 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 52 def aligned_token?(range, line) aligned_words?(range, line) || aligned_char?(range, line) || aligned_assignment?(range, line) end |
#aligned_with_adjacent_line?(range, predicate) ⇒ Boolean
21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 21 def aligned_with_adjacent_line?(range, predicate) # minus 2 because node.loc.line is zero-based pre = (range.line - 2).downto(0) post = range.line.upto(processed_source.lines.size - 1) return true if aligned_with_line?(pre, range, &predicate) || aligned_with_line?(post, range, &predicate) # If no aligned token was found, search for an aligned token on the # nearest line with the same indentation as the checked line. base_indentation = processed_source.lines[range.line - 1] =~ /\S/ aligned_with_line?(pre, range, base_indentation, &predicate) || aligned_with_line?(post, range, base_indentation, &predicate) end |
#aligned_with_line?(line_nos, range, indent = nil) ⇒ Boolean
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 35 def aligned_with_line?(line_nos, range, indent = nil) line_nos.each do |lineno| next if comment_lines.include?(lineno + 1) line = processed_source.lines[lineno] next if line =~ /\A\s*\Z/ next if indent && indent != (line =~ /\S/) return yield(range, line) end false end |
#aligned_with_operator?(range) ⇒ Boolean
17 18 19 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 17 def aligned_with_operator?(range) aligned_with_adjacent_line?(range, method(:aligned_operator?)) end |
#aligned_with_something?(range) ⇒ Boolean
13 14 15 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 13 def aligned_with_something?(range) aligned_with_adjacent_line?(range, method(:aligned_token?)) end |
#aligned_words?(range, line) ⇒ Boolean
62 63 64 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 62 def aligned_words?(range, line) line[range.column - 1, 2] =~ /\s\S/ end |
#allow_for_alignment? ⇒ Boolean
9 10 11 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 9 def allow_for_alignment? cop_config['AllowForAlignment'] end |
#comment_lines ⇒ Object
46 47 48 49 50 |
# File 'lib/rubocop/cop/mixin/preceding_following_alignment.rb', line 46 def comment_lines @comment_lines ||= processed_source.comments.map(&:loc).select do |r| begins_its_line?(r.expression) end.map(&:line) end |