Class: RuboCop::Cop::Layout::SpaceAroundOperators

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
PrecedingFollowingAlignment, RangeHelp, RationalLiteral
Defined in:
lib/rubocop/cop/layout/space_around_operators.rb

Overview

Checks that operators have space around them, except for ** which should or shouldn’t have surrounding space depending on configuration. It allows vertical alignment consisting of one or more whitespace around operators.

This cop has AllowForAlignment option. When true, allows most uses of extra spacing if the intent is to align with an operator on the previous or next line, not counting empty lines or comment lines.

Examples:

# bad
total = 3*4
"apple"+"juice"
my_number = 38/4

# good
total = 3 * 4
"apple" + "juice"
my_number = 38 / 4

AllowForAlignment: true (default)

# good
{
  1 =>  2,
  11 => 3
}

AllowForAlignment: false

# bad
{
  1 =>  2,
  11 => 3
}

EnforcedStyleForExponentOperator: no_space (default)

# bad
a ** b

# good
a**b

EnforcedStyleForExponentOperator: space

# bad
a**b

# good
a ** b

Constant Summary collapse

IRREGULAR_METHODS =
%i[[] ! []=].freeze
EXCESSIVE_SPACE =
'  '

Constants inherited from Base

Base::RESTRICT_ON_SEND

Constants included from Util

Util::LITERAL_REGEX

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Class Method Summary collapse

Instance Method Summary collapse

Methods included from AutoCorrector

support_autocorrect?

Methods inherited from Base

#add_global_offense, #add_offense, badge, callbacks_needed, #callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

add_parentheses, args_begin, args_end, begins_its_line?, comment_line?, comment_lines?, double_quotes_required?, escape_string, first_part_of_call_chain, indent, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, trim_string_interporation_escape_character

Methods included from PathUtil

absolute?, hidden_dir?, hidden_file?, hidden_file_in_not_hidden_dir?, match_path?, maybe_hidden_file?, relative_path, smart_path

Constructor Details

This class inherits a constructor from RuboCop::Cop::Base

Class Method Details

.autocorrect_incompatible_withObject



62
63
64
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 62

def self.autocorrect_incompatible_with
  [Style::SelfAssignment]
end

Instance Method Details

#on_assignment(node) ⇒ Object Also known as: on_lvasgn, on_masgn, on_ivasgn, on_cvasgn, on_gvasgn, on_or_asgn, on_and_asgn



101
102
103
104
105
106
107
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 101

def on_assignment(node)
  _, rhs, = *node

  return unless rhs

  check_operator(:assignment, node.loc.operator, rhs.source_range)
end

#on_binary(node) ⇒ Object Also known as: on_or, on_and, on_class



109
110
111
112
113
114
115
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 109

def on_binary(node)
  _, rhs, = *node

  return unless rhs

  check_operator(:binary, node.loc.operator, rhs.source_range)
end

#on_if(node) ⇒ Object



74
75
76
77
78
79
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 74

def on_if(node)
  return unless node.ternary?

  check_operator(:if, node.loc.question, node.if_branch.source_range)
  check_operator(:if, node.loc.colon, node.else_branch.source_range)
end

#on_pair(node) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 66

def on_pair(node)
  return unless node.hash_rocket?

  return if hash_table_style? && !node.parent.pairs_on_same_line?

  check_operator(:pair, node.loc.operator, node.source_range)
end

#on_resbody(node) ⇒ Object



81
82
83
84
85
86
87
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 81

def on_resbody(node)
  return unless node.loc.assoc

  _, variable, = *node

  check_operator(:resbody, node.loc.assoc, variable.source_range)
end

#on_send(node) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 89

def on_send(node)
  return if rational_literal?(node)

  if node.setter_method?
    on_special_asgn(node)
  elsif regular_operator?(node)
    check_operator(:send,
                   node.loc.selector,
                   node.first_argument.source_range)
  end
end

#on_special_asgn(node) ⇒ Object Also known as: on_casgn, on_op_asgn



117
118
119
120
121
122
123
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 117

def on_special_asgn(node)
  _, _, right, = *node

  return unless right

  check_operator(:special_asgn, node.loc.operator, right.source_range)
end