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::ALIGN_WITH, RuboCop::Cop::Style::ConditionalAssignmentHelper::END_ALIGNMENT, RuboCop::Cop::Style::ConditionalAssignmentHelper::EQUAL, RuboCop::Cop::Style::ConditionalAssignmentHelper::KEYWORD
Constants included from Util
Util::ASGN_NODES, Util::BYTE_ORDER_MARK, 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, #indent, #lhs, #tail
Methods included from IfNode
#elsif?, #if_else?, #if_node_parts, #modifier_if?
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?, effective_column, ends_its_line?, first_part_of_call_chain, interpret_string_escapes, line_range, move_pos, numeric_range_size, on_node, operator?, parentheses?, parenthesized_call?, range_with_surrounding_comma, range_with_surrounding_space, source_range, strip_quotes, ternary_op?, to_string_literal, to_symbol_literal, within_node?
Methods included from PathUtil
absolute?, 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
195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 195 def autocorrect(node) if ternary_op?(node) TernaryCorrector.correct(node) else case node.loc.keyword.source when IF IfCorrector.correct(self, node) when UNLESS UnlessCorrector.correct(self, node) else CaseCorrector.correct(self, node) end end end |
#lhs_all_match?(branches) ⇒ Boolean
168 169 170 171 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 168 def lhs_all_match?(branches) first_lhs = lhs(branches.first) branches.all? { |branch| lhs(branch) == first_lhs } end |
#on_case(node) ⇒ Object
185 186 187 188 189 190 191 192 193 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 185 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
173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 173 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 |