Class: RuboCop::AST::CaseMatchNode
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Node ,
NodePattern::Macros ,
Parser::AST::Node
|
|
Instance Chain:
|
|
Inherits: |
RuboCop::AST::Node
|
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
Node
- Inherited
ASSIGNMENTS, BASIC_CONDITIONALS, BASIC_LITERALS, COMPARISON_OPERATORS, COMPOSITE_LITERALS, CONDITIONALS, EMPTY_CHILDREN, EMPTY_PROPERTIES, EQUALS_ASSIGNMENTS, FALSEY_LITERALS, GROUP_FOR_TYPE, IMMUTABLE_LITERALS, KEYWORDS, LITERALS, LITERAL_RECURSIVE_METHODS, LITERAL_RECURSIVE_TYPES, LOOP_TYPES, MUTABLE_LITERALS, OPERATOR_KEYWORDS, POST_CONDITION_LOOP_TYPES, REFERENCES, SHORTHAND_ASSIGNMENTS, SPECIAL_KEYWORDS, TRUTHY_LITERALS, VARIABLES
Class Method Summary
Node
- Inherited
.new, | |
.def_recursive_literal_predicate | Define a |
NodePattern::Macros
- Extended
def_node_matcher | Define a method which applies a pattern to an AST node. |
def_node_search | Define a method which recurses over the descendants of an AST node, checking whether any of them match the provided pattern. |
Instance Attribute Summary
-
#else? ⇒ Boolean
readonly
Checks whether this case statement has an
else
branch.
ConditionalNode
- Included
#multiline_condition? | Checks whether the condition of the node is written on more than one line. |
#single_line_condition? | Checks whether the condition of the node is written on a single line. |
Node
- Inherited
#any_block_type?, #any_def_type?, #any_match_pattern_type?, #argument?, #argument_type?, #assignment?, #basic_conditional?, #basic_literal?, #boolean_type?, #call_type?, #chained?, #complete?, #conditional?, #empty_source?, #equals_asgn?, #falsey_literal?, #guard_clause?, #immutable_literal?, #keyword?, #literal?, | |||
#loop_keyword? |
|
||
#multiline? | Predicates. |
||
#mutable_literal?, #numeric_type?, #operator_keyword?, | |||
#parent | Returns the parent node, or |
||
#parent?, #parenthesized_call?, #post_condition_loop?, | |||
#pure? | Some expressions are evaluated for their value, some for their side effects, and some for both. |
||
#range_type?, #reference?, #root?, | |||
#send_type? | Most nodes are of 'send' type, so this method is defined separately to make this check as fast as possible. |
||
#shorthand_asgn?, #single_line?, #special_keyword?, #truthy_literal?, | |||
#value_used? | Some expressions are evaluated for their value, some for their side effects, and some for both If we know that an expression is useful only for its side effects, that means we can transform it in ways which preserve the side effects, but change the return value So, does the return value of this node matter? If we changed it to |
||
#variable?, #begin_value_used?, #case_if_value_used?, #for_value_used?, #while_until_value_used? |
Instance Method Summary
-
#branches ⇒ Array<Node, nil>
Returns an array of all the when branches in the
case
statement. -
#each_in_pattern(&block)
deprecated
Deprecated.
Use
in_pattern_branches.each
-
#else_branch ⇒ Node, ...
Returns the else branch of the
case
statement, if any. -
#in_pattern_branches ⇒ Array<InPatternNode>
Returns an array of all the
in
pattern branches in thecase
statement. -
#keyword ⇒ String
Returns the keyword of the
case
statement as a string.
ConditionalNode
- Included
#body | Returns the body associated with the condition. |
#condition | Returns the condition of the node. |
Node
- Inherited
#ancestors | Returns an array of ancestor nodes. |
||
#assignment_or_similar? | Some cops treat the shovel operator as a kind of assignment. |
||
#class_constructor?, #class_definition?, #complete!, #const_name, #defined_module, #defined_module_name, | |||
#each_ancestor | Calls the given block for each ancestor node from parent to root. |
||
#first_line, #global_const?, #lambda?, #lambda_or_proc?, #last_line, | |||
#left_sibling | Use is discouraged, this is a potentially slow method and can lead to even slower algorithms. |
||
#left_siblings | Use is discouraged, this is a potentially slow method and can lead to even slower algorithms. |
||
#line_count, | |||
#loc? | Shortcut to safely check if a location is present. |
||
#loc_is? | Shortcut to safely test a particular location, even if this location does not exist or is |
||
#match_guard_clause?, #module_definition?, | |||
#node_parts | Common destructuring method. |
||
#nonempty_line_count, | |||
#parent_module_name | Searching the AST. |
||
#proc?, #receiver, #recursive_basic_literal?, #recursive_literal?, | |||
#right_sibling | Use is discouraged, this is a potentially slow method and can lead to even slower algorithms. |
||
#right_siblings | Use is discouraged, this is a potentially slow method and can lead to even slower algorithms. |
||
#sibling_index | Returns the index of the receiver node in its siblings. |
||
#source |
|
||
#source_length, #source_range, #str_content, #struct_constructor?, | |||
#type? | Determine if the node is one of several node types in a single query Allows specific single node types, as well as "grouped" types (e.g. |
||
#updated | Override Node#updated so that |
||
#defined_module0, #new_class_or_module_block?, #parent_module_name_for_block, #parent_module_name_for_sclass, #parent_module_name_part, #visit_ancestors |
Descendence
- Included
#child_nodes | Returns an array of child nodes. |
#descendants | Returns an array of descendant nodes. |
#each_child_node | Calls the given block for each child node. |
#each_descendant | Calls the given block for each descendant node with depth first order. |
#each_node | Calls the given block for the receiver and each descendant node in depth-first order. |
Sexp
- Included
Constructor Details
This class inherits a constructor from RuboCop::AST::Node
Instance Attribute Details
#else? ⇒ Boolean
(readonly)
Checks whether this case statement has an else
branch.
# File 'lib/rubocop/ast/node/case_match_node.rb', line 59
def else? !loc.else.nil? end
Instance Method Details
#branches ⇒ Array
<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.
# 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)
Use in_pattern_branches.each
# 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_branch ⇒ Node, ...
Returns the else branch of the case
statement, if any.
# File 'lib/rubocop/ast/node/case_match_node.rb', line 52
def else_branch node_parts[-1] end
#in_pattern_branches ⇒ Array
<InPatternNode>
Returns an array of all the in
pattern branches in the case
statement.
# File 'lib/rubocop/ast/node/case_match_node.rb', line 30
def in_pattern_branches node_parts[1...-1] end
#keyword ⇒ String
Returns the keyword of the case
statement as a string.
# File 'lib/rubocop/ast/node/case_match_node.rb', line 14
def keyword 'case' end