Module: RuboCop::Cop::PercentArray
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Included In:
| |
Defined in: | lib/rubocop/cop/mixin/percent_array.rb |
Overview
Common functionality for handling percent arrays.
Instance Method Summary
- #allowed_bracket_array?(node) ⇒ Boolean private
- #build_bracketed_array_with_appropriate_whitespace(elements:, node:) ⇒ String private
- #build_message_for_bracketed_array(preferred_array_code) ⇒ String private
- #check_bracketed_array(node, literal_prefix) private
- #check_percent_array(node) private
- #comments_in_array?(node) ⇒ Boolean private
-
#invalid_percent_array_contents?(_node) ⇒ Boolean
private
Override to determine values that are invalid in a percent array.
-
#invalid_percent_array_context?(node) ⇒ Boolean
private
Ruby does not allow percent arrays in an ambiguous block context.
-
#whitespace_between(node) ⇒ String
private
Provides whitespace between elements for building a bracketed array.
-
#whitespace_leading(node) ⇒ String
private
Provides leading whitespace for building a bracketed array.
-
#whitespace_trailing(node) ⇒ String
private
Provides trailing whitespace for building a bracketed array.
Instance Method Details
#allowed_bracket_array?(node) ⇒ Boolean
(private)
# File 'lib/rubocop/cop/mixin/percent_array.rb', line 26
def allowed_bracket_array?(node) comments_in_array?(node) || below_array_length?(node) || invalid_percent_array_context?(node) end
#build_bracketed_array_with_appropriate_whitespace(elements:, node:) ⇒ String (private)
# File 'lib/rubocop/cop/mixin/percent_array.rb', line 83
def build_bracketed_array_with_appropriate_whitespace(elements:, node:) [ '[', whitespace_leading(node), elements.join(",#{whitespace_between(node)}"), whitespace_trailing(node), ']' ].join end
#build_message_for_bracketed_array(preferred_array_code) ⇒ String (private)
# File 'lib/rubocop/cop/mixin/percent_array.rb', line 56
def (preferred_array_code) format( self.class::ARRAY_MSG, prefer: if preferred_array_code.include?("\n") 'an array literal `[...]`' else "`#{preferred_array_code}`" end ) end
#check_bracketed_array(node, literal_prefix) (private)
[ GitHub ]# File 'lib/rubocop/cop/mixin/percent_array.rb', line 67
def check_bracketed_array(node, literal_prefix) return if allowed_bracket_array?(node) array_style_detected(:brackets, node.values.size) return unless style == :percent add_offense(node, message: self.class::PERCENT_MSG) do |corrector| percent_literal_corrector = PercentLiteralCorrector.new(@config, @preferred_delimiters) percent_literal_corrector.correct(corrector, node, literal_prefix) end end
#check_percent_array(node) (private)
[ GitHub ]# File 'lib/rubocop/cop/mixin/percent_array.rb', line 36
def check_percent_array(node) array_style_detected(:percent, node.values.size) brackets_required = invalid_percent_array_contents?(node) return unless style == :brackets || brackets_required # If in percent style but brackets are required due to # string content, the file should be excluded in auto-gen-config no_acceptable_style! if brackets_required bracketed_array = build_bracketed_array(node) = (bracketed_array) add_offense(node, message: ) do |corrector| corrector.replace(node, bracketed_array) end end
#comments_in_array?(node) ⇒ Boolean
(private)
# File 'lib/rubocop/cop/mixin/percent_array.rb', line 31
def comments_in_array?(node) line_span = node.source_range.first_line...node.source_range.last_line processed_source.each_comment_in_lines(line_span).any? end
#invalid_percent_array_contents?(_node) ⇒ Boolean
(private)
Override to determine values that are invalid in a percent array
# File 'lib/rubocop/cop/mixin/percent_array.rb', line 22
def invalid_percent_array_contents?(_node) false end
#invalid_percent_array_context?(node) ⇒ Boolean
(private)
Ruby does not allow percent arrays in an ambiguous block context.
# File 'lib/rubocop/cop/mixin/percent_array.rb', line 14
def invalid_percent_array_context?(node) parent = node.parent parent&.send_type? && parent.arguments.include?(node) && !parent.parenthesized? && parent.block_literal? end
#whitespace_between(node) ⇒ String (private)
Provides whitespace between elements for building a bracketed array. %w[ a b c ] ^
# File 'lib/rubocop/cop/mixin/percent_array.rb', line 98
def whitespace_between(node) if node.children.length >= 2 node.children[0].source_range.end.join(node.children[1].source_range.begin).source else ' ' end end
#whitespace_leading(node) ⇒ String (private)
Provides leading whitespace for building a bracketed array. %w[ a b c ] ^^
# File 'lib/rubocop/cop/mixin/percent_array.rb', line 111
def whitespace_leading(node) node.loc.begin.end.join(node.children[0].source_range.begin).source end
#whitespace_trailing(node) ⇒ String (private)
Provides trailing whitespace for building a bracketed array. %w[ a b c ] ^^
# File 'lib/rubocop/cop/mixin/percent_array.rb', line 120
def whitespace_trailing(node) node.children[-1].source_range.end.join(node.loc.end.begin).source end