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?

Returns:
  • (Boolean) -
def duck_type?
  @duck_type ||= name.start_with?('#')
end

def fixed_parameters?

Returns:
  • (Boolean) -
def fixed_parameters?
  substring.start_with?('(')
end

def hash_parameters?

Returns:
  • (Boolean) -
def hash_parameters?
  substring.start_with?('{')
end

def key_types

Returns:
  • (Array) -
def key_types
  @key_types
end

def list_parameters?

Returns:
  • (Boolean) -
def list_parameters?
  substring.start_with?('<')
end

def namespace

Returns:
  • (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?

Returns:
  • (Boolean) -
def nil_type?
  @nil_type = (name.casecmp('nil') == 0) if @nil_type.nil?
  @nil_type
end

def parameters?

Returns:
  • (Boolean) -
def parameters?
  !substring.empty?
end

def qualify api_map, context = ''

Returns:
  • (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

Returns:
  • (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

Returns:
  • (Array) -
def value_types
  @subtypes
end

def void?

def void?
  name == 'void'
end