class Spoom::Sorbet::Config

“‘
puts config.ignore # “c”
puts config.paths # “a”, “b”
CONFIG
–ignore=c
–file=b
a
config = Spoom::Sorbet::Config.parse_string(<<~CONFIG)
“`ruby
Parses a Sorbet config string:
“`
puts config.paths # “.”
config = Spoom::Sorbet::Config.parse_file(“sorbet/config”)
“`ruby
Parses a Sorbet config file:
Parse Sorbet config files

def copy

def copy
  new_config = Sorbet::Config.new
  new_config.paths.concat(@paths)
  new_config.ignore.concat(@ignore)
  new_config.allowed_extensions.concat(@allowed_extensions)
  new_config
end

def initialize

def initialize
  @paths = T.let([], T::Array[String])
  @ignore = T.let([], T::Array[String])
  @allowed_extensions = T.let([], T::Array[String])
end

def options_string

def options_string
  opts = []
  opts.concat(paths)
  opts.concat(ignore.map { |p| "--ignore #{p}" })
  opts.concat(allowed_extensions.map { |ext| "--allowed-extension #{ext}" })
  opts.join(" ")
end

def parse_file(sorbet_config_path)

def parse_file(sorbet_config_path)
  parse_string(File.read(sorbet_config_path))
end

def parse_option(line)

def parse_option(line)
  T.must(line.split("=").last).strip
end

def parse_string(sorbet_config)

def parse_string(sorbet_config)
  config = Config.new
  state = T.let(nil, T.nilable(Symbol))
  sorbet_config.each_line do |line|
    line = line.strip
    case line
    when /^--allowed-extension$/
      state = :extension
      next
    when /^--allowed-extension=/
      config.allowed_extensions << parse_option(line)
      next
    when /^--ignore=/
      config.ignore << parse_option(line)
      next
    when /^--ignore$/
      state = :ignore
      next
    when /^--ignore=/
      config.ignore << parse_option(line)
      next
    when /^--file$/
      next
    when /^--file=/
      config.paths << parse_option(line)
      next
    when /^--dir$/
      next
    when /^--dir=/
      config.paths << parse_option(line)
      next
    when /^--.*=/
      next
    when /^--/
      state = :skip
    when /^-.*=?/
      next
    else
      case state
      when :ignore
        config.ignore << line
      when :extension
        config.allowed_extensions << line
      when :skip
        # nothing
      else
        config.paths << line
      end
      state = nil
    end
  end
  config
end