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::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, #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?, effective_column, 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
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
182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 182 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
155 156 157 158 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 155 def lhs_all_match?(branches) first_lhs = lhs(branches.first) branches.all? { |branch| lhs(branch) == first_lhs } end |
#on_case(node) ⇒ Object
172 173 174 175 176 177 178 179 180 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 172 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
160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 160 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 |