class Sass::Embedded::Host::FunctionRegistry

It stores sass custom functions and handles function calls.
The {FunctionRegistry} class.

def function_call(function_call_request)

def function_call(function_call_request)
  arguments = function_call_request.arguments.map do |argument|
    value_protofier.from_proto(argument)
  end
  success = value_protofier.to_proto(get(function_call_request).call(arguments))
  accessed_argument_lists = arguments
                            .select do |argument|
                              argument.is_a?(Sass::Value::ArgumentList) && argument.instance_eval do
                                @keywords_accessed
                              end
                            end
                            .map { |argument| argument.instance_eval { @id } }
  EmbeddedProtocol::InboundMessage::FunctionCallResponse.new(
    id: function_call_request.id,
    success: success,
    accessed_argument_lists: accessed_argument_lists
  )
rescue StandardError => e
  EmbeddedProtocol::InboundMessage::FunctionCallResponse.new(
    id: function_call_request.id,
    error: e.full_message(highlight: @highlight, order: :top)
  )
end

def get(function_call_request)

def get(function_call_request)
  case function_call_request.identifier
  when :name
    @functions_by_name[function_call_request.name]
  when :function_id
    @functions_by_id[function_call_request.function_id]
  end
end

def initialize(functions, alert_color:)

def initialize(functions, alert_color:)
  functions = functions.transform_keys(&:to_s)
  @global_functions = functions.keys
  @functions_by_name = functions.transform_keys do |signature|
    signature = signature.chomp
    index = signature.index('(')
    if index
      signature.slice(0, index)
    else
      signature
    end
  end
  @id = 0
  @functions_by_id = {}
  @ids_by_function = {}
  @highlight = alert_color
end

def register(function)

def register(function)
  return if @ids_by_function.key?(function)
  id = @id
  @id = id.next
  @ids_by_function[function] = id
  @functions_by_id[id] = function
  id
end

def value_protofier

def value_protofier
  @value_protofier ||= ValueProtofier.new(self)
end