Class: RuboCop::AST::CaseMatchNode

Inherits:
Node
  • Object
show all
Includes:
ConditionalNode
Defined in:
lib/rubocop/ast/node/case_match_node.rb

Overview

A node extension for case_match nodes. This will be used in place of a plain node when the builder constructs the AST, making its methods available to all case_match nodes within RuboCop.

Constant Summary

Constants inherited from Node

Node::ASSIGNMENTS, Node::BASIC_CONDITIONALS, Node::BASIC_LITERALS, Node::COMPARISON_OPERATORS, Node::COMPOSITE_LITERALS, Node::CONDITIONALS, Node::EQUALS_ASSIGNMENTS, Node::FALSEY_LITERALS, Node::IMMUTABLE_LITERALS, Node::KEYWORDS, Node::LITERALS, Node::LOOP_TYPES, Node::MUTABLE_LITERALS, Node::OPERATOR_KEYWORDS, Node::POST_CONDITION_LOOP_TYPES, Node::REFERENCES, Node::SHORTHAND_ASSIGNMENTS, Node::SPECIAL_KEYWORDS, Node::TRUTHY_LITERALS, Node::VARIABLES

Instance Method Summary collapse

Methods included from ConditionalNode

#body, #condition, #multiline_condition?, #single_line_condition?

Methods inherited from Node

#ancestors, #any_block_type?, #any_def_type?, #any_match_pattern_type?, #any_str_type?, #any_sym_type?, #argument?, #argument_type?, #assignment?, #assignment_or_similar?, #basic_conditional?, #basic_literal?, #boolean_type?, #call_type?, #chained?, #class_constructor?, #class_definition?, #complete!, #complete?, #conditional?, #const_name, #defined_module, #defined_module_name, #each_ancestor, #empty_source?, #equals_asgn?, #falsey_literal?, #first_line, #global_const?, #guard_clause?, #immutable_literal?, #initialize, #keyword?, #lambda?, #lambda_or_proc?, #last_line, #left_sibling, #left_siblings, #line_count, #literal?, #loc?, #loc_is?, #loop_keyword?, #match_guard_clause?, #module_definition?, #multiline?, #mutable_literal?, #nonempty_line_count, #numeric_type?, #operator_keyword?, #parent, #parent?, #parent_module_name, #parenthesized_call?, #post_condition_loop?, #proc?, #pure?, #range_type?, #receiver, #recursive_basic_literal?, #recursive_literal?, #reference?, #right_sibling, #right_siblings, #root?, #send_type?, #shorthand_asgn?, #sibling_index, #single_line?, #source, #source_length, #source_range, #special_keyword?, #str_content, #struct_constructor?, #truthy_literal?, #type?, #updated, #value_used?, #variable?

Methods included from NodePattern::Macros

#def_node_matcher, #def_node_search

Methods included from Descendence

#child_nodes, #descendants, #each_child_node, #each_descendant, #each_node

Methods included from Sexp

#s

Constructor Details

This class inherits a constructor from RuboCop::AST::Node

Instance Method Details

#branchesArray<Node, nil>

Returns an array of all the when branches in the case statement.

and the else (if any). Note that these bodies could be nil.



38
39
40
41
42
43
44
45
# File 'lib/rubocop/ast/node/case_match_node.rb', line 38

def branches
  bodies = in_pattern_branches.map(&:body)
  if else?
    # `empty-else` node sets nil because it has no body.
    else_branch.empty_else_type? ? bodies.push(nil) : bodies.push(else_branch)
  end
  bodies
end

#each_in_pattern(&block) ⇒ Object

Deprecated.

Use in_pattern_branches.each



19
20
21
22
23
24
25
# File 'lib/rubocop/ast/node/case_match_node.rb', line 19

def each_in_pattern(&block)
  return in_pattern_branches.to_enum(__method__) unless block

  in_pattern_branches.each(&block)

  self
end

#else?Boolean

Checks whether this case statement has an else branch.



59
60
61
# File 'lib/rubocop/ast/node/case_match_node.rb', line 59

def else?
  !loc.else.nil?
end

#else_branchNode, ...

Returns the else branch of the case statement, if any.



52
53
54
# File 'lib/rubocop/ast/node/case_match_node.rb', line 52

def else_branch
  node_parts[-1]
end

#in_pattern_branchesArray<InPatternNode>

Returns an array of all the in pattern branches in the case statement.



30
31
32
# File 'lib/rubocop/ast/node/case_match_node.rb', line 30

def in_pattern_branches
  node_parts[1...-1]
end

#keywordString

Returns the keyword of the case statement as a string.



14
15
16
# File 'lib/rubocop/ast/node/case_match_node.rb', line 14

def keyword
  'case'
end