Class: Tapioca::Static::SymbolTableParser
- Inherits:
-
Object
- Object
- Tapioca::Static::SymbolTableParser
- Extended by:
- T::Sig
- Defined in:
- lib/tapioca/static/symbol_table_parser.rb
Instance Attribute Summary collapse
-
#symbols ⇒ Object
readonly
Returns the value of attribute symbols.
Class Method Summary collapse
Instance Method Summary collapse
- #fully_qualified_name(name) ⇒ Object
-
#initialize ⇒ SymbolTableParser
constructor
A new instance of SymbolTableParser.
- #parse_object(object) ⇒ Object
Constructor Details
#initialize ⇒ SymbolTableParser
Returns a new instance of SymbolTableParser.
24 25 26 27 |
# File 'lib/tapioca/static/symbol_table_parser.rb', line 24 def initialize @symbols = T.let(Set.new, T::Set[String]) @parents = T.let([], T::Array[String]) end |
Instance Attribute Details
#symbols ⇒ Object (readonly)
Returns the value of attribute symbols.
21 22 23 |
# File 'lib/tapioca/static/symbol_table_parser.rb', line 21 def symbols @symbols end |
Class Method Details
.parse_json(json_string) ⇒ Object
10 11 12 13 14 15 16 17 18 |
# File 'lib/tapioca/static/symbol_table_parser.rb', line 10 def self.parse_json(json_string) obj = JSON.parse(json_string) parser = SymbolTableParser.new parser.parse_object(obj) parser.symbols rescue JSON::ParserError Set.new end |
Instance Method Details
#fully_qualified_name(name) ⇒ Object
57 58 59 |
# File 'lib/tapioca/static/symbol_table_parser.rb', line 57 def fully_qualified_name(name) [*@parents, name].join("::") end |
#parse_object(object) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/tapioca/static/symbol_table_parser.rb', line 30 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 kind.nil? || name.nil? # TODO: CLASS is removed since v0.4.4730 of Sorbet # but keeping here for backward compatibility. Remove # once the minimum version is moved past that. next unless ["CLASS", "CLASS_OR_MODULE", "STATIC_FIELD"].include?(kind) next if name =~ /[<>()$]/ next if name =~ /^[0-9]+$/ next if name == "T::Helpers" @symbols.add(fully_qualified_name(name)) @parents << name parse_object(child) @parents.pop end end |