Class: RuboCop::Cop::Layout::SpaceAroundOperators
- 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.
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.
Constant Summary collapse
- IRREGULAR_METHODS =
%i[[] ! []=].freeze
- EXCESSIVE_SPACE =
' '
Constants included from Util
Instance Attribute Summary
Attributes inherited from Cop
#config, #corrections, #offenses, #processed_source
Class Method Summary collapse
Instance Method Summary collapse
- #autocorrect(range) ⇒ Object
- #on_assignment(node) ⇒ Object (also: #on_lvasgn, #on_masgn, #on_ivasgn, #on_cvasgn, #on_gvasgn, #on_or_asgn, #on_and_asgn)
- #on_binary(node) ⇒ Object (also: #on_or, #on_and, #on_class)
- #on_if(node) ⇒ Object
- #on_pair(node) ⇒ Object
- #on_resbody(node) ⇒ Object
- #on_send(node) ⇒ Object
- #on_special_asgn(node) ⇒ Object (also: #on_casgn, #on_op_asgn)
Methods included from NodePattern::Macros
#def_node_matcher, #def_node_search, #node_search, #node_search_all, #node_search_body, #node_search_first
Methods inherited from Cop
#add_offense, all, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, #correct, department, #disable_uncorrectable, #duplicate_location?, #excluded_file?, #external_dependency_checksum, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, #parse, qualified_cop_name, #reason_to_not_correct, #relevant_file?, #target_rails_version, #target_ruby_version
Methods included from AST::Sexp
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #correctable?, #disable_offense, #disable_uncorrectable?, #safe_autocorrect?, #support_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, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens, trim_string_interporation_escape_character
Methods included from PathUtil
absolute?, chdir, hidden_dir?, hidden_file_in_not_hidden_dir?, match_path?, pwd, relative_path, reset_pwd, smart_path
Constructor Details
This class inherits a constructor from RuboCop::Cop::Cop
Class Method Details
.autocorrect_incompatible_with ⇒ Object
59 60 61 |
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 59 def self.autocorrect_incompatible_with [Style::SelfAssignment] end |
Instance Method Details
#autocorrect(range) ⇒ Object
135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 135 def autocorrect(range) lambda do |corrector| if range.source =~ /\*\*/ && !space_around_exponent_operator? corrector.replace(range, '**') elsif range.source.end_with?("\n") corrector.replace(range, " #{range.source.strip}\n") else enclose_operator_with_space(corrector, range) end end end |
#on_assignment(node) ⇒ Object Also known as: on_lvasgn, on_masgn, on_ivasgn, on_cvasgn, on_gvasgn, on_or_asgn, on_and_asgn
98 99 100 101 102 103 104 |
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 98 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
106 107 108 109 110 111 112 |
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 106 def on_binary(node) _, rhs, = *node return unless rhs check_operator(:binary, node.loc.operator, rhs.source_range) end |
#on_if(node) ⇒ Object
71 72 73 74 75 76 |
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 71 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
63 64 65 66 67 68 69 |
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 63 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
78 79 80 81 82 83 84 |
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 78 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
86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 86 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
114 115 116 117 118 119 120 |
# File 'lib/rubocop/cop/layout/space_around_operators.rb', line 114 def on_special_asgn(node) _, _, right, = *node return unless right check_operator(:special_asgn, node.loc.operator, right.source_range) end |