class Spoom::Sorbet::Config

Parse Sorbet config files

Parses a Sorbet config file:

“`ruby config = Spoom::Sorbet::Config.parse_file(“sorbet/config”) puts config.paths # “.” “`

Parses a Sorbet config string:

“`ruby config = Spoom::Sorbet::Config.parse_string(<<~CONFIG)

a
--file=b
--ignore=c

CONFIG puts config.paths # “a”, “b” puts config.ignore # “c” “`

Attributes

allowed_extensions[R]
ignore[R]
no_stdlib[RW]
paths[R]

Public Class Methods

new() click to toggle source
# File lib/spoom/sorbet/config.rb, line 36
def initialize
  @paths = T.let([], T::Array[String])
  @ignore = T.let([], T::Array[String])
  @allowed_extensions = T.let([], T::Array[String])
  @no_stdlib = T.let(false, T::Boolean)
end
parse_file(sorbet_config_path) click to toggle source
# File lib/spoom/sorbet/config.rb, line 79
def parse_file(sorbet_config_path)
  parse_string(File.read(sorbet_config_path))
end
parse_string(sorbet_config) click to toggle source
# File lib/spoom/sorbet/config.rb, line 84
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 /^--no-stdlib$/
      config.no_stdlib = true
      next
    when /^--.*=/
      next
    when /^--/
      state = :skip
    when /^-.*=?/
      next
    when /^#/
      next
    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

Private Class Methods

parse_option(line) click to toggle source
# File lib/spoom/sorbet/config.rb, line 148
def parse_option(line)
  T.must(line.split("=").last).strip
end

Public Instance Methods

copy() click to toggle source
# File lib/spoom/sorbet/config.rb, line 44
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.no_stdlib = @no_stdlib
  new_config
end
options_string() click to toggle source
# File lib/spoom/sorbet/config.rb, line 66
def options_string
  opts = []
  opts.concat(paths)
  opts.concat(ignore.map { |p| "--ignore #{p}" })
  opts.concat(allowed_extensions.map { |ext| "--allowed-extension #{ext}" })
  opts << "--no-stdlib" if @no_stdlib
  opts.join(" ")
end