module Solargraph::ComplexType::TypeMethods
def == other
def == other return false unless self.class == other.class tag == other.tag end
def defined?
def defined? !undefined? end
def duck_type?
-
(Boolean)-
def duck_type? @duck_type ||= name.start_with?('#') end
def fixed_parameters?
-
(Boolean)-
def fixed_parameters? substring.start_with?('(') end
def hash_parameters?
-
(Boolean)-
def hash_parameters? substring.start_with?('{') end
def key_types
-
(Array-)
def key_types @key_types end
def list_parameters?
-
(Boolean)-
def list_parameters? substring.start_with?('<') end
def namespace
-
(String)-
def namespace @namespace ||= 'Object' if duck_type? @namespace ||= 'NilClass' if nil_type? @namespace ||= (name == 'Class' || name == 'Module') && !subtypes.empty? ? subtypes.first.name : name end
def nil_type?
-
(Boolean)-
def nil_type? @nil_type = (name.casecmp('nil') == 0) if @nil_type.nil? @nil_type end
def parameters?
-
(Boolean)-
def parameters? !substring.empty? end
def qualify api_map, context = ''
-
(ComplexType)- The generated ComplexType
Parameters:
-
context(String) -- The namespace from which to resolve names -
api_map(ApiMap) -- The ApiMap that performs qualification
def qualify api_map, context = '' return ComplexType.new([self]) if duck_type? || void? || undefined? recon = (rooted? ? '' : context) fqns = api_map.qualify(name, recon) if fqns.nil? return UniqueType::BOOLEAN if tag == 'Boolean' return UniqueType::UNDEFINED end fqns = "::#{fqns}" # Ensure the resulting complex type is rooted ltypes = key_types.map do |t| t.qualify api_map, context end rtypes = value_types.map do |t| t.qualify api_map, context end if list_parameters? Solargraph::ComplexType.parse("#{fqns}<#{rtypes.map(&:tag).join(', ')}>").first elsif fixed_parameters? Solargraph::ComplexType.parse("#{fqns}(#{rtypes.map(&:tag).join(', ')})").first elsif hash_parameters? Solargraph::ComplexType.parse("#{fqns}{#{ltypes.map(&:tag).join(', ')} => #{rtypes.map(&:tag).join(', ')}}").first else Solargraph::ComplexType.parse(fqns).first end end
def rooted?
def rooted? @rooted end
def scope
-
(Symbol)- :class or :instance
def scope @scope ||= :instance if duck_type? || nil_type? @scope ||= (name == 'Class' || name == 'Module') && !subtypes.empty? ? :class : :instance end
def undefined?
def undefined? name == 'undefined' end
def value_types
-
(Array-)
def value_types @subtypes end
def void?
def void? name == 'void' end