Class: RuboCop::Cop::Style::ConditionalAssignment
- Includes:
- IfNode, ConditionalAssignmentHelper
- Defined in:
- lib/rubocop/cop/style/conditional_assignment.rb
Overview
Check for if and case statements where each branch is used for
assignment to the same variable when using the return of the
condition can be used instead.
Constant Summary collapse
- MSG =
'Use the return of the conditional for variable assignment ' \ 'and comparison.'.freeze
- VARIABLE_ASSIGNMENT_TYPES =
[:casgn, :cvasgn, :gvasgn, :ivasgn, :lvasgn].freeze
- ASSIGNMENT_TYPES =
VARIABLE_ASSIGNMENT_TYPES + [:and_asgn, :or_asgn, :op_asgn].freeze
- IF =
'if'.freeze
- UNLESS =
'unless'.freeze
- LINE_LENGTH =
'Metrics/LineLength'.freeze
- INDENTATION_WIDTH =
'Style/IndentationWidth'.freeze
- ENABLED =
'Enabled'.freeze
- MAX =
'Max'.freeze
- SINGLE_LINE_CONDITIONS_ONLY =
'SingleLineConditionsOnly'.freeze
- WIDTH =
'Width'.freeze
- METHODS =
[:[]=, :<<, :=~, :!~, :<=>].freeze
Constants included from ConditionalAssignmentHelper
RuboCop::Cop::Style::ConditionalAssignmentHelper::EQUAL
Constants included from Util
Util::ASGN_NODES, Util::EQUALS_ASGN_NODES, Util::LITERAL_REGEX, Util::OPERATOR_METHODS, Util::SHORTHAND_ASGN_NODES, Util::STRING_ESCAPES, Util::STRING_ESCAPE_REGEX
Instance Attribute Summary
Attributes inherited from Cop
#config, #corrections, #offenses, #processed_source
Instance Method Summary collapse
- #autocorrect(node) ⇒ Object
- #lhs_all_match?(branches) ⇒ Boolean
- #on_case(node) ⇒ Object
- #on_if(node) ⇒ Object
Methods included from ConditionalAssignmentHelper
#correct_branches, #expand_elses, #expand_when_branches, #lhs, #tail
Methods included from IfNode
#elsif?, #if_else?, #if_node_parts, #modifier_if?, #ternary_op?
Methods inherited from Cop
#add_offense, all, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, cop_type, #correct, #debug?, #details, #display_cop_names?, #display_style_guide?, #excluded_file?, #extra_details?, inherited, #initialize, #join_force?, lint?, match?, #message, non_rails, #parse, qualified_cop_name, #reference_url, #relevant_file?, #style_guide_url, #target_ruby_version
Methods included from Sexp
Methods included from NodePattern::Macros
#def_node_matcher, #def_node_search, #node_search_body
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
begins_its_line?, block_length, comment_line?, directions, double_quotes_acceptable?, double_quotes_required?, ends_its_line?, first_part_of_call_chain, interpret_string_escapes, line_range, move_pos, numeric_range_size, on_node, operator?, parentheses?, range_with_surrounding_comma, range_with_surrounding_space, source_range, strip_quotes, to_string_literal, to_symbol_literal, within_node?
Methods included from PathUtil
hidden?, issue_deprecation_warning, match_path?, relative_path
Constructor Details
This class inherits a constructor from RuboCop::Cop::Cop
Instance Method Details
#autocorrect(node) ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 180 def autocorrect(node) if ternary_op?(node) TernaryCorrector.correct(node) else case node.loc.keyword.source when IF IfCorrector.correct(node) when UNLESS UnlessCorrector.correct(node) else CaseCorrector.correct(node) end end end |
#lhs_all_match?(branches) ⇒ Boolean
153 154 155 156 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 153 def lhs_all_match?(branches) first_lhs = lhs(branches.first) branches.all? { |branch| lhs(branch) == first_lhs } end |
#on_case(node) ⇒ Object
170 171 172 173 174 175 176 177 178 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 170 def on_case(node) _condition, *when_branches, else_branch = *node return unless else_branch # empty else when_branches = (when_branches) branches = [*when_branches, else_branch] check_node(node, branches) end |
#on_if(node) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 158 def on_if(node) return if elsif?(node) _condition, if_branch, else_branch = *node elsif_branches, else_branch = (else_branch) return unless else_branch # empty else branches = [if_branch, *elsif_branches, else_branch] check_node(node, branches) end |