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: function_call.rb
    path of file: ./repos/nii/nii-core/lib/nii/template
    
    the code of the file until where you have to start completion: # frozen_string_literal: true

module Nii::Template
  class FunctionCall < Element
    attr_reader :name, :positional_arguments, :named_arguments

    def deconstruct = [name, positional_arguments, named_arguments.transform_keys { Nii::Utils.symbol(_1) }]

    def initialize(bundle, name, positional_arguments, named_arguments)
      @name, @positional_arguments, @named_arguments = name, positional_arguments, named_arguments
      super(bundle, nil)
    end

    def resolve(context, variables, &block)
      arguments = positional_arguments.map { |a| a.resolve(context, variables, &block) }
      options   = named_arguments.transform_values { |a| a.resolve(context, variables, &block) }
      invoke(context, arguments, options, &block)
    end

    def invoke(context, arguments, options, &block)
      context.call_function(name, *arguments, **options, &block)
    end

    def inspect
      arguments  = positional_arguments.map(&:inspect)
      a
    
    def deconstruct = [name, positional_arguments, named_arguments.transform_keys { Nii::Utils.symbol(_1) }]

    def initialize(bundle, name, positional_arguments, named_arguments)
      @name, @positional_arguments, @named_arguments = name, positional_arguments, named_arguments
      super(bundle, nil)
    end

    def resolve(context, variables, &block)
      arguments = positional_arguments.map { |a| a.resolve(context, variables, &block) }
      options   = named_arguments.transform_values { |a| a.resolve(context, variables, &block) }
      invoke(context, arguments, options, &block)
    end

    def invoke(context, arguments, options, &block)
      context.call_function(name, *arguments, **options, &block)
    end

    def inspect
      arguments  = positional_arguments.map(&:inspect)
      arguments += named_arguments.map { |k, v| "#{k}: #{v.inspect}" }
      "#<#{self.class.inspect}:#{name}(#{arguments.compact.join(', ')})>"
    end

    private

    def each_child(&block)
      positional_arguments.each(&block)
      named_arguments.each_value(&block)
    end
  end