class Yoda::Evaluation::CurrentNodeExplain

CurrentNodeExplain shows help for the current node.

Attributes

location[R]

@return [Parsing::Location]

registry[R]

@return [Store::Registry]

source[R]

@return [String]

Public Class Methods

new(registry, source, location) click to toggle source

@param registry [Store::Registry] @param source [String] @param location [Parsing::Location]

# File lib/yoda/evaluation/current_node_explain.rb, line 17
def initialize(registry, source, location)
  @registry = registry
  @source = source
  @location = location
end

Public Instance Methods

current_node_signature() click to toggle source

@return [Model::NodeSignature, nil]

# File lib/yoda/evaluation/current_node_explain.rb, line 24
def current_node_signature
  return nil if !valid? || !current_node_trace
  @current_node_signature ||= Model::NodeSignature.new(current_node, current_node_trace)
end
defined_files() click to toggle source

@return [Array<(String, Integer, Integer)>]

# File lib/yoda/evaluation/current_node_explain.rb, line 35
def defined_files
  return [] if !valid? || !current_node_trace
  case current_node.type
  when :send
    current_node_trace.functions.map { |function| function.primary_source }.compact
  when :const
    current_node_trace.values.map { |value| value.primary_source || value.sources.first }.compact
  else
    []
  end
end
valid?() click to toggle source

@return [true, false]

# File lib/yoda/evaluation/current_node_explain.rb, line 30
def valid?
  !!(current_node)
end

Private Instance Methods

analyzer() click to toggle source

@return [SourceAnalyzer]

# File lib/yoda/evaluation/current_node_explain.rb, line 66
def analyzer
  @analyzer ||= Parsing::SourceAnalyzer.from_source(source, location)
end
current_node() click to toggle source

@return [Parser::AST::Node]

# File lib/yoda/evaluation/current_node_explain.rb, line 56
def current_node
  analyzer.nodes_to_current_location_from_root.last
end
current_node_trace() click to toggle source

@return [Typing::Traces::Base, nil]

# File lib/yoda/evaluation/current_node_explain.rb, line 50
def current_node_trace
  return nil unless valid?
  @current_node_trace ||= evaluator.calculate_trace(current_node)
end
evaluator() click to toggle source

@return [Evaluator]

# File lib/yoda/evaluation/current_node_explain.rb, line 61
def evaluator
  @evaluator ||= Evaluator.from_ast(registry, analyzer.ast, location)
end