class Tapioca::Static::SymbolTableParser
def fully_qualified_name(name)
def fully_qualified_name(name) [*@parents, name].join("::") end
def initialize
def initialize @symbols = T.let(Set.new, T::Set[String]) @parents = T.let([], T::Array[String]) end
def parse_json(json_string)
def parse_json(json_string) obj = JSON.parse(json_string) parser = SymbolTableParser.new parser.parse_object(obj) parser.symbols rescue JSON::ParserError Set.new end
def parse_object(object)
def parse_object(object) children = object.fetch("children", []) children.each do |child| kind = child.fetch("kind") name = child.fetch("name") name = name.fetch("name") if name.is_a?(Hash) next if name.nil? next unless SKIP_PARSE_KINDS.include?(kind) # Turn singleton class names to attached class names if (match_data = name.match(/<Class:(.*)>/)) name = match_data[1] end next if name.match?(/[<>()$]/) next if name.match?(/^[0-9]+$/) next if name == "T::Helpers" @symbols.add(fully_qualified_name(name)) @parents << name parse_object(child) @parents.pop end end