Module: RuboCop::Cop::Style::ConditionalAssignmentHelper
- Extended by:
- NodePattern::Macros
- Included in:
- CaseCorrector, ConditionalAssignment, IfCorrector, TernaryCorrector
- Defined in:
- lib/rubocop/cop/style/conditional_assignment.rb
Overview
Helper module to provide common methods to classes needed for the ConditionalAssignment Cop.
Constant Summary collapse
- EQUAL =
'='
- END_ALIGNMENT =
'Layout/EndAlignment'
- ALIGN_WITH =
'EnforcedStyleAlignWith'
- KEYWORD =
'keyword'
Instance Method Summary collapse
- #end_with_eq?(sym) ⇒ Boolean
-
#expand_elses(branch) ⇒ Object
‘elsif` branches show up in the `node` as an `else`.
-
#expand_when_branches(when_branches) ⇒ Object
‘when` nodes contain the entire branch including the condition.
-
#indent(cop, source) ⇒ Object
rubocop:enable Metrics/AbcSize.
-
#lhs(node) ⇒ Object
rubocop:disable Metrics/AbcSize.
- #tail(branch) ⇒ Object
Methods included from NodePattern::Macros
def_node_matcher, def_node_search, node_search, node_search_all, node_search_body, node_search_first
Instance Method Details
#end_with_eq?(sym) ⇒ Boolean
64 65 66 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 64 def end_with_eq?(sym) sym.to_s.end_with?(EQUAL) end |
#expand_elses(branch) ⇒ Object
‘elsif` branches show up in the `node` as an `else`. We need to recursively iterate over all `else` branches and consider all but the last `node` an `elsif` branch and consider the last `node` the actual `else` branch.
20 21 22 23 24 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 20 def (branch) elsif_branches = (branch) else_branch = elsif_branches.any? ? elsif_branches.pop : branch [elsif_branches, else_branch] end |
#expand_when_branches(when_branches) ⇒ Object
‘when` nodes contain the entire branch including the condition. We only need the contents of the branch, not the condition.
28 29 30 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 28 def (when_branches) when_branches.map { |branch| branch.children[1] } end |
#indent(cop, source) ⇒ Object
rubocop:enable Metrics/AbcSize
55 56 57 58 59 60 61 62 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 55 def indent(cop, source) conf = cop.config.for_cop(END_ALIGNMENT) if conf[ALIGN_WITH] == KEYWORD ' ' * source.length else '' end end |
#lhs(node) ⇒ Object
rubocop:disable Metrics/AbcSize
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 37 def lhs(node) case node.type when :send lhs_for_send(node) when :op_asgn "#{node.children[0].source} #{node.children[1]}= " when :and_asgn, :or_asgn "#{node.children[0].source} #{node.loc.operator.source} " when :casgn "#{node.children[1]} = " when *ConditionalAssignment::VARIABLE_ASSIGNMENT_TYPES "#{node.children[0]} = " else node.source end end |
#tail(branch) ⇒ Object
32 33 34 |
# File 'lib/rubocop/cop/style/conditional_assignment.rb', line 32 def tail(branch) branch.begin_type? ? [*branch].last : branch end |