module Solargraph::ComplexType::TypeMethods

def == other

Parameters:
  • other (Object) --
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 each_unique_type &block

Returns:
  • (Enumerator) -

Other tags:
    Yieldparam: -
def each_unique_type &block
  return enum_for(__method__) unless block_given?
  yield self
end

def erase_generics(generics_to_erase)

Returns:
  • (self) -

Parameters:
  • generics_to_erase (Enumerable) --
def erase_generics(generics_to_erase)
  transform do |type|
    if type.name == ComplexType::GENERIC_TAG_NAME
      if type.all_params.length == 1 && generics_to_erase.include?(type.all_params.first.to_s)
        ComplexType::UNDEFINED
      else
        type
      end
    else
      type
    end
  end
end

def fixed_parameters?

Returns:
  • (Boolean) -
def fixed_parameters?
  parameters_type == :fixed
end

def generate_substring_from(&to_str)

Returns:
  • (String) -
def generate_substring_from(&to_str)
  key_types_str = key_types.map(&to_str).join(', ')
  subtypes_str = subtypes.map(&to_str).join(', ')
  if key_types.none?(&:defined?) && subtypes.none?(&:defined?)
    ''
  elsif key_types.empty? && subtypes.empty?
    ''
  elsif hash_parameters?
    "{#{key_types_str} => #{subtypes_str}}"
  elsif fixed_parameters?
    "(#{subtypes_str})"
  else
    "<#{subtypes_str}>"
  end
end

def hash_parameters?

Returns:
  • (Boolean) -
def hash_parameters?
  parameters_type == :hash
end

def key_types

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

def list_parameters?

Returns:
  • (Boolean) -
def list_parameters?
  parameters_type == :list
end

def namespace

Returns:
  • (String) -
def namespace
  # if priority higher than ||=, old implements cause unnecessary check

  @namespace ||= lambda do
    return 'Object' if duck_type?
    return 'NilClass' if nil_type?
    return (name == 'Class' || name == 'Module') && !subtypes.empty? ? subtypes.first.name : name
  end.call
end

def namespace_type

def namespace_type
  return ComplexType.parse('::Object') if duck_type?
  return ComplexType.parse('::NilClass') if nil_type?
  return subtypes.first if (name == 'Class' || name == 'Module') && !subtypes.empty?
  self
end

def nil_type?

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

def qualify api_map, context = ''

Returns:
  • (self, ComplexType, UniqueType) - 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 = ''
  transform do |t|
    next t if t.name == GENERIC_TAG_NAME
    next t if t.duck_type? || t.void? || t.undefined?
    recon = (t.rooted? ? '' : context)
    fqns = api_map.qualify(t.name, recon)
    if fqns.nil?
      next UniqueType::BOOLEAN if t.tag == 'Boolean'
      next UniqueType::UNDEFINED
    end
    t.recreate(new_name: fqns, make_rooted: true)
  end
end

def rooted_name

Returns:
  • (String) -
def rooted_name
  return name unless @rooted && can_root_name?
  "::#{name}"
end

def rooted_namespace

Returns:
  • (String) -
def rooted_namespace
  return namespace unless rooted? && can_root_name?(namespace)
  "::#{namespace}"
end

def rooted_substring

Returns:
  • (String) -
def rooted_substring
  @rooted_substring = generate_substring_from(&:rooted_tags)
end

def rooted_tag

Returns:
  • (String) -
def rooted_tag
  @rooted_tag ||= rooted_name + rooted_substring
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 substring

Returns:
  • (String) -
def substring
  @substring ||= generate_substring_from(&:tags)
end

def tag

Returns:
  • (String) -
def tag
  @tag ||= "#{name}#{substring}"
end

def tuple?

def tuple?
  @tuple_type ||= (name == 'Tuple') || (name == 'Array' && subtypes.length >= 1 && fixed_parameters?)
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