def get_methods fqns, scope: :instance, visibility: [:public], deep: true
      cached = cache.get_methods(fqns, scope, visibility, deep)
      return cached.clone unless cached.nil?
      result = []
      skip = []
      if fqns == ''
        # @todo Implement domains
        # domains.each do |domain|
        #   type = ComplexType.parse(domain).first
        #   result.concat inner_get_methods(type.name, type.scope, [:public], deep, skip)
        # end
        result.concat inner_get_methods(fqns, :class, visibility, deep, skip)
        result.concat inner_get_methods(fqns, :instance, visibility, deep, skip)
        result.concat inner_get_methods('Kernel', :instance, visibility, deep, skip)
      else
        result.concat inner_get_methods(fqns, scope, visibility, deep, skip)
      end
      # live = live_map.get_methods(fqns, '', scope.to_s, visibility.include?(:private))
      # unless live.empty?
      #   exist = result.map(&:name)
      #   result.concat live.reject{|p| exist.include?(p.name)}
      # end
      resolved = resolve_method_aliases(result)
      cache.set_methods(fqns, scope, visibility, deep, resolved)
      resolved
    end
def get_methods fqns, scope: :instance, visibility: [:public], deep: true
      cached = cache.get_methods(fqns, scope, visibility, deep)
      return cached.clone unless cached.nil?
      result = []
      skip = []
      if fqns == ''
        # @todo Implement domains
        # domains.each do |domain|
        #   type = ComplexType.parse(domain).first
        #   result.concat inner_get_methods(type.name, type.scope, [:public], deep, skip)
        # end
        result.concat inner_get_methods(fqns, :class, visibility, deep, skip)
        result.concat inner_get_methods(fqns, :instance, visibility, deep, skip)
        result.concat inner_get_methods('Kernel', :instance, visibility, deep, skip)
      else
        result.concat inner_get_methods(fqns, scope, visibility, deep, skip)
      end
      # live = live_map.get_methods(fqns, '', scope.to_s, visibility.include?(:private))
      # unless live.empty?
      #   exist = result.map(&:name)
      #   result.concat live.reject{|p| exist.include?(p.name)}
      # end
      resolved = resolve_method_aliases(result)
      cache.set_methods(fqns, scope, visibility, deep, resolved)
      resolved
    end
Get an array of methods available in a particular context.

 @param fqns [String] The fully qualified namespace to search for methods
 @param scope [Symbol] :class or :instance
 @param visibility [Array<Symbol>] :public, :protected, and/or :private
 @param deep [Boolean] True to include superclasses, mixins, etc.
 @return [Array<Solargraph::Pin::Base>]