A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://ruby-syntax-tree.github.io/syntax_tree/SyntaxTree/VarRef.html below:

class SyntaxTree::VarRef - RDoc Documentation

  1. SyntaxTree::
  2. VarRef
class SyntaxTree::VarRef

VarRef represents a variable reference.

true

This can be a plain local variable like the example above. It can also be a constant, a class variable, a global variable, an instance variable, a keyword (like self, nil, true, or false), or a numbered block variable.

Attributes Public Class Methods

Source

def initialize(value:, location:)
  @value = value
  @location = location
  @comments = []
end
Public Instance Methods

Source

def ===(other)
  other.is_a?(VarRef) && value === other.value
end

Source

def accept(visitor)
  visitor.visit_var_ref(self)
end

Source

def child_nodes
  [value]
end

Source

def copy(value: nil, location: nil)
  node =
    VarRef.new(
      value: value || self.value,
      location: location || self.location
    )

  node.comments.concat(comments.map(&:copy))
  node
end

Source

def deconstruct_keys(_keys)
  { value: value, location: location, comments: comments }
end

Source

def format(q)
  q.format(value)
end

Source

def pin(parent, pin)
  replace =
    PinnedVarRef.new(value: value, location: pin.location.to(location))

  parent
    .deconstruct_keys([])
    .each do |key, value|
      if value == self
        parent.instance_variable_set(:"@#{key}", replace)
        break
      elsif value.is_a?(Array) && (index = value.index(self))
        parent.public_send(key)[index] = replace
        break
      elsif value.is_a?(Array) &&
            (index = value.index { |(_k, v)| v == self })
        parent.public_send(key)[index][1] = replace
        break
      end
    end
end

Oh man I hate this so much. Basically, ripper doesn’t provide enough functionality to actually know where pins are within an expression. So we have to walk the tree ourselves and insert more information. In doing so, we have to replace this node by a pinned node when necessary.

To be clear, this method should just not exist. It’s not good. It’s a place of shame. But it’s necessary for now, so I’m keeping it.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4