class JinyuDebugTools::CodeParser::CodeTree

Constants

ROOT_NAME

Public Class Methods

new() click to toggle source
# File lib/utils/code_parser.rb, line 63
def initialize
  @root = CodeNode.new(ROOT_NAME).tap { |node| node.set_level(0) }
  @node_level_list = []
  @node_level_list << [@root, @root.get_level]
  @root.set_index(@node_level_list.size - 1)
end

Public Instance Methods

_find_mistab_nodes(parent_node_index, child_level, parent_node) click to toggle source
# File lib/utils/code_parser.rb, line 125
def _find_mistab_nodes(parent_node_index, child_level, parent_node)
  # ... because, the father node which attached on root directly like new
  # would match this situation, parent is root and level < child_level
  mistab_nodes = @node_level_list[parent_node_index...-1].select do |node, level|
    next false if node.get_parent != @root
    next false if node.get_level >= child_level
    next false if node == parent_node # parent node on root bug
    true
  end
    
  return mistab_nodes
end
_find_parent_with_index(parent_name) click to toggle source
# File lib/utils/code_parser.rb, line 98
def _find_parent_with_index(parent_name)
  if parent_name == @root.get_name
    return @root, @root.get_index
  end
    
  target_index_reverse = @node_level_list.size - 1
    
  node_level_list_reverse = @node_level_list.reverse
  node_level_list_reverse.each_with_index do |node_level_pair, index|
    node, level = *node_level_pair
    
    if node.get_name == parent_name
      target_index_reverse = index
      break
    end
  end
    
  target_node, target_level = node_level_list_reverse[target_index_reverse]
  target_index = get_reverse_index(target_index_reverse)
    
  if target_node == @root
    target_node, target_index = add_record(@root.get_name, parent_name)
  end
    
  return target_node, target_index
end
add_record(parent_name, child_name) click to toggle source
# File lib/utils/code_parser.rb, line 70
def add_record(parent_name, child_name)
  parent_node, parent_node_index = _find_parent_with_index(parent_name)
    
  child_level = parent_node.get_level + 1
    
  mistab_nodes = _find_mistab_nodes(parent_node_index, child_level, parent_node)
  if mistab_nodes.any?
    mistab_nodes.each do |mistab_node|
      mistab_node.set_parent(parent_node)
      @root.delete_child(mistab_node)
      parent_node.append_child(mistab_node)
    end
  end
    
  child_node = CodeNode.new(child_name)
  child_node.set_level(child_level)
  @node_level_list << child_node
  child_node.set_index(@node_level_list.size - 1)
  parent_node.append_child(child_node)
  child_node.set_parent(parent_node)
    
  return child_node, child_node.get_index
end
get_reverse_index(index) click to toggle source
# File lib/utils/code_parser.rb, line 94
def get_reverse_index(index)
  @node_level_list.size - 1 - index
end
my_pretty_print() click to toggle source
# File lib/utils/code_parser.rb, line 142
def my_pretty_print
  require 'json'
  output =  JSON.pretty_generate(self.to_hash)
  output.gsub!(/[\{\}\[\],:]| null/,'')
  output.gsub!(/^\s+$/,'')
  output.gsub!(/^\n/,'')
end
to_hash() click to toggle source
# File lib/utils/code_parser.rb, line 138
def to_hash
  @root.to_hash
end