class ViewComponent::Template

def call_method_name

def call_method_name
  @call_method_name ||=
    ["call", (normalized_variant_name if variant.present?), (format unless default_format?)]
      .compact.join("_").to_sym
end

def compile_to_component

def compile_to_component
  @component.silence_redefinition_of_method(call_method_name)
  # rubocop:disable Style/EvalWithLocation
  @component.class_eval <<~RUBY, @path, @lineno - 1
    def #{call_method_name}
      @view_context.instance_variable_set(:@virtual_path, virtual_path)
      #{compiled_source}
    end
  RUBY
  # rubocop:enable Style/EvalWithLocation
  @component.define_method(safe_method_name, @component.instance_method(@call_method_name))
end

def compiled_source

def compiled_source
  handler = details.handler_class
  this_source = source
  this_source.rstrip! if @component.strip_trailing_whitespace?
  short_identifier = defined?(Rails.root) ? @path.sub("#{Rails.root}/", "") : @path
  format = self.format || DEFAULT_FORMAT
  type = ActionView::Template::Types[format]
  handler.call(DataWithSource.new(format:, identifier: @path, short_identifier:, type:), this_source)
end

def default_format?

def default_format?
  format.nil? || format == DEFAULT_FORMAT
end

def initialize(component:, details:, lineno: nil, path: nil)

def initialize(component:, details:, lineno: nil, path: nil)
  @component = component
  @details = details
  @lineno = lineno
  @path = path
end

def inline_call?

def inline_call?
  type == :inline_call
end

def normalized_variant_name

def normalized_variant_name
  variant.to_s.gsub("-", "__")
end

def requires_compiled_superclass?

def requires_compiled_superclass?
  inline_call? && !defined_on_self?
end

def safe_method_name

def safe_method_name
  "_#{call_method_name}_#{@component.name.underscore.gsub("/", "__")}"
end

def safe_method_name_call

def safe_method_name_call
  m = safe_method_name
  proc { send(m) }
end