You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: effects.rb
    path of file: ./repos/rbsyn/lib/rbsyn
    
    the code of the file until where you have to start completion: class EffectAnalysis
  def self.effect_leq(e1, e2)
    # TODO: unhandled right now: Singleton classes
    raise RbSynError, "cannot have self during leq of effects" if has_self?([e1]) || has_self?([e2])

    if e1 == ''
      true
    elsif e1 == '*'
      if e2 == ''
        false
      elsif e2 == '*'
        true
      elsif e2.split('.').size == 1
        false
      elsif e2.split('.').size == 2
        false
      else
        raise RbSynError, "unexpected effect format"
      end
    elsif e1.split('.').size == 1
      if e2 == ''
        false
      elsif e2 == '*'
        true
      elsif e2.split('.').size == 1
        e1 == e2
      elsif e2.split('.').size == 2
        e1 == e2.split('.')[0]
      else
        raise RbSynError, "unexpected effect format"
 
    
  def self.type_of(ast, env)
    case ast.type
    when :ivar, :lvar
      var_name = ast.children[0].to_sym
      return env[var_name] if env.key? var_name
      return RDL::Globals.types[:bot]
    when :int
      return RDL::Globals.types[:integer]
    when :const
      return RDL::Type::SingletonType.new(RDL::Util.to_class(ast.children[1].to_s))
    when :send
      klass = self.type_of(ast.children[0], env)
      meth = ast.children[1]
      tmeth = case klass
      when RDL::Type::SingletonType
        RDL::Globals.info.get(RDL::Util.add_singleton_marker(klass.to_s), meth, :type)
      when RDL::Type::NominalType
        RDL::Globals.info.get(klass.name, meth, :type)
      when RDL::Type::GenericType
        if RDL::Globals.info.get(klass.base.name, meth, :type)
          RDL::Globals.info.get(klass.base.name, meth, :type)
        else
          RDL::Globals.info.get(klass.params[0].name, meth, :type)
        end