Class: RuboCop::Cop::VariableForce::Branch::Base Private

Inherits:
Struct
  • Object
show all
Defined in:
lib/rubocop/cop/variable_force/branch.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Abstract base class for branch classes. A branch represents a conditional branch in a scope.

Examples:

def some_scope
  do_something     # no branch

  if foo
    do_something   # branch A
    do_something   # branch A
  else
    do_something   # branch B
    if bar
      do_something # branch C (whose parent is branch B)
    end
  end

  do_something     # no branch
end

API:

  • private

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#child_nodeObject

Returns the value of attribute child_node

Returns:

  • the current value of child_node



42
43
44
# File 'lib/rubocop/cop/variable_force/branch.rb', line 42

def child_node
  @child_node
end

#scopeObject

Returns the value of attribute scope

Returns:

  • the current value of scope



42
43
44
# File 'lib/rubocop/cop/variable_force/branch.rb', line 42

def scope
  @scope
end

Class Method Details

.classesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



43
44
45
# File 'lib/rubocop/cop/variable_force/branch.rb', line 43

def self.classes
  @classes ||= []
end

.define_predicate(name, child_index: nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/rubocop/cop/variable_force/branch.rb', line 56

def self.define_predicate(name, child_index: nil)
  define_method(name) do
    target_node = control_node.children[child_index]

    # We don't use Kernel#Array here
    # because it invokes Node#to_a rather than wrapping with an array.
    if target_node.is_a?(Array)
      target_node.any? { |node| node.equal?(child_node) }
    else
      target_node.equal?(child_node)
    end
  end
end

.inherited(subclass) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



47
48
49
50
# File 'lib/rubocop/cop/variable_force/branch.rb', line 47

def self.inherited(subclass)
  super
  classes << subclass
end

.typeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



52
53
54
# File 'lib/rubocop/cop/variable_force/branch.rb', line 52

def self.type
  name.split('::').last.gsub(/(.)([A-Z])/, '\1_\2').downcase.to_sym
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



121
122
123
124
125
# File 'lib/rubocop/cop/variable_force/branch.rb', line 121

def ==(other)
  return false unless other

  control_node.equal?(other.control_node) && child_node.equal?(other.child_node)
end

#always_run?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

Raises:

API:

  • private



92
93
94
# File 'lib/rubocop/cop/variable_force/branch.rb', line 92

def always_run?
  raise NotImplementedError
end

#branched?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

API:

  • private



88
89
90
# File 'lib/rubocop/cop/variable_force/branch.rb', line 88

def branched?
  !always_run?
end

#control_nodeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



70
71
72
# File 'lib/rubocop/cop/variable_force/branch.rb', line 70

def control_node
  child_node.parent
end

#each_ancestor(include_self: false) {|_self| ... } ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Yields:

  • (_self)

Yield Parameters:

API:

  • private



80
81
82
83
84
85
86
# File 'lib/rubocop/cop/variable_force/branch.rb', line 80

def each_ancestor(include_self: false, &block)
  return to_enum(__method__, include_self: include_self) unless block

  yield self if include_self
  scan_ancestors(&block)
  self
end

#exclusive_with?(other) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

API:

  • private



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/rubocop/cop/variable_force/branch.rb', line 104

def exclusive_with?(other)
  return false unless other
  return false if may_jump_to_other_branch?

  other.each_ancestor(include_self: true) do |other_ancestor|
    if control_node.equal?(other_ancestor.control_node)
      return !child_node.equal?(other_ancestor.child_node)
    end
  end

  if parent
    parent.exclusive_with?(other)
  else
    false
  end
end

#hashObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



129
130
131
# File 'lib/rubocop/cop/variable_force/branch.rb', line 129

def hash
  [control_node.object_id, control_node.object_id].hash
end

#may_jump_to_other_branch?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

API:

  • private



96
97
98
# File 'lib/rubocop/cop/variable_force/branch.rb', line 96

def may_jump_to_other_branch?
  false
end

#may_run_incompletely?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

API:

  • private



100
101
102
# File 'lib/rubocop/cop/variable_force/branch.rb', line 100

def may_run_incompletely?
  false
end

#parentObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



74
75
76
77
78
# File 'lib/rubocop/cop/variable_force/branch.rb', line 74

def parent
  return @parent if instance_variable_defined?(:@parent)

  @parent = Branch.of(control_node, scope: scope)
end