class RubbyCop::Cop::Layout::SpaceAroundOperators
Checks that operators have space around them, except for ** which should not have surrounding space.
Constants
- IRREGULAR_METHODS
Public Instance Methods
on_binary(node)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 44 def on_binary(node) _, rhs, = *node return unless rhs check_operator(node.loc.operator, rhs.source_range) end
Also aliased as: on_or, on_and, on_lvasgn, on_masgn, on_ivasgn, on_cvasgn, on_gvasgn, on_class, on_or_asgn, on_and_asgn
on_if(node)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 21 def on_if(node) return unless node.ternary? check_operator(node.loc.question, node.if_branch.source_range) check_operator(node.loc.colon, node.else_branch.source_range) end
on_pair(node)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 13 def on_pair(node) return unless node.hash_rocket? return if hash_table_style? && !node.parent.pairs_on_same_line? check_operator(node.loc.operator, node.source_range) end
on_resbody(node)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 28 def on_resbody(node) return unless node.loc.assoc _, variable, = *node check_operator(node.loc.assoc, variable.source_range) end
on_send(node)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 36 def on_send(node) if node.setter_method? on_special_asgn(node) elsif regular_operator?(node) check_operator(node.loc.selector, node.first_argument.source_range) end end
on_special_asgn(node)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 52 def on_special_asgn(node) _, _, right, = *node return unless right check_operator(node.loc.operator, right.source_range) end
Also aliased as: on_casgn, on_op_asgn
Private Instance Methods
align_hash_cop_config()
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 131 def align_hash_cop_config config.for_cop('Layout/AlignHash') end
autocorrect(range)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 119 def autocorrect(range) lambda do |corrector| if range.source =~ /\*\*/ corrector.replace(range, '**') elsif range.source.end_with?("\n") corrector.replace(range, " #{range.source.strip}\n") else corrector.replace(range, " #{range.source.strip} ") end end end
check_operator(op, right_operand)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 84 def check_operator(op, right_operand) with_space = range_with_surrounding_space(op) return if with_space.source.start_with?("\n") offense(op, with_space, right_operand) do |msg| add_offense(with_space, op, msg) end end
excess_leading_space?(op, with_space)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 109 def excess_leading_space?(op, with_space) with_space.source =~ /^ / && (!allow_for_alignment? || !aligned_with_operator?(op)) end
excess_trailing_space?(right_operand, with_space)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 114 def excess_trailing_space?(right_operand, with_space) with_space.source =~ / $/ && (!allow_for_alignment? || !aligned_with_something?(right_operand)) end
hash_table_style?()
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 135 def hash_table_style? align_hash_cop_config && align_hash_cop_config['EnforcedHashRocketStyle'] == 'table' end
offense(op, with_space, right_operand) { |msg| ... }
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 93 def offense(op, with_space, right_operand) msg = offense_message(op, with_space, right_operand) yield msg if msg end
offense_message(op, with_space, right_operand)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 98 def offense_message(op, with_space, right_operand) if op.is?('**') 'Space around operator `**` detected.' unless with_space.is?('**') elsif with_space.source !~ /^\s.*\s$/ "Surrounding space missing for operator `#{op.source}`." elsif excess_leading_space?(op, with_space) || excess_trailing_space?(right_operand, with_space) "Operator `#{op.source}` should be surrounded by a single space." end end
operator_with_regular_syntax?(send_node)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 79 def operator_with_regular_syntax?(send_node) send_node.operator_method? && !IRREGULAR_METHODS.include?(send_node.method_name) end
regular_operator?(send_node)
click to toggle source
# File lib/rubbycop/cop/layout/space_around_operators.rb, line 74 def regular_operator?(send_node) !send_node.unary_operation? && !send_node.dot? && operator_with_regular_syntax?(send_node) end