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

require 'singleton'

module Pygments
  class Lexer < Struct.new(:name, :aliases, :filenames, :mimetypes)
    # Public: Get all Lexers
    #
    # @return [Array<Lexer>]
    def self.all
      LexerCache.instance.lexers
    end

    # Public: Look up Lexer by name or alias.
    #
    # name - A String name or alias
    #
    #   Lexer.find('Ruby')
    #   => #<Lexer name="Ruby">
    #
    # @return [Lexer, nil]
    def self.find(name)
      LexerCache.instance.index[name.to_s.downcase]
    end

    # Public: Alias for find.
    #
    # @param name [String]
    # @return [Lexer, nil]
    def self.[](name)
      find(name)
    end

    # Public: Look up Lexer by its proper name.
    #
    # name - The String name of the Lexer
    #
    # Examples
    #
    #   Lexer.find_by_name('Ruby')
    #   # => #<Lexer name="Ruby">
    #
    # @param name [St
    
    def initialize
      @lexers = []
      @index = {}
      @name_index = {}
      @alias_index = {}
      @extname_index = {}
      @mimetypes_index = {}
      @raw_lexers = Pygments.lexers!

      @raw_lexers.each_value do |hash|
        lexer = Lexer.new(hash[:name], hash[:aliases], hash[:filenames], hash[:mimetypes])

        @lexers << lexer

        @index[lexer.name.downcase] = @name_index[lexer.name] = lexer

        lexer.aliases.each do |name|
          @alias_index[name] = lexer
          @index[name.downcase] ||= lexer
        end

        lexer.filenames.each do |filename|
          extnames = []

          extname = File.extname(filename)
          if (m = extname.match(/\[(.+)\]/))
            m[1].scan(/./).each do |s|
              extnames << extname.sub(m[0], s)
            end
          elsif extname != ''
            extnames << extname
          end

          extnames.each do |the_extname|
            @extname_index[the_extname] = lexer
            @index[the_extname.downcase.sub(/^\./, '')] ||= lexer
          end
        end

        lexer.mimetypes.each do |type|
          @mimetypes_index[type] = lexer
        end
      end